]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - VBLADE/vblade-master/dat.h
Fix the "Unsupported vtoy type unknown" error when boot a VDI file created by Virtual...
[Ventoy.git] / VBLADE / vblade-master / dat.h
1 /* dat.h: include file for vblade AoE target */
2
3 #define nil ((void *)0)
4 /*
5 * tunable variables
6 */
7
8 enum {
9 VBLADE_VERSION = 24,
10
11 // Firmware version
12 FWV = 0x4000 + VBLADE_VERSION,
13 };
14
15 #undef major
16 #undef minor
17 #undef makedev
18
19 #define major(x) ((x) >> 24 & 0xFF)
20 #define minor(x) ((x) & 0xffffff)
21 #define makedev(x, y) ((x) << 24 | (y))
22
23 typedef unsigned char uchar;
24 //typedef unsigned short ushort;
25 #ifdef __FreeBSD__
26 typedef unsigned long ulong;
27 #else
28 //typedef unsigned long ulong;
29 #endif
30 typedef long long vlong;
31
32 typedef struct Aoehdr Aoehdr;
33 typedef struct Ata Ata;
34 typedef struct Conf Conf;
35 typedef struct Ataregs Ataregs;
36 typedef struct Mdir Mdir;
37 typedef struct Aoemask Aoemask;
38 typedef struct Aoesrr Aoesrr;
39
40 struct Ataregs
41 {
42 vlong lba;
43 uchar cmd;
44 uchar status;
45 uchar err;
46 uchar feature;
47 uchar sectors;
48 };
49
50 struct Aoehdr
51 {
52 uchar dst[6];
53 uchar src[6];
54 ushort type;
55 uchar flags;
56 uchar error;
57 ushort maj;
58 uchar min;
59 uchar cmd;
60 uchar tag[4];
61 };
62
63 struct Ata
64 {
65 Aoehdr h;
66 uchar aflag;
67 uchar err;
68 uchar sectors;
69 uchar cmd;
70 uchar lba[6];
71 uchar resvd[2];
72 };
73
74 struct Conf
75 {
76 Aoehdr h;
77 ushort bufcnt;
78 ushort firmware;
79 uchar scnt;
80 uchar vercmd;
81 ushort len;
82 uchar data[1024];
83 };
84
85 // mask directive
86 struct Mdir {
87 uchar res;
88 uchar cmd;
89 uchar mac[6];
90 };
91
92 struct Aoemask {
93 Aoehdr h;
94 uchar res;
95 uchar cmd;
96 uchar merror;
97 uchar nmacs;
98 // struct Mdir m[0];
99 };
100
101 struct Aoesrr {
102 Aoehdr h;
103 uchar rcmd;
104 uchar nmacs;
105 // uchar mac[6][nmacs];
106 };
107
108 enum {
109 AoEver = 1,
110
111 ATAcmd = 0, // command codes
112 Config,
113 Mask,
114 Resrel,
115
116 Resp = (1<<3), // flags
117 Error = (1<<2),
118
119 BadCmd = 1,
120 BadArg,
121 DevUnavailable,
122 ConfigErr,
123 BadVersion,
124 Res,
125
126 Write = (1<<0),
127 Async = (1<<1),
128 Device = (1<<4),
129 Extend = (1<<6),
130
131 Qread = 0,
132 Qtest,
133 Qprefix,
134 Qset,
135 Qfset,
136
137 Nretries = 3,
138 Nconfig = 1024,
139
140 Bufcount = 16,
141
142 /* mask commands */
143 Mread= 0,
144 Medit,
145
146 /* mask directives */
147 MDnop= 0,
148 MDadd,
149 MDdel,
150
151 /* mask errors */
152 MEunspec= 1,
153 MEbaddir,
154 MEfull,
155
156 /* header sizes, including aoe hdr */
157 Naoehdr= 24,
158 Natahdr= Naoehdr + 12,
159 Ncfghdr= Naoehdr + 8,
160 Nmaskhdr= Naoehdr + 4,
161 Nsrrhdr= Naoehdr + 2,
162
163 Nserial= 20,
164 };
165
166 int shelf, slot;
167 ulong aoetag;
168 uchar mac[6];
169 int bfd; // block file descriptor
170 int sfd; // socket file descriptor
171 vlong size; // size of vblade
172 vlong offset;
173 char *progname;
174 char serial[Nserial+1];