Lines Matching refs:bd
211 bdinfo_t *bd = NULL; in bd_get_bdinfo() local
216 return (bd); in bd_get_bdinfo()
219 STAILQ_FOREACH(bd, bdi, bd_link) { in bd_get_bdinfo()
221 return (bd); in bd_get_bdinfo()
224 return (bd); in bd_get_bdinfo()
234 bdinfo_t *bd; in bd_bios2unit() local
240 STAILQ_FOREACH(bd, bdi[i], bd_link) { in bd_bios2unit()
241 if (bd->bd_unit == biosdev) { in bd_bios2unit()
243 bd->bd_unit); in bd_bios2unit()
256 bdinfo_t *bd; in bd_unit2bios() local
264 STAILQ_FOREACH(bd, bdi, bd_link) { in bd_unit2bios()
266 return (bd->bd_unit); in bd_unit2bios()
306 bdinfo_t *bd; in fd_init() local
310 if ((bd = calloc(1, sizeof(*bd))) == NULL) in fd_init()
313 bd->bd_sectorsize = BIOSDISK_SECSIZE; in fd_init()
314 bd->bd_flags = BD_FLOPPY; in fd_init()
315 bd->bd_unit = unit; in fd_init()
318 if (bd_get_diskinfo_std(bd) != 0) { in fd_init()
319 free(bd); in fd_init()
322 if (bd->bd_sectors == 0) in fd_init()
323 bd->bd_flags |= BD_NO_MEDIA; in fd_init()
328 STAILQ_INSERT_TAIL(&fdinfo, bd, bd_link); in fd_init()
339 bdinfo_t *bd; in bd_init() local
348 if ((bd = calloc(1, sizeof(*bd))) == NULL) in bd_init()
350 bd->bd_unit = base + unit; in bd_init()
351 if (!bd_int13probe(bd)) { in bd_init()
352 free(bd); in bd_init()
359 STAILQ_INSERT_TAIL(&hdinfo, bd, bd_link); in bd_init()
382 bd_get_diskinfo_cd(struct bdinfo *bd) in bd_get_diskinfo_cd() argument
394 v86.edx = bd->bd_unit; in bd_get_diskinfo_cd()
400 bc_sp.sp_drive == bd->bd_unit) { in bd_get_diskinfo_cd()
401 bd->bd_cyl = ((bc_sp.sp_cylsec & 0xc0) << 2) + in bd_get_diskinfo_cd()
403 bd->bd_sec = bc_sp.sp_cylsec & 0x3f; in bd_get_diskinfo_cd()
404 bd->bd_hds = bc_sp.sp_head + 1; in bd_get_diskinfo_cd()
405 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_get_diskinfo_cd()
409 bd->bd_sectorsize = BIOSDISK_SECSIZE; in bd_get_diskinfo_cd()
412 bd->bd_sectorsize = 2048; in bd_get_diskinfo_cd()
413 bd->bd_flags = BD_MODEEDD | BD_CDROM; in bd_get_diskinfo_cd()
421 if (ret != 0 && bd->bd_unit >= 0x88) { in bd_get_diskinfo_cd()
422 bd->bd_cyl = 0; in bd_get_diskinfo_cd()
423 bd->bd_hds = 1; in bd_get_diskinfo_cd()
424 bd->bd_sec = 15; in bd_get_diskinfo_cd()
425 bd->bd_sectorsize = 2048; in bd_get_diskinfo_cd()
426 bd->bd_flags = BD_MODEEDD | BD_CDROM; in bd_get_diskinfo_cd()
427 bd->bd_sectors = 0; in bd_get_diskinfo_cd()
440 if (bd->bd_sectors == 0) in bd_get_diskinfo_cd()
441 bd->bd_sectors = 4173824; in bd_get_diskinfo_cd()
449 bdinfo_t *bd; in bc_add() local
455 if ((bd = calloc(1, sizeof(*bd))) == NULL) in bc_add()
458 bd->bd_unit = biosdev; in bc_add()
459 if (bd_get_diskinfo_cd(bd) < 0) { in bc_add()
460 free(bd); in bc_add()
464 STAILQ_INSERT_TAIL(&cdinfo, bd, bd_link); in bc_add()
515 bd_get_diskinfo_std(struct bdinfo *bd) in bd_get_diskinfo_std() argument
521 v86.edx = bd->bd_unit; in bd_get_diskinfo_std()
531 bd->bd_cyl = ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1; in bd_get_diskinfo_std()
533 bd->bd_hds = ((v86.edx & 0xff00) >> 8) + 1; in bd_get_diskinfo_std()
534 bd->bd_sec = v86.ecx & 0x3f; in bd_get_diskinfo_std()
535 bd->bd_type = v86.ebx; in bd_get_diskinfo_std()
536 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_get_diskinfo_std()
548 bd_get_diskinfo_ext(struct bdinfo *bd) in bd_get_diskinfo_ext() argument
566 v86.edx = bd->bd_unit; in bd_get_diskinfo_ext()
583 bd->bd_sectorsize = params->sector_size; in bd_get_diskinfo_ext()
585 bd->bd_cyl = params->cylinders; in bd_get_diskinfo_ext()
586 bd->bd_hds = params->heads; in bd_get_diskinfo_ext()
587 bd->bd_sec = params->sectors_per_track; in bd_get_diskinfo_ext()
595 bd->bd_sectors = total; in bd_get_diskinfo_ext()
604 bd_int13probe(bdinfo_t *bd) in bd_int13probe() argument
608 bd->bd_flags &= ~BD_NO_MEDIA; in bd_int13probe()
610 if ((bd->bd_flags & BD_CDROM) != 0) { in bd_int13probe()
611 return (bd_get_diskinfo_cd(bd) == 0); in bd_int13probe()
614 edd = bd_check_extensions(bd->bd_unit); in bd_int13probe()
616 bd->bd_flags |= BD_MODEINT13; in bd_int13probe()
618 bd->bd_flags |= BD_MODEEDD1; in bd_int13probe()
620 bd->bd_flags |= BD_MODEEDD3; in bd_int13probe()
623 if (bd->bd_sectorsize == 0) in bd_int13probe()
624 bd->bd_sectorsize = BIOSDISK_SECSIZE; in bd_int13probe()
630 if (bd->bd_unit < 0x80) { in bd_int13probe()
632 bd_reset_disk(bd->bd_unit); in bd_int13probe()
638 v86.edx = bd->bd_unit; in bd_int13probe()
646 ret = bd_get_diskinfo_ext(bd); in bd_int13probe()
647 if (ret != 0 || bd->bd_sectors == 0) in bd_int13probe()
648 ret = bd_get_diskinfo_std(bd); in bd_int13probe()
650 if (ret != 0 && bd->bd_unit < 0x80) { in bd_int13probe()
652 bd->bd_cyl = 80; in bd_int13probe()
653 bd->bd_hds = 2; in bd_int13probe()
654 bd->bd_sec = 18; in bd_int13probe()
655 bd->bd_sectors = 2880; in bd_int13probe()
657 bd->bd_flags |= BD_NO_MEDIA; in bd_int13probe()
662 if (bd->bd_sectors != 0 && edd != 0) { in bd_int13probe()
663 bd->bd_sec = 63; in bd_int13probe()
664 bd->bd_hds = 255; in bd_int13probe()
665 bd->bd_cyl = in bd_int13probe()
666 (bd->bd_sectors + bd->bd_sec * bd->bd_hds - 1) / in bd_int13probe()
667 bd->bd_sec * bd->bd_hds; in bd_int13probe()
671 if ((bd->bd_flags & BD_FLOPPY) != 0) in bd_int13probe()
677 dv_name, bd->bd_unit); in bd_int13probe()
682 if (bd->bd_sec == 0) in bd_int13probe()
683 bd->bd_sec = 63; in bd_int13probe()
684 if (bd->bd_hds == 0) in bd_int13probe()
685 bd->bd_hds = 255; in bd_int13probe()
687 if (bd->bd_sectors == 0) in bd_int13probe()
688 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_int13probe()
690 DPRINTF("unit 0x%x geometry %d/%d/%d\n", bd->bd_unit, bd->bd_cyl, in bd_int13probe()
691 bd->bd_hds, bd->bd_sec); in bd_int13probe()
699 bdinfo_t *bd; in bd_count() local
703 STAILQ_FOREACH(bd, bdi, bd_link) in bd_count()
716 bdinfo_t *bd; in bd_print_common() local
728 STAILQ_FOREACH(bd, bdi, bd_link) { in bd_print_common()
746 (bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA ? in bd_print_common()
748 (uintmax_t)bd->bd_sectors, in bd_print_common()
749 bd->bd_sectorsize); in bd_print_common()
753 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_print_common()
764 bd->bd_sectorsize * bd->bd_sectors, in bd_print_common()
765 bd->bd_sectorsize) == 0) { in bd_print_common()
805 bdinfo_t *bd; in bd_disk_get_sectors() local
809 bd = bd_get_bdinfo(&dev->dd); in bd_disk_get_sectors()
810 if (bd == NULL) in bd_disk_get_sectors()
819 size = bd->bd_sectors * bd->bd_sectorsize; in bd_disk_get_sectors()
820 if (disk_open(&disk, size, bd->bd_sectorsize) == 0) { in bd_disk_get_sectors()
824 return (size / bd->bd_sectorsize); in bd_disk_get_sectors()
840 bdinfo_t *bd; in bd_open() local
851 bd = bd_get_bdinfo(&dev->dd); in bd_open()
852 if (bd == NULL) in bd_open()
855 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) { in bd_open()
856 if (!bd_int13probe(bd)) in bd_open()
858 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_open()
861 if (bd->bd_bcache == NULL) in bd_open()
862 bd->bd_bcache = bcache_allocate(); in bd_open()
864 if (bd->bd_open == 0) in bd_open()
865 bd->bd_sectors = bd_disk_get_sectors(dev); in bd_open()
866 bd->bd_open++; in bd_open()
870 rc = disk_open(dev, bd->bd_sectors * bd->bd_sectorsize, in bd_open()
871 bd->bd_sectorsize); in bd_open()
873 bd->bd_open--; in bd_open()
874 if (bd->bd_open == 0) { in bd_open()
875 bcache_free(bd->bd_bcache); in bd_open()
876 bd->bd_bcache = NULL; in bd_open()
888 bdinfo_t *bd; in bd_close() local
892 bd = bd_get_bdinfo(&dev->dd); in bd_close()
893 if (bd == NULL) in bd_close()
896 bd->bd_open--; in bd_close()
897 if (bd->bd_open == 0) { in bd_close()
898 bcache_free(bd->bd_bcache); in bd_close()
899 bd->bd_bcache = NULL; in bd_close()
909 bdinfo_t *bd; in bd_ioctl() local
914 bd = bd_get_bdinfo(&dev->dd); in bd_ioctl()
915 if (bd == NULL) in bd_ioctl()
926 *(uint32_t *)data = bd->bd_sectorsize; in bd_ioctl()
929 *(uint64_t *)data = bd->bd_sectors * bd->bd_sectorsize; in bd_ioctl()
941 bdinfo_t *bd; in bd_strategy() local
947 bd = bd_get_bdinfo(&dev->dd); in bd_strategy()
948 if (bd == NULL) in bd_strategy()
953 bcd.dv_cache = bd->bd_bcache; in bd_strategy()
958 offset = dev->d_offset * bd->bd_sectorsize; in bd_strategy()
970 bdinfo_t *bd; in bd_realstrategy() local
976 bd = bd_get_bdinfo(&dev->dd); in bd_realstrategy()
977 if (bd == NULL || (bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_realstrategy()
995 dblk = offset / bd->bd_sectorsize; in bd_realstrategy()
996 blkoff = offset % bd->bd_sectorsize; in bd_realstrategy()
1009 blks = size / bd->bd_sectorsize; in bd_realstrategy()
1010 if (blks == 0 || (size % bd->bd_sectorsize) != 0) in bd_realstrategy()
1028 disk_blocks /= bd->bd_sectorsize; in bd_realstrategy()
1033 disk_blocks = bd->bd_sectors * (bd->bd_sectorsize / in bd_realstrategy()
1045 size = blks * bd->bd_sectorsize; in bd_realstrategy()
1050 while (bio_size > bd->bd_sectorsize) { in bd_realstrategy()
1054 bio_size -= bd->bd_sectorsize; in bd_realstrategy()
1058 if (bio_size / bd->bd_sectorsize == 0) in bd_realstrategy()
1067 int x = min(blks, bio_size / bd->bd_sectorsize); in bd_realstrategy()
1072 bsize = bd->bd_sectorsize * x - blkoff; in bd_realstrategy()
1076 if ((rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD)) != 0) { in bd_realstrategy()
1091 bsize = bd->bd_sectorsize - blkoff; in bd_realstrategy()
1093 rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD); in bd_realstrategy()
1094 } else if (rest < bd->bd_sectorsize) { in bd_realstrategy()
1101 rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD); in bd_realstrategy()
1104 bsize = bd->bd_sectorsize * x; in bd_realstrategy()
1111 if ((rc = bd_io(dev, bd, dblk, x, bbuf, BD_WR)) != 0) { in bd_realstrategy()
1139 bd_edd_io(bdinfo_t *bd, daddr_t dblk, int blks, caddr_t dest, in bd_edd_io() argument
1157 v86.edx = bd->bd_unit; in bd_edd_io()
1169 bd_chs_io(bdinfo_t *bd, daddr_t dblk, int blks, caddr_t dest, in bd_chs_io() argument
1176 bpc = bd->bd_sec * bd->bd_hds; /* blocks per cylinder */ in bd_chs_io()
1180 hd = x / bd->bd_sec; /* offset / blocks per track */ in bd_chs_io()
1181 sec = x % bd->bd_sec; /* offset into track */ in bd_chs_io()
1198 v86.edx = (hd << 8) | bd->bd_unit; in bd_chs_io()
1209 bd_io_workaround(bdinfo_t *bd) in bd_io_workaround() argument
1213 bd_edd_io(bd, 0xffffffff, 1, (caddr_t)buf, BD_RD); in bd_io_workaround()
1217 bd_io(struct disk_devdesc *dev, bdinfo_t *bd, daddr_t dblk, int blks, in bd_io() argument
1240 bd_io_workaround(bd); in bd_io()
1242 if (bd->bd_flags & BD_MODEEDD) in bd_io()
1243 result = bd_edd_io(bd, dblk, blks, dest, dowrite); in bd_io()
1245 result = bd_chs_io(bd, dblk, blks, dest, dowrite); in bd_io()
1248 if (bd->bd_flags & BD_NO_MEDIA) in bd_io()
1249 bd->bd_flags &= ~BD_NO_MEDIA; in bd_io()
1253 bd_reset_disk(bd->bd_unit); in bd_io()
1263 bd->bd_flags |= BD_NO_MEDIA; in bd_io()
1268 if (result != 0 && (bd->bd_flags & BD_NO_MEDIA) == 0) { in bd_io()
1297 bdinfo_t *bd; in bd_getdev() local
1309 bd = bd_get_bdinfo(&dev->dd); in bd_getdev()
1310 if (bd == NULL) in bd_getdev()
1319 if (disk_open(dev, bd->bd_sectors * bd->bd_sectorsize, in bd_getdev()
1320 bd->bd_sectorsize) != 0) /* oops, not a viable device */ in bd_getdev()
1330 if (bd->bd_type == DT_ATAPI) { in bd_getdev()