linux/tools/firewire/nosy-dump.h
<<
>>
Prefs
   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
  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 0x10
  72
  73#define PHY_PACKET_CONFIGURATION 0x00
  74#define PHY_PACKET_LINK_ON 0x01
  75#define PHY_PACKET_SELF_ID 0x02
  76
  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