nosy-dump.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #ifndef __nosy_dump_h__
  2. #define __nosy_dump_h__
  3. #define array_length(array) (sizeof(array) / sizeof(array[0]))
  4. #define TCODE_WRITE_QUADLET 0x0
  5. #define TCODE_WRITE_BLOCK 0x1
  6. #define TCODE_WRITE_RESPONSE 0x2
  7. #define TCODE_READ_QUADLET 0x4
  8. #define TCODE_READ_BLOCK 0x5
  9. #define TCODE_READ_QUADLET_RESPONSE 0x6
  10. #define TCODE_READ_BLOCK_RESPONSE 0x7
  11. #define TCODE_CYCLE_START 0x8
  12. #define TCODE_LOCK_REQUEST 0x9
  13. #define TCODE_ISO_DATA 0xa
  14. #define TCODE_LOCK_RESPONSE 0xb
  15. #define TCODE_PHY_PACKET 0x10
  16. #define ACK_NO_ACK 0x0
  17. #define ACK_COMPLETE 0x1
  18. #define ACK_PENDING 0x2
  19. #define ACK_BUSY_X 0x4
  20. #define ACK_BUSY_A 0x5
  21. #define ACK_BUSY_B 0x6
  22. #define ACK_DATA_ERROR 0xd
  23. #define ACK_TYPE_ERROR 0xe
  24. #define ACK_DONE(a) ((a >> 2) == 0)
  25. #define ACK_BUSY(a) ((a >> 2) == 1)
  26. #define ACK_ERROR(a) ((a >> 2) == 3)
  27. #define SPEED_100 0x0
  28. #define SPEED_200 0x1
  29. #define SPEED_400 0x2
  30. struct phy_packet {
  31. unsigned long timestamp;
  32. union {
  33. struct {
  34. unsigned int zero : 24;
  35. unsigned int phy_id : 6;
  36. unsigned int identifier : 2;
  37. } common, link_on;
  38. struct {
  39. unsigned int zero : 16;
  40. unsigned int gap_count : 6;
  41. unsigned int set_gap_count : 1;
  42. unsigned int set_root : 1;
  43. unsigned int root_id : 6;
  44. unsigned int identifier : 2;
  45. } phy_config;
  46. struct {
  47. unsigned int more_packets : 1;
  48. unsigned int initiated_reset : 1;
  49. unsigned int port2 : 2;
  50. unsigned int port1 : 2;
  51. unsigned int port0 : 2;
  52. unsigned int power_class : 3;
  53. unsigned int contender : 1;
  54. unsigned int phy_delay : 2;
  55. unsigned int phy_speed : 2;
  56. unsigned int gap_count : 6;
  57. unsigned int link_active : 1;
  58. unsigned int extended : 1;
  59. unsigned int phy_id : 6;
  60. unsigned int identifier : 2;
  61. } self_id;
  62. struct {
  63. unsigned int more_packets : 1;
  64. unsigned int reserved1 : 1;
  65. unsigned int porth : 2;
  66. unsigned int portg : 2;
  67. unsigned int portf : 2;
  68. unsigned int porte : 2;
  69. unsigned int portd : 2;
  70. unsigned int portc : 2;
  71. unsigned int portb : 2;
  72. unsigned int porta : 2;
  73. unsigned int reserved0 : 2;
  74. unsigned int sequence : 3;
  75. unsigned int extended : 1;
  76. unsigned int phy_id : 6;
  77. unsigned int identifier : 2;
  78. } ext_self_id;
  79. };
  80. unsigned long inverted;
  81. unsigned long ack;
  82. };
  83. #define PHY_PACKET_CONFIGURATION 0x00
  84. #define PHY_PACKET_LINK_ON 0x01
  85. #define PHY_PACKET_SELF_ID 0x02
  86. struct link_packet {
  87. unsigned long timestamp;
  88. union {
  89. struct {
  90. unsigned int priority : 4;
  91. unsigned int tcode : 4;
  92. unsigned int rt : 2;
  93. unsigned int tlabel : 6;
  94. unsigned int destination : 16;
  95. unsigned int offset_high : 16;
  96. unsigned int source : 16;
  97. unsigned long offset_low;
  98. } common;
  99. struct {
  100. unsigned int priority : 4;
  101. unsigned int tcode : 4;
  102. unsigned int rt : 2;
  103. unsigned int tlabel : 6;
  104. unsigned int destination : 16;
  105. unsigned int offset_high : 16;
  106. unsigned int source : 16;
  107. unsigned long offset_low;
  108. unsigned long crc;
  109. } read_quadlet;
  110. struct {
  111. unsigned int priority : 4;
  112. unsigned int tcode : 4;
  113. unsigned int rt : 2;
  114. unsigned int tlabel : 6;
  115. unsigned int destination : 16;
  116. unsigned int reserved0 : 12;
  117. unsigned int rcode : 4;
  118. unsigned int source : 16;
  119. unsigned long reserved1;
  120. unsigned long data;
  121. unsigned long crc;
  122. } read_quadlet_response;
  123. struct {
  124. unsigned int priority : 4;
  125. unsigned int tcode : 4;
  126. unsigned int rt : 2;
  127. unsigned int tlabel : 6;
  128. unsigned int destination : 16;
  129. unsigned int offset_high : 16;
  130. unsigned int source : 16;
  131. unsigned long offset_low;
  132. unsigned int extended_tcode : 16;
  133. unsigned int data_length : 16;
  134. unsigned long crc;
  135. } read_block;
  136. struct {
  137. unsigned int priority : 4;
  138. unsigned int tcode : 4;
  139. unsigned int rt : 2;
  140. unsigned int tlabel : 6;
  141. unsigned int destination : 16;
  142. unsigned int reserved0 : 12;
  143. unsigned int rcode : 4;
  144. unsigned int source : 16;
  145. unsigned long reserved1;
  146. unsigned int extended_tcode : 16;
  147. unsigned int data_length : 16;
  148. unsigned long crc;
  149. unsigned long data[0];
  150. /* crc and ack follows. */
  151. } read_block_response;
  152. struct {
  153. unsigned int priority : 4;
  154. unsigned int tcode : 4;
  155. unsigned int rt : 2;
  156. unsigned int tlabel : 6;
  157. unsigned int destination : 16;
  158. unsigned int offset_high : 16;
  159. unsigned int source : 16;
  160. unsigned long offset_low;
  161. unsigned long data;
  162. unsigned long crc;
  163. } write_quadlet;
  164. struct {
  165. unsigned int priority : 4;
  166. unsigned int tcode : 4;
  167. unsigned int rt : 2;
  168. unsigned int tlabel : 6;
  169. unsigned int destination : 16;
  170. unsigned int offset_high : 16;
  171. unsigned int source : 16;
  172. unsigned int offset_low : 32;
  173. unsigned int extended_tcode : 16;
  174. unsigned int data_length : 16;
  175. unsigned long crc;
  176. unsigned long data[0];
  177. /* crc and ack follows. */
  178. } write_block;
  179. struct {
  180. unsigned int priority : 4;
  181. unsigned int tcode : 4;
  182. unsigned int rt : 2;
  183. unsigned int tlabel : 6;
  184. unsigned int destination : 16;
  185. unsigned int reserved0 : 12;
  186. unsigned int rcode : 4;
  187. unsigned int source : 16;
  188. unsigned long reserved1;
  189. unsigned long crc;
  190. } write_response;
  191. struct {
  192. unsigned int priority : 4;
  193. unsigned int tcode : 4;
  194. unsigned int rt : 2;
  195. unsigned int tlabel : 6;
  196. unsigned int destination : 16;
  197. unsigned int offset_high : 16;
  198. unsigned int source : 16;
  199. unsigned long offset_low;
  200. unsigned long data;
  201. unsigned long crc;
  202. } cycle_start;
  203. struct {
  204. unsigned int sy : 4;
  205. unsigned int tcode : 4;
  206. unsigned int channel : 6;
  207. unsigned int tag : 2;
  208. unsigned int data_length : 16;
  209. unsigned long crc;
  210. } iso_data;
  211. };
  212. };
  213. struct subaction {
  214. unsigned long ack;
  215. size_t length;
  216. struct list link;
  217. struct link_packet packet;
  218. };
  219. struct link_transaction {
  220. int request_node, response_node, tlabel;
  221. struct subaction *request, *response;
  222. struct list request_list, response_list;
  223. struct list link;
  224. };
  225. int decode_fcp(struct link_transaction *t);
  226. #endif /* __nosy_dump_h__ */