0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef _MEGARAID_H_
0012 #define _MEGARAID_H_
0013
0014
0015 #include "mega_common.h"
0016 #include "mbox_defs.h"
0017 #include "megaraid_ioctl.h"
0018
0019
0020 #define MEGARAID_VERSION "2.20.5.1"
0021 #define MEGARAID_EXT_VERSION "(Release Date: Thu Nov 16 15:32:35 EST 2006)"
0022
0023
0024
0025
0026
0027 #define PCI_DEVICE_ID_PERC4_DI_DISCOVERY 0x000E
0028 #define PCI_SUBSYS_ID_PERC4_DI_DISCOVERY 0x0123
0029
0030 #define PCI_DEVICE_ID_PERC4_SC 0x1960
0031 #define PCI_SUBSYS_ID_PERC4_SC 0x0520
0032
0033 #define PCI_DEVICE_ID_PERC4_DC 0x1960
0034 #define PCI_SUBSYS_ID_PERC4_DC 0x0518
0035
0036 #define PCI_DEVICE_ID_VERDE 0x0407
0037
0038 #define PCI_DEVICE_ID_PERC4_DI_EVERGLADES 0x000F
0039 #define PCI_SUBSYS_ID_PERC4_DI_EVERGLADES 0x014A
0040
0041 #define PCI_DEVICE_ID_PERC4E_SI_BIGBEND 0x0013
0042 #define PCI_SUBSYS_ID_PERC4E_SI_BIGBEND 0x016c
0043
0044 #define PCI_DEVICE_ID_PERC4E_DI_KOBUK 0x0013
0045 #define PCI_SUBSYS_ID_PERC4E_DI_KOBUK 0x016d
0046
0047 #define PCI_DEVICE_ID_PERC4E_DI_CORVETTE 0x0013
0048 #define PCI_SUBSYS_ID_PERC4E_DI_CORVETTE 0x016e
0049
0050 #define PCI_DEVICE_ID_PERC4E_DI_EXPEDITION 0x0013
0051 #define PCI_SUBSYS_ID_PERC4E_DI_EXPEDITION 0x016f
0052
0053 #define PCI_DEVICE_ID_PERC4E_DI_GUADALUPE 0x0013
0054 #define PCI_SUBSYS_ID_PERC4E_DI_GUADALUPE 0x0170
0055
0056 #define PCI_DEVICE_ID_DOBSON 0x0408
0057
0058 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_0 0x1960
0059 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_0 0xA520
0060
0061 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_1 0x1960
0062 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_1 0x0520
0063
0064 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_2 0x1960
0065 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_2 0x0518
0066
0067 #define PCI_DEVICE_ID_MEGARAID_I4_133_RAID 0x1960
0068 #define PCI_SUBSYS_ID_MEGARAID_I4_133_RAID 0x0522
0069
0070 #define PCI_DEVICE_ID_MEGARAID_SATA_150_4 0x1960
0071 #define PCI_SUBSYS_ID_MEGARAID_SATA_150_4 0x4523
0072
0073 #define PCI_DEVICE_ID_MEGARAID_SATA_150_6 0x1960
0074 #define PCI_SUBSYS_ID_MEGARAID_SATA_150_6 0x0523
0075
0076 #define PCI_DEVICE_ID_LINDSAY 0x0409
0077
0078 #define PCI_DEVICE_ID_INTEL_RAID_SRCS16 0x1960
0079 #define PCI_SUBSYS_ID_INTEL_RAID_SRCS16 0x0523
0080
0081 #define PCI_DEVICE_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK 0x1960
0082 #define PCI_SUBSYS_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK 0x0520
0083
0084 #define PCI_SUBSYS_ID_PERC3_QC 0x0471
0085 #define PCI_SUBSYS_ID_PERC3_DC 0x0493
0086 #define PCI_SUBSYS_ID_PERC3_SC 0x0475
0087 #define PCI_SUBSYS_ID_CERC_ATA100_4CH 0x0511
0088
0089
0090 #define MBOX_MAX_SCSI_CMDS 128
0091 #define MBOX_MAX_USER_CMDS 32
0092 #define MBOX_DEF_CMD_PER_LUN 64
0093 #define MBOX_DEFAULT_SG_SIZE 26
0094 #define MBOX_MAX_SG_SIZE 32
0095 #define MBOX_MAX_SECTORS 128
0096 #define MBOX_TIMEOUT 30
0097 #define MBOX_BUSY_WAIT 10
0098 #define MBOX_RESET_WAIT 180
0099 #define MBOX_RESET_EXT_WAIT 120
0100 #define MBOX_SYNC_WAIT_CNT 0xFFFF
0101
0102 #define MBOX_SYNC_DELAY_200 200
0103
0104
0105
0106
0107
0108 #define MBOX_IBUF_SIZE 4096
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128 typedef struct {
0129 uint8_t *raw_mbox;
0130 mbox_t *mbox;
0131 mbox64_t *mbox64;
0132 dma_addr_t mbox_dma_h;
0133 mbox_sgl64 *sgl64;
0134 mbox_sgl32 *sgl32;
0135 dma_addr_t sgl_dma_h;
0136 mraid_passthru_t *pthru;
0137 dma_addr_t pthru_dma_h;
0138 mraid_epassthru_t *epthru;
0139 dma_addr_t epthru_dma_h;
0140 dma_addr_t buf_dma_h;
0141 } mbox_ccb_t;
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183 #define MAX_LD_EXTENDED64 64
0184 typedef struct {
0185 mbox64_t *una_mbox64;
0186 dma_addr_t una_mbox64_dma;
0187 mbox_t *mbox;
0188 mbox64_t *mbox64;
0189 dma_addr_t mbox_dma;
0190 spinlock_t mailbox_lock;
0191 unsigned long baseport;
0192 void __iomem * baseaddr;
0193 struct mraid_pci_blk mbox_pool[MBOX_MAX_SCSI_CMDS];
0194 struct dma_pool *mbox_pool_handle;
0195 struct mraid_pci_blk epthru_pool[MBOX_MAX_SCSI_CMDS];
0196 struct dma_pool *epthru_pool_handle;
0197 struct mraid_pci_blk sg_pool[MBOX_MAX_SCSI_CMDS];
0198 struct dma_pool *sg_pool_handle;
0199 mbox_ccb_t ccb_list[MBOX_MAX_SCSI_CMDS];
0200 mbox_ccb_t uccb_list[MBOX_MAX_USER_CMDS];
0201 mbox64_t umbox64[MBOX_MAX_USER_CMDS];
0202
0203 uint8_t pdrv_state[MBOX_MAX_PHYSICAL_DRIVES];
0204 uint32_t last_disp;
0205 int hw_error;
0206 int fast_load;
0207 uint8_t channel_class;
0208 struct mutex sysfs_mtx;
0209 uioc_t *sysfs_uioc;
0210 mbox64_t *sysfs_mbox64;
0211 caddr_t sysfs_buffer;
0212 dma_addr_t sysfs_buffer_dma;
0213 wait_queue_head_t sysfs_wait_q;
0214 int random_del_supported;
0215 uint16_t curr_ldmap[MAX_LD_EXTENDED64];
0216 } mraid_device_t;
0217
0218
0219 #define ADAP2RAIDDEV(adp) ((mraid_device_t *)((adp)->raid_device))
0220
0221 #define MAILBOX_LOCK(rdev) (&(rdev)->mailbox_lock)
0222
0223
0224 #define IS_RAID_CH(rdev, ch) (((rdev)->channel_class >> (ch)) & 0x01)
0225
0226
0227 #define RDINDOOR(rdev) readl((rdev)->baseaddr + 0x20)
0228 #define RDOUTDOOR(rdev) readl((rdev)->baseaddr + 0x2C)
0229 #define WRINDOOR(rdev, value) writel(value, (rdev)->baseaddr + 0x20)
0230 #define WROUTDOOR(rdev, value) writel(value, (rdev)->baseaddr + 0x2C)
0231
0232 #endif