Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
megaraid_mbox.h
Go to the documentation of this file.
1 /*
2  *
3  * Linux MegaRAID device driver
4  *
5  * Copyright (c) 2003-2004 LSI Logic Corporation.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version
10  * 2 of the License, or (at your option) any later version.
11  *
12  * FILE : megaraid_mbox.h
13  */
14 
15 #ifndef _MEGARAID_H_
16 #define _MEGARAID_H_
17 
18 
19 #include "mega_common.h"
20 #include "mbox_defs.h"
21 #include "megaraid_ioctl.h"
22 
23 
24 #define MEGARAID_VERSION "2.20.5.1"
25 #define MEGARAID_EXT_VERSION "(Release Date: Thu Nov 16 15:32:35 EST 2006)"
26 
27 
28 /*
29  * Define some PCI values here until they are put in the kernel
30  */
31 #define PCI_DEVICE_ID_PERC4_DI_DISCOVERY 0x000E
32 #define PCI_SUBSYS_ID_PERC4_DI_DISCOVERY 0x0123
33 
34 #define PCI_DEVICE_ID_PERC4_SC 0x1960
35 #define PCI_SUBSYS_ID_PERC4_SC 0x0520
36 
37 #define PCI_DEVICE_ID_PERC4_DC 0x1960
38 #define PCI_SUBSYS_ID_PERC4_DC 0x0518
39 
40 #define PCI_DEVICE_ID_VERDE 0x0407
41 
42 #define PCI_DEVICE_ID_PERC4_DI_EVERGLADES 0x000F
43 #define PCI_SUBSYS_ID_PERC4_DI_EVERGLADES 0x014A
44 
45 #define PCI_DEVICE_ID_PERC4E_SI_BIGBEND 0x0013
46 #define PCI_SUBSYS_ID_PERC4E_SI_BIGBEND 0x016c
47 
48 #define PCI_DEVICE_ID_PERC4E_DI_KOBUK 0x0013
49 #define PCI_SUBSYS_ID_PERC4E_DI_KOBUK 0x016d
50 
51 #define PCI_DEVICE_ID_PERC4E_DI_CORVETTE 0x0013
52 #define PCI_SUBSYS_ID_PERC4E_DI_CORVETTE 0x016e
53 
54 #define PCI_DEVICE_ID_PERC4E_DI_EXPEDITION 0x0013
55 #define PCI_SUBSYS_ID_PERC4E_DI_EXPEDITION 0x016f
56 
57 #define PCI_DEVICE_ID_PERC4E_DI_GUADALUPE 0x0013
58 #define PCI_SUBSYS_ID_PERC4E_DI_GUADALUPE 0x0170
59 
60 #define PCI_DEVICE_ID_DOBSON 0x0408
61 
62 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_0 0x1960
63 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_0 0xA520
64 
65 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_1 0x1960
66 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_1 0x0520
67 
68 #define PCI_DEVICE_ID_MEGARAID_SCSI_320_2 0x1960
69 #define PCI_SUBSYS_ID_MEGARAID_SCSI_320_2 0x0518
70 
71 #define PCI_DEVICE_ID_MEGARAID_I4_133_RAID 0x1960
72 #define PCI_SUBSYS_ID_MEGARAID_I4_133_RAID 0x0522
73 
74 #define PCI_DEVICE_ID_MEGARAID_SATA_150_4 0x1960
75 #define PCI_SUBSYS_ID_MEGARAID_SATA_150_4 0x4523
76 
77 #define PCI_DEVICE_ID_MEGARAID_SATA_150_6 0x1960
78 #define PCI_SUBSYS_ID_MEGARAID_SATA_150_6 0x0523
79 
80 #define PCI_DEVICE_ID_LINDSAY 0x0409
81 
82 #define PCI_DEVICE_ID_INTEL_RAID_SRCS16 0x1960
83 #define PCI_SUBSYS_ID_INTEL_RAID_SRCS16 0x0523
84 
85 #define PCI_DEVICE_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK 0x1960
86 #define PCI_SUBSYS_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK 0x0520
87 
88 #define PCI_SUBSYS_ID_PERC3_QC 0x0471
89 #define PCI_SUBSYS_ID_PERC3_DC 0x0493
90 #define PCI_SUBSYS_ID_PERC3_SC 0x0475
91 #define PCI_SUBSYS_ID_CERC_ATA100_4CH 0x0511
92 
93 
94 #define MBOX_MAX_SCSI_CMDS 128 // number of cmds reserved for kernel
95 #define MBOX_MAX_USER_CMDS 32 // number of cmds for applications
96 #define MBOX_DEF_CMD_PER_LUN 64 // default commands per lun
97 #define MBOX_DEFAULT_SG_SIZE 26 // default sg size supported by all fw
98 #define MBOX_MAX_SG_SIZE 32 // maximum scatter-gather list size
99 #define MBOX_MAX_SECTORS 128 // maximum sectors per IO
100 #define MBOX_TIMEOUT 30 // timeout value for internal cmds
101 #define MBOX_BUSY_WAIT 10 // max usec to wait for busy mailbox
102 #define MBOX_RESET_WAIT 180 // wait these many seconds in reset
103 #define MBOX_RESET_EXT_WAIT 120 // extended wait reset
104 #define MBOX_SYNC_WAIT_CNT 0xFFFF // wait loop index for synchronous mode
105 
106 #define MBOX_SYNC_DELAY_200 200 // 200 micro-seconds
107 
108 /*
109  * maximum transfer that can happen through the firmware commands issued
110  * internnaly from the driver.
111  */
112 #define MBOX_IBUF_SIZE 4096
113 
114 
132 typedef struct {
134  mbox_t *mbox;
135  mbox64_t *mbox64;
137  mbox_sgl64 *sgl64;
138  mbox_sgl32 *sgl32;
140  mraid_passthru_t *pthru;
142  mraid_epassthru_t *epthru;
145 } mbox_ccb_t;
146 
147 
187 #define MAX_LD_EXTENDED64 64
188 typedef struct {
189  mbox64_t *una_mbox64;
191  mbox_t *mbox;
192  mbox64_t *mbox64;
195  unsigned long baseport;
199  struct mraid_pci_blk epthru_pool[MBOX_MAX_SCSI_CMDS];
205  mbox64_t umbox64[MBOX_MAX_USER_CMDS];
206 
209  int hw_error;
212  struct mutex sysfs_mtx;
213  uioc_t *sysfs_uioc;
214  mbox64_t *sysfs_mbox64;
221 
222 // route to raid device from adapter
223 #define ADAP2RAIDDEV(adp) ((mraid_device_t *)((adp)->raid_device))
224 
225 #define MAILBOX_LOCK(rdev) (&(rdev)->mailbox_lock)
226 
227 // Find out if this channel is a RAID or SCSI
228 #define IS_RAID_CH(rdev, ch) (((rdev)->channel_class >> (ch)) & 0x01)
229 
230 
231 #define RDINDOOR(rdev) readl((rdev)->baseaddr + 0x20)
232 #define RDOUTDOOR(rdev) readl((rdev)->baseaddr + 0x2C)
233 #define WRINDOOR(rdev, value) writel(value, (rdev)->baseaddr + 0x20)
234 #define WROUTDOOR(rdev, value) writel(value, (rdev)->baseaddr + 0x2C)
235 
236 #endif // _MEGARAID_H_
237 
238 // vim: set ts=8 sw=8 tw=78: