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()
326 STAILQ_INSERT_TAIL(&fdinfo, bd, bd_link); in fd_init()
337 bdinfo_t *bd; in bd_init() local
344 if ((bd = calloc(1, sizeof (*bd))) == NULL) in bd_init()
346 bd->bd_unit = base + unit; in bd_init()
347 if (!bd_int13probe(bd)) { in bd_init()
348 free(bd); in bd_init()
353 STAILQ_INSERT_TAIL(&hdinfo, bd, bd_link); in bd_init()
375 bd_get_diskinfo_cd(struct bdinfo *bd) in bd_get_diskinfo_cd() argument
387 v86.edx = bd->bd_unit; in bd_get_diskinfo_cd()
393 bc_sp.sp_drive == bd->bd_unit) { in bd_get_diskinfo_cd()
394 bd->bd_cyl = ((bc_sp.sp_cylsec & 0xc0) << 2) + in bd_get_diskinfo_cd()
396 bd->bd_sec = bc_sp.sp_cylsec & 0x3f; in bd_get_diskinfo_cd()
397 bd->bd_hds = bc_sp.sp_head + 1; in bd_get_diskinfo_cd()
398 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_get_diskinfo_cd()
402 bd->bd_sectorsize = BIOSDISK_SECSIZE; in bd_get_diskinfo_cd()
405 bd->bd_sectorsize = 2048; in bd_get_diskinfo_cd()
406 bd->bd_flags = BD_MODEEDD | BD_CDROM; in bd_get_diskinfo_cd()
414 if (ret != 0 && bd->bd_unit >= 0x88) { in bd_get_diskinfo_cd()
415 bd->bd_cyl = 0; in bd_get_diskinfo_cd()
416 bd->bd_hds = 1; in bd_get_diskinfo_cd()
417 bd->bd_sec = 15; in bd_get_diskinfo_cd()
418 bd->bd_sectorsize = 2048; in bd_get_diskinfo_cd()
419 bd->bd_flags = BD_MODEEDD | BD_CDROM; in bd_get_diskinfo_cd()
420 bd->bd_sectors = 0; in bd_get_diskinfo_cd()
433 if (bd->bd_sectors == 0) in bd_get_diskinfo_cd()
434 bd->bd_sectors = 4173824; in bd_get_diskinfo_cd()
442 bdinfo_t *bd; in bc_add() local
448 if ((bd = calloc(1, sizeof (*bd))) == NULL) in bc_add()
451 bd->bd_unit = biosdev; in bc_add()
452 if (bd_get_diskinfo_cd(bd) < 0) { in bc_add()
453 free(bd); in bc_add()
457 STAILQ_INSERT_TAIL(&cdinfo, bd, bd_link); in bc_add()
508 bd_get_diskinfo_std(struct bdinfo *bd) in bd_get_diskinfo_std() argument
514 v86.edx = bd->bd_unit; in bd_get_diskinfo_std()
524 bd->bd_cyl = ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1; in bd_get_diskinfo_std()
526 bd->bd_hds = ((v86.edx & 0xff00) >> 8) + 1; in bd_get_diskinfo_std()
527 bd->bd_sec = v86.ecx & 0x3f; in bd_get_diskinfo_std()
528 bd->bd_type = v86.ebx; in bd_get_diskinfo_std()
529 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_get_diskinfo_std()
541 bd_get_diskinfo_ext(struct bdinfo *bd) in bd_get_diskinfo_ext() argument
558 v86.edx = bd->bd_unit; in bd_get_diskinfo_ext()
575 bd->bd_sectorsize = params->sector_size; in bd_get_diskinfo_ext()
577 bd->bd_cyl = params->cylinders; in bd_get_diskinfo_ext()
578 bd->bd_hds = params->heads; in bd_get_diskinfo_ext()
579 bd->bd_sec = params->sectors_per_track; in bd_get_diskinfo_ext()
587 bd->bd_sectors = total; in bd_get_diskinfo_ext()
596 bd_int13probe(bdinfo_t *bd) in bd_int13probe() argument
600 bd->bd_flags &= ~BD_NO_MEDIA; in bd_int13probe()
602 if ((bd->bd_flags & BD_CDROM) != 0) { in bd_int13probe()
603 return (bd_get_diskinfo_cd(bd) == 0); in bd_int13probe()
606 edd = bd_check_extensions(bd->bd_unit); in bd_int13probe()
608 bd->bd_flags |= BD_MODEINT13; in bd_int13probe()
610 bd->bd_flags |= BD_MODEEDD1; in bd_int13probe()
612 bd->bd_flags |= BD_MODEEDD3; in bd_int13probe()
615 if (bd->bd_sectorsize == 0) in bd_int13probe()
616 bd->bd_sectorsize = BIOSDISK_SECSIZE; in bd_int13probe()
622 if (bd->bd_unit < 0x80) { in bd_int13probe()
624 bd_reset_disk(bd->bd_unit); in bd_int13probe()
630 v86.edx = bd->bd_unit; in bd_int13probe()
638 ret = bd_get_diskinfo_ext(bd); in bd_int13probe()
639 if (ret != 0 || bd->bd_sectors == 0) in bd_int13probe()
640 ret = bd_get_diskinfo_std(bd); in bd_int13probe()
642 if (ret != 0 && bd->bd_unit < 0x80) { in bd_int13probe()
644 bd->bd_cyl = 80; in bd_int13probe()
645 bd->bd_hds = 2; in bd_int13probe()
646 bd->bd_sec = 18; in bd_int13probe()
647 bd->bd_sectors = 2880; in bd_int13probe()
649 bd->bd_flags |= BD_NO_MEDIA; in bd_int13probe()
654 if (bd->bd_sectors != 0 && edd != 0) { in bd_int13probe()
655 bd->bd_sec = 63; in bd_int13probe()
656 bd->bd_hds = 255; in bd_int13probe()
657 bd->bd_cyl = in bd_int13probe()
658 (bd->bd_sectors + bd->bd_sec * bd->bd_hds - 1) / in bd_int13probe()
659 bd->bd_sec * bd->bd_hds; in bd_int13probe()
663 if ((bd->bd_flags & BD_FLOPPY) != 0) in bd_int13probe()
669 dv_name, bd->bd_unit); in bd_int13probe()
674 if (bd->bd_sec == 0) in bd_int13probe()
675 bd->bd_sec = 63; in bd_int13probe()
676 if (bd->bd_hds == 0) in bd_int13probe()
677 bd->bd_hds = 255; in bd_int13probe()
679 if (bd->bd_sectors == 0) in bd_int13probe()
680 bd->bd_sectors = (uint64_t)bd->bd_cyl * bd->bd_hds * bd->bd_sec; in bd_int13probe()
682 DPRINTF("unit 0x%x geometry %d/%d/%d\n", bd->bd_unit, bd->bd_cyl, in bd_int13probe()
683 bd->bd_hds, bd->bd_sec); in bd_int13probe()
691 bdinfo_t *bd; in bd_count() local
695 STAILQ_FOREACH(bd, bdi, bd_link) in bd_count()
708 bdinfo_t *bd; in bd_print_common() local
720 STAILQ_FOREACH(bd, bdi, bd_link) { in bd_print_common()
738 (bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA ? in bd_print_common()
740 (uintmax_t)bd->bd_sectors, in bd_print_common()
741 bd->bd_sectorsize); in bd_print_common()
745 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_print_common()
756 bd->bd_sectorsize * bd->bd_sectors, in bd_print_common()
757 bd->bd_sectorsize) == 0) { in bd_print_common()
797 bdinfo_t *bd; in bd_disk_get_sectors() local
801 bd = bd_get_bdinfo(&dev->dd); in bd_disk_get_sectors()
802 if (bd == NULL) in bd_disk_get_sectors()
811 size = bd->bd_sectors * bd->bd_sectorsize; in bd_disk_get_sectors()
812 if (disk_open(&disk, size, bd->bd_sectorsize) == 0) { in bd_disk_get_sectors()
816 return (size / bd->bd_sectorsize); in bd_disk_get_sectors()
832 bdinfo_t *bd; in bd_open() local
841 bd = bd_get_bdinfo(&dev->dd); in bd_open()
842 if (bd == NULL) in bd_open()
845 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) { in bd_open()
846 if (!bd_int13probe(bd)) in bd_open()
848 if ((bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_open()
851 if (bd->bd_bcache == NULL) in bd_open()
852 bd->bd_bcache = bcache_allocate(); in bd_open()
854 if (bd->bd_open == 0) in bd_open()
855 bd->bd_sectors = bd_disk_get_sectors(dev); in bd_open()
856 bd->bd_open++; in bd_open()
860 rc = disk_open(dev, bd->bd_sectors * bd->bd_sectorsize, in bd_open()
861 bd->bd_sectorsize); in bd_open()
863 bd->bd_open--; in bd_open()
864 if (bd->bd_open == 0) { in bd_open()
865 bcache_free(bd->bd_bcache); in bd_open()
866 bd->bd_bcache = NULL; in bd_open()
877 bdinfo_t *bd; in bd_close() local
881 bd = bd_get_bdinfo(&dev->dd); in bd_close()
882 if (bd == NULL) in bd_close()
885 bd->bd_open--; in bd_close()
886 if (bd->bd_open == 0) { in bd_close()
887 bcache_free(bd->bd_bcache); in bd_close()
888 bd->bd_bcache = NULL; in bd_close()
898 bdinfo_t *bd; in bd_ioctl() local
903 bd = bd_get_bdinfo(&dev->dd); in bd_ioctl()
904 if (bd == NULL) in bd_ioctl()
915 *(uint32_t *)data = bd->bd_sectorsize; in bd_ioctl()
918 *(uint64_t *)data = bd->bd_sectors * bd->bd_sectorsize; in bd_ioctl()
930 bdinfo_t *bd; in bd_strategy() local
936 bd = bd_get_bdinfo(&dev->dd); in bd_strategy()
937 if (bd == NULL) in bd_strategy()
942 bcd.dv_cache = bd->bd_bcache; in bd_strategy()
947 offset = dev->d_offset * bd->bd_sectorsize; in bd_strategy()
959 bdinfo_t *bd; in bd_realstrategy() local
965 bd = bd_get_bdinfo(&dev->dd); in bd_realstrategy()
966 if (bd == NULL || (bd->bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) in bd_realstrategy()
984 dblk = offset / bd->bd_sectorsize; in bd_realstrategy()
985 blkoff = offset % bd->bd_sectorsize; in bd_realstrategy()
998 blks = size / bd->bd_sectorsize; in bd_realstrategy()
999 if (blks == 0 || (size % bd->bd_sectorsize) != 0) in bd_realstrategy()
1017 disk_blocks /= bd->bd_sectorsize; in bd_realstrategy()
1022 disk_blocks = bd->bd_sectors - d_offset; in bd_realstrategy()
1033 size = blks * bd->bd_sectorsize; in bd_realstrategy()
1038 while (bio_size > bd->bd_sectorsize) { in bd_realstrategy()
1042 bio_size -= bd->bd_sectorsize; in bd_realstrategy()
1046 if (bio_size < bd->bd_sectorsize) in bd_realstrategy()
1055 int x = min(blks, bio_size / bd->bd_sectorsize); in bd_realstrategy()
1060 bsize = bd->bd_sectorsize * x - blkoff; in bd_realstrategy()
1064 if ((rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD)) != 0) { in bd_realstrategy()
1079 bsize = bd->bd_sectorsize - blkoff; in bd_realstrategy()
1081 rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD); in bd_realstrategy()
1082 } else if (rest < bd->bd_sectorsize) { in bd_realstrategy()
1089 rc = bd_io(dev, bd, dblk, x, bbuf, BD_RD); in bd_realstrategy()
1092 bsize = bd->bd_sectorsize * x; in bd_realstrategy()
1099 if ((rc = bd_io(dev, bd, dblk, x, bbuf, BD_WR)) != 0) { in bd_realstrategy()
1126 bd_edd_io(bdinfo_t *bd, daddr_t dblk, int blks, caddr_t dest, in bd_edd_io() argument
1142 v86.edx = bd->bd_unit; in bd_edd_io()
1152 bd_chs_io(bdinfo_t *bd, daddr_t dblk, int blks, caddr_t dest, in bd_chs_io() argument
1157 bpc = bd->bd_sec * bd->bd_hds; /* blocks per cylinder */ in bd_chs_io()
1161 hd = x / bd->bd_sec; /* offset / blocks per track */ in bd_chs_io()
1162 sec = x % bd->bd_sec; /* offset into track */ in bd_chs_io()
1179 v86.edx = (hd << 8) | bd->bd_unit; in bd_chs_io()
1189 bd_io_workaround(bdinfo_t *bd) in bd_io_workaround() argument
1193 bd_edd_io(bd, 0xffffffff, 1, (caddr_t)buf, BD_RD); in bd_io_workaround()
1197 bd_io(struct disk_devdesc *dev, bdinfo_t *bd, daddr_t dblk, int blks, in bd_io() argument
1218 bd_io_workaround(bd); in bd_io()
1220 if (bd->bd_flags & BD_MODEEDD) in bd_io()
1221 result = bd_edd_io(bd, dblk, blks, dest, dowrite); in bd_io()
1223 result = bd_chs_io(bd, dblk, blks, dest, dowrite); in bd_io()
1226 if (bd->bd_flags & BD_NO_MEDIA) in bd_io()
1227 bd->bd_flags &= ~BD_NO_MEDIA; in bd_io()
1231 bd_reset_disk(bd->bd_unit); in bd_io()
1241 bd->bd_flags |= BD_NO_MEDIA; in bd_io()
1246 if (result != 0 && (bd->bd_flags & BD_NO_MEDIA) == 0) { in bd_io()
1302 bdinfo_t *bd; in bd_getdev() local
1314 bd = bd_get_bdinfo(&dev->dd); in bd_getdev()
1315 if (bd == NULL) in bd_getdev()
1324 if (disk_open(dev, bd->bd_sectors * bd->bd_sectorsize, in bd_getdev()
1325 bd->bd_sectorsize) != 0) /* oops, not a viable device */ in bd_getdev()
1335 if (bd->bd_type == DT_ATAPI) { in bd_getdev()