Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[pandora-kernel.git] / drivers / scsi / megaraid / megaraid_sas.h
index cacb3ad..6466bdf 100644 (file)
@@ -2,7 +2,7 @@
  *
  *             Linux MegaRAID driver for SAS based RAID controllers
  *
- * Copyright (c) 2003-2005  LSI Logic Corporation.
+ * Copyright (c) 2003-2005  LSI Corporation.
  *
  *             This program is free software; you can redistribute it and/or
  *             modify it under the terms of the GNU General Public License
@@ -18,9 +18,9 @@
 /*
  * MegaRAID SAS Driver meta data
  */
-#define MEGASAS_VERSION                                "00.00.03.05"
-#define MEGASAS_RELDATE                                "Oct 02, 2006"
-#define MEGASAS_EXT_VERSION                    "Mon Oct 02 11:21:32 PDT 2006"
+#define MEGASAS_VERSION                                "00.00.03.16-rc1"
+#define MEGASAS_RELDATE                                "Nov. 07, 2007"
+#define MEGASAS_EXT_VERSION                    "Thu. Nov. 07 10:09:32 PDT 2007"
 
 /*
  * Device IDs
 #define MR_FLUSH_DISK_CACHE                    0x02
 
 #define MR_DCMD_CTRL_SHUTDOWN                  0x01050000
+#define MR_DCMD_HIBERNATE_SHUTDOWN             0x01060000
 #define MR_ENABLE_DRIVE_SPINDOWN               0x01
 
 #define MR_DCMD_CTRL_EVENT_GET_INFO            0x01040100
@@ -539,6 +540,8 @@ struct megasas_ctrl_info {
 
 #define MEGASAS_DBG_LVL                                1
 
+#define MEGASAS_FW_BUSY                                1
+
 /*
  * When SCSI mid-layer calls driver's reset routine, driver waits for
  * MEGASAS_RESET_WAIT_TIME seconds for all outstanding IO to complete. Note
@@ -549,8 +552,8 @@ struct megasas_ctrl_info {
 #define MEGASAS_RESET_WAIT_TIME                        180
 #define MEGASAS_INTERNAL_CMD_WAIT_TIME         180
 #define        MEGASAS_RESET_NOTICE_INTERVAL           5
-
 #define MEGASAS_IOCTL_CMD                      0
+#define MEGASAS_DEFAULT_CMD_TIMEOUT            90
 
 /*
  * FW reports the maximum of number of commands that it can accept (maximum
@@ -568,7 +571,8 @@ struct megasas_ctrl_info {
 #define IS_DMA64                               (sizeof(dma_addr_t) == 8)
 
 #define MFI_OB_INTR_STATUS_MASK                        0x00000002
-#define MFI_POLL_TIMEOUT_SECS                  10
+#define MFI_POLL_TIMEOUT_SECS                  60
+#define MEGASAS_COMPLETION_TIMER_INTERVAL      (HZ/10)
 
 #define MFI_REPLY_1078_MESSAGE_INTERRUPT       0x80000000
 
@@ -1073,7 +1077,6 @@ struct megasas_instance {
        struct megasas_register_set __iomem *reg_set;
 
        s8 init_id;
-       u8 reserved[3];
 
        u16 max_num_sge;
        u16 max_fw_cmds;
@@ -1082,13 +1085,15 @@ struct megasas_instance {
        struct megasas_cmd **cmd_list;
        struct list_head cmd_pool;
        spinlock_t cmd_pool_lock;
+       /* used to synch producer, consumer ptrs in dpc */
+       spinlock_t completion_lock;
        struct dma_pool *frame_dma_pool;
        struct dma_pool *sense_dma_pool;
 
        struct megasas_evt_detail *evt_detail;
        dma_addr_t evt_detail_h;
        struct megasas_cmd *aen_cmd;
-       struct semaphore aen_mutex;
+       struct mutex aen_mutex;
        struct semaphore ioctl_sem;
 
        struct Scsi_Host *host;
@@ -1104,6 +1109,11 @@ struct megasas_instance {
 
        struct megasas_instance_template *instancet;
        struct tasklet_struct isr_tasklet;
+
+       u8 flag;
+       unsigned long last_time;
+
+       struct timer_list io_completion_timer;
 };
 
 #define MEGASAS_IS_LOGICAL(scp)                                                \