View | Details | Raw Unified | Return to bug 18923
Collapse All | Expand All

(-)boot0cfg.8 (+9 lines)
Lines 38-43 Link Here
38
.Op Fl f Ar file
38
.Op Fl f Ar file
39
.Op Fl m Ar mask
39
.Op Fl m Ar mask
40
.Op Fl o Ar options
40
.Op Fl o Ar options
41
.Op Fl s Ar slice
41
.Op Fl t Ar ticks
42
.Op Fl t Ar ticks
42
.Ar disk
43
.Ar disk
43
.Sh DESCRIPTION
44
.Sh DESCRIPTION
Lines 118-123 Link Here
118
.Sq noupdate
119
.Sq noupdate
119
option causes the MBR to be treated as read-only.
120
option causes the MBR to be treated as read-only.
120
.El
121
.El
122
.It Fl s Ar slice
123
Set the default boot selection to
124
.Ar slice .
125
Values between 1 and 4 refer to slices; a value of 5 refers to the
126
option of booting from a second disk. This would normally be used in
127
conjunction with the
128
.Sq noupdate
129
option.
121
.It Fl t Ar ticks
130
.It Fl t Ar ticks
122
Set the timeout value to
131
Set the timeout value to
123
.Ar ticks .
132
.Ar ticks .
(-)boot0cfg.c (-5 / +18 lines)
Lines 44-49 Link Here
44
44
45
#define MBRSIZE         512     /* master boot record size */
45
#define MBRSIZE         512     /* master boot record size */
46
46
47
#define OFF_OPT         0x1b9   /* offset: default boot option */
47
#define OFF_DRIVE	0x1ba	/* offset: setdrv drive */
48
#define OFF_DRIVE	0x1ba	/* offset: setdrv drive */
48
#define OFF_FLAGS       0x1bb   /* offset: option flags */
49
#define OFF_FLAGS       0x1bb   /* offset: option flags */
49
#define OFF_TICKS       0x1bc   /* offset: clock ticks */
50
#define OFF_TICKS       0x1bc   /* offset: clock ticks */
Lines 89-105 Link Here
89
    const char *bpath, *fpath, *disk;
90
    const char *bpath, *fpath, *disk;
90
    ssize_t n;
91
    ssize_t n;
91
    int B_flag, v_flag, o_flag;
92
    int B_flag, v_flag, o_flag;
92
    int d_arg, m_arg, t_arg;
93
    int d_arg, m_arg, s_arg, t_arg;
93
    int o_and, o_or;
94
    int o_and, o_or;
94
    int fd, fd1, up, c, i;
95
    int fd, fd1, up, c, i;
95
96
96
    bpath = "/boot/boot0";
97
    bpath = "/boot/boot0";
97
    fpath = NULL;
98
    fpath = NULL;
98
    B_flag = v_flag = o_flag = 0;
99
    B_flag = v_flag = o_flag = 0;
99
    d_arg = m_arg = t_arg = -1;
100
    d_arg = m_arg = s_arg = t_arg = -1;
100
    o_and = 0xff;
101
    o_and = 0xff;
101
    o_or = 0;
102
    o_or = 0;
102
    while ((c = getopt(argc, argv, "Bvb:d:f:m:o:t:")) != -1)
103
    while ((c = getopt(argc, argv, "Bvb:d:f:m:o:s:t:")) != -1)
103
        switch (c) {
104
        switch (c) {
104
        case 'B':
105
        case 'B':
105
            B_flag = 1;
106
            B_flag = 1;
Lines 123-128 Link Here
123
            stropt(optarg, &o_and, &o_or);
124
            stropt(optarg, &o_and, &o_or);
124
            o_flag = 1;
125
            o_flag = 1;
125
            break;
126
            break;
127
        case 's':
128
            s_arg = argtoi(optarg, 1, 5, 's');
129
            break;
126
        case 't':
130
        case 't':
127
            t_arg = argtoi(optarg, 1, 0xffff, 't');
131
            t_arg = argtoi(optarg, 1, 0xffff, 't');
128
            break;
132
            break;
Lines 134-140 Link Here
134
    if (argc != 1)
138
    if (argc != 1)
135
        usage();
139
        usage();
136
    disk = mkrdev(*argv);
140
    disk = mkrdev(*argv);
137
    up = B_flag || d_arg != -1 || m_arg != -1 || o_flag || t_arg != -1;
141
    up = B_flag || d_arg != -1 || m_arg != -1 || o_flag || s_arg != -1 ||
142
	   t_arg != -1;
138
    if ((fd = open(disk, up ? O_RDWR : O_RDONLY)) == -1)
143
    if ((fd = open(disk, up ? O_RDWR : O_RDONLY)) == -1)
139
        err(1, "%s", disk);
144
        err(1, "%s", disk);
140
    if ((n = read(fd, buf, MBRSIZE)) == -1)
145
    if ((n = read(fd, buf, MBRSIZE)) == -1)
Lines 174-179 Link Here
174
        buf[OFF_FLAGS] &= o_and;
179
        buf[OFF_FLAGS] &= o_and;
175
        buf[OFF_FLAGS] |= o_or;
180
        buf[OFF_FLAGS] |= o_or;
176
    }
181
    }
182
    if (s_arg != -1)
183
        buf[OFF_OPT] = s_arg - 1;
177
    if (t_arg != -1)
184
    if (t_arg != -1)
178
        mk2(buf + OFF_TICKS, t_arg);
185
        mk2(buf + OFF_TICKS, t_arg);
179
    if (up) {
186
    if (up) {
Lines 211-216 Link Here
211
            printf("%s", opttbl[i].tok);
218
            printf("%s", opttbl[i].tok);
212
        }
219
        }
213
        printf("  ticks=%u\n", cv2(buf + OFF_TICKS));
220
        printf("  ticks=%u\n", cv2(buf + OFF_TICKS));
221
	printf("default_selection=F%d (", buf[OFF_OPT] + 1);
222
	if (buf[OFF_OPT] < 4)
223
	    printf("Slice %d", buf[OFF_OPT] + 1);
224
	else
225
	    printf("Drive 1");
226
	printf(")\n");
214
    }
227
    }
215
    return 0;
228
    return 0;
216
}
229
}
Lines 316-321 Link Here
316
{
329
{
317
    fprintf(stderr, "%s\n%s\n",
330
    fprintf(stderr, "%s\n%s\n",
318
    "usage: boot0cfg [-Bv] [-b boot0] [-d drive] [-f file] [-m mask]",
331
    "usage: boot0cfg [-Bv] [-b boot0] [-d drive] [-f file] [-m mask]",
319
    "                [-o options] [-t ticks] disk");
332
    "                [-o options] [-s slice] [-t ticks] disk");
320
    exit(1);
333
    exit(1);
321
}
334
}

Return to bug 18923