drivers/usb/net/kaweth.c: add device "Allied Telesyn AT-USB10 USB Ethernet Adapter"
[safe/jmp/linux-2.6] / drivers / scsi / hpsa_cmd.h
index 12d7138..56fb982 100644 (file)
@@ -23,7 +23,8 @@
 
 /* general boundary defintions */
 #define SENSEINFOBYTES          32 /* may vary between hbas */
-#define MAXSGENTRIES            31
+#define MAXSGENTRIES            32
+#define HPSA_SG_CHAIN          0x80000000
 #define MAXREPLYQS              256
 
 /* Command Status value */
 #define CFGTBL_AccCmds          0x00000001l
 
 #define CFGTBL_Trans_Simple     0x00000002l
+#define CFGTBL_Trans_Performant 0x00000004l
 
 #define CFGTBL_BusType_Ultra2   0x00000001l
 #define CFGTBL_BusType_Ultra3   0x00000002l
 #define CFGTBL_BusType_Fibre1G  0x00000100l
 #define CFGTBL_BusType_Fibre2G  0x00000200l
 struct vals32 {
-       __u32   lower;
-       __u32   upper;
+       u32   lower;
+       u32   upper;
 };
 
 union u64bit {
        struct vals32 val32;
-       __u64 val;
+       u64 val;
 };
 
 /* FIXME this is a per controller value (barf!) */
