summaryrefslogtreecommitdiff
path: root/sys/src/9/port/aoe.h
blob: 4db1f78d69e84bfe533a434f7ebdebccc571d310 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
enum {
	ACata,
	ACconfig,
	ACmask,
	ACres,
};

enum {
	AQCread,
	AQCtest,
	AQCprefix,
	AQCset,
	AQCfset,
};

enum {
	AEunk,
	AEcmd,				/* bad command */
	AEarg,				/* bad argument */
	AEoff,				/* device offline */
	AEcfg,				/* config string already set */
	AEver,				/* unsupported version */
	AEres,				/* target reserved */
};

enum {
	/* mask commands */
	Mread		= 0,
	Medit,

	/* mask directives */
	MDnop		= 0,
	MDadd,
	MDdel,

	/* mask errors */
	MEunk		= 1,
	MEbad,
	MEfull,

	/* reserve / release */
	Rrread		= 0,
	Rrset,
	Rrforce,
};

enum {
	Aoetype		= 0x88a2,
	Aoesectsz 	= 512,
	Aoemaxcfg	= 1024,

	Aoehsz		= 24,
	Aoeatasz	= 12,
	Aoecfgsz		= 8,
	Aoerrsz		= 2,
	Aoemsz		= 4,
	Aoemdsz	= 8,

	Aoever		= 1,

	AFerr		= 1<<2,
	AFrsp		= 1<<3,

	AAFwrite	= 1,
	AAFext		= 1<<6,
};

typedef	struct	Aoehdr	Aoehdr;
typedef	struct	Aoeata	Aoeata;
typedef	struct	Aoecfg	Aoecfg;
typedef	struct	Aoemd	Aoemd;
typedef	struct	Aoem	Aoem;
typedef	struct	Aoerr	Aoerr;

struct Aoehdr {
	uchar	dst[Eaddrlen];
	uchar	src[Eaddrlen];
	uchar	type[2];
	uchar	verflag;
	uchar	error;
	uchar	major[2];
	uchar	minor;
	uchar	cmd;
	uchar	tag[4];
};

struct Aoeata {
	uchar	aflag;
	uchar	errfeat;
	uchar	scnt;
	uchar	cmdstat;
	uchar	lba[6];
	uchar	res[2];
};

struct Aoecfg {
	uchar	bufcnt[2];
	uchar	fwver[2];
	uchar	scnt;
	uchar	verccmd;
	uchar	cslen[2];
};

struct Aoemd {
	uchar	dres;
	uchar	dcmd;
	uchar	ea[Eaddrlen];
};

struct Aoem {
	uchar	mres;
	uchar	mcmd;
	uchar	merr;
	uchar	mcnt;
};

typedef struct Aoerr {
	uchar	rcmd;
	uchar	nea;
	uchar	ea0[];
};

extern char Echange[];
extern char Enotup[];