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