]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/aacraid/aacraid.h
[SCSI] Merge up to linux-2.6 head
[linux-2.6-omap-h63xx.git] / drivers / scsi / aacraid / aacraid.h
index 39ecd0d22eb0dcc5e1b6397ec98ee84903a0c8da..fdbedb17d03bf4adf1c2066621a402f2a61f7c1f 100644 (file)
@@ -12,8 +12,8 @@
  *----------------------------------------------------------------------------*/
 
 #ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 2423
-# define AAC_DRIVER_BRANCH "-mh3"
+# define AAC_DRIVER_BUILD 2437
+# define AAC_DRIVER_BRANCH "-mh4"
 #endif
 #define MAXIMUM_NUM_CONTAINERS 32
 
@@ -48,49 +48,13 @@ struct diskparm
 
 
 /*
- *     DON'T CHANGE THE ORDER, this is set by the firmware
+ *     Firmware constants
  */
  
 #define                CT_NONE                 0
-#define                CT_VOLUME               1
-#define                CT_MIRROR               2
-#define                CT_STRIPE               3
-#define                CT_RAID5                4
-#define                CT_SSRW                 5
-#define                CT_SSRO                 6
-#define                CT_MORPH                7
-#define                CT_PASSTHRU             8
-#define                CT_RAID4                9
-#define                CT_RAID10               10      /* stripe of mirror */
-#define                CT_RAID00               11      /* stripe of stripe */
-#define                CT_VOLUME_OF_MIRRORS    12      /* volume of mirror */
-#define                CT_PSEUDO_RAID          13      /* really raid4 */
-#define                CT_LAST_VOLUME_TYPE     14
 #define        CT_OK                   218
-
-/*
- *     Types of objects addressable in some fashion by the client.
- *     This is a superset of those objects handled just by the filesystem
- *     and includes "raw" objects that an administrator would use to
- *     configure containers and filesystems.
- */
-
-#define                FT_REG          1       /* regular file */
-#define                FT_DIR          2       /* directory */
-#define                FT_BLK          3       /* "block" device - reserved */
-#define                FT_CHR          4       /* "character special" device - reserved */
-#define                FT_LNK          5       /* symbolic link */
-#define                FT_SOCK         6       /* socket */
-#define                FT_FIFO         7       /* fifo */
 #define                FT_FILESYS      8       /* ADAPTEC's "FSA"(tm) filesystem */
 #define                FT_DRIVE        9       /* physical disk - addressable in scsi by bus/id/lun */
-#define                FT_SLICE        10      /* virtual disk - raw volume - slice */
-#define                FT_PARTITION    11      /* FSA partition - carved out of a slice - building block for containers */
-#define                FT_VOLUME       12      /* Container - Volume Set */
-#define                FT_STRIPE       13      /* Container - Stripe Set */
-#define                FT_MIRROR       14      /* Container - Mirror Set */
-#define                FT_RAID5        15      /* Container - Raid 5 Set */
-#define                FT_DATABASE     16      /* Storage object with "foreign" content manager */
 
 /*
  *     Host side memory scatter gather list
@@ -497,14 +461,15 @@ struct adapter_ops
        void (*adapter_enable_int)(struct aac_dev *dev);
        int  (*adapter_sync_cmd)(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 *r1, u32 *r2, u32 *r3, u32 *r4);
        int  (*adapter_check_health)(struct aac_dev *dev);
+       int  (*adapter_restart)(struct aac_dev *dev, int bled);
        /* Transport operations */
        int  (*adapter_ioremap)(struct aac_dev * dev, u32 size);
-       irqreturn_t (*adapter_intr)(int irq, void *dev_id);
+       irq_handler_t adapter_intr;
        /* Packet operations */
        int  (*adapter_deliver)(struct fib * fib);
        int  (*adapter_bounds)(struct aac_dev * dev, struct scsi_cmnd * cmd, u64 lba);
        int  (*adapter_read)(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u32 count);
-       int  (*adapter_write)(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u32 count);
+       int  (*adapter_write)(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u32 count, int fua);
        int  (*adapter_scsi)(struct fib * fib, struct scsi_cmnd * cmd);
        /* Administrative operations */
        int  (*adapter_comm)(struct aac_dev * dev, int comm);
@@ -833,7 +798,7 @@ struct fib {
         */
        struct list_head        fiblink;
        void                    *data;
-       struct hw_fib           *hw_fib;                /* Actual shared object */
+       struct hw_fib           *hw_fib_va;             /* Actual shared object */
        dma_addr_t              hw_fib_pa;              /* physical address of hw_fib*/
 };
 
@@ -878,10 +843,25 @@ struct aac_supplement_adapter_info
        __le32  Version;
        __le32  FeatureBits;
        u8      SlotNumber;
