Changeset View
Changeset View
Standalone View
Standalone View
sys/boot/i386/common/drv.c
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | #endif /* USE_XREAD */ | ||||
if (V86_CY(v86.efl)) { | if (V86_CY(v86.efl)) { | ||||
printf("%s: error %u lba %u\n", | printf("%s: error %u lba %u\n", | ||||
BOOTPROG, v86.eax >> 8 & 0xff, lba); | BOOTPROG, v86.eax >> 8 & 0xff, lba); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
#ifdef GPT | #if defined(GPT) || defined(ZFS) | ||||
int | int | ||||
drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk) | drvwrite(struct dsk *dskp, void *buf, daddr_t lba, unsigned nblk) | ||||
{ | { | ||||
packet.len = sizeof(struct edd_packet); | packet.len = sizeof(struct edd_packet); | ||||
packet.count = nblk; | packet.count = nblk; | ||||
packet.off = VTOPOFF(buf); | packet.off = VTOPOFF(buf); | ||||
packet.seg = VTOPSEG(buf); | packet.seg = VTOPSEG(buf); | ||||
packet.lba = lba; | packet.lba = lba; | ||||
v86.ctl = V86_FLAGS; | v86.ctl = V86_FLAGS; | ||||
v86.addr = 0x13; | v86.addr = 0x13; | ||||
v86.eax = 0x4300; | v86.eax = 0x4300; | ||||
v86.edx = dskp->drive; | v86.edx = dskp->drive; | ||||
v86.ds = VTOPSEG(&packet); | v86.ds = VTOPSEG(&packet); | ||||
v86.esi = VTOPOFF(&packet); | v86.esi = VTOPOFF(&packet); | ||||
v86int(); | v86int(); | ||||
if (V86_CY(v86.efl)) { | if (V86_CY(v86.efl)) { | ||||
printf("error %u lba %u\n", v86.eax >> 8 & 0xff, lba); | printf("error %u lba %u\n", v86.eax >> 8 & 0xff, lba); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
#endif /* GPT */ | #endif /* GPT || ZFS */ |