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

嵌入式Linux

开发平台:

Unix_Linux

  1. /**********************************************************************
  2.  * Defines for the Tachyon Fibre Channel Controller and the Interphase
  3.  * (i)chip TPI. 
  4.  *********************************************************************/
  5. #ifndef _TACH_H
  6. #define _TACH_H
  7. #define MY_PAGE_SIZE       4096
  8. #define REPLICATE          0xFF
  9. #define MAX_NODES          127
  10. #define BROADCAST          0xFFFFFF
  11. #define BROADCAST_ADDR     0xFFFFFFFFFFFF
  12. #define LOGIN_COMPLETED     2
  13. #define LOGIN_ATTEMPTED     1
  14. #define LOGIN_NOT_ATTEMPTED 0
  15. #define TRUE                1
  16. #define FALSE               0
  17. #define TACHYON_LIMIT       0x01EF
  18. #define TACHYON_OFFSET      0x200
  19. /* Offsets to the (i) chip */
  20. #define ICHIP_HW_CONTROL_REG_OFF    (0x080 - TACHYON_OFFSET)
  21. #define ICHIP_HW_STATUS_REG_OFF     (0x084 - TACHYON_OFFSET)
  22. #define ICHIP_HW_ADDR_MASK_REG_OFF  (0x090 - TACHYON_OFFSET)
  23. /* (i)chip Hardware Control Register defines */
  24. #define ICHIP_HCR_RESET         0x01
  25. #define ICHIP_HCR_DERESET       0x0
  26. #define ICHIP_HCR_ENABLE_INTA   0x0000003E 
  27. #define ICHIP_HCR_ENABLE_INTB   0x003E0000
  28. #define ICHIP_HCR_IWDATA_FIFO   0x800000
  29. /* (i)chip Hardware Status Register defines */
  30. #define ICHIP_HSR_INT_LATCH     0x02
  31. /* (i)chip Hardware Address Mask Register defines */
  32. #define ICHIP_HAMR_BYTE_SWAP_ADDR_TR    0x08
  33. #define ICHIP_HAMR_BYTE_SWAP_NO_ADDR_TR 0x04
  34. /* NOVRAM defines */
  35. #define IPH5526_NOVRAM_SIZE 64
  36. /* Offsets for the registers that correspond to the 
  37.  * Qs on the Tachyon (As defined in the Tachyon Manual).
  38.  */
  39. /* Outbound Command Queue (OCQ).
  40.  */
  41. #define OCQ_BASE_REGISTER_OFFSET 0x000  
  42. #define OCQ_LENGTH_REGISTER_OFFSET 0x004
  43. #define OCQ_PRODUCER_REGISTER_OFFSET 0x008  
  44. #define OCQ_CONSUMER_REGISTER_OFFSET 0x00C 
  45. /* Inbound Message Queue (IMQ).
  46.  */
  47. #define IMQ_BASE_REGISTER_OFFSET 0x080
  48. #define IMQ_LENGTH_REGISTER_OFFSET 0x084
  49. #define IMQ_CONSUMER_REGISTER_OFFSET 0x088
  50. #define IMQ_PRODUCER_REGISTER_OFFSET 0x08C
  51. /* Multiframe Sequence Buffer Queue (MFSBQ)
  52.  */
  53. #define MFSBQ_BASE_REGISTER_OFFSET 0x0C0
  54. #define MFSBQ_LENGTH_REGISTER_OFFSET 0x0C4
  55. #define MFSBQ_PRODUCER_REGISTER_OFFSET 0x0C8
  56. #define MFSBQ_CONSUMER_REGISTER_OFFSET 0x0CC  
  57. #define MFS_LENGTH_REGISTER_OFFSET 0x0D0
  58. /* Single Frame Sequence Buffer Queue (SFSBQ)
  59.  */
  60. #define SFSBQ_BASE_REGISTER_OFFSET 0x100
  61. #define SFSBQ_LENGTH_REGISTER_OFFSET 0x104
  62. #define SFSBQ_PRODUCER_REGISTER_OFFSET 0x108
  63. #define SFSBQ_CONSUMER_REGISTER_OFFSET 0x10C  
  64. #define SFS_LENGTH_REGISTER_OFFSET 0x110
  65. /* SCSI Exchange State Table (SEST)
  66.  */
  67. #define SEST_BASE_REGISTER_OFFSET 0x140
  68. #define SEST_LENGTH_REGISTER_OFFSET 0x144
  69. #define SCSI_LENGTH_REGISTER_OFFSET 0x148
  70. /*  Length of the various Qs 
  71.  */
  72. #define NO_OF_ENTRIES 8
  73. #define OCQ_LENGTH (MY_PAGE_SIZE/32)
  74. #define IMQ_LENGTH (MY_PAGE_SIZE/32)
  75. #define MFSBQ_LENGTH 8
  76. #define SFSBQ_LENGTH 8
  77. #define SEST_LENGTH MY_PAGE_SIZE
  78. /* Size of the various buffers.
  79.  */
  80. #define TACH_FRAME_SIZE         2048
  81. #define MFS_BUFFER_SIZE         TACH_FRAME_SIZE
  82. #define SFS_BUFFER_SIZE         (TACH_FRAME_SIZE + TACHYON_HEADER_LEN)
  83. #define SEST_BUFFER_SIZE        512
  84. #define TACH_HEADER_SIZE        64
  85. #define NO_OF_TACH_HEADERS      ((MY_PAGE_SIZE)/TACH_HEADER_SIZE)
  86. #define NO_OF_FCP_CMNDS         (MY_PAGE_SIZE/32)
  87. #define SDB_SIZE                2048
  88. #define NO_OF_SDB_ENTRIES       ((32*MY_PAGE_SIZE)/SDB_SIZE)
  89. /* Offsets to the other Tachyon registers.
  90.  * (As defined in the Tachyon manual)
  91.  */
  92. #define TACHYON_CONFIG_REGISTER_OFFSET          0x184
  93. #define TACHYON_CONTROL_REGISTER_OFFSET         0x188
  94. #define TACHYON_STATUS_REGISTER_OFFSET          0x18C
  95. #define TACHYON_FLUSH_SEST_REGISTER_OFFSET      0x190
  96. /* Defines for the Tachyon Configuration register.
  97.  */
  98. #define SCSI_ENABLE             0x40000000     
  99. #define WRITE_STREAM_SIZE       0x800 /* size = 16 */         
  100. #define READ_STREAM_SIZE        0x300 /* size = 64 */      
  101. #define PARITY_EVEN             0x2         
  102. #define OOO_REASSEMBLY_DISABLE  0x40
  103. /* Defines for the Tachyon Control register.
  104.  */
  105. #define SOFTWARE_RESET 0x80000000
  106. #define OCQ_RESET 0x4
  107. #define ERROR_RELEASE 0x2
  108. /* Defines for the Tachyon Status register.
  109.  */
  110. #define RECEIVE_FIFO_EMPTY      0x10
  111. #define OSM_FROZEN              0x1
  112. #define OCQ_RESET_STATUS        0x20
  113. #define SCSI_FREEZE_STATUS      0x40
  114. /* Offsets to the Frame Manager registers.
  115.  */
  116. #define FMGR_CONFIG_REGISTER_OFFSET 0x1C0
  117. #define FMGR_CONTROL_REGISTER_OFFSET 0x1C4
  118. #define FMGR_STATUS_REGISTER_OFFSET 0x1C8
  119. #define FMGR_TIMER_REGISTER_OFFSET 0x1CC
  120. #define FMGR_WWN_HI_REGISTER_OFFSET 0x1E0
  121. #define FMGR_WWN_LO_REGISTER_OFFSET 0x1E4
  122. #define FMGR_RCVD_ALPA_REGISTER_OFFSET 0x1E8
  123. /* Defines for the Frame Manager Configuration register.
  124.  */
  125. #define BB_CREDIT                    0x10000
  126. #define NPORT                        0x8000 
  127. #define LOOP_INIT_FABRIC_ADDRESS     0x400  
  128. #define LOOP_INIT_PREVIOUS_ADDRESS   0x200  
  129. #define LOOP_INIT_SOFT_ADDRESS       0x80  
  130. /* Defines for the Frame Manager Control register.
  131.  */
  132. #define HOST_CONTROL                 0x02   
  133. #define EXIT_HOST_CONTROL            0x03  
  134. #define OFFLINE                      0x05 
  135. #define INITIALIZE                   0x06 
  136. #define CLEAR_LF                     0x07
  137. /* Defines for the Frame Manager Status register.
  138.  */
  139. #define LOOP_UP                 0x80000000
  140. #define TRANSMIT_PARITY_ERROR   0x40000000
  141. #define NON_PARTICIPATING       0x20000000
  142. #define OUT_OF_SYNC             0x02000000
  143. #define LOSS_OF_SIGNAL          0x01000000
  144. #define NOS_OLS_RECEIVED        0x00080000
  145. #define LOOP_STATE_TIMEOUT      0x00040000
  146. #define LIPF_RECEIVED           0x00020000
  147. #define BAD_ALPA                0x00010000
  148. #define LINK_FAILURE            0x00001000
  149. #define ELASTIC_STORE_ERROR     0x00000400
  150. #define LINK_UP                 0x00000200
  151. #define LINK_DOWN               0x00000100
  152. #define ARBITRATING             0x00000010
  153. #define ARB_WON                 0x00000020
  154. #define OPEN                    0x00000030
  155. #define OPENED                  0x00000040
  156. #define TX_CLS                  0x00000050
  157. #define RX_CLS                  0x00000060
  158. #define TRANSFER                0x00000070
  159. #define INITIALIZING            0x00000080
  160. #define LOOP_FAIL               0x000000D0
  161. #define OLD_PORT                0x000000F0
  162. #define PORT_STATE_ACTIVE       0x0000000F
  163. #define PORT_STATE_OFFLINE      0x00000000
  164. #define PORT_STATE_LF1          0x00000009
  165. #define PORT_STATE_LF2          0x0000000A
  166. /* Completion Message Types 
  167.  * (defined in P.177 of the Tachyon manual)
  168.  */
  169. #define OUTBOUND_COMPLETION             0x000
  170. #define OUTBOUND_COMPLETION_I           0x100
  171. #define OUT_HI_PRI_COMPLETION           0x001
  172. #define OUT_HI_PRI_COMPLETION_I         0x101
  173. #define INBOUND_MFS_COMPLETION          0x102
  174. #define INBOUND_OOO_COMPLETION          0x003
  175. #define INBOUND_SFS_COMPLETION          0x104
  176. #define INBOUND_C1_TIMEOUT              0x105
  177. #define INBOUND_UNKNOWN_FRAME_I         0x106
  178. #define INBOUND_BUSIED_FRAME            0x006
  179. #define SFS_BUF_WARN                    0x107
  180. #define MFS_BUF_WARN                    0x108
  181. #define IMQ_BUF_WARN                    0x109
  182. #define FRAME_MGR_INTERRUPT             0x10A
  183. #define READ_STATUS                     0x10B
  184. #define INBOUND_SCSI_DATA_COMPLETION    0x10C
  185. #define INBOUND_SCSI_COMMAND            0x10D
  186. #define BAD_SCSI_FRAME                  0x10E
  187. #define INB_SCSI_STATUS_COMPLETION      0x10F
  188. /* One of the things that we care about when we receive an
  189.  * Outbound Completion Message (OCM).
  190.  */
  191. #define OCM_TIMEOUT_OR_BAD_ALPA         0x0800
  192. /* Defines for the Tachyon Header structure.
  193.  */
  194. #define SOFI3                0x70
  195. #define SOFN3                0xB0
  196. #define EOFN                 0x5
  197. /* R_CTL */
  198. #define FC4_DEVICE_DATA      0
  199. #define EXTENDED_LINK_DATA   0x20000000
  200. #define FC4_LINK_DATA        0x30000000
  201. #define BASIC_LINK_DATA      0x80000000
  202. #define LINK_CONTROL         0xC0000000
  203. #define SOLICITED_DATA       0x1000000
  204. #define UNSOLICITED_CONTROL  0x2000000
  205. #define SOLICITED_CONTROL    0x3000000
  206. #define UNSOLICITED_DATA     0x4000000
  207. #define DATA_DESCRIPTOR      0x5000000
  208. #define UNSOLICITED_COMMAND  0x6000000
  209. #define RCTL_ELS_UCTL          0x22000000
  210. #define RCTL_ELS_SCTL          0x23000000
  211. #define RCTL_BASIC_ABTS        0x81000000
  212. #define RCTL_BASIC_ACC         0x84000000
  213. #define RCTL_BASIC_RJT         0x85000000
  214. /* TYPE */
  215. #define TYPE_BLS               0x00000000
  216. #define TYPE_ELS               0x01000000
  217. #define TYPE_FC_SERVICES       0x20000000
  218. #define TYPE_LLC_SNAP          0x05000000
  219. #define TYPE_FCP               0x08000000
  220. /* F_CTL */
  221. #define EXCHANGE_RESPONDER     0x800000
  222. #define SEQUENCE_RESPONDER     0x400000
  223. #define FIRST_SEQUENCE         0x200000
  224. #define LAST_SEQUENCE          0x100000
  225. #define SEQUENCE_INITIATIVE    0x10000
  226. #define RELATIVE_OFF_PRESENT   0x8
  227. #define END_SEQUENCE           0x80000
  228. #define TACHYON_HEADER_LEN     32
  229. #define NW_HEADER_LEN          16
  230. /* Defines for the Outbound Descriptor Block (ODB).
  231.  */
  232. #define ODB_CLASS_3          0xC000
  233. #define ODB_NO_COMP          0x400
  234. #define ODB_NO_INT           0x200
  235. #define ODB_EE_CREDIT        0xF
  236. /* Defines for the Extended Descriptor Block (EDB).
  237.  */
  238. #define EDB_LEN              ((32*MY_PAGE_SIZE)/8) 
  239. #define EDB_END              0x8000
  240. #define EDB_FREE             0
  241. #define EDB_BUSY             1
  242. /* Command Codes */
  243. #define ELS_LS_RJT          0x01000000
  244. #define ELS_ACC             0x02000000
  245. #define ELS_PLOGI           0x03000000
  246. #define ELS_FLOGI           0x04000000
  247. #define ELS_LOGO            0x05000000
  248. #define ELS_TPRLO           0x24000000
  249. #define ELS_ADISC           0x52000000
  250. #define ELS_PDISC           0x50000000
  251. #define ELS_PRLI            0x20000000 
  252. #define ELS_PRLO            0x21000000
  253. #define ELS_SCR             0x62000000
  254. #define ELS_RSCN            0x61000000
  255. #define ELS_FARP_REQ        0x54000000
  256. #define ELS_ABTX            0x06000000
  257. #define ELS_ADVC            0x0D000000
  258. #define ELS_ECHO            0x10000000
  259. #define ELS_ESTC            0x0C000000
  260. #define ELS_ESTS            0x0B000000
  261. #define ELS_RCS             0x07000000
  262. #define ELS_RES             0x08000000
  263. #define ELS_RLS             0x0F000000
  264. #define ELS_RRQ             0x12000000
  265. #define ELS_RSS             0x09000000
  266. #define ELS_RTV             0x0E000000
  267. #define ELS_RSI             0x0A000000
  268. #define ELS_TEST            0x11000000
  269. #define ELS_RNC             0x53000000
  270. #define ELS_RVCS            0x41000000
  271. #define ELS_TPLS            0x23000000
  272. #define ELS_GAID            0x30000000
  273. #define ELS_FACT            0x31000000
  274. #define ELS_FAN             0x60000000
  275. #define ELS_FDACT           0x32000000
  276. #define ELS_NACT            0x33000000
  277. #define ELS_NDACT           0x34000000
  278. #define ELS_QoSR            0x40000000
  279. #define ELS_FDISC           0x51000000
  280. #define ELS_NS_PLOGI        0x03FFFFFC 
  281. /* LS_RJT reason codes.
  282.  */
  283. #define INV_LS_CMND_CODE                0x0001
  284. #define LOGICAL_ERR                     0x0003
  285. #define LOGICAL_BUSY                    0x0005
  286. #define PROTOCOL_ERR                    0x0007
  287. #define UNABLE_TO_PERFORM               0x0009
  288. #define CMND_NOT_SUPP                   0x000B
  289. /* LS_RJT explanation codes.
  290.  */
  291. #define NO_EXPLN                        0x0000
  292. #define RECV_FIELD_SIZE                 0x0700
  293. #define CONC_SEQ                        0x0900
  294. #define REQ_NOT_SUPPORTED               0x2C00
  295. #define INV_PAYLOAD_LEN                 0x2D00
  296. /* Payload Length defines. 
  297.  */
  298. #define PLOGI_LEN 116
  299. #define CONCURRENT_SEQUENCES 0x01
  300. #define RO_INFO_CATEGORY     0xFE
  301. #define E_D_TOV              0x07D0 /* 2 Secs */
  302. #define AL_TIME              0x0010 /* ~15 msec */
  303. #define TOV_VALUES           (AL_TIME << 16) | E_D_TOV
  304. #define RT_TOV               0x64   /* 100 msec */
  305. #define PTP_TOV_VALUES       (RT_TOV << 16) | E_D_TOV
  306. #define SERVICE_VALID        0x8000
  307. #define SEQUENCE_DELIVERY  0x0800
  308. #define CLASS3_CONCURRENT_SEQUENCE    0x01
  309. #define CLASS3_OPEN_SEQUENCE          0x01
  310. /* These are retrieved from the NOVRAM.
  311.  */
  312. #define WORLD_WIDE_NAME_LOW     fi->g.my_port_name_low
  313. #define WORLD_WIDE_NAME_HIGH    fi->g.my_port_name_high
  314. #define N_PORT_NAME_HIGH        fi->g.my_port_name_high
  315. #define N_PORT_NAME_LOW         fi->g.my_port_name_low
  316. #define NODE_NAME_HIGH          fi->g.my_node_name_high
  317. #define NODE_NAME_LOW           fi->g.my_node_name_low
  318. #define PORT_NAME_LEN           8
  319. #define NODE_NAME_LEN           8
  320. #define PH_VERSION        0x0909
  321. #define LOOP_BB_CREDIT  0x00
  322. #define PT2PT_BB_CREDIT 0x01
  323. #define FLOGI_C_F       0x0800 /* Alternate BB_Credit Mgmnt */ 
  324. #define PLOGI_C_F       0x8800 /* Continuously Increasing + Alternate BB_Credit Management */
  325. /* Fabric defines */
  326. #define DIRECTORY_SERVER        0xFFFFFC
  327. #define FABRIC_CONTROLLER       0xFFFFFD
  328. #define F_PORT                  0xFFFFFE
  329. #define FLOGI_DID 0xFFFE
  330. #define NS_PLOGI_DID 0xFFFC
  331. /* Fibre Channel Services defines */
  332. #define FCS_RFC_4           0x02170000
  333. #define FCS_GP_ID4          0x01A10000
  334. #define FCS_ACC             0x8002
  335. #define FCS_REJECT          0x8001
  336. /* CT Header defines */
  337. #define FC_CT_REV               0x01000000
  338. #define DIRECTORY_SERVER_APP    0xFC
  339. #define NAME_SERVICE            0x02
  340. /* Port Type defines */
  341. #define PORT_TYPE_IP            0x05000000
  342. #define PORT_TYPE_NX_PORTS      0x7F000000
  343. /* SCR defines */
  344. #define FABRIC_DETECTED_REG 0x00000001
  345. #define N_PORT_DETECTED_REG 0x00000002
  346. #define FULL_REGISTRATION 0x00000003
  347. #define CLEAR_REGISTRATION 0x000000FF
  348. /* Command structure has only one byte to address targets 
  349.  */
  350. #define MAX_SCSI_TARGETS 0xFF 
  351. #define FC_SCSI_READ                    0x80
  352. #define FC_SCSI_WRITE                   0x81
  353. #define FC_ELS                          0x01
  354. #define FC_BLS                          0x00
  355. #define FC_IP                           0x05
  356. #define FC_BROADCAST                    0xFF
  357. /* SEST defines.
  358.  */
  359. #define SEST_V                          0x80000000 /* V = 1 */
  360. #define INB_SEST_VED                    0xA0000000 /* V = 1, D = 1 */
  361. #define SEST_INV                        0x7FFFFFFF 
  362. #define OUTB_SEST_VED                   0x80000000 /* V = 1 */
  363. #define INV_SEQ_LEN                     0xFFFFFFFF
  364. #define OUTB_SEST_LINK                  0xFFFF
  365. /* PRLI defines. 
  366.  */
  367. #define PAGE_LEN                0x100000 /* 3rd byte - 0x10 */
  368. #define PRLI_LEN                0x0014 /* 20 bytes */
  369. #define FCP_TYPE_CODE           0x0800 /* FCP-SCSI */
  370. #define IMAGE_PAIR              0x2000 /* establish image pair */
  371. #define INITIATOR_FUNC          0x00000020
  372. #define TARGET_FUNC             0x00000010
  373. #define READ_XFER_RDY_DISABLED  0x00000002
  374. #define NODE_PROCESS_LOGGED_IN  0x3
  375. #define NODE_NOT_PRESENT        0x2
  376. #define NODE_LOGGED_IN          0x1
  377. #define NODE_LOGGED_OUT         0x0
  378. /* Defines to determine what should be returned when a SCSI frame
  379.  * times out.
  380.  */
  381. #define FC_SCSI_BAD_TARGET 0xFFFE0000
  382. /* RSCN Address formats */
  383. #define PORT_ADDRESS_FORMAT             0x00
  384. #define AREA_ADDRESS_FORMAT             0x01
  385. #define DOMAIN_ADDRESS_FORMAT           0x02
  386. /* Defines used to determine whether a frame transmission should
  387.  * be indicated by an interrupt or not.
  388.  */
  389. #define NO_COMP_AND_INT 0
  390. #define INT_AND_COMP_REQ 1
  391. #define NO_INT_COMP_REQ 2
  392. /* Other junk...
  393.  */
  394. #define SDB_FREE             0
  395. #define SDB_BUSY             1
  396. #define MAX_PENDING_FRAMES   15
  397. #define RX_ID_FIRST_SEQUENCE 0xFFFF
  398. #define OX_ID_FIRST_SEQUENCE 0xFFFF
  399. #define NOT_SCSI_XID            0x8000
  400. #define MAX_SCSI_XID            0x0FFF /* X_IDs are from 0-4095 */
  401. #define SCSI_READ_BIT           0x4000 
  402. #define MAX_SCSI_OXID           0x4FFF
  403. #define OXID_AVAILABLE          0
  404. #define OXID_INUSE              1
  405. #define MAX_SEQ_ID              0xFF
  406. #define INITIATOR             2
  407. #define TARGET                1
  408. #define DELETE_ENTRY          1
  409. #define ADD_ENTRY             2
  410. #endif /* _TACH_H */