Lines Matching +full:pd +full:- +full:node
1 /*-
123 if (dev->dv_type == DEVT_DISK) in efiblk_get_pdinfo_list()
125 if (dev->dv_type == DEVT_CD) in efiblk_get_pdinfo_list()
127 if (dev->dv_type == DEVT_FD) in efiblk_get_pdinfo_list()
137 pdinfo_t *pd = NULL; in efiblk_get_pdinfo() local
139 pdi = efiblk_get_pdinfo_list(dev->d_dev); in efiblk_get_pdinfo()
141 return (pd); in efiblk_get_pdinfo()
143 STAILQ_FOREACH(pd, pdi, pd_link) { in efiblk_get_pdinfo()
144 if (pd->pd_unit == dev->d_unit) in efiblk_get_pdinfo()
145 return (pd); in efiblk_get_pdinfo()
147 return (pd); in efiblk_get_pdinfo()
157 status = BS->LocateDevicePath(&blkio_guid, &devp, &h); in efiblk_get_pdinfo_by_device_path()
164 same_handle(pdinfo_t *pd, EFI_HANDLE h) in same_handle() argument
167 return (pd->pd_handle == h || pd->pd_alias == h); in same_handle()
181 STAILQ_FOREACH(pp, &dp->pd_part, pd_link) { in efiblk_get_pdinfo_by_handle()
189 STAILQ_FOREACH(pp, &dp->pd_part, pd_link) { in efiblk_get_pdinfo_by_handle()
204 pdinfo_t *pd; in efiblk_pdinfo_count() local
207 STAILQ_FOREACH(pd, pdi, pd_link) { in efiblk_pdinfo_count()
216 pdinfo_t *pd; in efipart_find_parent() local
225 STAILQ_FOREACH(pd, pdi, pd_link) { in efipart_find_parent()
227 if (efi_devpath_match(pd->pd_devpath, parent)) in efipart_find_parent()
231 return (pd); in efipart_find_parent()
241 EFI_DEVICE_PATH *node, *parent; in efipart_ignore_device() local
250 if (blkio->Media->BlockSize < 512 || in efipart_ignore_device()
251 blkio->Media->BlockSize > (1 << 16) || in efipart_ignore_device()
252 !powerof2(blkio->Media->BlockSize)) { in efipart_ignore_device()
258 if (blkio->Media->IoAlign > 1 && in efipart_ignore_device()
259 !powerof2(blkio->Media->IoAlign)) { in efipart_ignore_device()
282 * Therefore, if this node is USB, or this node is Unit (LUN) and in efipart_ignore_device()
298 if (blkio->Media->MediaPresent) in efipart_ignore_device()
301 node = efi_devpath_last_node(devpath); in efipart_ignore_device()
302 if (node == NULL) in efipart_ignore_device()
306 if (DevicePathType(node) == MESSAGING_DEVICE_PATH && in efipart_ignore_device()
307 DevicePathSubType(node) == MSG_USB_DP) { in efipart_ignore_device()
316 node = efi_devpath_last_node(parent); in efipart_ignore_device()
317 if (node == NULL) { in efipart_ignore_device()
321 if (DevicePathType(node) == MESSAGING_DEVICE_PATH && in efipart_ignore_device()
322 DevicePathSubType(node) == MSG_USB_DP) in efipart_ignore_device()
326 node = efi_devpath_last_node(devpath); in efipart_ignore_device()
327 if (node == NULL) in efipart_ignore_device()
330 DevicePathType(node) == MESSAGING_DEVICE_PATH) { in efipart_ignore_device()
335 if (DevicePathSubType(node) == in efipart_ignore_device()
337 DevicePathSubType(node) == MSG_SCSI_DP) { in efipart_ignore_device()
355 pdinfo_t *pd; in efipart_inithandles() local
362 status = BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, hin); in efipart_inithandles()
367 status = BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, in efipart_inithandles()
399 if ((pd = calloc(1, sizeof(*pd))) == NULL) { in efipart_inithandles()
404 STAILQ_INIT(&pd->pd_part); in efipart_inithandles()
406 pd->pd_handle = hin[i]; in efipart_inithandles()
407 pd->pd_devpath = devpath; in efipart_inithandles()
408 pd->pd_blkio = blkio; in efipart_inithandles()
409 STAILQ_INSERT_TAIL(&pdinfo, pd, pd_link); in efipart_inithandles()
415 STAILQ_FOREACH(pd, &pdinfo, pd_link) { in efipart_inithandles()
416 pd->pd_parent = efipart_find_parent(&pdinfo, pd->pd_devpath); in efipart_inithandles()
423 * Get node identified by pd_test() from plist.
428 pdinfo_t *pd; in efipart_get_pd() local
430 STAILQ_FOREACH(pd, plist, pd_link) { in efipart_get_pd()
431 if (pd_test(pd, data)) in efipart_get_pd()
435 return (pd); in efipart_get_pd()
439 efipart_floppy(EFI_DEVICE_PATH *node) in efipart_floppy() argument
443 if (DevicePathType(node) == ACPI_DEVICE_PATH && in efipart_floppy()
444 DevicePathSubType(node) == ACPI_DP) { in efipart_floppy()
445 acpi = (ACPI_HID_DEVICE_PATH *) node; in efipart_floppy()
446 if (acpi->HID == EISA_PNP_ID(PNP0604) || in efipart_floppy()
447 acpi->HID == EISA_PNP_ID(PNP0700) || in efipart_floppy()
448 acpi->HID == EISA_PNP_ID(PNP0701)) { in efipart_floppy()
458 EFI_DEVICE_PATH *node; in efipart_testfd() local
460 node = efi_devpath_last_node(fd->pd_devpath); in efipart_testfd()
461 if (node == NULL) in efipart_testfd()
464 if (efipart_floppy(node) != NULL) in efipart_testfd()
473 EFI_DEVICE_PATH *node; in efipart_initfd() local
478 if ((node = efi_devpath_last_node(fd->pd_devpath)) == NULL) in efipart_initfd()
481 if ((acpi = efipart_floppy(node)) == NULL) in efipart_initfd()
485 parent = fd->pd_parent; in efipart_initfd()
488 parent->pd_alias = fd->pd_handle; in efipart_initfd()
489 parent->pd_unit = acpi->UID; in efipart_initfd()
493 fd->pd_unit = acpi->UID; in efipart_initfd()
495 fd->pd_devsw = &efipart_fddev; in efipart_initfd()
509 pdinfo_t *parent, *pd, *last; in efipart_cdinfo_add() local
514 parent = cd->pd_parent; in efipart_cdinfo_add()
518 STAILQ_FOREACH(pd, &pdinfo, pd_link) { in efipart_cdinfo_add()
519 if (efi_devpath_match(pd->pd_devpath, cd->pd_devpath)) { in efipart_cdinfo_add()
524 if (pd == NULL) { in efipart_cdinfo_add()
530 last = STAILQ_LAST(&parent->pd_part, pdinfo, pd_link); in efipart_cdinfo_add()
532 cd->pd_unit = last->pd_unit + 1; in efipart_cdinfo_add()
534 cd->pd_unit = 0; in efipart_cdinfo_add()
535 cd->pd_devsw = &efipart_cddev; in efipart_cdinfo_add()
536 STAILQ_INSERT_TAIL(&parent->pd_part, cd, pd_link); in efipart_cdinfo_add()
542 cd->pd_unit = last->pd_unit + 1; in efipart_cdinfo_add()
544 cd->pd_unit = 0; in efipart_cdinfo_add()
546 cd->pd_devsw = &efipart_cddev; in efipart_cdinfo_add()
553 EFI_DEVICE_PATH *node; in efipart_testcd() local
555 node = efi_devpath_last_node(cd->pd_devpath); in efipart_testcd()
556 if (node == NULL) in efipart_testcd()
559 if (efipart_floppy(node) != NULL) in efipart_testcd()
562 if (DevicePathType(node) == MEDIA_DEVICE_PATH && in efipart_testcd()
563 DevicePathSubType(node) == MEDIA_CDROM_DP) { in efipart_testcd()
568 if (cd->pd_blkio->Media->RemovableMedia && in efipart_testcd()
569 !cd->pd_blkio->Media->MediaPresent) { in efipart_testcd()
577 * Test if pd is parent for device.
580 efipart_testchild(pdinfo_t *dev, pdinfo_t *pd) in efipart_testchild() argument
583 if (dev->pd_parent == NULL) in efipart_testchild()
586 if (efi_devpath_match(dev->pd_parent->pd_devpath, pd->pd_devpath)) { in efipart_testchild()
614 efipart_hdinfo_add_node(pdinfo_t *hd, EFI_DEVICE_PATH *node) in efipart_hdinfo_add_node() argument
618 if (node == NULL) in efipart_hdinfo_add_node()
621 parent = hd->pd_parent; in efipart_hdinfo_add_node()
623 * If the node is not MEDIA_HARDDRIVE_DP, it is sub-partition. in efipart_hdinfo_add_node()
627 if (DevicePathSubType(node) != MEDIA_HARDDRIVE_DP) { in efipart_hdinfo_add_node()
628 ptr = STAILQ_LAST(&parent->pd_part, pdinfo, pd_link); in efipart_hdinfo_add_node()
630 hd->pd_unit = ptr->pd_unit + 1; in efipart_hdinfo_add_node()
632 hd->pd_unit = 0; in efipart_hdinfo_add_node()
634 hd->pd_unit = ((HARDDRIVE_DEVICE_PATH *)node)->PartitionNumber; in efipart_hdinfo_add_node()
637 hd->pd_devsw = &efipart_hddev; in efipart_hdinfo_add_node()
638 STAILQ_INSERT_TAIL(&parent->pd_part, hd, pd_link); in efipart_hdinfo_add_node()
643 * From U-Boot sources it looks like names are in the form
648 efipart_hdinfo_add_filepath(pdinfo_t *hd, FILEPATH_DEVICE_PATH *node) in efipart_hdinfo_add_filepath() argument
656 hd->pd_unit = last->pd_unit + 1; in efipart_hdinfo_add_filepath()
658 hd->pd_unit = 0; in efipart_hdinfo_add_filepath()
661 len = ucs2len(node->PathName); in efipart_hdinfo_add_filepath()
667 cpy16to8(node->PathName, pathname, len + 1); in efipart_hdinfo_add_filepath()
676 hd->pd_devsw = &efipart_hddev; in efipart_hdinfo_add_filepath()
683 hd->pd_unit = (int)strtol(p, NULL, 0); in efipart_hdinfo_add_filepath()
704 hd->pd_parent = last; in efipart_hdinfo_add_filepath()
705 hd->pd_devsw = &efipart_hddev; in efipart_hdinfo_add_filepath()
706 STAILQ_INSERT_TAIL(&last->pd_part, hd, pd_link); in efipart_hdinfo_add_filepath()
713 pdinfo_t *parent, *pd, *last; in efipart_hdinfo_add() local
714 EFI_DEVICE_PATH *node; in efipart_hdinfo_add() local
719 parent = hd->pd_parent; in efipart_hdinfo_add()
723 STAILQ_FOREACH(pd, &pdinfo, pd_link) { in efipart_hdinfo_add()
724 if (efi_devpath_match(pd->pd_devpath, hd->pd_devpath)) { in efipart_hdinfo_add()
729 if (pd == NULL) { in efipart_hdinfo_add()
734 if ((node = efi_devpath_last_node(hd->pd_devpath)) == NULL) in efipart_hdinfo_add()
737 if (DevicePathType(node) == MEDIA_DEVICE_PATH && in efipart_hdinfo_add()
738 DevicePathSubType(node) == MEDIA_FILEPATH_DP) { in efipart_hdinfo_add()
740 (FILEPATH_DEVICE_PATH *)node); in efipart_hdinfo_add()
745 efipart_hdinfo_add_node(hd, node); in efipart_hdinfo_add()
751 hd->pd_unit = last->pd_unit + 1; in efipart_hdinfo_add()
753 hd->pd_unit = 0; in efipart_hdinfo_add()
756 hd->pd_devsw = &efipart_hddev; in efipart_hdinfo_add()
792 pdinfo_t *pd; in efipart_print_common() local
800 printf("%s devices:", dev->dv_name); in efipart_print_common()
804 STAILQ_FOREACH(pd, pdlist, pd_link) { in efipart_print_common()
805 h = pd->pd_handle; in efipart_print_common()
816 " %s%d", dev->dv_name, pd->pd_unit); in efipart_print_common()
821 blkio->Media->LastBlock == 0? 0: in efipart_print_common()
822 (unsigned long long) (blkio->Media->LastBlock + 1)); in efipart_print_common()
823 if (blkio->Media->LastBlock != 0) { in efipart_print_common()
824 printf(" X %u", blkio->Media->BlockSize); in efipart_print_common()
827 if (blkio->Media->MediaPresent) { in efipart_print_common()
828 if (blkio->Media->RemovableMedia) in efipart_print_common()
835 if (!blkio->Media->MediaPresent) in efipart_print_common()
838 pd->pd_blkio = blkio; in efipart_print_common()
840 pd_dev.dd.d_unit = pd->pd_unit; in efipart_print_common()
843 ret = disk_open(&pd_dev, blkio->Media->BlockSize * in efipart_print_common()
844 (blkio->Media->LastBlock + 1), in efipart_print_common()
845 blkio->Media->BlockSize); in efipart_print_common()
886 pdinfo_t *pd; in efipart_open() local
896 pd = efiblk_get_pdinfo((struct devdesc *)dev); in efipart_open()
897 if (pd == NULL) in efipart_open()
900 if (pd->pd_blkio == NULL) { in efipart_open()
901 status = OpenProtocolByHandle(pd->pd_handle, &blkio_guid, in efipart_open()
902 (void **)&pd->pd_blkio); in efipart_open()
907 blkio = pd->pd_blkio; in efipart_open()
908 if (!blkio->Media->MediaPresent) in efipart_open()
911 pd->pd_open++; in efipart_open()
912 if (pd->pd_bcache == NULL) in efipart_open()
913 pd->pd_bcache = bcache_allocate(); in efipart_open()
915 if (dev->dd.d_dev->dv_type == DEVT_DISK) { in efipart_open()
919 blkio->Media->BlockSize * (blkio->Media->LastBlock + 1), in efipart_open()
920 blkio->Media->BlockSize); in efipart_open()
922 pd->pd_open--; in efipart_open()
923 if (pd->pd_open == 0) { in efipart_open()
924 pd->pd_blkio = NULL; in efipart_open()
925 bcache_free(pd->pd_bcache); in efipart_open()
926 pd->pd_bcache = NULL; in efipart_open()
938 pdinfo_t *pd; in efipart_close() local
940 dev = (struct disk_devdesc *)(f->f_devdata); in efipart_close()
944 pd = efiblk_get_pdinfo((struct devdesc *)dev); in efipart_close()
945 if (pd == NULL) in efipart_close()
948 pd->pd_open--; in efipart_close()
949 if (pd->pd_open == 0) { in efipart_close()
950 pd->pd_blkio = NULL; in efipart_close()
951 if (dev->dd.d_dev->dv_type != DEVT_DISK) { in efipart_close()
952 bcache_free(pd->pd_bcache); in efipart_close()
953 pd->pd_bcache = NULL; in efipart_close()
956 if (dev->dd.d_dev->dv_type == DEVT_DISK) in efipart_close()
965 pdinfo_t *pd; in efipart_ioctl() local
968 dev = (struct disk_devdesc *)(f->f_devdata); in efipart_ioctl()
972 pd = efiblk_get_pdinfo((struct devdesc *)dev); in efipart_ioctl()
973 if (pd == NULL) in efipart_ioctl()
976 if (dev->dd.d_dev->dv_type == DEVT_DISK) { in efipart_ioctl()
984 *(u_int *)data = pd->pd_blkio->Media->BlockSize; in efipart_ioctl()
987 *(uint64_t *)data = pd->pd_blkio->Media->BlockSize * in efipart_ioctl()
988 (pd->pd_blkio->Media->LastBlock + 1); in efipart_ioctl()
1000 * media-native block size. This function expects all I/O requests
1014 if (blk < 0 || blk > blkio->Media->LastBlock) in efipart_readwrite()
1016 if ((blk + nblks - 1) > blkio->Media->LastBlock) in efipart_readwrite()
1021 status = blkio->ReadBlocks(blkio, blkio->Media->MediaId, blk, in efipart_readwrite()
1022 nblks * blkio->Media->BlockSize, buf); in efipart_readwrite()
1025 if (blkio->Media->ReadOnly) in efipart_readwrite()
1027 status = blkio->WriteBlocks(blkio, blkio->Media->MediaId, blk, in efipart_readwrite()
1028 nblks * blkio->Media->BlockSize, buf); in efipart_readwrite()
1048 pdinfo_t *pd; in efipart_strategy() local
1054 pd = efiblk_get_pdinfo((struct devdesc *)dev); in efipart_strategy()
1055 if (pd == NULL) in efipart_strategy()
1058 if (pd->pd_blkio->Media->RemovableMedia && in efipart_strategy()
1059 !pd->pd_blkio->Media->MediaPresent) in efipart_strategy()
1064 bcd.dv_cache = pd->pd_bcache; in efipart_strategy()
1066 if (dev->dd.d_dev->dv_type == DEVT_DISK) { in efipart_strategy()
1069 offset = dev->d_offset * pd->pd_blkio->Media->BlockSize; in efipart_strategy()
1082 pdinfo_t *pd; in efipart_realstrategy() local
1095 pd = efiblk_get_pdinfo((struct devdesc *)dev); in efipart_realstrategy()
1096 if (pd == NULL) in efipart_realstrategy()
1099 blkio = pd->pd_blkio; in efipart_realstrategy()
1112 if (dev->dd.d_dev->dv_type == DEVT_DISK) { in efipart_realstrategy()
1115 disk_blocks /= blkio->Media->BlockSize; in efipart_realstrategy()
1117 d_offset = dev->d_offset; in efipart_realstrategy()
1120 disk_blocks = blkio->Media->LastBlock + 1 - d_offset; in efipart_realstrategy()
1123 if ((off + size) / blkio->Media->BlockSize > d_offset + disk_blocks) { in efipart_realstrategy()
1125 readstart = off / blkio->Media->BlockSize; in efipart_realstrategy()
1133 size = diskend - readstart; in efipart_realstrategy()
1134 size = size * blkio->Media->BlockSize; in efipart_realstrategy()
1139 if ((size % blkio->Media->BlockSize == 0) && in efipart_realstrategy()
1140 (off % blkio->Media->BlockSize == 0)) in efipart_realstrategy()
1144 ioalign = blkio->Media->IoAlign; in efipart_realstrategy()
1153 bio_size -= blkio->Media->BlockSize) { in efipart_realstrategy()
1170 blk = off / blkio->Media->BlockSize; in efipart_realstrategy()
1171 blkoff = off % blkio->Media->BlockSize; in efipart_realstrategy()
1176 if (x < blkio->Media->BlockSize) in efipart_realstrategy()
1179 x /= blkio->Media->BlockSize; in efipart_realstrategy()
1183 blksz = blkio->Media->BlockSize * x - blkoff; in efipart_realstrategy()
1202 blksz = blkio->Media->BlockSize - blkoff; in efipart_realstrategy()
1206 } else if (size < blkio->Media->BlockSize) { in efipart_realstrategy()
1217 blksz = blkio->Media->BlockSize * x; in efipart_realstrategy()
1240 size -= blksz; in efipart_realstrategy()
1246 *rsize -= size; in efipart_realstrategy()