Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __nosy_dump_h__
0003 #define __nosy_dump_h__
0004 
0005 #define array_length(array) (sizeof(array) / sizeof(array[0]))
0006 
0007 #define ACK_NO_ACK   0x0
0008 #define ACK_DONE(a)  ((a >> 2) == 0)
0009 #define ACK_BUSY(a)  ((a >> 2) == 1)
0010 #define ACK_ERROR(a) ((a >> 2) == 3)
0011 
0012 #include <stdint.h>
0013 
0014 struct phy_packet {
0015     uint32_t timestamp;
0016     union {
0017         struct {
0018             uint32_t zero:24;
0019             uint32_t phy_id:6;
0020             uint32_t identifier:2;
0021         } common, link_on;
0022 
0023         struct {
0024             uint32_t zero:16;
0025             uint32_t gap_count:6;
0026             uint32_t set_gap_count:1;
0027             uint32_t set_root:1;
0028             uint32_t root_id:6;
0029             uint32_t identifier:2;
0030         } phy_config;
0031 
0032         struct {
0033             uint32_t more_packets:1;
0034             uint32_t initiated_reset:1;
0035             uint32_t port2:2;
0036             uint32_t port1:2;
0037             uint32_t port0:2;
0038             uint32_t power_class:3;
0039             uint32_t contender:1;
0040             uint32_t phy_delay:2;
0041             uint32_t phy_speed:2;
0042             uint32_t gap_count:6;
0043             uint32_t link_active:1;
0044             uint32_t extended:1;
0045             uint32_t phy_id:6;
0046             uint32_t identifier:2;
0047         } self_id;
0048 
0049         struct {
0050             uint32_t more_packets:1;
0051             uint32_t reserved1:1;
0052             uint32_t porth:2;
0053             uint32_t portg:2;
0054             uint32_t portf:2;
0055             uint32_t porte:2;
0056             uint32_t portd:2;
0057             uint32_t portc:2;
0058             uint32_t portb:2;
0059             uint32_t porta:2;
0060             uint32_t reserved0:2;
0061             uint32_t sequence:3;
0062             uint32_t extended:1;
0063             uint32_t phy_id:6;
0064             uint32_t identifier:2;
0065         } ext_self_id;
0066     };
0067     uint32_t inverted;
0068     uint32_t ack;
0069 };
0070 
0071 #define TCODE_PHY_PACKET 0x10
0072 
0073 #define PHY_PACKET_CONFIGURATION 0x00
0074 #define PHY_PACKET_LINK_ON 0x01
0075 #define PHY_PACKET_SELF_ID 0x02
0076 
0077 struct link_packet {
0078     uint32_t timestamp;
0079     union {
0080         struct {
0081             uint32_t priority:4;
0082             uint32_t tcode:4;
0083             uint32_t rt:2;
0084             uint32_t tlabel:6;
0085             uint32_t destination:16;
0086 
0087             uint32_t offset_high:16;
0088             uint32_t source:16;
0089 
0090             uint32_t offset_low;
0091         } common;
0092 
0093         struct {
0094             uint32_t common[3];
0095             uint32_t crc;
0096         } read_quadlet;
0097 
0098         struct {
0099             uint32_t common[3];
0100             uint32_t data;
0101             uint32_t crc;
0102         } read_quadlet_response;
0103 
0104         struct {
0105             uint32_t common[3];
0106             uint32_t extended_tcode:16;
0107             uint32_t data_length:16;
0108             uint32_t crc;
0109         } read_block;
0110 
0111         struct {
0112             uint32_t common[3];
0113             uint32_t extended_tcode:16;
0114             uint32_t data_length:16;
0115             uint32_t crc;
0116             uint32_t data[0];
0117             /* crc and ack follows. */
0118         } read_block_response;
0119 
0120         struct {
0121             uint32_t common[3];
0122             uint32_t data;
0123             uint32_t crc;
0124         } write_quadlet;
0125 
0126         struct {
0127             uint32_t common[3];
0128             uint32_t extended_tcode:16;
0129             uint32_t data_length:16;
0130             uint32_t crc;
0131             uint32_t data[0];
0132             /* crc and ack follows. */
0133         } write_block;
0134 
0135         struct {
0136             uint32_t common[3];
0137             uint32_t crc;
0138         } write_response;
0139 
0140         struct {
0141             uint32_t common[3];
0142             uint32_t data;
0143             uint32_t crc;
0144         } cycle_start;
0145 
0146         struct {
0147             uint32_t sy:4;
0148             uint32_t tcode:4;
0149             uint32_t channel:6;
0150             uint32_t tag:2;
0151             uint32_t data_length:16;
0152 
0153             uint32_t crc;
0154         } iso_data;
0155     };
0156 };
0157 
0158 struct subaction {
0159     uint32_t ack;
0160     size_t length;
0161     struct list link;
0162     struct link_packet packet;
0163 };
0164 
0165 struct link_transaction {
0166     int request_node, response_node, tlabel;
0167     struct subaction *request, *response;
0168     struct list request_list, response_list;
0169     struct list link;
0170 };
0171 
0172 int decode_fcp(struct link_transaction *t);
0173 
0174 #endif /* __nosy_dump_h__ */