-       u8      ReservedPad0[0];
+       u8      ReservedPad0[3];
        u8      BuildDate[12];
        __le32  CurrentNumberPorts;
-       __le32  ReservedGrowth[24];
+       struct {
+               u8      AssemblyPn[8];
+               u8      FruPn[8];
+               u8      BatteryFruPn[8];
+               u8      EcVersionString[8];
+               u8      Tsid[12];
+       }       VpdInfo;
+       __le32  FlashFirmwareRevision;
+       __le32  FlashFirmwareBuild;
+       __le32  RaidTypeMorphOptions;
+       __le32  FlashFirmwareBootRevision;
+       __le32  FlashFirmwareBootBuild;
+       u8      MfgPcbaSerialNo[12];
+       u8      MfgWWNName[8];
+       __le32  MoreFeatureBits;
+       __le32  ReservedGrowth[1];
 };
 #define AAC_FEATURE_FALCON     0x00000010
 #define AAC_SIS_VERSION_V3     3
@@ -970,7 +950,6 @@ struct aac_dev
        struct fib              *fibs;
 
        struct fib              *free_fib;
-       struct fib              *timeout_fib;
        spinlock_t              fib_lock;
        
        struct aac_queue_block *queues;
@@ -1060,6 +1039,9 @@ struct aac_dev
 #define aac_adapter_check_health(dev) \
        (dev)->a_ops.adapter_check_health(dev)
 
+#define aac_adapter_restart(dev,bled) \
+       (dev)->a_ops.adapter_restart(dev,bled)
+
 #define aac_adapter_ioremap(dev, size) \
        (dev)->a_ops.adapter_ioremap(dev, size)
 
@@ -1072,8 +1054,8 @@ struct aac_dev
 #define aac_adapter_read(fib,cmd,lba,count) \
        ((fib)->dev)->a_ops.adapter_read(fib,cmd,lba,count)
 
-#define aac_adapter_write(fib,cmd,lba,count) \
-       ((fib)->dev)->a_ops.adapter_write(fib,cmd,lba,count)
+#define aac_adapter_write(fib,cmd,lba,count,fua) \
+       ((fib)->dev)->a_ops.adapter_write(fib,cmd,lba,count,fua)
 
 #define aac_adapter_scsi(fib,cmd) \
        ((fib)->dev)->a_ops.adapter_scsi(fib,cmd)
@@ -1231,6 +1213,9 @@ struct aac_write64
        __le32          block;
        __le16          pad;
        __le16          flags;
+#define        IO_TYPE_WRITE 0x00000000
+#define        IO_TYPE_READ  0x00000001
+#define        IO_SUREWRITE  0x00000008
        struct sgmap64  sg;     // Must be last in struct because it is variable
 };
 struct aac_write_reply
@@ -1516,8 +1501,7 @@ struct aac_mntent {
        struct creation_info    create_info;    /* if applicable */
        __le32                  capacity;
        __le32                  vol;            /* substrate structure */
-       __le32                  obj;            /* FT_FILESYS, 
-                                                  FT_DATABASE, etc. */
+       __le32                  obj;            /* FT_FILESYS, etc. */
        __le32                  state;          /* unready for mounting, 
                                                   readonly, etc. */
        union aac_contentinfo   fileinfo;       /* Info specific to content 
@@ -1817,7 +1801,7 @@ int aac_fib_send(u16 command, struct fib * context, unsigned long size, int prio
 int aac_consumer_get(struct aac_dev * dev, struct aac_queue * q, struct aac_entry **entry);
 void aac_consumer_free(struct aac_dev * dev, struct aac_queue * q, u32 qnum);
 int aac_fib_complete(struct fib * context);
-#define fib_data(fibctx) ((void *)(fibctx)->hw_fib->data)
+#define fib_data(fibctx) ((void *)(fibctx)->hw_fib_va->data)
 struct aac_dev *aac_init_adapter(struct aac_dev *dev);
 int aac_get_config_status(struct aac_dev *dev, int commit_flag);
 int aac_get_containers(struct aac_dev *dev);
@@ -1840,8 +1824,14 @@ struct aac_driver_ident* aac_get_driver_ident(int devtype);
 int aac_get_adapter_info(struct aac_dev* dev);
 int aac_send_shutdown(struct aac_dev *dev);
 int aac_probe_container(struct aac_dev *dev, int cid);
+int _aac_rx_init(struct aac_dev *dev);
+int aac_rx_select_comm(struct aac_dev *dev, int comm);
+int aac_rx_deliver_producer(struct fib * fib);
 extern int numacb;
 extern int acbsize;
 extern char aac_driver_version[];
 extern int startup_timeout;
 extern int aif_timeout;
+extern int expose_physicals;
+extern int aac_reset_devices;
+extern int aac_commit;