xref: /plan9-contrib/sys/src/9/port/aoe.h (revision a587111c8770e522e3667ff2b63cba8a77811dd9)
121abd8f2SDavid du Colombier /*
221abd8f2SDavid du Colombier  * ATA-over-Ethernet (AoE) protocol
321abd8f2SDavid du Colombier  */
421abd8f2SDavid du Colombier enum {
521abd8f2SDavid du Colombier 	ACata,
621abd8f2SDavid du Colombier 	ACconfig,
721abd8f2SDavid du Colombier };
821abd8f2SDavid du Colombier 
921abd8f2SDavid du Colombier enum {
1021abd8f2SDavid du Colombier 	AQCread,
1121abd8f2SDavid du Colombier 	AQCtest,
1221abd8f2SDavid du Colombier 	AQCprefix,
1321abd8f2SDavid du Colombier 	AQCset,
1421abd8f2SDavid du Colombier 	AQCfset,
1521abd8f2SDavid du Colombier };
1621abd8f2SDavid du Colombier 
1721abd8f2SDavid du Colombier enum {
1821abd8f2SDavid du Colombier 	AEcmd	= 1,
1921abd8f2SDavid du Colombier 	AEarg,
2021abd8f2SDavid du Colombier 	AEdev,
2121abd8f2SDavid du Colombier 	AEcfg,
2221abd8f2SDavid du Colombier 	AEver,
2321abd8f2SDavid du Colombier };
2421abd8f2SDavid du Colombier 
2521abd8f2SDavid du Colombier enum {
2621abd8f2SDavid du Colombier 	Aoetype	= 0x88a2,
270774058cSDavid du Colombier 	Aoesectsz = 512,			/* standard sector size */
2821abd8f2SDavid du Colombier 	Aoever	= 1,
2921abd8f2SDavid du Colombier 
3021abd8f2SDavid du Colombier 	AFerr	= 1<<2,
3121abd8f2SDavid du Colombier 	AFrsp	= 1<<3,
3221abd8f2SDavid du Colombier 
3321abd8f2SDavid du Colombier 	AAFwrite= 1,
3421abd8f2SDavid du Colombier 	AAFext	= 1<<6,
3521abd8f2SDavid du Colombier };
3621abd8f2SDavid du Colombier 
3721abd8f2SDavid du Colombier typedef struct {
3821abd8f2SDavid du Colombier 	uchar	dst[Eaddrlen];
3921abd8f2SDavid du Colombier 	uchar	src[Eaddrlen];
4021abd8f2SDavid du Colombier 	uchar	type[2];
4121abd8f2SDavid du Colombier 	uchar	verflag;
4221abd8f2SDavid du Colombier 	uchar	error;
4321abd8f2SDavid du Colombier 	uchar	major[2];
4421abd8f2SDavid du Colombier 	uchar	minor;
4521abd8f2SDavid du Colombier 	uchar	cmd;
4621abd8f2SDavid du Colombier 	uchar	tag[4];
47*41ac1ab6SDavid du Colombier 	uchar	payload[];
4821abd8f2SDavid du Colombier } Aoehdr;
4921abd8f2SDavid du Colombier 
50*41ac1ab6SDavid du Colombier #define AOEHDRSZ	offsetof(Aoehdr, payload[0])
51*41ac1ab6SDavid du Colombier 
5221abd8f2SDavid du Colombier typedef struct {
5321abd8f2SDavid du Colombier 	Aoehdr;
5421abd8f2SDavid du Colombier 	uchar	aflag;
5521abd8f2SDavid du Colombier 	uchar	errfeat;
5621abd8f2SDavid du Colombier 	uchar	scnt;
5721abd8f2SDavid du Colombier 	uchar	cmdstat;
5821abd8f2SDavid du Colombier 	uchar	lba[6];
5921abd8f2SDavid du Colombier 	uchar	res[2];
60*41ac1ab6SDavid du Colombier 	uchar	payload[];
6121abd8f2SDavid du Colombier } Aoeata;
6221abd8f2SDavid du Colombier 
63*41ac1ab6SDavid du Colombier #define AOEATASZ	offsetof(Aoeata, payload[0])
64*41ac1ab6SDavid du Colombier 
6521abd8f2SDavid du Colombier typedef struct {
6621abd8f2SDavid du Colombier 	Aoehdr;
6721abd8f2SDavid du Colombier 	uchar	bufcnt[2];
6821abd8f2SDavid du Colombier 	uchar	fwver[2];
6921abd8f2SDavid du Colombier 	uchar	scnt;
7021abd8f2SDavid du Colombier 	uchar	verccmd;
7121abd8f2SDavid du Colombier 	uchar	cslen[2];
72*41ac1ab6SDavid du Colombier 	uchar	payload[];
7321abd8f2SDavid du Colombier } Aoeqc;
7421abd8f2SDavid du Colombier 
75*41ac1ab6SDavid du Colombier #define AOEQCSZ		offsetof(Aoeqc, payload[0])
76