Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mpt2sas_base.h
Go to the documentation of this file.
1 /*
2  * This is the Fusion MPT base driver providing common API layer interface
3  * for access to MPT (Message Passing Technology) firmware.
4  *
5  * This code is based on drivers/scsi/mpt2sas/mpt2_base.h
6  * Copyright (C) 2007-2012 LSI Corporation
7  * (mailto:[email protected])
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * NO WARRANTY
20  * THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
21  * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
22  * LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
23  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
24  * solely responsible for determining the appropriateness of using and
25  * distributing the Program and assumes all risks associated with its
26  * exercise of rights under this Agreement, including but not limited to
27  * the risks and costs of program errors, damage to or loss of data,
28  * programs or equipment, and unavailability or interruption of operations.
29 
30  * DISCLAIMER OF LIABILITY
31  * NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
32  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
34  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
35  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
36  * USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
37  * HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
38 
39  * You should have received a copy of the GNU General Public License
40  * along with this program; if not, write to the Free Software
41  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
42  * USA.
43  */
44 
45 #ifndef MPT2SAS_BASE_H_INCLUDED
46 #define MPT2SAS_BASE_H_INCLUDED
47 
48 #include "mpi/mpi2_type.h"
49 #include "mpi/mpi2.h"
50 #include "mpi/mpi2_ioc.h"
51 #include "mpi/mpi2_cnfg.h"
52 #include "mpi/mpi2_init.h"
53 #include "mpi/mpi2_raid.h"
54 #include "mpi/mpi2_tool.h"
55 #include "mpi/mpi2_sas.h"
56 
57 #include <scsi/scsi.h>
58 #include <scsi/scsi_cmnd.h>
59 #include <scsi/scsi_device.h>
60 #include <scsi/scsi_host.h>
61 #include <scsi/scsi_tcq.h>
63 #include <scsi/scsi_dbg.h>
64 #include <scsi/scsi_eh.h>
65 
66 #include "mpt2sas_debug.h"
67 
68 /* driver versioning info */
69 #define MPT2SAS_DRIVER_NAME "mpt2sas"
70 #define MPT2SAS_AUTHOR "LSI Corporation <[email protected]>"
71 #define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver"
72 #define MPT2SAS_DRIVER_VERSION "14.100.00.00"
73 #define MPT2SAS_MAJOR_VERSION 14
74 #define MPT2SAS_MINOR_VERSION 100
75 #define MPT2SAS_BUILD_VERSION 00
76 #define MPT2SAS_RELEASE_VERSION 00
77 
78 /*
79  * Set MPT2SAS_SG_DEPTH value based on user input.
80  */
81 #ifdef CONFIG_SCSI_MPT2SAS_MAX_SGE
82 #if CONFIG_SCSI_MPT2SAS_MAX_SGE < 16
83 #define MPT2SAS_SG_DEPTH 16
84 #elif CONFIG_SCSI_MPT2SAS_MAX_SGE > 128
85 #define MPT2SAS_SG_DEPTH 128
86 #else
87 #define MPT2SAS_SG_DEPTH CONFIG_SCSI_MPT2SAS_MAX_SGE
88 #endif
89 #else
90 #define MPT2SAS_SG_DEPTH 128 /* MAX_HW_SEGMENTS */
91 #endif
92 
93 
94 /*
95  * Generic Defines
96  */
97 #define MPT2SAS_SATA_QUEUE_DEPTH 32
98 #define MPT2SAS_SAS_QUEUE_DEPTH 254
99 #define MPT2SAS_RAID_QUEUE_DEPTH 128
100 
101 #define MPT_NAME_LENGTH 32 /* generic length of strings */
102 #define MPT_STRING_LENGTH 64
103 
104 #define MPT_MAX_CALLBACKS 16
105 
106 
107 #define CAN_SLEEP 1
108 #define NO_SLEEP 0
109 
110 #define INTERNAL_CMDS_COUNT 10 /* reserved cmds */
111 
112 #define MPI2_HIM_MASK 0xFFFFFFFF /* mask every bit*/
113 
114 #define MPT2SAS_INVALID_DEVICE_HANDLE 0xFFFF
115 
116 
117 /*
118  * reset phases
119  */
120 #define MPT2_IOC_PRE_RESET 1 /* prior to host reset */
121 #define MPT2_IOC_AFTER_RESET 2 /* just after host reset */
122 #define MPT2_IOC_DONE_RESET 3 /* links re-initialized */
123 
124 /*
125  * logging format
126  */
127 #define MPT2SAS_FMT "%s: "
128 #define MPT2SAS_INFO_FMT KERN_INFO MPT2SAS_FMT
129 #define MPT2SAS_NOTE_FMT KERN_NOTICE MPT2SAS_FMT
130 #define MPT2SAS_WARN_FMT KERN_WARNING MPT2SAS_FMT
131 #define MPT2SAS_ERR_FMT KERN_ERR MPT2SAS_FMT
132 
133 /*
134  * Dell HBA branding
135  */
136 #define MPT2SAS_DELL_BRANDING_SIZE 32
137 
138 #define MPT2SAS_DELL_6GBPS_SAS_HBA_BRANDING "Dell 6Gbps SAS HBA"
139 #define MPT2SAS_DELL_PERC_H200_ADAPTER_BRANDING "Dell PERC H200 Adapter"
140 #define MPT2SAS_DELL_PERC_H200_INTEGRATED_BRANDING "Dell PERC H200 Integrated"
141 #define MPT2SAS_DELL_PERC_H200_MODULAR_BRANDING "Dell PERC H200 Modular"
142 #define MPT2SAS_DELL_PERC_H200_EMBEDDED_BRANDING "Dell PERC H200 Embedded"
143 #define MPT2SAS_DELL_PERC_H200_BRANDING "Dell PERC H200"
144 #define MPT2SAS_DELL_6GBPS_SAS_BRANDING "Dell 6Gbps SAS"
145 
146 /*
147  * Dell HBA SSDIDs
148  */
149 #define MPT2SAS_DELL_6GBPS_SAS_HBA_SSDID 0x1F1C
150 #define MPT2SAS_DELL_PERC_H200_ADAPTER_SSDID 0x1F1D
151 #define MPT2SAS_DELL_PERC_H200_INTEGRATED_SSDID 0x1F1E
152 #define MPT2SAS_DELL_PERC_H200_MODULAR_SSDID 0x1F1F
153 #define MPT2SAS_DELL_PERC_H200_EMBEDDED_SSDID 0x1F20
154 #define MPT2SAS_DELL_PERC_H200_SSDID 0x1F21
155 #define MPT2SAS_DELL_6GBPS_SAS_SSDID 0x1F22
156 
157 /*
158  * Intel HBA branding
159  */
160 #define MPT2SAS_INTEL_RMS25JB080_BRANDING \
161  "Intel(R) Integrated RAID Module RMS25JB080"
162 #define MPT2SAS_INTEL_RMS25JB040_BRANDING \
163  "Intel(R) Integrated RAID Module RMS25JB040"
164 #define MPT2SAS_INTEL_RMS25KB080_BRANDING \
165  "Intel(R) Integrated RAID Module RMS25KB080"
166 #define MPT2SAS_INTEL_RMS25KB040_BRANDING \
167  "Intel(R) Integrated RAID Module RMS25KB040"
168 #define MPT2SAS_INTEL_RMS2LL080_BRANDING \
169  "Intel Integrated RAID Module RMS2LL080"
170 #define MPT2SAS_INTEL_RMS2LL040_BRANDING \
171  "Intel Integrated RAID Module RMS2LL040"
172 #define MPT2SAS_INTEL_RS25GB008_BRANDING \
173  "Intel(R) RAID Controller RS25GB008"
174 #define MPT2SAS_INTEL_SSD910_BRANDING \
175  "Intel(R) SSD 910 Series"
176 /*
177  * Intel HBA SSDIDs
178  */
179 #define MPT2SAS_INTEL_RMS25JB080_SSDID 0x3516
180 #define MPT2SAS_INTEL_RMS25JB040_SSDID 0x3517
181 #define MPT2SAS_INTEL_RMS25KB080_SSDID 0x3518
182 #define MPT2SAS_INTEL_RMS25KB040_SSDID 0x3519
183 #define MPT2SAS_INTEL_RMS2LL080_SSDID 0x350E
184 #define MPT2SAS_INTEL_RMS2LL040_SSDID 0x350F
185 #define MPT2SAS_INTEL_RS25GB008_SSDID 0x3000
186 #define MPT2SAS_INTEL_SSD910_SSDID 0x3700
187 
188 /*
189  * HP HBA branding
190  */
191 #define MPT2SAS_HP_3PAR_SSVID 0x1590
192 #define MPT2SAS_HP_2_4_INTERNAL_BRANDING "HP H220 Host Bus Adapter"
193 #define MPT2SAS_HP_2_4_EXTERNAL_BRANDING "HP H221 Host Bus Adapter"
194 #define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_BRANDING "HP H222 Host Bus Adapter"
195 #define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_BRANDING "HP H220i Host Bus Adapter"
196 #define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_BRANDING "HP H210i Host Bus Adapter"
197 
198 /*
199  * HO HBA SSDIDs
200  */
201 #define MPT2SAS_HP_2_4_INTERNAL_SSDID 0x0041
202 #define MPT2SAS_HP_2_4_EXTERNAL_SSDID 0x0042
203 #define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_SSDID 0x0043
204 #define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_SSDID 0x0044
205 #define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_SSDID 0x0046
206 
207 /*
208  * WarpDrive Specific Log codes
209  */
210 
211 #define MPT2_WARPDRIVE_LOGENTRY (0x8002)
212 #define MPT2_WARPDRIVE_LC_SSDT (0x41)
213 #define MPT2_WARPDRIVE_LC_SSDLW (0x43)
214 #define MPT2_WARPDRIVE_LC_SSDLF (0x44)
215 #define MPT2_WARPDRIVE_LC_BRMF (0x4D)
216 
217 /*
218  * per target private data
219  */
220 #define MPT_TARGET_FLAGS_RAID_COMPONENT 0x01
221 #define MPT_TARGET_FLAGS_VOLUME 0x02
222 #define MPT_TARGET_FLAGS_DELETED 0x04
223 
240  int num_luns;
244 };
245 
246 
247 /*
248  * per device private data
249  */
250 #define MPT_DEVICE_FLAGS_INIT 0x01
251 #define MPT_DEVICE_TLR_ON 0x02
252 
263 /* OEM Identifiers */
264 #define MFG10_OEM_ID_INVALID (0x00000000)
265 #define MFG10_OEM_ID_DELL (0x00000001)
266 #define MFG10_OEM_ID_FSC (0x00000002)
267 #define MFG10_OEM_ID_SUN (0x00000003)
268 #define MFG10_OEM_ID_IBM (0x00000004)
269 
270 /* GENERIC Flags 0*/
271 #define MFG10_GF0_OCE_DISABLED (0x00000001)
272 #define MFG10_GF0_R1E_DRIVE_COUNT (0x00000002)
273 #define MFG10_GF0_R10_DISPLAY (0x00000004)
274 #define MFG10_GF0_SSD_DATA_SCRUB_DISABLE (0x00000008)
275 #define MFG10_GF0_SINGLE_DRIVE_R0 (0x00000010)
276 
277 /* OEM Specific Flags will come from OEM specific header files */
278 typedef struct _MPI2_CONFIG_PAGE_MAN_10 {
280  U8 OEMIdentifier; /* 04h */
281  U8 Reserved1; /* 05h */
282  U16 Reserved2; /* 08h */
283  U32 Reserved3; /* 0Ch */
284  U32 GenericFlags0; /* 10h */
285  U32 GenericFlags1; /* 14h */
286  U32 Reserved4; /* 18h */
289  U32 Reserved5[18]; /* 24h-60h*/
293 
294 #define MFG_PAGE10_HIDE_SSDS_MASK (0x00000003)
295 #define MFG_PAGE10_HIDE_ALL_DISKS (0x00)
296 #define MFG_PAGE10_EXPOSE_ALL_DISKS (0x01)
297 #define MFG_PAGE10_HIDE_IF_VOL_PRESENT (0x02)
298 
299 
302  unsigned int lun;
307 };
308 
309 #define MPT2_CMD_NOT_USED 0x8000 /* free */
310 #define MPT2_CMD_COMPLETE 0x0001 /* completed */
311 #define MPT2_CMD_PENDING 0x0002 /* pending */
312 #define MPT2_CMD_REPLY_VALID 0x0004 /* reply is valid */
313 #define MPT2_CMD_RESET 0x0008 /* host reset dropped the command */
314 
324 struct _internal_cmd {
325  struct mutex mutex;
326  struct completion done;
327  void *reply;
328  void *sense;
331 };
332 
333 
353 struct _sas_device {
354  struct list_head list;
365  int id;
366  int channel;
370 };
371 
395 #define MPT_MAX_WARPDRIVE_PDS 8
396 struct _raid_device {
397  struct list_head list;
399  struct scsi_device *sdev;
403  int id;
404  int channel;
416 };
417 
424 struct _boot_device {
426  void *device;
427 };
428 
438 struct _sas_port {
442  struct sas_rphy *rphy;
443  struct sas_port *port;
445 };
446 
458 struct _sas_phy {
462  struct sas_phy *phy;
467 };
468 
483 struct _sas_node {
484  struct list_head list;
493  struct _sas_phy *phy;
495 };
496 
505 };
506 
517 };
518 
530  struct scsi_cmnd *scmd;
535 };
536 
547 };
548 
554 struct _tr_list {
555  struct list_head list;
558 };
559 
560 typedef void (*MPT_ADD_SGE)(void *paddr, u32 flags_length, dma_addr_t dma_addr);
561 
576  unsigned int vector;
581  struct list_head list;
582 };
583 
584 /* IOC Facts and Port Facts converted from little endian to cpu */
588 };
589 
621 };
622 
629 };
630 
639 };
640 
783  struct list_head list;
784  struct Scsi_Host *shost;
789  struct pci_dev *pdev;
795  int bars;
797 
798  /* fw fault handler */
802 
803  /* fw event handler */
808 
809  /* misc flags */
814 
819 
827 
830 
838 
839  /* internal commands, callback index */
858 
860 
861  /* event log */
864  void *event_log;
866 
867  /* static config pages */
876 
880 
881  /* sas hba, expander, and device list */
892  int sas_id;
894  void *pd_handles;
896 
897  /* config page */
899  void *config_page;
901 
902  /* scsiio request */
916 
917  /* chain */
927 
928  /* hi-priority queue */
935 
936  /* internal queue */
938  u8 *internal;
943 
944  /* sense */
948 
949  /* reply */
956 
957  /* reply free queue */
963 
964  /* reply post queue */
971 
974 
975  /* diag buffer support */
990 
991 };
992 
993 typedef u8 (*MPT_CALLBACK)(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
994  u32 reply);
995 
996 
997 /* base shared API */
998 extern struct list_head mpt2sas_ioc_list;
1001 
1002 int mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc);
1003 void mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc);
1006 int mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
1007  enum reset_type type);
1008 
1009 void *mpt2sas_base_get_msg_frame(struct MPT2SAS_ADAPTER *ioc, u16 smid);
1010 void *mpt2sas_base_get_sense_buffer(struct MPT2SAS_ADAPTER *ioc, u16 smid);
1011 void mpt2sas_base_build_zero_len_sge(struct MPT2SAS_ADAPTER *ioc, void *paddr);
1013  u16 smid);
1015 
1016 /* hi-priority queue */
1017 u16 mpt2sas_base_get_smid_hpr(struct MPT2SAS_ADAPTER *ioc, u8 cb_idx);
1019  struct scsi_cmnd *scmd);
1020 
1021 u16 mpt2sas_base_get_smid(struct MPT2SAS_ADAPTER *ioc, u8 cb_idx);
1022 void mpt2sas_base_free_smid(struct MPT2SAS_ADAPTER *ioc, u16 smid);
1023 void mpt2sas_base_put_smid_scsi_io(struct MPT2SAS_ADAPTER *ioc, u16 smid,
1024  u16 handle);
1025 void mpt2sas_base_put_smid_hi_priority(struct MPT2SAS_ADAPTER *ioc, u16 smid);
1027  u16 io_index);
1028 void mpt2sas_base_put_smid_default(struct MPT2SAS_ADAPTER *ioc, u16 smid);
1032 
1033 u8 mpt2sas_base_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1034  u32 reply);
1036  u8 msix_index, u32 reply);
1038 
1039 u32 mpt2sas_base_get_iocstate(struct MPT2SAS_ADAPTER *ioc, int cooked);
1040 
1041 void mpt2sas_base_fault_info(struct MPT2SAS_ADAPTER *ioc , u16 fault_code);
1044  *mpi_request);
1046  Mpi2SepReply_t *mpi_reply, Mpi2SepRequest_t *mpi_request);
1048 
1049 void mpt2sas_halt_firmware(struct MPT2SAS_ADAPTER *ioc);
1050 
1051 int mpt2sas_port_enable(struct MPT2SAS_ADAPTER *ioc);
1052 
1053 /* scsih shared API */
1054 u8 mpt2sas_scsih_event_callback(struct MPT2SAS_ADAPTER *ioc, u8 msix_index,
1055  u32 reply);
1057  uint channel, uint id, uint lun, u8 type, u16 smid_task,
1058  ulong timeout, unsigned long serial_number, enum mutex_type m_type);
1061 void mpt2sas_expander_remove(struct MPT2SAS_ADAPTER *ioc, u64 sas_address);
1063  u64 sas_address);
1065  u16 handle);
1067  *ioc, u64 sas_address);
1069  struct MPT2SAS_ADAPTER *ioc, u64 sas_address);
1070 
1072 
1073 void mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase);
1074 
1075 /* config shared API */
1076 u8 mpt2sas_config_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1077  u32 reply);
1080  Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage0_t *config_page);
1082  Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage10_t *config_page);
1084  *mpi_reply, Mpi2BiosPage2_t *config_page);
1086  *mpi_reply, Mpi2BiosPage3_t *config_page);
1088  *mpi_reply, Mpi2IOUnitPage0_t *config_page);
1090  *mpi_reply, Mpi2SasDevicePage0_t *config_page, u32 form, u32 handle);
1092  *mpi_reply, Mpi2SasDevicePage1_t *config_page, u32 form, u32 handle);
1094  *mpi_reply, Mpi2SasIOUnitPage0_t *config_page, u16 sz);
1096  *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1098  *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1100  Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
1102  *mpi_reply, Mpi2SasIOUnitPage1_t *config_page, u16 sz);
1104  Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page, u16 sz);
1106  *mpi_reply, Mpi2IOCPage8_t *config_page);
1108  *mpi_reply, Mpi2ExpanderPage0_t *config_page, u32 form, u32 handle);
1110  *mpi_reply, Mpi2ExpanderPage1_t *config_page, u32 phy_number, u16 handle);
1112  *mpi_reply, Mpi2SasEnclosurePage0_t *config_page, u32 form, u32 handle);
1114  *mpi_reply, Mpi2SasPhyPage0_t *config_page, u32 phy_number);
1116  *mpi_reply, Mpi2SasPhyPage1_t *config_page, u32 phy_number);
1118  *mpi_reply, Mpi2RaidVolPage1_t *config_page, u32 form, u32 handle);
1119 int mpt2sas_config_get_number_pds(struct MPT2SAS_ADAPTER *ioc, u16 handle, u8 *num_pds);
1121  *mpi_reply, Mpi2RaidVolPage0_t *config_page, u32 form, u32 handle, u16 sz);
1123  *mpi_reply, Mpi2RaidPhysDiskPage0_t *config_page, u32 form,
1124  u32 form_specific);
1125 int mpt2sas_config_get_volume_handle(struct MPT2SAS_ADAPTER *ioc, u16 pd_handle,
1126  u16 *volume_handle);
1128  u64 *wwid);
1129 /* ctl shared API */
1130 extern struct device_attribute *mpt2sas_host_attrs[];
1131 extern struct device_attribute *mpt2sas_dev_attrs[];
1132 void mpt2sas_ctl_init(void);
1133 void mpt2sas_ctl_exit(void);
1134 u8 mpt2sas_ctl_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1135  u32 reply);
1136 void mpt2sas_ctl_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase);
1137 u8 mpt2sas_ctl_event_callback(struct MPT2SAS_ADAPTER *ioc, u8 msix_index,
1138  u32 reply);
1140  Mpi2EventNotificationReply_t *mpi_reply);
1141 
1143  u8 bits_to_regsiter);
1144 
1145 /* transport shared API */
1146 u8 mpt2sas_transport_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1147  u32 reply);
1149  u16 handle, u64 sas_address);
1150 void mpt2sas_transport_port_remove(struct MPT2SAS_ADAPTER *ioc, u64 sas_address,
1151  u64 sas_address_parent);
1153  *mpt2sas_phy, Mpi2SasPhyPage0_t phy_pg0, struct device *parent_dev);
1155  *mpt2sas_phy, Mpi2ExpanderPage1_t expander_pg1, struct device *parent_dev);
1157  u64 sas_address, u16 handle, u8 phy_number, u8 link_rate);
1160 extern int scsi_internal_device_block(struct scsi_device *sdev);
1162  u8 msix_index, u32 reply);
1163 extern int scsi_internal_device_unblock(struct scsi_device *sdev,
1165 
1166 #endif /* MPT2SAS_BASE_H_INCLUDED */