[SCSI] qla4xxx: Add support to display CHAP list and delete CHAP entry
[cascardo/linux.git] / drivers / scsi / qla4xxx / ql4_def.h
index bfe6854..0b24876 100644 (file)
 #define QL4_SESS_RECOVERY_TMO          120     /* iSCSI session */
                                                /* recovery timeout */
 
-#define MSB(x) ((uint8_t)((uint16_t)(x) >> 8))
-#define LSW(x) ((uint16_t)(x))
 #define LSDW(x) ((u32)((u64)(x)))
 #define MSDW(x) ((u32)((((u64)(x)) >> 16) >> 16))
 
@@ -223,6 +221,15 @@ struct srb {
        uint16_t reserved2;
 };
 
+/* Mailbox request block structure */
+struct mrb {
+       struct scsi_qla_host *ha;
+       struct mbox_cmd_iocb *mbox;
+       uint32_t mbox_cmd;
+       uint16_t iocb_cnt;              /* Number of used iocbs */
+       uint32_t pid;
+};
+
 /*
  * Asynchronous Event Queue structure
  */
@@ -265,7 +272,7 @@ struct ddb_entry {
                                           * retried */
        uint32_t default_time2wait;       /* Default Min time between
                                           * relogins (+aens) */
-
+       uint16_t chap_tbl_idx;
 };
 
 struct qla_ddb_index {
@@ -303,7 +310,28 @@ struct ql4_tuple_ddb {
 #define DF_ISNS_DISCOVERED     2       /* Device was discovered via iSNS */
 #define DF_FO_MASKED           3
 
+enum qla4_work_type {
+       QLA4_EVENT_AEN,
+       QLA4_EVENT_PING_STATUS,
+};
 
+struct qla4_work_evt {
+       struct list_head list;
+       enum qla4_work_type type;
+       union {
+               struct {
+                       enum iscsi_host_event_code code;
+                       uint32_t data_size;
+                       uint8_t data[0];
+               } aen;
+               struct {
+                       uint32_t status;
+                       uint32_t pid;
+                       uint32_t data_size;
+                       uint8_t data[0];
+               } ping;
+       } u;
+};
 
 struct ql82xx_hw_data {
        /* Offsets for flash/nvram access (set to ~0 if not used). */
@@ -657,6 +685,7 @@ struct scsi_qla_host {
        struct dma_pool *chap_dma_pool;
        uint8_t *chap_list; /* CHAP table cache */
        struct mutex  chap_sem;
+
 #define CHAP_DMA_BLOCK_SIZE    512
        struct workqueue_struct *task_wq;
        unsigned long ddb_idx_map[MAX_DDB_ENTRIES / BITS_PER_LONG];
@@ -674,6 +703,15 @@ struct scsi_qla_host {
        uint16_t sec_ddb_idx;
        int is_reset;
        uint16_t temperature;
+
+       /* event work list */
+       struct list_head work_list;
+       spinlock_t work_lock;
+
+       /* mbox iocb */
+#define MAX_MRB                128
+       struct mrb *active_mrb_array[MAX_MRB];
+       uint32_t mrb_index;
 };
 
 struct ql4_task_data {