arcmsr.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. /*
  2. *******************************************************************************
  3. ** O.S : Linux
  4. ** FILE NAME : arcmsr.h
  5. ** BY : Erich Chen
  6. ** Description: SCSI RAID Device Driver for
  7. ** ARECA RAID Host adapter
  8. *******************************************************************************
  9. ** Copyright (C) 2002 - 2005, Areca Technology Corporation All rights reserved.
  10. **
  11. ** Web site: www.areca.com.tw
  12. ** E-mail: erich@areca.com.tw
  13. **
  14. ** This program is free software; you can redistribute it and/or modify
  15. ** it under the terms of the GNU General Public License version 2 as
  16. ** published by the Free Software Foundation.
  17. ** This program is distributed in the hope that it will be useful,
  18. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. ** GNU General Public License for more details.
  21. *******************************************************************************
  22. ** Redistribution and use in source and binary forms, with or without
  23. ** modification, are permitted provided that the following conditions
  24. ** are met:
  25. ** 1. Redistributions of source code must retain the above copyright
  26. ** notice, this list of conditions and the following disclaimer.
  27. ** 2. Redistributions in binary form must reproduce the above copyright
  28. ** notice, this list of conditions and the following disclaimer in the
  29. ** documentation and/or other materials provided with the distribution.
  30. ** 3. The name of the author may not be used to endorse or promote products
  31. ** derived from this software without specific prior written permission.
  32. **
  33. ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  34. ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  35. ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  36. ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  37. ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT
  38. ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  39. ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION)HOWEVER CAUSED AND ON ANY
  40. ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  41. **(INCLUDING NEGLIGENCE OR OTHERWISE)ARISING IN ANY WAY OUT OF THE USE OF
  42. ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  43. *******************************************************************************
  44. */
  45. #include <linux/interrupt.h>
  46. struct class_device_attribute;
  47. #define ARCMSR_MAX_OUTSTANDING_CMD 256
  48. #define ARCMSR_MAX_FREECCB_NUM 288
  49. #define ARCMSR_DRIVER_VERSION "Driver Version 1.20.00.13"
  50. #define ARCMSR_SCSI_INITIATOR_ID 255
  51. #define ARCMSR_MAX_XFER_SECTORS 512
  52. #define ARCMSR_MAX_TARGETID 17
  53. #define ARCMSR_MAX_TARGETLUN 8
  54. #define ARCMSR_MAX_CMD_PERLUN ARCMSR_MAX_OUTSTANDING_CMD
  55. #define ARCMSR_MAX_QBUFFER 4096
  56. #define ARCMSR_MAX_SG_ENTRIES 38
  57. /*
  58. *******************************************************************************
  59. ** split 64bits dma addressing
  60. *******************************************************************************
  61. */
  62. #define dma_addr_hi32(addr) (uint32_t) ((addr>>16)>>16)
  63. #define dma_addr_lo32(addr) (uint32_t) (addr & 0xffffffff)
  64. /*
  65. *******************************************************************************
  66. ** MESSAGE CONTROL CODE
  67. *******************************************************************************
  68. */
  69. struct CMD_MESSAGE
  70. {
  71. uint32_t HeaderLength;
  72. uint8_t Signature[8];
  73. uint32_t Timeout;
  74. uint32_t ControlCode;
  75. uint32_t ReturnCode;
  76. uint32_t Length;
  77. };
  78. /*
  79. *******************************************************************************
  80. ** IOP Message Transfer Data for user space
  81. *******************************************************************************
  82. */
  83. struct CMD_MESSAGE_FIELD
  84. {
  85. struct CMD_MESSAGE cmdmessage;
  86. uint8_t messagedatabuffer[1032];
  87. };
  88. /* IOP message transfer */
  89. #define ARCMSR_MESSAGE_FAIL 0x0001
  90. /* DeviceType */
  91. #define ARECA_SATA_RAID 0x90000000
  92. /* FunctionCode */
  93. #define FUNCTION_READ_RQBUFFER 0x0801
  94. #define FUNCTION_WRITE_WQBUFFER 0x0802
  95. #define FUNCTION_CLEAR_RQBUFFER 0x0803
  96. #define FUNCTION_CLEAR_WQBUFFER 0x0804
  97. #define FUNCTION_CLEAR_ALLQBUFFER 0x0805
  98. #define FUNCTION_RETURN_CODE_3F 0x0806
  99. #define FUNCTION_SAY_HELLO 0x0807
  100. #define FUNCTION_SAY_GOODBYE 0x0808
  101. #define FUNCTION_FLUSH_ADAPTER_CACHE 0x0809
  102. /* ARECA IO CONTROL CODE*/
  103. #define ARCMSR_MESSAGE_READ_RQBUFFER \
  104. ARECA_SATA_RAID | FUNCTION_READ_RQBUFFER
  105. #define ARCMSR_MESSAGE_WRITE_WQBUFFER \
  106. ARECA_SATA_RAID | FUNCTION_WRITE_WQBUFFER
  107. #define ARCMSR_MESSAGE_CLEAR_RQBUFFER \
  108. ARECA_SATA_RAID | FUNCTION_CLEAR_RQBUFFER
  109. #define ARCMSR_MESSAGE_CLEAR_WQBUFFER \
  110. ARECA_SATA_RAID | FUNCTION_CLEAR_WQBUFFER
  111. #define ARCMSR_MESSAGE_CLEAR_ALLQBUFFER \
  112. ARECA_SATA_RAID | FUNCTION_CLEAR_ALLQBUFFER
  113. #define ARCMSR_MESSAGE_RETURN_CODE_3F \
  114. ARECA_SATA_RAID | FUNCTION_RETURN_CODE_3F
  115. #define ARCMSR_MESSAGE_SAY_HELLO \
  116. ARECA_SATA_RAID | FUNCTION_SAY_HELLO
  117. #define ARCMSR_MESSAGE_SAY_GOODBYE \
  118. ARECA_SATA_RAID | FUNCTION_SAY_GOODBYE
  119. #define ARCMSR_MESSAGE_FLUSH_ADAPTER_CACHE \
  120. ARECA_SATA_RAID | FUNCTION_FLUSH_ADAPTER_CACHE
  121. /* ARECA IOCTL ReturnCode */
  122. #define ARCMSR_MESSAGE_RETURNCODE_OK 0x00000001
  123. #define ARCMSR_MESSAGE_RETURNCODE_ERROR 0x00000006
  124. #define ARCMSR_MESSAGE_RETURNCODE_3F 0x0000003F
  125. /*
  126. *************************************************************
  127. ** structure for holding DMA address data
  128. *************************************************************
  129. */
  130. #define IS_SG64_ADDR 0x01000000 /* bit24 */
  131. struct SG32ENTRY
  132. {
  133. uint32_t length;
  134. uint32_t address;
  135. };
  136. struct SG64ENTRY
  137. {
  138. uint32_t length;
  139. uint32_t address;
  140. uint32_t addresshigh;
  141. };
  142. struct SGENTRY_UNION
  143. {
  144. union
  145. {
  146. struct SG32ENTRY sg32entry;
  147. struct SG64ENTRY sg64entry;
  148. }u;
  149. };
  150. /*
  151. ********************************************************************
  152. ** Q Buffer of IOP Message Transfer
  153. ********************************************************************
  154. */
  155. struct QBUFFER
  156. {
  157. uint32_t data_len;
  158. uint8_t data[124];
  159. };
  160. /*
  161. *******************************************************************************
  162. ** FIRMWARE INFO
  163. *******************************************************************************
  164. */
  165. struct FIRMWARE_INFO
  166. {
  167. uint32_t signature; /*0, 00-03*/
  168. uint32_t request_len; /*1, 04-07*/
  169. uint32_t numbers_queue; /*2, 08-11*/
  170. uint32_t sdram_size; /*3, 12-15*/
  171. uint32_t ide_channels; /*4, 16-19*/
  172. char vendor[40]; /*5, 20-59*/
  173. char model[8]; /*15, 60-67*/
  174. char firmware_ver[16]; /*17, 68-83*/
  175. char device_map[16]; /*21, 84-99*/
  176. };
  177. /* signature of set and get firmware config */
  178. #define ARCMSR_SIGNATURE_GET_CONFIG 0x87974060
  179. #define ARCMSR_SIGNATURE_SET_CONFIG 0x87974063
  180. /* message code of inbound message register */
  181. #define ARCMSR_INBOUND_MESG0_NOP 0x00000000
  182. #define ARCMSR_INBOUND_MESG0_GET_CONFIG 0x00000001
  183. #define ARCMSR_INBOUND_MESG0_SET_CONFIG 0x00000002
  184. #define ARCMSR_INBOUND_MESG0_ABORT_CMD 0x00000003
  185. #define ARCMSR_INBOUND_MESG0_STOP_BGRB 0x00000004
  186. #define ARCMSR_INBOUND_MESG0_FLUSH_CACHE 0x00000005
  187. #define ARCMSR_INBOUND_MESG0_START_BGRB 0x00000006
  188. #define ARCMSR_INBOUND_MESG0_CHK331PENDING 0x00000007
  189. #define ARCMSR_INBOUND_MESG0_SYNC_TIMER 0x00000008
  190. /* doorbell interrupt generator */
  191. #define ARCMSR_INBOUND_DRIVER_DATA_WRITE_OK 0x00000001
  192. #define ARCMSR_INBOUND_DRIVER_DATA_READ_OK 0x00000002
  193. #define ARCMSR_OUTBOUND_IOP331_DATA_WRITE_OK 0x00000001
  194. #define ARCMSR_OUTBOUND_IOP331_DATA_READ_OK 0x00000002
  195. /* ccb areca cdb flag */
  196. #define ARCMSR_CCBPOST_FLAG_SGL_BSIZE 0x80000000
  197. #define ARCMSR_CCBPOST_FLAG_IAM_BIOS 0x40000000
  198. #define ARCMSR_CCBREPLY_FLAG_IAM_BIOS 0x40000000
  199. #define ARCMSR_CCBREPLY_FLAG_ERROR 0x10000000
  200. /* outbound firmware ok */
  201. #define ARCMSR_OUTBOUND_MESG1_FIRMWARE_OK 0x80000000
  202. /*
  203. *******************************************************************************
  204. ** ARECA SCSI COMMAND DESCRIPTOR BLOCK size 0x1F8 (504)
  205. *******************************************************************************
  206. */
  207. struct ARCMSR_CDB
  208. {
  209. uint8_t Bus;
  210. uint8_t TargetID;
  211. uint8_t LUN;
  212. uint8_t Function;
  213. uint8_t CdbLength;
  214. uint8_t sgcount;
  215. uint8_t Flags;
  216. #define ARCMSR_CDB_FLAG_SGL_BSIZE 0x01
  217. #define ARCMSR_CDB_FLAG_BIOS 0x02
  218. #define ARCMSR_CDB_FLAG_WRITE 0x04
  219. #define ARCMSR_CDB_FLAG_SIMPLEQ 0x00
  220. #define ARCMSR_CDB_FLAG_HEADQ 0x08
  221. #define ARCMSR_CDB_FLAG_ORDEREDQ 0x10
  222. uint8_t Reserved1;
  223. uint32_t Context;
  224. uint32_t DataLength;
  225. uint8_t Cdb[16];
  226. uint8_t DeviceStatus;
  227. #define ARCMSR_DEV_CHECK_CONDITION 0x02
  228. #define ARCMSR_DEV_SELECT_TIMEOUT 0xF0
  229. #define ARCMSR_DEV_ABORTED 0xF1
  230. #define ARCMSR_DEV_INIT_FAIL 0xF2
  231. uint8_t SenseData[15];
  232. union
  233. {
  234. struct SG32ENTRY sg32entry[ARCMSR_MAX_SG_ENTRIES];
  235. struct SG64ENTRY sg64entry[ARCMSR_MAX_SG_ENTRIES];
  236. } u;
  237. };
  238. /*
  239. *******************************************************************************
  240. ** Messaging Unit (MU) of the Intel R 80331 I/O processor (80331)
  241. *******************************************************************************
  242. */
  243. struct MessageUnit
  244. {
  245. uint32_t resrved0[4]; /*0000 000F*/
  246. uint32_t inbound_msgaddr0; /*0010 0013*/
  247. uint32_t inbound_msgaddr1; /*0014 0017*/
  248. uint32_t outbound_msgaddr0; /*0018 001B*/
  249. uint32_t outbound_msgaddr1; /*001C 001F*/
  250. uint32_t inbound_doorbell; /*0020 0023*/
  251. uint32_t inbound_intstatus; /*0024 0027*/
  252. uint32_t inbound_intmask; /*0028 002B*/
  253. uint32_t outbound_doorbell; /*002C 002F*/
  254. uint32_t outbound_intstatus; /*0030 0033*/
  255. uint32_t outbound_intmask; /*0034 0037*/
  256. uint32_t reserved1[2]; /*0038 003F*/
  257. uint32_t inbound_queueport; /*0040 0043*/
  258. uint32_t outbound_queueport; /*0044 0047*/
  259. uint32_t reserved2[2]; /*0048 004F*/
  260. uint32_t reserved3[492]; /*0050 07FF 492*/
  261. uint32_t reserved4[128]; /*0800 09FF 128*/
  262. uint32_t message_rwbuffer[256]; /*0a00 0DFF 256*/
  263. uint32_t message_wbuffer[32]; /*0E00 0E7F 32*/
  264. uint32_t reserved5[32]; /*0E80 0EFF 32*/
  265. uint32_t message_rbuffer[32]; /*0F00 0F7F 32*/
  266. uint32_t reserved6[32]; /*0F80 0FFF 32*/
  267. };
  268. /*
  269. *******************************************************************************
  270. ** Adapter Control Block
  271. *******************************************************************************
  272. */
  273. struct AdapterControlBlock
  274. {
  275. struct pci_dev * pdev;
  276. struct Scsi_Host * host;
  277. unsigned long vir2phy_offset;
  278. /* Offset is used in making arc cdb physical to virtual calculations */
  279. uint32_t outbound_int_enable;
  280. struct MessageUnit __iomem * pmu;
  281. /* message unit ATU inbound base address0 */
  282. uint32_t acb_flags;
  283. #define ACB_F_SCSISTOPADAPTER 0x0001
  284. #define ACB_F_MSG_STOP_BGRB 0x0002
  285. /* stop RAID background rebuild */
  286. #define ACB_F_MSG_START_BGRB 0x0004
  287. /* stop RAID background rebuild */
  288. #define ACB_F_IOPDATA_OVERFLOW 0x0008
  289. /* iop message data rqbuffer overflow */
  290. #define ACB_F_MESSAGE_WQBUFFER_CLEARED 0x0010
  291. /* message clear wqbuffer */
  292. #define ACB_F_MESSAGE_RQBUFFER_CLEARED 0x0020
  293. /* message clear rqbuffer */
  294. #define ACB_F_MESSAGE_WQBUFFER_READED 0x0040
  295. #define ACB_F_BUS_RESET 0x0080
  296. #define ACB_F_IOP_INITED 0x0100
  297. /* iop init */
  298. struct CommandControlBlock * pccb_pool[ARCMSR_MAX_FREECCB_NUM];
  299. /* used for memory free */
  300. struct list_head ccb_free_list;
  301. /* head of free ccb list */
  302. atomic_t ccboutstandingcount;
  303. void * dma_coherent;
  304. /* dma_coherent used for memory free */
  305. dma_addr_t dma_coherent_handle;
  306. /* dma_coherent_handle used for memory free */
  307. uint8_t rqbuffer[ARCMSR_MAX_QBUFFER];
  308. /* data collection buffer for read from 80331 */
  309. int32_t rqbuf_firstindex;
  310. /* first of read buffer */
  311. int32_t rqbuf_lastindex;
  312. /* last of read buffer */
  313. uint8_t wqbuffer[ARCMSR_MAX_QBUFFER];
  314. /* data collection buffer for write to 80331 */
  315. int32_t wqbuf_firstindex;
  316. /* first of write buffer */
  317. int32_t wqbuf_lastindex;
  318. /* last of write buffer */
  319. uint8_t devstate[ARCMSR_MAX_TARGETID][ARCMSR_MAX_TARGETLUN];
  320. /* id0 ..... id15, lun0...lun7 */
  321. #define ARECA_RAID_GONE 0x55
  322. #define ARECA_RAID_GOOD 0xaa
  323. uint32_t num_resets;
  324. uint32_t num_aborts;
  325. uint32_t firm_request_len;
  326. uint32_t firm_numbers_queue;
  327. uint32_t firm_sdram_size;
  328. uint32_t firm_hd_channels;
  329. char firm_model[12];
  330. char firm_version[20];
  331. };/* HW_DEVICE_EXTENSION */
  332. /*
  333. *******************************************************************************
  334. ** Command Control Block
  335. ** this CCB length must be 32 bytes boundary
  336. *******************************************************************************
  337. */
  338. struct CommandControlBlock
  339. {
  340. struct ARCMSR_CDB arcmsr_cdb;
  341. /*
  342. ** 0-503 (size of CDB=504):
  343. ** arcmsr messenger scsi command descriptor size 504 bytes
  344. */
  345. uint32_t cdb_shifted_phyaddr;
  346. /* 504-507 */
  347. uint32_t reserved1;
  348. /* 508-511 */
  349. #if BITS_PER_LONG == 64
  350. /* ======================512+64 bytes======================== */
  351. struct list_head list;
  352. /* 512-527 16 bytes next/prev ptrs for ccb lists */
  353. struct scsi_cmnd * pcmd;
  354. /* 528-535 8 bytes pointer of linux scsi command */
  355. struct AdapterControlBlock * acb;
  356. /* 536-543 8 bytes pointer of acb */
  357. uint16_t ccb_flags;
  358. /* 544-545 */
  359. #define CCB_FLAG_READ 0x0000
  360. #define CCB_FLAG_WRITE 0x0001
  361. #define CCB_FLAG_ERROR 0x0002
  362. #define CCB_FLAG_FLUSHCACHE 0x0004
  363. #define CCB_FLAG_MASTER_ABORTED 0x0008
  364. uint16_t startdone;
  365. /* 546-547 */
  366. #define ARCMSR_CCB_DONE 0x0000
  367. #define ARCMSR_CCB_START 0x55AA
  368. #define ARCMSR_CCB_ABORTED 0xAA55
  369. #define ARCMSR_CCB_ILLEGAL 0xFFFF
  370. uint32_t reserved2[7];
  371. /* 548-551 552-555 556-559 560-563 564-567 568-571 572-575 */
  372. #else
  373. /* ======================512+32 bytes======================== */
  374. struct list_head list;
  375. /* 512-519 8 bytes next/prev ptrs for ccb lists */
  376. struct scsi_cmnd * pcmd;
  377. /* 520-523 4 bytes pointer of linux scsi command */
  378. struct AdapterControlBlock * acb;
  379. /* 524-527 4 bytes pointer of acb */
  380. uint16_t ccb_flags;
  381. /* 528-529 */
  382. #define CCB_FLAG_READ 0x0000
  383. #define CCB_FLAG_WRITE 0x0001
  384. #define CCB_FLAG_ERROR 0x0002
  385. #define CCB_FLAG_FLUSHCACHE 0x0004
  386. #define CCB_FLAG_MASTER_ABORTED 0x0008
  387. uint16_t startdone;
  388. /* 530-531 */
  389. #define ARCMSR_CCB_DONE 0x0000
  390. #define ARCMSR_CCB_START 0x55AA
  391. #define ARCMSR_CCB_ABORTED 0xAA55
  392. #define ARCMSR_CCB_ILLEGAL 0xFFFF
  393. uint32_t reserved2[3];
  394. /* 532-535 536-539 540-543 */
  395. #endif
  396. /* ========================================================== */
  397. };
  398. /*
  399. *******************************************************************************
  400. ** ARECA SCSI sense data
  401. *******************************************************************************
  402. */
  403. struct SENSE_DATA
  404. {
  405. uint8_t ErrorCode:7;
  406. #define SCSI_SENSE_CURRENT_ERRORS 0x70
  407. #define SCSI_SENSE_DEFERRED_ERRORS 0x71
  408. uint8_t Valid:1;
  409. uint8_t SegmentNumber;
  410. uint8_t SenseKey:4;
  411. uint8_t Reserved:1;
  412. uint8_t IncorrectLength:1;
  413. uint8_t EndOfMedia:1;
  414. uint8_t FileMark:1;
  415. uint8_t Information[4];
  416. uint8_t AdditionalSenseLength;
  417. uint8_t CommandSpecificInformation[4];
  418. uint8_t AdditionalSenseCode;
  419. uint8_t AdditionalSenseCodeQualifier;
  420. uint8_t FieldReplaceableUnitCode;
  421. uint8_t SenseKeySpecific[3];
  422. };
  423. /*
  424. *******************************************************************************
  425. ** Outbound Interrupt Status Register - OISR
  426. *******************************************************************************
  427. */
  428. #define ARCMSR_MU_OUTBOUND_INTERRUPT_STATUS_REG 0x30
  429. #define ARCMSR_MU_OUTBOUND_PCI_INT 0x10
  430. #define ARCMSR_MU_OUTBOUND_POSTQUEUE_INT 0x08
  431. #define ARCMSR_MU_OUTBOUND_DOORBELL_INT 0x04
  432. #define ARCMSR_MU_OUTBOUND_MESSAGE1_INT 0x02
  433. #define ARCMSR_MU_OUTBOUND_MESSAGE0_INT 0x01
  434. #define ARCMSR_MU_OUTBOUND_HANDLE_INT \
  435. (ARCMSR_MU_OUTBOUND_MESSAGE0_INT \
  436. |ARCMSR_MU_OUTBOUND_MESSAGE1_INT \
  437. |ARCMSR_MU_OUTBOUND_DOORBELL_INT \
  438. |ARCMSR_MU_OUTBOUND_POSTQUEUE_INT \
  439. |ARCMSR_MU_OUTBOUND_PCI_INT)
  440. /*
  441. *******************************************************************************
  442. ** Outbound Interrupt Mask Register - OIMR
  443. *******************************************************************************
  444. */
  445. #define ARCMSR_MU_OUTBOUND_INTERRUPT_MASK_REG 0x34
  446. #define ARCMSR_MU_OUTBOUND_PCI_INTMASKENABLE 0x10
  447. #define ARCMSR_MU_OUTBOUND_POSTQUEUE_INTMASKENABLE 0x08
  448. #define ARCMSR_MU_OUTBOUND_DOORBELL_INTMASKENABLE 0x04
  449. #define ARCMSR_MU_OUTBOUND_MESSAGE1_INTMASKENABLE 0x02
  450. #define ARCMSR_MU_OUTBOUND_MESSAGE0_INTMASKENABLE 0x01
  451. #define ARCMSR_MU_OUTBOUND_ALL_INTMASKENABLE 0x1F
  452. extern void arcmsr_post_Qbuffer(struct AdapterControlBlock *acb);
  453. extern struct class_device_attribute *arcmsr_host_attrs[];
  454. extern int arcmsr_alloc_sysfs_attr(struct AdapterControlBlock *acb);
  455. void arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb);