175 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __nosy_dump_h__3#define __nosy_dump_h__4 5#define array_length(array) (sizeof(array) / sizeof(array[0]))6 7#define ACK_NO_ACK 0x08#define ACK_DONE(a) ((a >> 2) == 0)9#define ACK_BUSY(a) ((a >> 2) == 1)10#define ACK_ERROR(a) ((a >> 2) == 3)11 12#include <stdint.h>13 14struct phy_packet {15 uint32_t timestamp;16 union {17 struct {18 uint32_t zero:24;19 uint32_t phy_id:6;20 uint32_t identifier:2;21 } common, link_on;22 23 struct {24 uint32_t zero:16;25 uint32_t gap_count:6;26 uint32_t set_gap_count:1;27 uint32_t set_root:1;28 uint32_t root_id:6;29 uint32_t identifier:2;30 } phy_config;31 32 struct {33 uint32_t more_packets:1;34 uint32_t initiated_reset:1;35 uint32_t port2:2;36 uint32_t port1:2;37 uint32_t port0:2;38 uint32_t power_class:3;39 uint32_t contender:1;40 uint32_t phy_delay:2;41 uint32_t phy_speed:2;42 uint32_t gap_count:6;43 uint32_t link_active:1;44 uint32_t extended:1;45 uint32_t phy_id:6;46 uint32_t identifier:2;47 } self_id;48 49 struct {50 uint32_t more_packets:1;51 uint32_t reserved1:1;52 uint32_t porth:2;53 uint32_t portg:2;54 uint32_t portf:2;55 uint32_t porte:2;56 uint32_t portd:2;57 uint32_t portc:2;58 uint32_t portb:2;59 uint32_t porta:2;60 uint32_t reserved0:2;61 uint32_t sequence:3;62 uint32_t extended:1;63 uint32_t phy_id:6;64 uint32_t identifier:2;65 } ext_self_id;66 };67 uint32_t inverted;68 uint32_t ack;69};70 71#define TCODE_PHY_PACKET 0x1072 73#define PHY_PACKET_CONFIGURATION 0x0074#define PHY_PACKET_LINK_ON 0x0175#define PHY_PACKET_SELF_ID 0x0276 77struct link_packet {78 uint32_t timestamp;79 union {80 struct {81 uint32_t priority:4;82 uint32_t tcode:4;83 uint32_t rt:2;84 uint32_t tlabel:6;85 uint32_t destination:16;86 87 uint32_t offset_high:16;88 uint32_t source:16;89 90 uint32_t offset_low;91 } common;92 93 struct {94 uint32_t common[3];95 uint32_t crc;96 } read_quadlet;97 98 struct {99 uint32_t common[3];100 uint32_t data;101 uint32_t crc;102 } read_quadlet_response;103 104 struct {105 uint32_t common[3];106 uint32_t extended_tcode:16;107 uint32_t data_length:16;108 uint32_t crc;109 } read_block;110 111 struct {112 uint32_t common[3];113 uint32_t extended_tcode:16;114 uint32_t data_length:16;115 uint32_t crc;116 uint32_t data[0];117 /* crc and ack follows. */118 } read_block_response;119 120 struct {121 uint32_t common[3];122 uint32_t data;123 uint32_t crc;124 } write_quadlet;125 126 struct {127 uint32_t common[3];128 uint32_t extended_tcode:16;129 uint32_t data_length:16;130 uint32_t crc;131 uint32_t data[0];132 /* crc and ack follows. */133 } write_block;134 135 struct {136 uint32_t common[3];137 uint32_t crc;138 } write_response;139 140 struct {141 uint32_t common[3];142 uint32_t data;143 uint32_t crc;144 } cycle_start;145 146 struct {147 uint32_t sy:4;148 uint32_t tcode:4;149 uint32_t channel:6;150 uint32_t tag:2;151 uint32_t data_length:16;152 153 uint32_t crc;154 } iso_data;155 };156};157 158struct subaction {159 uint32_t ack;160 size_t length;161 struct list link;162 struct link_packet packet;163};164 165struct link_transaction {166 int request_node, response_node, tlabel;167 struct subaction *request, *response;168 struct list request_list, response_list;169 struct list link;170};171 172int decode_fcp(struct link_transaction *t);173 174#endif /* __nosy_dump_h__ */175