// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2015 Google, Inc * Written by Simon Glass * Copyright (c) 2016 Xilinx, Inc * Written by Michal Simek * * Based on ahci-uclass.c */ #define LOG_CATEGORY UCLASS_SCSI #include #include #include #include int scsi_exec(struct udevice *dev, struct scsi_cmd *pccb) { struct scsi_ops *ops = scsi_get_ops(dev); if (!ops->exec) return -ENOSYS; return ops->exec(dev, pccb); } int scsi_get_blk_by_uuid(const char *uuid, struct blk_desc **blk_desc_ptr, struct disk_partition *part_info_ptr) { static int is_scsi_scanned; struct blk_desc *blk; int i, ret; if (!is_scsi_scanned) { scsi_scan(false /* no verbose */); is_scsi_scanned = 1; } for (i = 0; i < blk_find_max_devnum(UCLASS_SCSI) + 1; i++) { ret = blk_get_desc(UCLASS_SCSI, i, &blk); if (ret) continue; ret = part_get_info_by_uuid(blk, uuid, part_info_ptr); if (ret > 0) { *blk_desc_ptr = blk; return 0; } } return -1; } int scsi_bus_reset(struct udevice *dev) { struct scsi_ops *ops = scsi_get_ops(dev); if (!ops->bus_reset) return -ENOSYS; return ops->bus_reset(dev); } UCLASS_DRIVER(scsi) = { .id = UCLASS_SCSI, .name = "scsi", .per_device_plat_auto = sizeof(struct scsi_plat), };