Merge branch 'pm-cpuidle'
[linux-block.git] / drivers / scsi / qla2xxx / qla_mr.h
index cc327dc2fd10467cfe46171bde6be2edcbcbcc67..79a93c52baec54b828f65cdeb7f602269a0a7724 100644 (file)
@@ -24,10 +24,10 @@ struct cmd_type_7_fx00 {
        uint32_t handle;                /* System handle. */
        uint32_t handle_hi;
 
-       uint16_t tgt_idx;               /* Target Idx. */
+       __le16 tgt_idx;         /* Target Idx. */
        uint16_t timeout;               /* Command timeout. */
 
-       uint16_t dseg_count;            /* Data segment count. */
+       __le16 dseg_count;              /* Data segment count. */
        uint16_t scsi_rsp_dsd_len;
 
        struct scsi_lun lun;            /* LUN (LE). */
@@ -41,7 +41,7 @@ struct cmd_type_7_fx00 {
        uint8_t crn;
 
        uint8_t fcp_cdb[MAX_CMDSZ];     /* SCSI command words. */
-       uint32_t byte_count;            /* Total byte count. */
+       __le32 byte_count;              /* Total byte count. */
 
        uint32_t dseg_0_address[2];     /* Data segment 0 address. */
        uint32_t dseg_0_len;            /* Data segment 0 length. */
@@ -81,16 +81,16 @@ struct sts_entry_fx00 {
        uint32_t handle;                /* System handle. */
        uint32_t handle_hi;             /* System handle. */
 
-       uint16_t comp_status;           /* Completion status. */
+       __le16 comp_status;             /* Completion status. */
        uint16_t reserved_0;            /* OX_ID used by the firmware. */
 
-       uint32_t residual_len;          /* FW calc residual transfer length. */
+       __le32 residual_len;            /* FW calc residual transfer length. */
 
        uint16_t reserved_1;
        uint16_t state_flags;           /* State flags. */
 
        uint16_t reserved_2;
-       uint16_t scsi_status;           /* SCSI status. */
+       __le16 scsi_status;             /* SCSI status. */
 
        uint32_t sense_len;             /* FCP SENSE length. */
        uint8_t data[32];               /* FCP response/sense information. */
@@ -106,7 +106,7 @@ struct multi_sts_entry_fx00 {
        uint8_t handle_count;
        uint8_t entry_status;
 
-       uint32_t handles[MAX_HANDLE_COUNT];
+       __le32 handles[MAX_HANDLE_COUNT];
 };
 
 #define TSK_MGMT_IOCB_TYPE_FX00                0x05
@@ -116,21 +116,21 @@ struct tsk_mgmt_entry_fx00 {
        uint8_t sys_define;
        uint8_t entry_status;           /* Entry Status. */
 
-       uint32_t handle;                /* System handle. */
+       __le32 handle;          /* System handle. */
 
        uint32_t handle_hi;             /* System handle. */
 
-       uint16_t tgt_id;                /* Target Idx. */
+       __le16 tgt_id;          /* Target Idx. */
 
        uint16_t reserved_1;
 
        uint16_t delay;                 /* Activity delay in seconds. */
 
-       uint16_t timeout;               /* Command timeout. */
+       __le16 timeout;         /* Command timeout. */
 
        struct scsi_lun lun;            /* LUN (LE). */
 
-       uint32_t control_flags;         /* Control Flags. */
+       __le32 control_flags;           /* Control Flags. */
 
        uint8_t reserved_2[32];
 };
@@ -143,16 +143,16 @@ struct abort_iocb_entry_fx00 {
        uint8_t sys_define;             /* System defined. */
        uint8_t entry_status;           /* Entry Status. */
 
-       uint32_t handle;                /* System handle. */
-       uint32_t handle_hi;             /* System handle. */
+       __le32 handle;          /* System handle. */
+       __le32 handle_hi;               /* System handle. */
 
-       uint16_t tgt_id_sts;            /* Completion status. */
-       uint16_t options;
+       __le16 tgt_id_sts;              /* Completion status. */
+       __le16 options;
 
-       uint32_t abort_handle;          /* System handle. */
-       uint32_t abort_handle_hi;       /* System handle. */
+       __le32 abort_handle;            /* System handle. */
+       __le32 abort_handle_hi; /* System handle. */
 
-       uint16_t req_que_no;
+       __le16 req_que_no;
        uint8_t reserved_1[38];
 };
 
@@ -167,17 +167,17 @@ struct ioctl_iocb_entry_fx00 {
        uint32_t reserved_0;            /* System handle. */
 
        uint16_t comp_func_num;
-       uint16_t fw_iotcl_flags;
+       __le16 fw_iotcl_flags;
 
-       uint32_t dataword_r;            /* Data word returned */
+       __le32 dataword_r;              /* Data word returned */
        uint32_t adapid;                /* Adapter ID */
        uint32_t adapid_hi;             /* Adapter ID high */
        uint32_t reserved_1;
 
-       uint32_t seq_no;
+       __le32 seq_no;
        uint8_t reserved_2[20];
        uint32_t residuallen;
-       uint32_t status;
+       __le32 status;
 };
 
 #define STATUS_CONT_TYPE_FX00 0x04
@@ -189,26 +189,26 @@ struct fxdisc_entry_fx00 {
        uint8_t sys_define;             /* System Defined. */
        uint8_t entry_status;           /* Entry Status. */
 
-       uint32_t handle;                /* System handle. */
-       uint32_t reserved_0;            /* System handle. */
+       __le32 handle;          /* System handle. */
+       __le32 reserved_0;              /* System handle. */
 
-       uint16_t func_num;
-       uint16_t req_xfrcnt;
-       uint16_t req_dsdcnt;
-       uint16_t rsp_xfrcnt;
-       uint16_t rsp_dsdcnt;
+       __le16 func_num;
+       __le16 req_xfrcnt;
+       __le16 req_dsdcnt;
+       __le16 rsp_xfrcnt;
+       __le16 rsp_dsdcnt;
        uint8_t flags;
        uint8_t reserved_1;
 
-       uint32_t dseg_rq_address[2];    /* Data segment 0 address. */
-       uint32_t dseg_rq_len;           /* Data segment 0 length. */
-       uint32_t dseg_rsp_address[2];   /* Data segment 1 address. */
-       uint32_t dseg_rsp_len;          /* Data segment 1 length. */
+       __le32 dseg_rq_address[2];      /* Data segment 0 address. */
+       __le32 dseg_rq_len;             /* Data segment 0 length. */
+       __le32 dseg_rsp_address[2];     /* Data segment 1 address. */
+       __le32 dseg_rsp_len;            /* Data segment 1 length. */
 
-       uint32_t dataword;
-       uint32_t adapid;
-       uint32_t adapid_hi;
-       uint32_t dataword_extra;
+       __le32 dataword;
+       __le32 adapid;
+       __le32 adapid_hi;
+       __le32 dataword_extra;
 };
 
 struct qlafx00_tgt_node_info {
@@ -329,11 +329,13 @@ struct config_info_data {
        uint64_t        adapter_id;
 
        uint32_t        cluster_key_len;
-       uint8_t         cluster_key[10];
+       uint8_t         cluster_key[16];
 
        uint64_t        cluster_master_id;
        uint64_t        cluster_slave_id;
        uint8_t         cluster_flags;
+       uint32_t        enabled_capabilities;
+       uint32_t        nominal_temp_value;
 } __packed;
 
 #define FXDISC_GET_CONFIG_INFO         0x01
@@ -342,10 +344,11 @@ struct config_info_data {
 #define FXDISC_GET_TGT_NODE_LIST       0x81
 #define FXDISC_REG_HOST_INFO           0x99
 
-#define QLAFX00_HBA_ICNTRL_REG         0x21B08
+#define QLAFX00_HBA_ICNTRL_REG         0x20B08
 #define QLAFX00_ICR_ENB_MASK            0x80000000
 #define QLAFX00_ICR_DIS_MASK            0x7fffffff
 #define QLAFX00_HST_RST_REG            0x18264
+#define QLAFX00_SOC_TEMP_REG           0x184C4
 #define QLAFX00_HST_TO_HBA_REG         0x20A04
 #define QLAFX00_HBA_TO_HOST_REG                0x21B70
 #define QLAFX00_HST_INT_STS_BITS       0x7
@@ -361,6 +364,9 @@ struct config_info_data {
 #define QLAFX00_INTR_ALL_CMPLT         0x7
 
 #define QLAFX00_MBA_SYSTEM_ERR         0x8002
+#define QLAFX00_MBA_TEMP_OVER          0x8005
+#define QLAFX00_MBA_TEMP_NORM          0x8006
+#define        QLAFX00_MBA_TEMP_CRIT           0x8007
 #define QLAFX00_MBA_LINK_UP            0x8011
 #define QLAFX00_MBA_LINK_DOWN          0x8012
 #define QLAFX00_MBA_PORT_UPDATE                0x8014
@@ -421,43 +427,45 @@ struct config_info_data {
        WRT_REG_DWORD((ha)->cregbase + off, val)
 
 struct qla_mt_iocb_rqst_fx00 {
-       uint32_t reserved_0;
+       __le32 reserved_0;
 
-       uint16_t func_type;
+       __le16 func_type;
        uint8_t flags;
        uint8_t reserved_1;
 
-       uint32_t dataword;
+       __le32 dataword;
 
-       uint32_t adapid;
-       uint32_t adapid_hi;
+       __le32 adapid;
+       __le32 adapid_hi;
 
-       uint32_t dataword_extra;
+       __le32 dataword_extra;
 
-       uint32_t req_len;
+       __le16 req_len;
+       __le16 reserved_2;
 
-       uint32_t rsp_len;
+       __le16 rsp_len;
+       __le16 reserved_3;
 };
 
 struct qla_mt_iocb_rsp_fx00 {
        uint32_t reserved_1;
 
        uint16_t func_type;
-       uint16_t ioctl_flags;
+       __le16 ioctl_flags;
 
-       uint32_t ioctl_data;
+       __le32 ioctl_data;
 
        uint32_t adapid;
        uint32_t adapid_hi;
 
        uint32_t reserved_2;
-       uint32_t seq_number;
+       __le32 seq_number;
 
        uint8_t reserved_3[20];
 
        int32_t res_count;
 
-       uint32_t status;
+       __le32 status;
 };
 
 
@@ -499,12 +507,37 @@ struct mr_data_fx00 {
        uint32_t old_fw_hbt_cnt;
        uint16_t fw_reset_timer_tick;
        uint8_t fw_reset_timer_exp;
+       uint16_t fw_critemp_timer_tick;
        uint32_t old_aenmbx0_state;
+       uint32_t critical_temperature;
+       bool extended_io_enabled;
 };
 
+#define QLAFX00_EXTENDED_IO_EN_MASK    0x20
+
+/*
+ * SoC Junction Temperature is stored in
+ * bits 9:1 of SoC Junction Temperature Register
+ * in a firmware specific format format.
+ * To get the temperature in Celsius degrees
+ * the value from this bitfiled should be converted
+ * using this formula:
+ * Temperature (degrees C) = ((3,153,000 - (10,000 * X)) / 13,825)
+ * where X is the bit field value
+ * this macro reads the register, extracts the bitfield value,
+ * performs the calcualtions and returns temperature in Celsius
+ */
+#define QLAFX00_GET_TEMPERATURE(ha) ((3153000 - (10000 * \
+       ((QLAFX00_RD_REG(ha, QLAFX00_SOC_TEMP_REG) & 0x3FE) >> 1))) / 13825)
+
+
 #define QLAFX00_LOOP_DOWN_TIME         615     /* 600 */
 #define QLAFX00_HEARTBEAT_INTERVAL     6       /* number of seconds */
 #define QLAFX00_HEARTBEAT_MISS_CNT     3       /* number of miss */
 #define QLAFX00_RESET_INTERVAL         120     /* number of seconds */
 #define QLAFX00_MAX_RESET_INTERVAL     600     /* number of seconds */
+#define QLAFX00_CRITEMP_INTERVAL       60      /* number of seconds */
+
+#define QLAFX00_CRITEMP_THRSHLD                80      /* Celsius degrees */
+
 #endif