#ifndef __nosy_dump_h__
#define __nosy_dump_h__

#define array_length(array) (sizeof(array) / sizeof(array[0]))

#define TCODE_WRITE_QUADLET         0x0
#define TCODE_WRITE_BLOCK           0x1
#define TCODE_WRITE_RESPONSE        0x2
#define TCODE_READ_QUADLET          0x4
#define TCODE_READ_BLOCK            0x5
#define TCODE_READ_QUADLET_RESPONSE 0x6
#define TCODE_READ_BLOCK_RESPONSE   0x7
#define TCODE_CYCLE_START           0x8
#define TCODE_LOCK_REQUEST          0x9
#define TCODE_ISO_DATA              0xa
#define TCODE_LOCK_RESPONSE         0xb
#define TCODE_PHY_PACKET            0x10

#define ACK_NO_ACK               0x0
#define ACK_COMPLETE             0x1
#define ACK_PENDING              0x2
#define ACK_BUSY_X               0x4
#define ACK_BUSY_A               0x5
#define ACK_BUSY_B               0x6
#define ACK_DATA_ERROR           0xd
#define ACK_TYPE_ERROR           0xe 

#define ACK_DONE(a)  ((a >> 2) == 0)
#define ACK_BUSY(a)  ((a >> 2) == 1)
#define ACK_ERROR(a) ((a >> 2) == 3)

#define SPEED_100                0x0
#define SPEED_200                0x1
#define SPEED_400                0x2

#include <stdint.h>

struct phy_packet {
  uint32_t timestamp;
  union {
    struct {
      uint32_t zero:24;
      uint32_t phy_id:6;
      uint32_t identifier:2;
    } common, link_on;

    struct {
      uint32_t zero:16;
      uint32_t gap_count:6;
      uint32_t set_gap_count:1;
      uint32_t set_root:1;
      uint32_t root_id:6;
      uint32_t identifier:2;
    } phy_config;

    struct {
      uint32_t more_packets:1;
      uint32_t initiated_reset:1;
      uint32_t port2:2;
      uint32_t port1:2;
      uint32_t port0:2;
      uint32_t power_class:3;
      uint32_t contender:1;
      uint32_t phy_delay:2;
      uint32_t phy_speed:2;
      uint32_t gap_count:6;
      uint32_t link_active:1;
      uint32_t extended:1;
      uint32_t phy_id:6;
      uint32_t identifier:2;
    } self_id;

    struct {
      uint32_t more_packets:1;
      uint32_t reserved1:1;
      uint32_t porth:2;
      uint32_t portg:2;
      uint32_t portf:2;
      uint32_t porte:2;
      uint32_t portd:2;
      uint32_t portc:2;
      uint32_t portb:2;
      uint32_t porta:2;
      uint32_t reserved0:2;
      uint32_t sequence:3;
      uint32_t extended:1;
      uint32_t phy_id:6;
      uint32_t identifier:2;
    } ext_self_id;
  };
  uint32_t inverted;
  uint32_t ack;
};

#define PHY_PACKET_CONFIGURATION 0x00
#define PHY_PACKET_LINK_ON 0x01
#define PHY_PACKET_SELF_ID 0x02

struct link_packet {
  uint32_t timestamp;
  union {
    struct {
      uint32_t priority:4;
      uint32_t tcode:4;
      uint32_t rt:2;
      uint32_t tlabel:6;
      uint32_t destination:16;

      uint32_t offset_high:16;
      uint32_t source:16;

      uint32_t offset_low;
    } common;

    struct {
      uint32_t common[3];
      uint32_t crc;
    } read_quadlet;

    struct {
      uint32_t common[3];
      uint32_t data;
      uint32_t crc;
    } read_quadlet_response;

    struct {
      uint32_t common[3];
      uint32_t extended_tcode:16;
      uint32_t data_length:16;
      uint32_t crc;
    } read_block;

    struct {
      uint32_t common[3];
      uint32_t extended_tcode:16;
      uint32_t data_length:16;
      uint32_t crc;
      uint32_t data[0];
      /* crc and ack follows. */
    } read_block_response;

    struct {
      uint32_t common[3];
      uint32_t data;
      uint32_t crc;
    } write_quadlet;

    struct {
      uint32_t common[3];
      uint32_t extended_tcode:16;
      uint32_t data_length:16;
      uint32_t crc;
      uint32_t data[0];
      /* crc and ack follows. */
    } write_block;

    struct {
      uint32_t common[3];
      uint32_t crc;
    } write_response;

    struct {
      uint32_t common[3];
      uint32_t data;
      uint32_t crc;
    } cycle_start;

    struct {
      uint32_t sy:4;
      uint32_t tcode:4;
      uint32_t channel:6;
      uint32_t tag:2;
      uint32_t data_length:16;

      uint32_t crc;
    } iso_data;
  };
};

struct subaction {
  uint32_t ack;
  size_t length;
  struct list link;
  struct link_packet packet;
};

struct link_transaction {
  int request_node, response_node, tlabel;
  struct subaction *request, *response;
  struct list request_list, response_list;
  struct list link;
};

int decode_fcp(struct link_transaction *t);

#endif /* __nosy_dump_h__ */
