[SCSI] megaraid_sas: Add 9565/9285 specific code
[pandora-kernel.git] / drivers / scsi / megaraid / megaraid_sas.h
index ad16f5e..1b5e375 100644 (file)
@@ -1,15 +1,30 @@
 /*
+ *  Linux MegaRAID driver for SAS based RAID controllers
  *
- *             Linux MegaRAID driver for SAS based RAID controllers
+ *  Copyright (c) 2009-2011  LSI 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
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
  *
- *             This program is free software; you can redistribute it and/or
- *             modify it under the terms of the GNU General Public License
- *             as published by the Free Software Foundation; either version
- *             2 of the License, or (at your option) any later version.
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
  *
- * FILE                : megaraid_sas.h
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *  FILE: megaraid_sas.h
+ *
+ *  Authors: LSI Corporation
+ *
+ *  Send feedback to: <megaraidlinux@lsi.com>
+ *
+ *  Mail to: LSI Corporation, 1621 Barber Lane, Milpitas, CA 95035
+ *     ATTN: Linuxraid
  */
 
 #ifndef LSI_MEGARAID_SAS_H
@@ -18,9 +33,9 @@
 /*
  * MegaRAID SAS Driver meta data
  */
-#define MEGASAS_VERSION                        "00.00.04.31-rc1"
-#define MEGASAS_RELDATE                        "May 3, 2010"
-#define MEGASAS_EXT_VERSION            "Mon. May 3, 11:41:51 PST 2010"
+#define MEGASAS_VERSION                                "00.00.05.29-rc1"
+#define MEGASAS_RELDATE                                "Dec. 7, 2010"
+#define MEGASAS_EXT_VERSION                    "Tue. Dec. 7 17:00:00 PDT 2010"
 
 /*
  * Device IDs
@@ -32,6 +47,7 @@
 #define        PCI_DEVICE_ID_LSI_SAS0079GEN2           0x0079
 #define        PCI_DEVICE_ID_LSI_SAS0073SKINNY         0x0073
 #define        PCI_DEVICE_ID_LSI_SAS0071SKINNY         0x0071
+#define        PCI_DEVICE_ID_LSI_FUSION                0x005b
 
 /*
  * =====================================
@@ -421,7 +437,6 @@ struct megasas_ctrl_prop {
        * Add properties that can be controlled by
        * a bit in the following structure.
        */
-
        struct {
                u32     copyBackDisabled            : 1;
                u32     SMARTerEnabled              : 1;
@@ -701,6 +716,7 @@ struct megasas_ctrl_info {
 #define MEGASAS_DEFAULT_INIT_ID                        -1
 #define MEGASAS_MAX_LUN                                8
 #define MEGASAS_MAX_LD                         64
+#define MEGASAS_DEFAULT_CMD_PER_LUN            128
 #define MEGASAS_MAX_PD                          (MEGASAS_MAX_PD_CHANNELS * \
                                                MEGASAS_MAX_DEV_PER_CHANNEL)
 #define MEGASAS_MAX_LD_IDS                     (MEGASAS_MAX_LD_CHANNELS * \
@@ -769,7 +785,10 @@ struct megasas_ctrl_info {
 */
  
 struct megasas_register_set {
-       u32     reserved_0[4];                  /*0000h*/
+       u32     doorbell;                       /*0000h*/
+       u32     fusion_seq_offset;              /*0004h*/
+       u32     fusion_host_diag;               /*0008h*/
+       u32     reserved_01;                    /*000Ch*/
 
        u32     inbound_msg_0;                  /*0010h*/
        u32     inbound_msg_1;                  /*0014h*/
@@ -789,15 +808,18 @@ struct megasas_register_set {
        u32     inbound_queue_port;             /*0040h*/
        u32     outbound_queue_port;            /*0044h*/
 
-       u32     reserved_2[22];                 /*0048h*/
+       u32     reserved_2[9];                  /*0048h*/
+       u32     reply_post_host_index;          /*006Ch*/
+       u32     reserved_2_2[12];               /*0070h*/
 
        u32     outbound_doorbell_clear;        /*00A0h*/
 
        u32     reserved_3[3];                  /*00A4h*/
 
        u32     outbound_scratch_pad ;          /*00B0h*/
+       u32     outbound_scratch_pad_2;         /*00B4h*/
 
-       u32     reserved_4[3];                  /*00B4h*/
+       u32     reserved_4[2];                  /*00B8h*/
 
        u32     inbound_low_queue_port ;        /*00C0h*/
 
@@ -1272,6 +1294,9 @@ struct megasas_instance {
 
        u16 max_num_sge;
        u16 max_fw_cmds;
+       /* For Fusion its num IOCTL cmds, for others MFI based its
+          max_fw_cmds */
+       u16 max_mfi_cmds;
        u32 max_sectors_per_req;
        struct megasas_aen_event *ev;
 
@@ -1320,6 +1345,16 @@ struct megasas_instance {
 
        struct timer_list io_completion_timer;
        struct list_head internal_reset_pending_q;
+
+       /* Ptr to hba specfic information */
+       void *ctrl_context;
+       u8      msi_flag;
+       struct msix_entry msixentry;
+       u64 map_id;
+       struct megasas_cmd *map_update_cmd;
+       unsigned long bar;
+       long reset_flags;
+       struct mutex reset_mutex;
 };
 
 enum {
@@ -1345,6 +1380,13 @@ struct megasas_instance_template {
                struct megasas_register_set __iomem *);
        int (*check_reset)(struct megasas_instance *, \
                struct megasas_register_set __iomem *);
+       irqreturn_t (*service_isr)(int irq, void *devp);
+       void (*tasklet)(unsigned long);
+       u32 (*init_adapter)(struct megasas_instance *);
+       u32 (*build_and_issue_cmd) (struct megasas_instance *,
+                                   struct scsi_cmnd *);
+       void (*issue_dcmd) (struct megasas_instance *instance,
+                           struct megasas_cmd *cmd);
 };
 
 #define MEGASAS_IS_LOGICAL(scp)                                                \
@@ -1371,7 +1413,13 @@ struct megasas_cmd {
        struct list_head list;
        struct scsi_cmnd *scmd;
        struct megasas_instance *instance;
-       u32 frame_count;
+       union {
+               struct {
+                       u16 smid;
+                       u16 resvd;
+               } context;
+               u32 frame_count;
+       };
 };
 
 #define MAX_MGMT_ADAPTERS              1024