forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
3.2 KiB
174 lines
3.2 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __nosy_dump_h__ |
|
#define __nosy_dump_h__ |
|
|
|
#define array_length(array) (sizeof(array) / sizeof(array[0])) |
|
|
|
#define ACK_NO_ACK 0x0 |
|
#define ACK_DONE(a) ((a >> 2) == 0) |
|
#define ACK_BUSY(a) ((a >> 2) == 1) |
|
#define ACK_ERROR(a) ((a >> 2) == 3) |
|
|
|
#include <stdint.h> |
|
|
|
struct phy_packet { |
|
uint32_t timestamp; |
|
union { |
|
struct { |
|
uint32_t zero:24; |
|
uint32_t phy_id:6; |
|
uint32_t identifier:2; |
|
} common, link_on; |
|
|
|
struct { |
|
uint32_t zero:16; |
|
uint32_t gap_count:6; |
|
uint32_t set_gap_count:1; |
|
uint32_t set_root:1; |
|
uint32_t root_id:6; |
|
uint32_t identifier:2; |
|
} phy_config; |
|
|
|
struct { |
|
uint32_t more_packets:1; |
|
uint32_t initiated_reset:1; |
|
uint32_t port2:2; |
|
uint32_t port1:2; |
|
uint32_t port0:2; |
|
uint32_t power_class:3; |
|
uint32_t contender:1; |
|
uint32_t phy_delay:2; |
|
uint32_t phy_speed:2; |
|
uint32_t gap_count:6; |
|
uint32_t link_active:1; |
|
uint32_t extended:1; |
|
uint32_t phy_id:6; |
|
uint32_t identifier:2; |
|
} self_id; |
|
|
|
struct { |
|
uint32_t more_packets:1; |
|
uint32_t reserved1:1; |
|
uint32_t porth:2; |
|
uint32_t portg:2; |
|
uint32_t portf:2; |
|
uint32_t porte:2; |
|
uint32_t portd:2; |
|
uint32_t portc:2; |
|
uint32_t portb:2; |
|
uint32_t porta:2; |
|
uint32_t reserved0:2; |
|
uint32_t sequence:3; |
|
uint32_t extended:1; |
|
uint32_t phy_id:6; |
|
uint32_t identifier:2; |
|
} ext_self_id; |
|
}; |
|
uint32_t inverted; |
|
uint32_t ack; |
|
}; |
|
|
|
#define TCODE_PHY_PACKET 0x10 |
|
|
|
#define PHY_PACKET_CONFIGURATION 0x00 |
|
#define PHY_PACKET_LINK_ON 0x01 |
|
#define PHY_PACKET_SELF_ID 0x02 |
|
|
|
struct link_packet { |
|
uint32_t timestamp; |
|
union { |
|
struct { |
|
uint32_t priority:4; |
|
uint32_t tcode:4; |
|
uint32_t rt:2; |
|
uint32_t tlabel:6; |
|
uint32_t destination:16; |
|
|
|
uint32_t offset_high:16; |
|
uint32_t source:16; |
|
|
|
uint32_t offset_low; |
|
} common; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t crc; |
|
} read_quadlet; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t data; |
|
uint32_t crc; |
|
} read_quadlet_response; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t extended_tcode:16; |
|
uint32_t data_length:16; |
|
uint32_t crc; |
|
} read_block; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t extended_tcode:16; |
|
uint32_t data_length:16; |
|
uint32_t crc; |
|
uint32_t data[0]; |
|
/* crc and ack follows. */ |
|
} read_block_response; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t data; |
|
uint32_t crc; |
|
} write_quadlet; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t extended_tcode:16; |
|
uint32_t data_length:16; |
|
uint32_t crc; |
|
uint32_t data[0]; |
|
/* crc and ack follows. */ |
|
} write_block; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t crc; |
|
} write_response; |
|
|
|
struct { |
|
uint32_t common[3]; |
|
uint32_t data; |
|
uint32_t crc; |
|
} cycle_start; |
|
|
|
struct { |
|
uint32_t sy:4; |
|
uint32_t tcode:4; |
|
uint32_t channel:6; |
|
uint32_t tag:2; |
|
uint32_t data_length:16; |
|
|
|
uint32_t crc; |
|
} iso_data; |
|
}; |
|
}; |
|
|
|
struct subaction { |
|
uint32_t 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__ */
|
|
|