dsk
int drvread(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk);
int drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk);
uint64_t drvsize(struct dsk *dskp);
drvsize(struct dsk *dskp)
dsk.devinfo = raw_device;
if (dsk.devinfo == NULL) {
if (gptread(&dsk, secbuf) == -1) {
while (gptfind(&freebsd_ufs_uuid, &dsk, -1) != -1) {
bootdev = find_partition(dsk.part);
dsk.part);
fn, dsk.part);
gptbootfailed(&dsk);
static struct dsk dsk;
drvread(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk)
drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk)
dsk.drive = *(uint8_t *)PTOV(ARGS);
dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
dsk.unit = dsk.drive & DRV_MASK;
dsk.slice = *(uint8_t *)PTOV(ARGS + 1) + 1;
dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
'a' + dsk.part, kname);
bootinfo.bi_bios_dev = dsk.drive;
MAKEBOOTDEV(dev_maj[dsk.type], dsk.slice, dsk.unit, dsk.part),
dsk.type = i;
dsk.unit = *arg - '0';
if (arg[1] != ',' || dsk.unit > 9)
dsk.slice = WHOLE_DISK_SLICE;
dsk.slice = *arg - '0' + 1;
if (dsk.slice > NDOSPART + 1)
dsk.part = *arg - 'a';
if (dsk.part > 7)
drv = dsk.unit;
dsk.drive = (dsk.type <= TYPE_MAXHARD
dsk.start = 0;
sl = dsk.slice;
dsk.slice == COMPATIBILITY_SLICE)
if (dsk.slice == WHOLE_DISK_SLICE)
dsk.slice = sl;
dsk.start = dp->dp_start;
if (drvread(sec, dsk.start + LABELSECTOR, 1))
if (dsk.part != RAW_PART) {
if (!dsk.init) {
dsk.type = TYPE_DA;
dsk.init++;
if (dsk.part >= d->d_npartitions ||
!d->d_partitions[dsk.part].p_size) {
dsk.start += d->d_partitions[dsk.part].p_offset;
dsk.start -= d->d_partitions[RAW_PART].p_offset;
return (drvread(buf, dsk.start + lba, nblk));
v86.edx = nblk << 8 | dsk.drive;
} dsk;
drvsize(struct dsk *dskp)
drvread(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk)
drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk)
int drvread(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk);
int drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk);
uint64_t drvsize(struct dsk *dskp);
struct dsk dsk;
if (gptread(&gdsk.dsk, dmadat->secbuf) == -1) {
if (gptfind(&freebsd_ufs_uuid, &gdsk.dsk, gdsk.dsk.part) == -1) {
gdsk.gdev = geli_taste(vdev_read, &gdsk.dsk,
"disk%up%u:", gdsk.dsk.unit, curent + 1);
gdsk.dsk.drive = *(uint8_t *)PTOV(ARGS);
gdsk.dsk.type = gdsk.dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
gdsk.dsk.unit = gdsk.dsk.drive & DRV_MASK;
gdsk.dsk.part = -1;
gdsk.dsk.start = 0;
bootinfo.bi_bios_dev = gdsk.dsk.drive;
gptbootfailed(&gdsk.dsk);
if (gptfind(&freebsd_ufs_uuid, &gdsk.dsk, -1) == -1)
gdsk.dsk.drive & DRV_MASK, dev_nm[gdsk.dsk.type],
gdsk.dsk.unit, gdsk.dsk.part, kname);
kname, gdsk.dsk.drive & DRV_MASK,
dev_nm[gdsk.dsk.type], gdsk.dsk.unit,
gdsk.dsk.part);
bootinfo.bi_bios_dev = gdsk.dsk.drive;
MAKEBOOTDEV(dev_maj[gdsk.dsk.type], gdsk.dsk.part + 1, gdsk.dsk.unit, 0xff),
gdsk.dsk.type = i;
gdsk.dsk.unit = *arg - '0';
if (arg[1] != 'p' || gdsk.dsk.unit > 9)
gdsk.dsk.part = j;
if (gdsk.dsk.part < 1 || gdsk.dsk.part > 128)
drv = gdsk.dsk.unit;
gdsk.dsk.drive = (gdsk.dsk.type <= TYPE_MAXHARD
err = drvread(&gdsk.dsk, buf, lba + gdsk.dsk.start, nblk);
lba += dskp->dsk.start;
if (drvread(&dskp->dsk, dmadat->blkbuf, lba, nb))
dsk.drive = *(uint8_t *)PTOV(ARGS);
dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
dsk.unit = dsk.drive & DRV_MASK;
dsk.part = -1;
dsk.start = 0;
bootinfo.bi_bios_dev = dsk.drive;
dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
dsk.part, kname);
kname, dsk.drive & DRV_MASK, dev_nm[dsk.type],
dsk.unit,
dsk.part);
bootinfo.bi_bios_dev = dsk.drive;
MAKEBOOTDEV(dev_maj[dsk.type], 0, dsk.unit, 0),
dsk.type = i;
dsk.unit = *arg - '0';
if (arg[1] != 'p' || dsk.unit > 9)
dsk.part = *arg - '0';
if (dsk.part < 1 || dsk.part > 9)
drv = dsk.unit;
dsk.drive = (dsk.type <= TYPE_MAXHARD
static struct dsk dsk;
return (drvread(&dsk, buffer, blkno * 4, 4));
gptread_hdr(const char *which, struct dsk *dskp, struct gpt_hdr *hdr,
gptbootfailed(struct dsk *dskp)
gptbootconv(const char *which, struct dsk *dskp, struct gpt_hdr *hdr,
gptread_table(const char *which, struct dsk *dskp, struct gpt_hdr *hdr,
gptread(struct dsk *dskp, char *buf)
gptupdate(const char *which, struct dsk *dskp, struct gpt_hdr *hdr,
gptfind(const uuid_t *uuid, struct dsk *dskp, int part)
int gptread(struct dsk *dskp, char *buf);
int gptfind(const uuid_t *uuid, struct dsk *dskp, int part);
void gptbootfailed(struct dsk *dskp);