root/tools/firewire/nosy-dump.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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   0x0
   8 #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 
  14 struct 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 0x10
  72 
  73 #define PHY_PACKET_CONFIGURATION 0x00
  74 #define PHY_PACKET_LINK_ON 0x01
  75 #define PHY_PACKET_SELF_ID 0x02
  76 
  77 struct 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 
 158 struct subaction {
 159         uint32_t ack;
 160         size_t length;
 161         struct list link;
 162         struct link_packet packet;
 163 };
 164 
 165 struct 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 
 172 int decode_fcp(struct link_transaction *t);
 173 
 174 #endif /* __nosy_dump_h__ */

/* [<][>][^][v][top][bottom][index][help] */