dat.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* dat.h: include file for vblade AoE target */
  2. #define nil ((void *)0)
  3. /*
  4. * tunable variables
  5. */
  6. enum {
  7. VBLADE_VERSION = 22,
  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. typedef struct Mdir Mdir;
  30. typedef struct Aoemask Aoemask;
  31. typedef struct Aoesrr Aoesrr;
  32. struct Ataregs
  33. {
  34. vlong lba;
  35. uchar cmd;
  36. uchar status;
  37. uchar err;
  38. uchar feature;
  39. uchar sectors;
  40. };
  41. struct Aoehdr
  42. {
  43. uchar dst[6];
  44. uchar src[6];
  45. ushort type;
  46. uchar flags;
  47. uchar error;
  48. ushort maj;
  49. uchar min;
  50. uchar cmd;
  51. uchar tag[4];
  52. };
  53. struct Ata
  54. {
  55. Aoehdr h;
  56. uchar aflag;
  57. uchar err;
  58. uchar sectors;
  59. uchar cmd;
  60. uchar lba[6];
  61. uchar resvd[2];
  62. };
  63. struct Conf
  64. {
  65. Aoehdr h;
  66. ushort bufcnt;
  67. ushort firmware;
  68. uchar scnt;
  69. uchar vercmd;
  70. ushort len;
  71. uchar data[1024];
  72. };
  73. // mask directive
  74. struct Mdir {
  75. uchar res;
  76. uchar cmd;
  77. uchar mac[6];
  78. };
  79. struct Aoemask {
  80. Aoehdr h;
  81. uchar res;
  82. uchar cmd;
  83. uchar merror;
  84. uchar nmacs;
  85. // struct Mdir m[0];
  86. };
  87. struct Aoesrr {
  88. Aoehdr h;
  89. uchar rcmd;
  90. uchar nmacs;
  91. // uchar mac[6][nmacs];
  92. };
  93. enum {
  94. AoEver = 1,
  95. ATAcmd = 0, // command codes
  96. Config,
  97. Mask,
  98. Resrel,
  99. Resp = (1<<3), // flags
  100. Error = (1<<2),
  101. BadCmd = 1,
  102. BadArg,
  103. DevUnavailable,
  104. ConfigErr,
  105. BadVersion,
  106. Res,
  107. Write = (1<<0),
  108. Async = (1<<1),
  109. Device = (1<<4),
  110. Extend = (1<<6),
  111. Qread = 0,
  112. Qtest,
  113. Qprefix,
  114. Qset,
  115. Qfset,
  116. Nretries = 3,
  117. Nconfig = 1024,
  118. Bufcount = 16,
  119. /* mask commands */
  120. Mread= 0,
  121. Medit,
  122. /* mask directives */
  123. MDnop= 0,
  124. MDadd,
  125. MDdel,
  126. /* mask errors */
  127. MEunspec= 1,
  128. MEbaddir,
  129. MEfull,
  130. /* header sizes, including aoe hdr */
  131. Naoehdr= 24,
  132. Natahdr= Naoehdr + 12,
  133. Ncfghdr= Naoehdr + 8,
  134. Nmaskhdr= Naoehdr + 4,
  135. Nsrrhdr= Naoehdr + 2,
  136. Nserial= 20,
  137. };
  138. int shelf, slot;
  139. ulong aoetag;
  140. uchar mac[6];
  141. int bfd; // block file descriptor
  142. int sfd; // socket file descriptor
  143. vlong size; // size of vblade
  144. vlong offset;
  145. char *progname;
  146. char serial[Nserial+1];