xref: /plan9/sys/src/9/port/aoe.h (revision a587111c8770e522e3667ff2b63cba8a77811dd9)
1 /*
2  * ATA-over-Ethernet (AoE) protocol
3  */
4 enum {
5 	ACata,
6 	ACconfig,
7 };
8 
9 enum {
10 	AQCread,
11 	AQCtest,
12 	AQCprefix,
13 	AQCset,
14 	AQCfset,
15 };
16 
17 enum {
18 	AEcmd	= 1,
19 	AEarg,
20 	AEdev,
21 	AEcfg,
22 	AEver,
23 };
24 
25 enum {
26 	Aoetype	= 0x88a2,
27 	Aoesectsz = 512,			/* standard sector size */
28 	Aoever	= 1,
29 
30 	AFerr	= 1<<2,
31 	AFrsp	= 1<<3,
32 
33 	AAFwrite= 1,
34 	AAFext	= 1<<6,
35 };
36 
37 typedef struct {
38 	uchar	dst[Eaddrlen];
39 	uchar	src[Eaddrlen];
40 	uchar	type[2];
41 	uchar	verflag;
42 	uchar	error;
43 	uchar	major[2];
44 	uchar	minor;
45 	uchar	cmd;
46 	uchar	tag[4];
47 	uchar	payload[];
48 } Aoehdr;
49 
50 #define AOEHDRSZ	offsetof(Aoehdr, payload[0])
51 
52 typedef struct {
53 	Aoehdr;
54 	uchar	aflag;
55 	uchar	errfeat;
56 	uchar	scnt;
57 	uchar	cmdstat;
58 	uchar	lba[6];
59 	uchar	res[2];
60 	uchar	payload[];
61 } Aoeata;
62 
63 #define AOEATASZ	offsetof(Aoeata, payload[0])
64 
65 typedef struct {
66 	Aoehdr;
67 	uchar	bufcnt[2];
68 	uchar	fwver[2];
69 	uchar	scnt;
70 	uchar	verccmd;
71 	uchar	cslen[2];
72 	uchar	payload[];
73 } Aoeqc;
74 
75 #define AOEQCSZ		offsetof(Aoeqc, payload[0])
76