From: David Kershner david.kersh...@unisys.com
This driver create a host bus adapter device when s-Par sends a
device create message to create a storage adapter on the visorbus.
When the message is received by visorbus, the visorhba_probe function
is called and the hba device is created and managed by the visorhba
driver.
Signed-off-by: Erik Arfvidson erik.arfvid...@unisys.com
Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
Signed-off-by: David Kershner david.kersh...@unisys.com
---
v2:
* address comments from Greg, Jes, Dan, and David Milburn
---
drivers/staging/unisys/Kconfig |1 +
drivers/staging/unisys/Makefile |1 +
drivers/staging/unisys/include/iochannel.h | 26 +-
drivers/staging/unisys/visorhba/Kconfig | 14 +
drivers/staging/unisys/visorhba/Makefile| 10 +
drivers/staging/unisys/visorhba/visorhba_main.c | 1241 +++
6 files changed, 1280 insertions(+), 13 deletions(-)
create mode 100644 drivers/staging/unisys/visorhba/Kconfig
create mode 100644 drivers/staging/unisys/visorhba/Makefile
create mode 100644 drivers/staging/unisys/visorhba/visorhba_main.c
diff --git a/drivers/staging/unisys/Kconfig b/drivers/staging/unisys/Kconfig
index ca850a8..5cbb791 100644
--- a/drivers/staging/unisys/Kconfig
+++ b/drivers/staging/unisys/Kconfig
@@ -14,5 +14,6 @@ if UNISYSSPAR
source drivers/staging/unisys/visorbus/Kconfig
source drivers/staging/unisys/visornic/Kconfig
source drivers/staging/unisys/visorhid/Kconfig
+source drivers/staging/unisys/visorhba/Kconfig
endif # UNISYSSPAR
diff --git a/drivers/staging/unisys/Makefile b/drivers/staging/unisys/Makefile
index d071094..79c9036 100644
--- a/drivers/staging/unisys/Makefile
+++ b/drivers/staging/unisys/Makefile
@@ -4,3 +4,4 @@
obj-$(CONFIG_UNISYS_VISORBUS) += visorbus/
obj-$(CONFIG_UNISYS_VISORNIC) += visornic/
obj-$(CONFIG_UNISYS_VISORHID) += visorhid/
+obj-$(CONFIG_UNISYS_VISORHBA) += visorhba/
diff --git a/drivers/staging/unisys/include/iochannel.h
b/drivers/staging/unisys/include/iochannel.h
index a559812..14e656f 100644
--- a/drivers/staging/unisys/include/iochannel.h
+++ b/drivers/staging/unisys/include/iochannel.h
@@ -147,6 +147,10 @@ struct phys_info {
u16 pi_len;
} __packed;
+#define MIN_NUMSIGNALS 64
+
+/* structs with pragma pack */
+
struct guest_phys_info {
u64 address;
u64 length;
@@ -183,7 +187,7 @@ struct vhba_config_max {/* 20 bytes */
} __packed;
struct uiscmdrsp_scsi {
- void *scsicmd; /* the handle to the cmd that was received -
+ u64 handle; /* the handle to the cmd that was received -
* send it back as is in the rsp packet. */
u8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */
u32 bufflen;/* length of data to be transferred out or in */
@@ -437,24 +441,22 @@ struct uiscmdrsp_scsitaskmgmt {
struct uisscsi_dest vdest;
/* the vdisk for which this task mgmt is generated */
- void *scsicmd;
+ u64 handle;
- /* This is some handle that the guest has saved off for its own use.
+ /* This is a handle that the guest has saved off for its own use.
* Its value is preserved by iopart returned as is in the task
* mgmt rsp.
*/
- void *notify;
+ u64 notify_handle;
/* For linux guests, this is a pointer to wait_queue_head that a
* thread is waiting on to see if the taskmgmt command has completed.
- * For windows guests, this is a pointer to a location that a waiting
- * thread is testing to see if the taskmgmt command has completed.
* When the rsp is received by guest, the thread receiving the
* response uses this to notify the thread waiting for taskmgmt
* command completion. Its value is preserved by iopart returned
* as is in the task mgmt rsp.
*/
- void *notifyresult;
+ u64 notifyresult_handle;
/* this is a handle to location in guest where the result of the
* taskmgmt command (result field) is to saved off when the response
@@ -486,24 +488,22 @@ struct uiscmdrsp_vdiskmgmt {
struct uisscsi_dest vdest;
/* the vdisk for which this task mgmt is generated */
- void *scsicmd;
+ u64 handle;
- /* This is some handle that the guest has saved off for its own use.
+ /* This is a handle that the guest has saved off for its own use.
* Its value is preserved by iopart returned as is in the task
* mgmt rsp.
*/
- void *notify;
+ u64 notify_handle;
/* For linux guests, this is a pointer to wait_queue_head that a
* thread is waiting on to see if the tskmgmt command has completed.
-* For win32