ieee1394.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Generic IEEE 1394 definitions
  3.  */
  4. #ifndef _IEEE1394_IEEE1394_H
  5. #define _IEEE1394_IEEE1394_H
  6. #define TCODE_WRITEQ             0x0
  7. #define TCODE_WRITEB             0x1
  8. #define TCODE_WRITE_RESPONSE     0x2
  9. #define TCODE_READQ              0x4
  10. #define TCODE_READB              0x5
  11. #define TCODE_READQ_RESPONSE     0x6
  12. #define TCODE_READB_RESPONSE     0x7
  13. #define TCODE_CYCLE_START        0x8
  14. #define TCODE_LOCK_REQUEST       0x9
  15. #define TCODE_ISO_DATA           0xa
  16. #define TCODE_LOCK_RESPONSE      0xb
  17. #define RCODE_COMPLETE           0x0
  18. #define RCODE_CONFLICT_ERROR     0x4
  19. #define RCODE_DATA_ERROR         0x5
  20. #define RCODE_TYPE_ERROR         0x6
  21. #define RCODE_ADDRESS_ERROR      0x7
  22. #define EXTCODE_MASK_SWAP        0x1
  23. #define EXTCODE_COMPARE_SWAP     0x2
  24. #define EXTCODE_FETCH_ADD        0x3
  25. #define EXTCODE_LITTLE_ADD       0x4
  26. #define EXTCODE_BOUNDED_ADD      0x5
  27. #define EXTCODE_WRAP_ADD         0x6
  28. #define ACK_COMPLETE             0x1
  29. #define ACK_PENDING              0x2
  30. #define ACK_BUSY_X               0x4
  31. #define ACK_BUSY_A               0x5
  32. #define ACK_BUSY_B               0x6
  33. #define ACK_DATA_ERROR           0xd
  34. #define ACK_TYPE_ERROR           0xe 
  35. /* Non-standard "ACK codes" for internal use */
  36. #define ACKX_NONE                (-1)
  37. #define ACKX_SEND_ERROR          (-2)
  38. #define ACKX_ABORTED             (-3)
  39. #define ACKX_TIMEOUT             (-4)
  40. #define SPEED_100                0x0
  41. #define SPEED_200                0x1
  42. #define SPEED_400                0x2
  43. /* Maps speed values above to a string representation */
  44. extern const char *hpsb_speedto_str[];
  45. #define SELFID_PWRCL_NO_POWER    0x0
  46. #define SELFID_PWRCL_PROVIDE_15W 0x1
  47. #define SELFID_PWRCL_PROVIDE_30W 0x2
  48. #define SELFID_PWRCL_PROVIDE_45W 0x3
  49. #define SELFID_PWRCL_USE_1W      0x4
  50. #define SELFID_PWRCL_USE_3W      0x5
  51. #define SELFID_PWRCL_USE_6W      0x6
  52. #define SELFID_PWRCL_USE_10W     0x7
  53. #define SELFID_PORT_CHILD        0x3
  54. #define SELFID_PORT_PARENT       0x2
  55. #define SELFID_PORT_NCONN        0x1
  56. #define SELFID_PORT_NONE         0x0   
  57. #include <asm/byteorder.h>
  58. #ifdef __BIG_ENDIAN_BITFIELD
  59. struct selfid {
  60.         u32 packet_identifier:2; /* always binary 10 */
  61.         u32 phy_id:6;
  62.         /* byte */
  63.         u32 extended:1; /* if true is struct ext_selfid */
  64.         u32 link_active:1;
  65.         u32 gap_count:6;
  66.         /* byte */
  67.         u32 speed:2;
  68.         u32 phy_delay:2;
  69.         u32 contender:1;
  70.         u32 power_class:3;
  71.         /* byte */
  72.         u32 port0:2;
  73.         u32 port1:2;
  74.         u32 port2:2;
  75.         u32 initiated_reset:1;
  76.         u32 more_packets:1;
  77. } __attribute__((packed));
  78. struct ext_selfid {
  79.         u32 packet_identifier:2; /* always binary 10 */
  80.         u32 phy_id:6;
  81.         /* byte */
  82.         u32 extended:1; /* if false is struct selfid */
  83.         u32 seq_nr:3;
  84.         u32 reserved:2;
  85.         u32 porta:2;
  86.         /* byte */
  87.         u32 portb:2;
  88.         u32 portc:2;
  89.         u32 portd:2;
  90.         u32 porte:2;
  91.         /* byte */
  92.         u32 portf:2;
  93.         u32 portg:2;
  94.         u32 porth:2;
  95.         u32 reserved2:1;
  96.         u32 more_packets:1;
  97. } __attribute__((packed));
  98. #elif defined __LITTLE_ENDIAN_BITFIELD /* __BIG_ENDIAN_BITFIELD */
  99. /*
  100.  * Note: these mean to be bit fields of a big endian SelfID as seen on a little
  101.  * endian machine.  Without swapping.
  102.  */
  103. struct selfid {
  104.         u32 phy_id:6;
  105.         u32 packet_identifier:2; /* always binary 10 */
  106.         /* byte */
  107.         u32 gap_count:6;
  108.         u32 link_active:1;
  109.         u32 extended:1; /* if true is struct ext_selfid */
  110.         /* byte */
  111.         u32 power_class:3;
  112.         u32 contender:1;
  113.         u32 phy_delay:2;
  114.         u32 speed:2;
  115.         /* byte */
  116.         u32 more_packets:1;
  117.         u32 initiated_reset:1;
  118.         u32 port2:2;
  119.         u32 port1:2;
  120.         u32 port0:2;
  121. } __attribute__((packed));
  122. struct ext_selfid {
  123.         u32 phy_id:6;
  124.         u32 packet_identifier:2; /* always binary 10 */
  125.         /* byte */
  126.         u32 porta:2;
  127.         u32 reserved:2;
  128.         u32 seq_nr:3;
  129.         u32 extended:1; /* if false is struct selfid */
  130.         /* byte */
  131.         u32 porte:2;
  132.         u32 portd:2;
  133.         u32 portc:2;
  134.         u32 portb:2;
  135.         /* byte */
  136.         u32 more_packets:1;
  137.         u32 reserved2:1;
  138.         u32 porth:2;
  139.         u32 portg:2;
  140.         u32 portf:2;
  141. } __attribute__((packed));
  142. #else
  143. #error What? PDP endian?
  144. #endif /* __BIG_ENDIAN_BITFIELD */
  145. #endif /* _IEEE1394_IEEE1394_H */