dpti_i2o.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:14k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _SCSI_I2O_H
  2. #define _SCSI_I2O_H
  3. /* I2O kernel space accessible structures/APIs
  4.  *
  5.  * (c) Copyright 1999, 2000 Red Hat Software
  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.  *************************************************************************
  13.  *
  14.  * This header file defined the I2O APIs/structures for use by
  15.  * the I2O kernel modules.
  16.  *
  17.  */
  18. #ifdef __KERNEL__       /* This file to be included by kernel only */
  19. #include <linux/i2o-dev.h>
  20. #include <asm/semaphore.h> /* Needed for MUTEX init macros */
  21. #include <linux/config.h>
  22. #include <linux/notifier.h>
  23. #include <asm/atomic.h>
  24. /*
  25.  * Tunable parameters first
  26.  */
  27. /* How many different OSM's are we allowing */ 
  28. #define MAX_I2O_MODULES 64
  29. #define I2O_EVT_CAPABILITY_OTHER 0x01
  30. #define I2O_EVT_CAPABILITY_CHANGED 0x02
  31. #define I2O_EVT_SENSOR_STATE_CHANGED 0x01
  32. //#ifdef __KERNEL__   /* ioctl stuff only thing exported to users */
  33. #define I2O_MAX_MANAGERS 4
  34. #include <asm/semaphore.h> /* Needed for MUTEX init macros */
  35. /*
  36.  * I2O Interface Objects
  37.  */
  38. #include <linux/config.h>
  39. #include <linux/notifier.h>
  40. #include <asm/atomic.h>
  41. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
  42. #define DECLARE_MUTEX(name) struct semaphore name=MUTEX
  43. typedef struct wait_queue *adpt_wait_queue_head_t;
  44. #define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) adpt_wait_queue_head_t wait = NULL
  45. typedef struct wait_queue adpt_wait_queue_t;
  46. #else
  47. #include <linux/wait.h>
  48. typedef wait_queue_head_t adpt_wait_queue_head_t;
  49. #define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) DECLARE_WAIT_QUEUE_HEAD(wait)
  50. typedef wait_queue_t adpt_wait_queue_t;
  51. #endif
  52. /*
  53.  * message structures
  54.  */
  55. struct i2o_message
  56. {
  57. u8 version_offset;
  58. u8 flags;
  59. u16 size;
  60. u32 target_tid:12;
  61. u32 init_tid:12;
  62. u32 function:8;
  63. u32 initiator_context;
  64. /* List follows */
  65. };
  66. struct adpt_device;
  67. struct _adpt_hba;
  68. struct i2o_device
  69. {
  70. struct i2o_device *next; /* Chain */
  71. struct i2o_device *prev;
  72. char dev_name[8]; /* linux /dev name if available */
  73. i2o_lct_entry lct_data;/* Device LCT information */
  74. u32 flags;
  75. struct proc_dir_entry* proc_entry; /* /proc dir */
  76. struct adpt_device *owner;
  77. struct _adpt_hba *controller; /* Controlling IOP */
  78. };
  79. /*
  80.  * Each I2O controller has one of these objects
  81.  */
  82.  
  83. struct i2o_controller
  84. {
  85. char name[16];
  86. int unit;
  87. int type;
  88. int enabled;
  89. struct notifier_block *event_notifer; /* Events */
  90. atomic_t users;
  91. struct i2o_device *devices; /* I2O device chain */
  92. struct i2o_controller *next; /* Controller chain */
  93. };
  94. /*
  95.  * I2O System table entry
  96.  */
  97. struct i2o_sys_tbl_entry
  98. {
  99. u16 org_id;
  100. u16 reserved1;
  101. u32 iop_id:12;
  102. u32 reserved2:20;
  103. u16 seg_num:12;
  104. u16  i2o_version:4;
  105. u8  iop_state;
  106. u8  msg_type;
  107. u16 frame_size;
  108. u16 reserved3;
  109. u32 last_changed;
  110. u32 iop_capabilities;
  111. u32 inbound_low;
  112. u32 inbound_high;
  113. };
  114. struct i2o_sys_tbl
  115. {
  116. u8  num_entries;
  117. u8  version;
  118. u16  reserved1;
  119. u32 change_ind;
  120. u32 reserved2;
  121. u32 reserved3;
  122. struct i2o_sys_tbl_entry iops[0];
  123. };
  124. /*
  125.  * I2O classes / subclasses
  126.  */
  127. /*  Class ID and Code Assignments
  128.  *  (LCT.ClassID.Version field)
  129.  */
  130. #define    I2O_CLASS_VERSION_10                        0x00
  131. #define    I2O_CLASS_VERSION_11                        0x01
  132. /*  Class code names
  133.  *  (from v1.5 Table 6-1 Class Code Assignments.)
  134.  */
  135.  
  136. #define    I2O_CLASS_EXECUTIVE                         0x000
  137. #define    I2O_CLASS_DDM                               0x001
  138. #define    I2O_CLASS_RANDOM_BLOCK_STORAGE              0x010
  139. #define    I2O_CLASS_SEQUENTIAL_STORAGE                0x011
  140. #define    I2O_CLASS_LAN                               0x020
  141. #define    I2O_CLASS_WAN                               0x030
  142. #define    I2O_CLASS_FIBRE_CHANNEL_PORT                0x040
  143. #define    I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL          0x041
  144. #define    I2O_CLASS_SCSI_PERIPHERAL                   0x051
  145. #define    I2O_CLASS_ATE_PORT                          0x060
  146. #define    I2O_CLASS_ATE_PERIPHERAL                    0x061
  147. #define    I2O_CLASS_FLOPPY_CONTROLLER                 0x070
  148. #define    I2O_CLASS_FLOPPY_DEVICE                     0x071
  149. #define    I2O_CLASS_BUS_ADAPTER_PORT                  0x080
  150. #define    I2O_CLASS_PEER_TRANSPORT_AGENT              0x090
  151. #define    I2O_CLASS_PEER_TRANSPORT                    0x091
  152. /*  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
  153.  */
  154.  
  155. #define    I2O_CLASS_MATCH_ANYCLASS                    0xffffffff
  156. /*  Subclasses
  157.  */
  158. #define    I2O_SUBCLASS_i960                           0x001
  159. #define    I2O_SUBCLASS_HDM                            0x020
  160. #define    I2O_SUBCLASS_ISM                            0x021
  161.  
  162. /* Operation functions */
  163. #define I2O_PARAMS_FIELD_GET 0x0001
  164. #define I2O_PARAMS_LIST_GET 0x0002
  165. #define I2O_PARAMS_MORE_GET 0x0003
  166. #define I2O_PARAMS_SIZE_GET 0x0004
  167. #define I2O_PARAMS_TABLE_GET 0x0005
  168. #define I2O_PARAMS_FIELD_SET 0x0006
  169. #define I2O_PARAMS_LIST_SET 0x0007
  170. #define I2O_PARAMS_ROW_ADD 0x0008
  171. #define I2O_PARAMS_ROW_DELETE 0x0009
  172. #define I2O_PARAMS_TABLE_CLEAR 0x000A
  173. /*
  174.  * I2O serial number conventions / formats
  175.  * (circa v1.5)
  176.  */
  177. #define    I2O_SNFORMAT_UNKNOWN                        0
  178. #define    I2O_SNFORMAT_BINARY                         1
  179. #define    I2O_SNFORMAT_ASCII                          2
  180. #define    I2O_SNFORMAT_UNICODE                        3
  181. #define    I2O_SNFORMAT_LAN48_MAC                      4
  182. #define    I2O_SNFORMAT_WAN                            5
  183. /* Plus new in v2.0 (Yellowstone pdf doc)
  184.  */
  185. #define    I2O_SNFORMAT_LAN64_MAC                      6
  186. #define    I2O_SNFORMAT_DDM                            7
  187. #define    I2O_SNFORMAT_IEEE_REG64                     8
  188. #define    I2O_SNFORMAT_IEEE_REG128                    9
  189. #define    I2O_SNFORMAT_UNKNOWN2                       0xff
  190. /* Transaction Reply Lists (TRL) Control Word structure */
  191. #define TRL_SINGLE_FIXED_LENGTH 0x00
  192. #define TRL_SINGLE_VARIABLE_LENGTH 0x40
  193. #define TRL_MULTIPLE_FIXED_LENGTH 0x80
  194. /*
  195.  * Messaging API values
  196.  */
  197.  
  198. #define I2O_CMD_ADAPTER_ASSIGN 0xB3
  199. #define I2O_CMD_ADAPTER_READ 0xB2
  200. #define I2O_CMD_ADAPTER_RELEASE 0xB5
  201. #define I2O_CMD_BIOS_INFO_SET 0xA5
  202. #define I2O_CMD_BOOT_DEVICE_SET 0xA7
  203. #define I2O_CMD_CONFIG_VALIDATE 0xBB
  204. #define I2O_CMD_CONN_SETUP 0xCA
  205. #define I2O_CMD_DDM_DESTROY 0xB1
  206. #define I2O_CMD_DDM_ENABLE 0xD5
  207. #define I2O_CMD_DDM_QUIESCE 0xC7
  208. #define I2O_CMD_DDM_RESET 0xD9
  209. #define I2O_CMD_DDM_SUSPEND 0xAF
  210. #define I2O_CMD_DEVICE_ASSIGN 0xB7
  211. #define I2O_CMD_DEVICE_RELEASE 0xB9
  212. #define I2O_CMD_HRT_GET 0xA8
  213. #define I2O_CMD_ADAPTER_CLEAR 0xBE
  214. #define I2O_CMD_ADAPTER_CONNECT 0xC9
  215. #define I2O_CMD_ADAPTER_RESET 0xBD
  216. #define I2O_CMD_LCT_NOTIFY 0xA2
  217. #define I2O_CMD_OUTBOUND_INIT 0xA1
  218. #define I2O_CMD_PATH_ENABLE 0xD3
  219. #define I2O_CMD_PATH_QUIESCE 0xC5
  220. #define I2O_CMD_PATH_RESET 0xD7
  221. #define I2O_CMD_STATIC_MF_CREATE 0xDD
  222. #define I2O_CMD_STATIC_MF_RELEASE 0xDF
  223. #define I2O_CMD_STATUS_GET 0xA0
  224. #define I2O_CMD_SW_DOWNLOAD 0xA9
  225. #define I2O_CMD_SW_UPLOAD 0xAB
  226. #define I2O_CMD_SW_REMOVE 0xAD
  227. #define I2O_CMD_SYS_ENABLE 0xD1
  228. #define I2O_CMD_SYS_MODIFY 0xC1
  229. #define I2O_CMD_SYS_QUIESCE 0xC3
  230. #define I2O_CMD_SYS_TAB_SET 0xA3
  231. #define I2O_CMD_UTIL_NOP 0x00
  232. #define I2O_CMD_UTIL_ABORT 0x01
  233. #define I2O_CMD_UTIL_CLAIM 0x09
  234. #define I2O_CMD_UTIL_RELEASE 0x0B
  235. #define I2O_CMD_UTIL_PARAMS_GET 0x06
  236. #define I2O_CMD_UTIL_PARAMS_SET 0x05
  237. #define I2O_CMD_UTIL_EVT_REGISTER 0x13
  238. #define I2O_CMD_UTIL_EVT_ACK 0x14
  239. #define I2O_CMD_UTIL_CONFIG_DIALOG 0x10
  240. #define I2O_CMD_UTIL_DEVICE_RESERVE 0x0D
  241. #define I2O_CMD_UTIL_DEVICE_RELEASE 0x0F
  242. #define I2O_CMD_UTIL_LOCK 0x17
  243. #define I2O_CMD_UTIL_LOCK_RELEASE 0x19
  244. #define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY 0x15
  245. #define I2O_CMD_SCSI_EXEC 0x81
  246. #define I2O_CMD_SCSI_ABORT 0x83
  247. #define I2O_CMD_SCSI_BUSRESET 0x27
  248. #define I2O_CMD_BLOCK_READ 0x30
  249. #define I2O_CMD_BLOCK_WRITE 0x31
  250. #define I2O_CMD_BLOCK_CFLUSH 0x37
  251. #define I2O_CMD_BLOCK_MLOCK 0x49
  252. #define I2O_CMD_BLOCK_MUNLOCK 0x4B
  253. #define I2O_CMD_BLOCK_MMOUNT 0x41
  254. #define I2O_CMD_BLOCK_MEJECT 0x43
  255. #define I2O_PRIVATE_MSG 0xFF
  256. /*
  257.  * Init Outbound Q status 
  258.  */
  259.  
  260. #define I2O_CMD_OUTBOUND_INIT_IN_PROGRESS 0x01
  261. #define I2O_CMD_OUTBOUND_INIT_REJECTED 0x02
  262. #define I2O_CMD_OUTBOUND_INIT_FAILED 0x03
  263. #define I2O_CMD_OUTBOUND_INIT_COMPLETE 0x04
  264. /*
  265.  * I2O Get Status State values 
  266.  */
  267. #define ADAPTER_STATE_INITIALIZING 0x01
  268. #define ADAPTER_STATE_RESET 0x02
  269. #define ADAPTER_STATE_HOLD 0x04
  270. #define ADAPTER_STATE_READY 0x05
  271. #define ADAPTER_STATE_OPERATIONAL 0x08
  272. #define ADAPTER_STATE_FAILED 0x10
  273. #define ADAPTER_STATE_FAULTED 0x11
  274. /* I2O API function return values */
  275. #define I2O_RTN_NO_ERROR 0
  276. #define I2O_RTN_NOT_INIT 1
  277. #define I2O_RTN_FREE_Q_EMPTY 2
  278. #define I2O_RTN_TCB_ERROR 3
  279. #define I2O_RTN_TRANSACTION_ERROR 4
  280. #define I2O_RTN_ADAPTER_ALREADY_INIT 5
  281. #define I2O_RTN_MALLOC_ERROR 6
  282. #define I2O_RTN_ADPTR_NOT_REGISTERED 7
  283. #define I2O_RTN_MSG_REPLY_TIMEOUT 8
  284. #define I2O_RTN_NO_STATUS 9
  285. #define I2O_RTN_NO_FIRM_VER 10
  286. #define I2O_RTN_NO_LINK_SPEED 11
  287. /* Reply message status defines for all messages */
  288. #define I2O_REPLY_STATUS_SUCCESS                     0x00
  289. #define I2O_REPLY_STATUS_ABORT_DIRTY                 0x01
  290. #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER      0x02
  291. #define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03
  292. #define I2O_REPLY_STATUS_ERROR_DIRTY 0x04
  293. #define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05
  294. #define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06
  295. #define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x08
  296. #define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09
  297. #define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0A
  298. #define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0B
  299. #define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80
  300. /* Status codes and Error Information for Parameter functions */
  301. #define I2O_PARAMS_STATUS_SUCCESS 0x00
  302. #define I2O_PARAMS_STATUS_BAD_KEY_ABORT 0x01
  303. #define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE    0x02
  304. #define I2O_PARAMS_STATUS_BUFFER_FULL 0x03
  305. #define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL 0x04
  306. #define I2O_PARAMS_STATUS_FIELD_UNREADABLE 0x05
  307. #define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE 0x06
  308. #define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS 0x07
  309. #define I2O_PARAMS_STATUS_INVALID_GROUP_ID 0x08
  310. #define I2O_PARAMS_STATUS_INVALID_OPERATION 0x09
  311. #define I2O_PARAMS_STATUS_NO_KEY_FIELD 0x0A
  312. #define I2O_PARAMS_STATUS_NO_SUCH_FIELD 0x0B
  313. #define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP 0x0C
  314. #define I2O_PARAMS_STATUS_OPERATION_ERROR 0x0D
  315. #define I2O_PARAMS_STATUS_SCALAR_ERROR 0x0E
  316. #define I2O_PARAMS_STATUS_TABLE_ERROR 0x0F
  317. #define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE 0x10
  318. /* DetailedStatusCode defines for Executive, DDM, Util and Transaction error
  319.  * messages: Table 3-2 Detailed Status Codes.*/
  320. #define I2O_DSC_SUCCESS                        0x0000
  321. #define I2O_DSC_BAD_KEY                        0x0002
  322. #define I2O_DSC_TCL_ERROR                      0x0003
  323. #define I2O_DSC_REPLY_BUFFER_FULL              0x0004
  324. #define I2O_DSC_NO_SUCH_PAGE                   0x0005
  325. #define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT     0x0006
  326. #define I2O_DSC_INSUFFICIENT_RESOURCE_HARD     0x0007
  327. #define I2O_DSC_CHAIN_BUFFER_TOO_LARGE         0x0009
  328. #define I2O_DSC_UNSUPPORTED_FUNCTION           0x000A
  329. #define I2O_DSC_DEVICE_LOCKED                  0x000B
  330. #define I2O_DSC_DEVICE_RESET                   0x000C
  331. #define I2O_DSC_INAPPROPRIATE_FUNCTION         0x000D
  332. #define I2O_DSC_INVALID_INITIATOR_ADDRESS      0x000E
  333. #define I2O_DSC_INVALID_MESSAGE_FLAGS          0x000F
  334. #define I2O_DSC_INVALID_OFFSET                 0x0010
  335. #define I2O_DSC_INVALID_PARAMETER              0x0011
  336. #define I2O_DSC_INVALID_REQUEST                0x0012
  337. #define I2O_DSC_INVALID_TARGET_ADDRESS         0x0013
  338. #define I2O_DSC_MESSAGE_TOO_LARGE              0x0014
  339. #define I2O_DSC_MESSAGE_TOO_SMALL              0x0015
  340. #define I2O_DSC_MISSING_PARAMETER              0x0016
  341. #define I2O_DSC_TIMEOUT                        0x0017
  342. #define I2O_DSC_UNKNOWN_ERROR                  0x0018
  343. #define I2O_DSC_UNKNOWN_FUNCTION               0x0019
  344. #define I2O_DSC_UNSUPPORTED_VERSION            0x001A
  345. #define I2O_DSC_DEVICE_BUSY                    0x001B
  346. #define I2O_DSC_DEVICE_NOT_AVAILABLE           0x001C
  347. /* Device Claim Types */
  348. #define I2O_CLAIM_PRIMARY 0x01000000
  349. #define I2O_CLAIM_MANAGEMENT 0x02000000
  350. #define I2O_CLAIM_AUTHORIZED 0x03000000
  351. #define I2O_CLAIM_SECONDARY 0x04000000
  352.  
  353. /* Message header defines for VersionOffset */
  354. #define I2OVER15 0x0001
  355. #define I2OVER20 0x0002
  356. /* Default is 1.5, FIXME: Need support for both 1.5 and 2.0 */
  357. #define I2OVERSION I2OVER15
  358. #define SGL_OFFSET_0    I2OVERSION
  359. #define SGL_OFFSET_4    (0x0040 | I2OVERSION)
  360. #define SGL_OFFSET_5    (0x0050 | I2OVERSION)
  361. #define SGL_OFFSET_6    (0x0060 | I2OVERSION)
  362. #define SGL_OFFSET_7    (0x0070 | I2OVERSION)
  363. #define SGL_OFFSET_8    (0x0080 | I2OVERSION)
  364. #define SGL_OFFSET_9    (0x0090 | I2OVERSION)
  365. #define SGL_OFFSET_10   (0x00A0 | I2OVERSION)
  366. #define SGL_OFFSET_12   (0x00C0 | I2OVERSION)
  367. #define TRL_OFFSET_5    (0x0050 | I2OVERSION)
  368. #define TRL_OFFSET_6    (0x0060 | I2OVERSION)
  369.  /* msg header defines for MsgFlags */
  370. #define MSG_STATIC 0x0100
  371. #define MSG_64BIT_CNTXT 0x0200
  372. #define MSG_MULTI_TRANS 0x1000
  373. #define MSG_FAIL 0x2000
  374. #define MSG_LAST 0x4000
  375. #define MSG_REPLY 0x8000
  376.  /* minimum size msg */
  377. #define THREE_WORD_MSG_SIZE 0x00030000
  378. #define FOUR_WORD_MSG_SIZE 0x00040000
  379. #define FIVE_WORD_MSG_SIZE 0x00050000
  380. #define SIX_WORD_MSG_SIZE 0x00060000
  381. #define SEVEN_WORD_MSG_SIZE 0x00070000
  382. #define EIGHT_WORD_MSG_SIZE 0x00080000
  383. #define NINE_WORD_MSG_SIZE 0x00090000
  384. #define TEN_WORD_MSG_SIZE 0x000A0000
  385. #define I2O_MESSAGE_SIZE(x) ((x)<<16)
  386. /* Special TID Assignments */
  387. #define ADAPTER_TID 0
  388. #define HOST_TID 1
  389. #define MSG_FRAME_SIZE 128
  390. #define NMBR_MSG_FRAMES 128
  391. #define MSG_POOL_SIZE 16384
  392. #define I2O_POST_WAIT_OK 0
  393. #define I2O_POST_WAIT_TIMEOUT -ETIMEDOUT
  394. #endif /* __KERNEL__ */
  395. #endif /* _SCSI_I2O_H */