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