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