#include <dm/uclass-internal.h>
#if !defined(CONFIG_DM_SCSI)
-#ifdef CONFIG_SCSI_DEV_LIST
-#define SCSI_DEV_LIST CONFIG_SCSI_DEV_LIST
-#else
-#ifdef CONFIG_SATA_ULI5288
-
-#define SCSI_VEND_ID 0x10b9
-#define SCSI_DEV_ID 0x5288
-
-#elif !defined(CONFIG_SCSI_AHCI_PLAT)
-#error no scsi device defined
-#endif
-#define SCSI_DEV_LIST {SCSI_VEND_ID, SCSI_DEV_ID}
-#endif
+# ifdef CONFIG_SCSI_DEV_LIST
+# define SCSI_DEV_LIST CONFIG_SCSI_DEV_LIST
+# else
+# ifdef CONFIG_SATA_ULI5288
+
+# define SCSI_VEND_ID 0x10b9
+# define SCSI_DEV_ID 0x5288
+
+# elif !defined(CONFIG_SCSI_AHCI_PLAT)
+# error no scsi device defined
+# endif
+# define SCSI_DEV_LIST {SCSI_VEND_ID, SCSI_DEV_ID}
+# endif
#endif
#if defined(CONFIG_PCI) && !defined(CONFIG_SCSI_AHCI_PLAT)
const struct pci_device_id scsi_device_list[] = { SCSI_DEV_LIST };
#endif
-static ccb tempccb; /* temporary scsi command buffer */
+static struct scsi_cmd tempccb; /* temporary scsi command buffer */
static unsigned char tempbuff[512]; /* temporary data buffer */
#define SCSI_MAX_READ_BLK 0xFFFF
#define SCSI_LBA48_READ 0xFFFFFFF
-static void scsi_print_error(ccb *pccb)
+static void scsi_print_error(struct scsi_cmd *pccb)
{
/* Dummy function that could print an error for debugging */
}
#ifdef CONFIG_SYS_64BIT_LBA
-void scsi_setup_read16(ccb *pccb, lbaint_t start, unsigned long blocks)
+void scsi_setup_read16(struct scsi_cmd *pccb, lbaint_t start,
+ unsigned long blocks)
{
pccb->cmd[0] = SCSI_READ16;
pccb->cmd[1] = pccb->lun << 5;
}
#endif
-static void scsi_setup_read_ext(ccb *pccb, lbaint_t start,
+static void scsi_setup_read_ext(struct scsi_cmd *pccb, lbaint_t start,
unsigned short blocks)
{
pccb->cmd[0] = SCSI_READ10;
pccb->cmd[7], pccb->cmd[8]);
}
-static void scsi_setup_write_ext(ccb *pccb, lbaint_t start,
+static void scsi_setup_write_ext(struct scsi_cmd *pccb, lbaint_t start,
unsigned short blocks)
{
pccb->cmd[0] = SCSI_WRITE10;
pccb->cmd[7], pccb->cmd[8]);
}
-static void scsi_setup_inquiry(ccb *pccb)
+static void scsi_setup_inquiry(struct scsi_cmd *pccb)
{
pccb->cmd[0] = SCSI_INQUIRY;
pccb->cmd[1] = pccb->lun << 5;
{
#ifdef CONFIG_BLK
struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+ struct udevice *bdev = dev->parent;
+#else
+ struct udevice *bdev = NULL;
#endif
lbaint_t start, blks;
uintptr_t buf_addr;
unsigned short smallblks = 0;
- ccb *pccb = (ccb *)&tempccb;
+ struct scsi_cmd *pccb = (struct scsi_cmd *)&tempccb;
/* Setup device */
pccb->target = block_dev->target;
debug("scsi_read_ext: startblk " LBAF
", blccnt %x buffer %" PRIXPTR "\n",
start, smallblks, buf_addr);
- if (scsi_exec(pccb) != true) {
+ if (scsi_exec(bdev, pccb)) {
scsi_print_error(pccb);
blkcnt -= blks;
break;
{
#ifdef CONFIG_BLK
struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+ struct udevice *bdev = dev->parent;
+#else
+ struct udevice *bdev = NULL;
#endif
lbaint_t start, blks;
uintptr_t buf_addr;
unsigned short smallblks;
- ccb *pccb = (ccb *)&tempccb;
+ struct scsi_cmd *pccb = (struct scsi_cmd *)&tempccb;
/* Setup device */
pccb->target = block_dev->target;
}
debug("%s: startblk " LBAF ", blccnt %x buffer %" PRIXPTR "\n",
__func__, start, smallblks, buf_addr);
- if (scsi_exec(pccb) != true) {
+ if (scsi_exec(bdev, pccb)) {
scsi_print_error(pccb);
blkcnt -= blks;
break;
*dest = '\0';
}
-static int scsi_read_capacity(ccb *pccb, lbaint_t *capacity,
- unsigned long *blksz)
+static int scsi_read_capacity(struct udevice *dev, struct scsi_cmd *pccb,
+ lbaint_t *capacity, unsigned long *blksz)
{
*capacity = 0;
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
pccb->datalen = 8;
- if (scsi_exec(pccb) != true)
+ if (scsi_exec(dev, pccb) != true)
return 1;
*capacity = ((lbaint_t)pccb->pdata[0] << 24) |
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
pccb->datalen = 16;
- if (scsi_exec(pccb) != true)
+ if (scsi_exec(dev, pccb) != true)
return 1;
*capacity = ((uint64_t)pccb->pdata[0] << 56) |
/*
* Some setup (fill-in) routines
*/
-static void scsi_setup_test_unit_ready(ccb *pccb)
+static void scsi_setup_test_unit_ready(struct scsi_cmd *pccb)
{
pccb->cmd[0] = SCSI_TST_U_RDY;
pccb->cmd[1] = pccb->lun << 5;
*
* Return: 0 on success, error value otherwise
*/
-static int scsi_detect_dev(int target, int lun, struct blk_desc *dev_desc)
+static int scsi_detect_dev(struct udevice *dev, int target, int lun,
+ struct blk_desc *dev_desc)
{
unsigned char perq, modi;
lbaint_t capacity;
unsigned long blksz;
- ccb *pccb = (ccb *)&tempccb;
+ struct scsi_cmd *pccb = (struct scsi_cmd *)&tempccb;
pccb->target = target;
pccb->lun = lun;
pccb->pdata = (unsigned char *)&tempbuff;
pccb->datalen = 512;
scsi_setup_inquiry(pccb);
- if (scsi_exec(pccb) != true) {
+ if (scsi_exec(dev, pccb) != true) {
if (pccb->contr_stat == SCSI_SEL_TIME_OUT) {
/*
* selection timeout => assuming no
pccb->datalen = 0;
scsi_setup_test_unit_ready(pccb);
- if (scsi_exec(pccb) != true) {
+ if (scsi_exec(dev, pccb) != true) {
if (dev_desc->removable) {
dev_desc->type = perq;
goto removable;
scsi_print_error(pccb);
return -EINVAL;
}
- if (scsi_read_capacity(pccb, &capacity, &blksz)) {
+ if (scsi_read_capacity(dev, pccb, &capacity, &blksz)) {
scsi_print_error(pccb);
return -EINVAL;
}
* size, number of blocks) and other parameters (ids, type, ...)
*/
scsi_init_dev_desc_priv(&bd);
- if (scsi_detect_dev(id, lun, &bd))
+ if (scsi_detect_dev(dev, id, lun, &bd))
return -ENODEV;
/*
return ret;
/* Get controller platdata */
- plat = dev_get_platdata(dev);
+ plat = dev_get_uclass_platdata(dev);
for (i = 0; i < plat->max_id; i++)
for (lun = 0; lun < plat->max_lun; lun++)
scsi_max_devs = 0;
for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
for (lun = 0; lun < CONFIG_SYS_SCSI_MAX_LUN; lun++) {
- ret = scsi_detect_dev(i, lun,
+ ret = scsi_detect_dev(NULL, i, lun,
&scsi_dev_desc[scsi_max_devs]);
if (ret)
continue;