summaryrefslogtreecommitdiff
path: root/include/scsi.h
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2016-09-08 15:06:45 +0200
committerMichal Simek <michal.simek@xilinx.com>2016-12-20 09:15:27 +0100
commite8a016b53731bba820246c9509ce8ef74c944560 (patch)
treeb9382ac0cd9f4dcd9cb8cfae459770d09ea4d43f /include/scsi.h
parent720ba46e71b09d379a3590a4a35c35d5938338b5 (diff)
dm: Add support for scsi/sata based devices
All sata based drivers are bind and corresponding block device is created. Based on this find_scsi_device() is able to get back block device based on scsi_curr_dev pointer. intr_scsi() is commented now but it can be replaced by calling find_scsi_device() and scsi_scan(). scsi_dev_desc[] is commented out but common/scsi.c heavily depends on it. That's why CONFIG_SYS_SCSI_MAX_DEVICE is hardcoded to 1 and symbol is reassigned to a block description allocated by uclass. There is only one block description by device now but it doesn't need to be correct when more devices are present. scsi_bind() ensures corresponding block device creation. uclass post_probe (scsi_post_probe()) is doing low level init. SCSI/SATA DM based drivers requires to have 64bit base address as the first entry in platform data structure to setup mmio_base. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/scsi.h')
-rw-r--r--include/scsi.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/include/scsi.h b/include/scsi.h
index c8796785a4..190dacd0f2 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -166,8 +166,11 @@ typedef struct SCSI_cmd_block{
void scsi_print_error(ccb *pccb);
int scsi_exec(ccb *pccb);
void scsi_bus_reset(void);
+#if !defined(CONFIG_DM_SCSI)
void scsi_low_level_init(int busdevfunc);
-
+#else
+void scsi_low_level_init(int busdevfunc, struct udevice *dev);
+#endif
/***************************************************************************
* functions residing inside cmd_scsi.c
@@ -175,6 +178,21 @@ void scsi_low_level_init(int busdevfunc);
void scsi_init(void);
int scsi_scan(int mode);
+#if defined(CONFIG_DM_SCSI)
+/**
+ * struct scsi_platdata - stores information about SCSI controller
+ *
+ * @base: Controller base address
+ * @max_lun: Maximum number of logical units
+ * @max_id: Maximum number of target ids
+ */
+struct scsi_platdata {
+ unsigned long base;
+ unsigned long max_lun;
+ unsigned long max_id;
+};
+#endif
+
#define SCSI_IDENTIFY 0xC0 /* not used */
/* Hardware errors */