dat.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /* dat.h: include file for vblade AoE target */
  2. #define nil ((void *)0)
  3. /*
  4. * tunable variables
  5. */
  6. enum {
  7. VBLADE_VERSION = 12,
  8. // Firmware version
  9. FWV = 0x4000 + VBLADE_VERSION,
  10. };
  11. #undef major
  12. #undef minor
  13. #undef makedev
  14. #define major(x) ((x) >> 24 & 0xFF)
  15. #define minor(x) ((x) & 0xffffff)
  16. #define makedev(x, y) ((x) << 24 | (y))
  17. typedef unsigned char uchar;
  18. //typedef unsigned short ushort;
  19. #ifdef __FreeBSD__
  20. typedef unsigned long ulong;
  21. #else
  22. //typedef unsigned long ulong;
  23. #endif
  24. typedef long long vlong;
  25. typedef struct Aoehdr Aoehdr;
  26. typedef struct Ata Ata;
  27. typedef struct Conf Conf;
  28. typedef struct Ataregs Ataregs;
  29. struct Ataregs
  30. {
  31. vlong lba;
  32. uchar cmd;
  33. uchar status;
  34. uchar err;
  35. uchar feature;
  36. uchar sectors;
  37. };
  38. struct Aoehdr
  39. {
  40. uchar dst[6];
  41. uchar src[6];
  42. ushort type;
  43. uchar flags;
  44. uchar error;
  45. ushort maj;
  46. uchar min;
  47. uchar cmd;
  48. uchar tag[4];
  49. };
  50. struct Ata
  51. {
  52. Aoehdr h;
  53. uchar aflag;
  54. uchar err;
  55. uchar sectors;
  56. uchar cmd;
  57. uchar lba[6];
  58. uchar resvd[2];
  59. };
  60. struct Conf
  61. {
  62. Aoehdr h;
  63. ushort bufcnt;
  64. ushort firmware;
  65. uchar scnt;
  66. uchar vercmd;
  67. ushort len;
  68. uchar data[1024];
  69. };
  70. enum {
  71. AoEver = 1,
  72. ATAcmd = 0, // command codes
  73. Config,
  74. Resp = (1<<3), // flags
  75. Error = (1<<2),
  76. BadCmd = 1,
  77. BadArg,
  78. DevUnavailable,
  79. ConfigErr,
  80. BadVersion,
  81. Write = (1<<0),
  82. Async = (1<<1),
  83. Device = (1<<4),
  84. Extend = (1<<6),
  85. Qread = 0,
  86. Qtest,
  87. Qprefix,
  88. Qset,
  89. Qfset,
  90. Nretries = 3,
  91. Nconfig = 1024,
  92. Bufcount = 16,
  93. };
  94. int shelf, slot;
  95. ulong aoetag;
  96. uchar mac[6];
  97. int bfd; // block file descriptor
  98. int sfd; // socket file descriptor
  99. vlong size; // size of vblade
  100. char *progname;