@@ -126,34 +128,34 @@ union u64bit {
 
 #define HPSA_INQUIRY 0x12
 struct InquiryData {
-       __u8 data_byte[36];
+       u8 data_byte[36];
 };
 
 #define HPSA_REPORT_LOG 0xc2    /* Report Logical LUNs */
 #define HPSA_REPORT_PHYS 0xc3   /* Report Physical LUNs */
 struct ReportLUNdata {
-       __u8 LUNListLength[4];
-       __u32 reserved;
-       __u8 LUN[HPSA_MAX_LUN][8];
+       u8 LUNListLength[4];
+       u32 reserved;
+       u8 LUN[HPSA_MAX_LUN][8];
 };
 
 struct ReportExtendedLUNdata {
-       __u8 LUNListLength[4];
-       __u8 extended_response_flag;
-       __u8 reserved[3];
-       __u8 LUN[HPSA_MAX_LUN][24];
+       u8 LUNListLength[4];
+       u8 extended_response_flag;
+       u8 reserved[3];
+       u8 LUN[HPSA_MAX_LUN][24];
 };
 
 struct SenseSubsystem_info {
-       __u8 reserved[36];
-       __u8 portname[8];
-       __u8 reserved1[1108];
+       u8 reserved[36];
+       u8 portname[8];
+       u8 reserved1[1108];
 };
 
 #define HPSA_READ_CAPACITY 0x25 /* Read Capacity */
 struct ReadCapdata {
-       __u8 total_size[4];     /* Total size in blocks */
-       __u8 block_size[4];     /* Size of blocks in bytes */
+       u8 total_size[4];       /* Total size in blocks */
+       u8 block_size[4];       /* Size of blocks in bytes */
 };
 
 #if 0
@@ -174,152 +176,202 @@ struct ReadCapdata {
 /* Command List Structure */
 union SCSI3Addr {
        struct {
-               __u8 Dev;
-               __u8 Bus:6;
-               __u8 Mode:2;        /* b00 */
+               u8 Dev;
+               u8 Bus:6;
+               u8 Mode:2;        /* b00 */
        } PeripDev;
        struct {
-               __u8 DevLSB;
-               __u8 DevMSB:6;
-               __u8 Mode:2;        /* b01 */
+               u8 DevLSB;
+               u8 DevMSB:6;
+               u8 Mode:2;        /* b01 */
        } LogDev;
        struct {
-               __u8 Dev:5;
-               __u8 Bus:3;
-               __u8 Targ:6;
-               __u8 Mode:2;        /* b10 */
+               u8 Dev:5;
+               u8 Bus:3;
+               u8 Targ:6;
+               u8 Mode:2;        /* b10 */
        } LogUnit;
 };
 
 struct PhysDevAddr {
-       __u32             TargetId:24;
-       __u32             Bus:6;
-       __u32             Mode:2;
+       u32             TargetId:24;
+       u32             Bus:6;
+       u32             Mode:2;
        /* 2 level target device addr */
        union SCSI3Addr  Target[2];
 };
 
 struct LogDevAddr {
-       __u32            VolId:30;
-       __u32            Mode:2;
-       __u8             reserved[4];
+       u32            VolId:30;
+       u32            Mode:2;
+       u8             reserved[4];
 };
 
 union LUNAddr {
-       __u8               LunAddrBytes[8];
+       u8               LunAddrBytes[8];
        union SCSI3Addr    SCSI3Lun[4];
        struct PhysDevAddr PhysDev;
        struct LogDevAddr  LogDev;
 };
 
 struct CommandListHeader {
-       __u8              ReplyQueue;
-       __u8              SGList;
-       __u16             SGTotal;
+       u8              ReplyQueue;
+       u8              SGList;
+       u16             SGTotal;
        struct vals32     Tag;
        union LUNAddr     LUN;
 };
 
 struct RequestBlock {
-       __u8   CDBLen;
+       u8   CDBLen;
        struct {
-               __u8 Type:3;
-               __u8 Attribute:3;
-               __u8 Direction:2;
+               u8 Type:3;
+               u8 Attribute:3;
+               u8 Direction:2;
        } Type;
-       __u16  Timeout;
-       __u8   CDB[16];
+       u16  Timeout;
+       u8   CDB[16];
 };
 
 struct ErrDescriptor {
        struct vals32 Addr;
-       __u32  Len;
+       u32  Len;
 };
 
 struct SGDescriptor {
        struct vals32 Addr;
-       __u32  Len;
-       __u32  Ext;
+       u32  Len;
+       u32  Ext;
 };
 
 union MoreErrInfo {
        struct {
-               __u8  Reserved[3];
-               __u8  Type;
-               __u32 ErrorInfo;
+               u8  Reserved[3];
+               u8  Type;
+               u32 ErrorInfo;
        } Common_Info;
        struct {
-               __u8  Reserved[2];
-               __u8  offense_size; /* size of offending entry */
-               __u8  offense_num;  /* byte # of offense 0-base */
-               __u32 offense_value;
+               u8  Reserved[2];
+               u8  offense_size; /* size of offending entry */
+               u8  offense_num;  /* byte # of offense 0-base */
+               u32 offense_value;
        } Invalid_Cmd;
 };
 struct ErrorInfo {
-       __u8               ScsiStatus;
-       __u8               SenseLen;
-       __u16              CommandStatus;
-       __u32              ResidualCnt;
+       u8               ScsiStatus;
+       u8               SenseLen;
+       u16              CommandStatus;
+       u32              ResidualCnt;
        union MoreErrInfo  MoreErrInfo;
-       __u8               SenseInfo[SENSEINFOBYTES];
+       u8               SenseInfo[SENSEINFOBYTES];
 };
 /* Command types */
 #define CMD_IOCTL_PEND  0x01
 #define CMD_SCSI       0x03
 
+/* This structure needs to be divisible by 32 for new
+ * indexing method and performant mode.
+ */
+#define PAD32 32
+#define PAD64DIFF 0
+#define USEEXTRA ((sizeof(void *) - 4)/4)
+#define PADSIZE (PAD32 + PAD64DIFF * USEEXTRA)
+
+#define DIRECT_LOOKUP_SHIFT 5
+#define DIRECT_LOOKUP_BIT 0x10
+
+#define HPSA_ERROR_BIT          0x02
 struct ctlr_info; /* defined in hpsa.h */
-/* The size of this structure needs to be divisible by 8
- * od on all architectures, because the controller uses 2
- * lower bits of the address, and the driver uses 1 lower
- * bit (3 bits total.)
+/* The size of this structure needs to be divisible by 32
+ * on all architectures because low 5 bits of the addresses
+ * are used as follows:
+ *
+ * bit 0: to device, used to indicate "performant mode" command
+ *        from device, indidcates error status.
+ * bit 1-3: to device, indicates block fetch table entry for
+ *          reducing DMA in fetching commands from host memory.
+ * bit 4: used to indicate whether tag is "direct lookup" (index),
+ *        or a bus address.
  */
+
 struct CommandList {
        struct CommandListHeader Header;
        struct RequestBlock      Request;
        struct ErrDescriptor     ErrDesc;
        struct SGDescriptor      SG[MAXSGENTRIES];
        /* information associated with the command */
-       __u32                      busaddr; /* physical addr of this record */
+       u32                        busaddr; /* physical addr of this record */
        struct ErrorInfo *err_info; /* pointer to the allocated mem */
        struct ctlr_info           *h;
        int                        cmd_type;
        long                       cmdindex;
        struct hlist_node list;
-       struct CommandList *prev;
-       struct CommandList *next;
        struct request *rq;
        struct completion *waiting;
-       int      retry_count;
        void   *scsi_cmd;
+
+/* on 64 bit architectures, to get this to be 32-byte-aligned
+ * it so happens we need PAD_64 bytes of padding, on 32 bit systems,
+ * we need PAD_32 bytes of padding (see below).   This does that.
+ * If it happens that 64 bit and 32 bit systems need different
+ * padding, PAD_32 and PAD_64 can be set independently, and.
+ * the code below will do the right thing.
+ */
+#define IS_32_BIT ((8 - sizeof(long))/4)
+#define IS_64_BIT (!IS_32_BIT)
+#define PAD_32 (4)
+#define PAD_64 (4)
+#define COMMANDLIST_PAD (IS_32_BIT * PAD_32 + IS_64_BIT * PAD_64)
+       u8 pad[COMMANDLIST_PAD];
 };
 
 /* Configuration Table Structure */
 struct HostWrite {
-       __u32 TransportRequest;
-       __u32 Reserved;
-       __u32 CoalIntDelay;
-       __u32 CoalIntCount;
+       u32 TransportRequest;
+       u32 Reserved;
+       u32 CoalIntDelay;
+       u32 CoalIntCount;
 };
 
+#define SIMPLE_MODE     0x02
+#define PERFORMANT_MODE 0x04
+#define MEMQ_MODE       0x08
+
 struct CfgTable {
-       __u8             Signature[4];
-       __u32            SpecValence;
-       __u32            TransportSupport;
-       __u32            TransportActive;
-       struct HostWrite HostWrite;
-       __u32            CmdsOutMax;
-       __u32            BusTypes;
-       __u32            Reserved;
-       __u8             ServerName[16];
-       __u32            HeartBeat;
-       __u32            SCSI_Prefetch;
+       u8            Signature[4];
+       u32             SpecValence;
+       u32           TransportSupport;
+       u32           TransportActive;
+       struct          HostWrite HostWrite;
+       u32           CmdsOutMax;
+       u32           BusTypes;
+       u32           TransMethodOffset;
+       u8            ServerName[16];
+       u32           HeartBeat;
+       u32           SCSI_Prefetch;
+       u32             MaxScatterGatherElements;
+       u32             MaxLogicalUnits;
+       u32             MaxPhysicalDevices;
+       u32             MaxPhysicalDrivesPerLogicalUnit;
+       u32             MaxPerformantModeCommands;
+};
+
+#define NUM_BLOCKFETCH_ENTRIES 8
+struct TransTable_struct {
+       u32            BlockFetch[NUM_BLOCKFETCH_ENTRIES];
+       u32            RepQSize;
+       u32            RepQCount;
+       u32            RepQCtrAddrLow32;
+       u32            RepQCtrAddrHigh32;
+       u32            RepQAddr0Low32;
+       u32            RepQAddr0High32;
 };
 
 struct hpsa_pci_info {
        unsigned char   bus;
        unsigned char   dev_fn;
        unsigned short  domain;
-       __u32           board_id;
+       u32             board_id;
 };
 
 #pragma pack()