brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · 69e5e59 Raw
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