123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- #ifndef __nosy_dump_h__
- #define __nosy_dump_h__
- #define array_length(array) (sizeof(array) / sizeof(array[0]))
- #define TCODE_WRITE_QUADLET 0x0
- #define TCODE_WRITE_BLOCK 0x1
- #define TCODE_WRITE_RESPONSE 0x2
- #define TCODE_READ_QUADLET 0x4
- #define TCODE_READ_BLOCK 0x5
- #define TCODE_READ_QUADLET_RESPONSE 0x6
- #define TCODE_READ_BLOCK_RESPONSE 0x7
- #define TCODE_CYCLE_START 0x8
- #define TCODE_LOCK_REQUEST 0x9
- #define TCODE_ISO_DATA 0xa
- #define TCODE_LOCK_RESPONSE 0xb
- #define TCODE_PHY_PACKET 0x10
- #define ACK_NO_ACK 0x0
- #define ACK_COMPLETE 0x1
- #define ACK_PENDING 0x2
- #define ACK_BUSY_X 0x4
- #define ACK_BUSY_A 0x5
- #define ACK_BUSY_B 0x6
- #define ACK_DATA_ERROR 0xd
- #define ACK_TYPE_ERROR 0xe
- #define ACK_DONE(a) ((a >> 2) == 0)
- #define ACK_BUSY(a) ((a >> 2) == 1)
- #define ACK_ERROR(a) ((a >> 2) == 3)
- #define SPEED_100 0x0
- #define SPEED_200 0x1
- #define SPEED_400 0x2
- struct phy_packet {
- unsigned long timestamp;
- union {
- struct {
- unsigned int zero : 24;
- unsigned int phy_id : 6;
- unsigned int identifier : 2;
- } common, link_on;
- struct {
- unsigned int zero : 16;
- unsigned int gap_count : 6;
- unsigned int set_gap_count : 1;
- unsigned int set_root : 1;
- unsigned int root_id : 6;
- unsigned int identifier : 2;
- } phy_config;
- struct {
- unsigned int more_packets : 1;
- unsigned int initiated_reset : 1;
- unsigned int port2 : 2;
- unsigned int port1 : 2;
- unsigned int port0 : 2;
- unsigned int power_class : 3;
- unsigned int contender : 1;
- unsigned int phy_delay : 2;
- unsigned int phy_speed : 2;
- unsigned int gap_count : 6;
- unsigned int link_active : 1;
- unsigned int extended : 1;
- unsigned int phy_id : 6;
- unsigned int identifier : 2;
- } self_id;
- struct {
- unsigned int more_packets : 1;
- unsigned int reserved1 : 1;
- unsigned int porth : 2;
- unsigned int portg : 2;
- unsigned int portf : 2;
- unsigned int porte : 2;
- unsigned int portd : 2;
- unsigned int portc : 2;
- unsigned int portb : 2;
- unsigned int porta : 2;
- unsigned int reserved0 : 2;
- unsigned int sequence : 3;
- unsigned int extended : 1;
- unsigned int phy_id : 6;
- unsigned int identifier : 2;
- } ext_self_id;
- };
- unsigned long inverted;
- unsigned long ack;
- };
- #define PHY_PACKET_CONFIGURATION 0x00
- #define PHY_PACKET_LINK_ON 0x01
- #define PHY_PACKET_SELF_ID 0x02
- struct link_packet {
- unsigned long timestamp;
- union {
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned long offset_low;
- } common;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned long offset_low;
- unsigned long crc;
- } read_quadlet;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int reserved0 : 12;
- unsigned int rcode : 4;
- unsigned int source : 16;
- unsigned long reserved1;
- unsigned long data;
-
- unsigned long crc;
- } read_quadlet_response;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned long offset_low;
- unsigned int extended_tcode : 16;
- unsigned int data_length : 16;
- unsigned long crc;
- } read_block;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int reserved0 : 12;
- unsigned int rcode : 4;
- unsigned int source : 16;
- unsigned long reserved1;
- unsigned int extended_tcode : 16;
- unsigned int data_length : 16;
- unsigned long crc;
- unsigned long data[0];
- /* crc and ack follows. */
- } read_block_response;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned long offset_low;
- unsigned long data;
-
- unsigned long crc;
- } write_quadlet;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned int offset_low : 32;
- unsigned int extended_tcode : 16;
- unsigned int data_length : 16;
-
- unsigned long crc;
- unsigned long data[0];
- /* crc and ack follows. */
- } write_block;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int reserved0 : 12;
- unsigned int rcode : 4;
- unsigned int source : 16;
- unsigned long reserved1;
- unsigned long crc;
- } write_response;
- struct {
- unsigned int priority : 4;
- unsigned int tcode : 4;
- unsigned int rt : 2;
- unsigned int tlabel : 6;
- unsigned int destination : 16;
- unsigned int offset_high : 16;
- unsigned int source : 16;
- unsigned long offset_low;
- unsigned long data;
- unsigned long crc;
- } cycle_start;
- struct {
- unsigned int sy : 4;
- unsigned int tcode : 4;
- unsigned int channel : 6;
- unsigned int tag : 2;
- unsigned int data_length : 16;
- unsigned long crc;
- } iso_data;
- };
- };
- struct subaction {
- unsigned long ack;
- size_t length;
- struct list link;
- struct link_packet packet;
- };
- struct link_transaction {
- int request_node, response_node, tlabel;
- struct subaction *request, *response;
- struct list request_list, response_list;
- struct list link;
- };
- int decode_fcp(struct link_transaction *t);
- #endif /* __nosy_dump_h__ */
|