what we know ============ rwbuf[0] = length (both READ and WRITE) akmd init ========= ECS_IOCTL_SET_MODE (AKECS_MODE_E2P_READ) ECS_IOCTL_READ (rwbuf[0]=1 ; rwbuf[1]=66) get rwbuf[1] (102 ou 96, use?) ECS_IOCTL_SET_MODE(AKECS_MODE_POWERDOWN) ECS_IOCTL_GET_OPEN_STATUS ok to send data = when ECS_IOCTL_GET_OPEN_STATUS answers to akmd ECS_IOCTL_INIT ECS_IOCTL_SET_MODE (AKECS_MODE_E2P_READ) ECS_IOCTL_READ <6>[ 1105.102874] what is in rwbuf? <6>[ 1105.103118] -------------------- <6>[ 1105.103332] | index | hdata | ddata | <6>[ 1105.103820] | 0 | 0x3 | 3 | <6>[ 1105.104064] | 1 | 0x46 | 70 | <6>[ 1105.104339] | 2 | 0x0 | 0 | <6>[ 1105.104797] | 3 | 0x0 | 0 | <6>[ 1105.105041] | 4 | 0x0 | 0 | <6>[ 1105.105285] ---------- ECS_IOCTL_READ answer : <6>[ 1105.108123] -------------------- <6>[ 1105.108367] | index | hdata | ddata | <6>[ 1105.108581] | 0 | 0x3 | 3 | <6>[ 1105.109039] | 1 | 0x97 | 151 | <6>[ 1105.109252] | 2 | 0x87 | 135 | <6>[ 1105.109497] | 3 | 0x19 | 25 | <6>[ 1105.109741] | 4 | 0x0 | 0 | ECS_IOCTL_SET_MODE (AKECS_MODE_POWERDOWN) ECS_IOCTL_WRITE <6>[ 1105.173614] what is in rwbuf? <6>[ 1105.173645] -------------------- <6>[ 1105.173645] | index | hdata | ddata | <6>[ 1105.173675] | 0 | 0x4 | 4 | <6>[ 1105.173675] | 1 | 0xe8 | 232 | <6>[ 1105.173706] | 2 | 0x7 | 7 | <6>[ 1105.173706] | 3 | 0x7 | 7 | <6>[ 1105.173736] | 4 | 0x9 | 9 | ECS_IOCTL_WRITE <6>[ 1105.174438] what is in rwbuf? <6>[ 1105.174438] -------------------- <6>[ 1105.174468] | index | hdata | ddata | <6>[ 1105.174468] | 0 | 0x4 | 4 | <6>[ 1105.174499] | 1 | 0xe5 | 229 | <6>[ 1105.174499] | 2 | 0x7f | 127 | <6>[ 1105.174530] | 3 | 0x7f | 127 | <6>[ 1105.174530] | 4 | 0xff | 255 | ECS_IOCTL_SET_MODE(AKECS_MODE_MEASURE_SNG) ECS_IOCTL_GETDATA answers: <6>[ 1105.193969] | index | hdata | ddata | <6>[ 1105.194000] gflag1| 0 | 0x70 | 112 | <6>[ 1105.194030] gflag1| 1 | 0x80 | 128 | <6>[ 1105.194061] gflag1| 2 | 0x0 | 0 | <6>[ 1105.194061] gflag1| 3 | 0x0 | 0 | <6>[ 1105.194061] gflag1| 4 | 0xff | 255 | <6>[ 1105.194091] gflag1| 5 | 0x9c | 156 | <6>[ 1105.194091] gflag1| 6 | 0xae | 174 | <6>[ 1105.194122] gflag1| 7 | 0x45 | 69 | <6>[ 1105.194122] gflag1| 8 | 0x0 | 0 | <6>[ 1105.194152] gflag1| 9 | 0x0 | 0 | <6>[ 1105.194152] gflag1| 10 | 0x0 | 0 | <6>[ 1105.194183] gflag1| 11 | 0x0 | 0 | <6>[ 1105.194183] gflag1| 12 | 0x0 | 0 | <6>[ 1105.194213] gflag1| 13 | 0x0 | 0 | <6>[ 1105.194213] gflag1| 14 | 0x0 | 0 | <6>[ 1105.194213] gflag1| 15 | 0x0 | 0 | <6>[ 1105.194244] gflag1| 16 | 0x0 | 0 | <6>[ 1105.194244] gflag1| 17 | 0x0 | 0 | <6>[ 1105.194274] gflag1| 18 | 0x0 | 0 | <6>[ 1105.194274] gflag1| 19 | 0xff | 255 | <6>[ 1105.194305] gflag1| 20 | 0x9c | 156 | <6>[ 1105.194305] gflag1| 21 | 0xae | 174 | <6>[ 1105.194335] gflag1| 22 | 0x45 | 69 | <6>[ 1105.194335] gflag1| 23 | 0x0 | 0 | <6>[ 1105.194366] gflag1| 24 | 0x0 | 0 | <6>[ 1105.194366] gflag1| 25 | 0x0 | 0 | <6>[ 1105.194366] gflag1| 26 | 0x0 | 0 | <6>[ 1105.194396] gflag1| 27 | 0x0 | 0 | <6>[ 1105.194396] gflag1| 28 | 0x0 | 0 | <6>[ 1105.194427] gflag1| 29 | 0x0 | 0 | <6>[ 1105.194427] gflag1| 30 | 0x0 | 0 | <6>[ 1105.194458] gflag1| 31 | 0x0 | 0 | ECS_IOCTL_GET_NUMFRQ answers: <6>[ 1105.273681] -------------------- <6>[ 1105.273681] | index | hdata | ddata | <6>[ 1105.273712] | 0 | 0x1 | 1 | <6>[ 1105.273712] | 1 | 0x0 | 0 | ECS_IOCTL_WRITE <6>[ 1105.273803] what is in rwbuf? <6>[ 1105.273834] -------------------- <6>[ 1105.273834] | index | hdata | ddata | <6>[ 1105.273864] | 0 | 0x4 | 4 | <6>[ 1105.273864] | 1 | 0xee | 238 | <6>[ 1105.273864] | 2 | 0x10 | 16 | <6>[ 1105.273895] | 3 | 0x10 | 16 | <6>[ 1105.273895] | 4 | 0x10 | 16 | <6>[ 1105.273925] ---------- ECS_IOCTL_WRITE <6>[ 1105.274658] what is in rwbuf? <6>[ 1105.274658] -------------------- <6>[ 1105.274658] | index | hdata | ddata | <6>[ 1105.274688] | 0 | 0x4 | 4 | <6>[ 1105.274688] | 1 | 0xeb | 235 | <6>[ 1105.274719] | 2 | 0x3 | 3 | <6>[ 1105.274780] | 3 | 0x7 | 7 | <6>[ 1105.274810] | 4 | 0x8a | 138 | <6>[ 1105.274810] ---------- ECS_IOCTL_WRITE <6>[ 1105.275695] what is in rwbuf? <6>[ 1105.275695] -------------------- <6>[ 1105.275726] | index | hdata | ddata | <6>[ 1105.275787] | 0 | 0x2 | 2 | <6>[ 1105.275817] | 1 | 0xf4 | 244 | <6>[ 1105.275817] | 2 | 0x55 | 85 | <6>[ 1105.275848] | 3 | 0x0 | 0 | <6>[ 1105.275848] | 4 | 0x0 | 0 | <6>[ 1105.275848] ---------- ECS_IOCTL_WRITE <6>[ 1105.276916] what is in rwbuf? <6>[ 1105.276947] -------------------- <6>[ 1105.276947] | index | hdata | ddata | <6>[ 1105.276977] | 0 | 0x2 | 2 | <6>[ 1105.276977] | 1 | 0xf5 | 245 | <6>[ 1105.277008] | 2 | 0x1b | 27 | <6>[ 1105.277008] | 3 | 0x0 | 0 | <6>[ 1105.277038] | 4 | 0x0 | 0 | <6>[ 1105.277038] ---------- ECS_IOCTL_WRITE <6>[ 1105.278686] what is in rwbuf? <6>[ 1105.278686] -------------------- <6>[ 1105.278717] | index | hdata | ddata | <6>[ 1105.278717] | 0 | 0x2 | 2 | <6>[ 1105.278747] | 1 | 0xf6 | 246 | <6>[ 1105.278747] | 2 | 0x8 | 8 | <6>[ 1105.278778] | 3 | 0x0 | 0 | <6>[ 1105.278778] | 4 | 0x0 | 0 | <6>[ 1105.278778] ---------- ECS_IOCTL_WRITE <6>[ 1105.281188] what is in rwbuf? <6>[ 1105.281311] -------------------- <6>[ 1105.281311] | index | hdata | ddata | <6>[ 1105.281341] | 0 | 0x4 | 4 | <6>[ 1105.281372] | 1 | 0xf1 | 241 | <6>[ 1105.281372] | 2 | 0x85 | 133 | <6>[ 1105.281372] | 3 | 0x87 | 135 | <6>[ 1105.281402] | 4 | 0x83 | 131 | <6>[ 1105.281402] ---------- ECS_IOCTL_GET_CLOSE_STATUS → starts ECS_IOCTL_GET_CLOSE_STATUS (separate thread) to catch akmd powerdown when it's answered when kernel answers, ok to continue? DO DATA ROUTINE akmd powerdown ============== <6>[ 1434.114746] --> ECS_IOCTL_GET_CLOSE_STATUS #3 (powerdown = when ECS_IOCTL_GET_CLOSE_STATUS aswers to akmd) ECS_IOCTL_SET_MODE (AKECS_MODE_E2P_READ) ECS_IOCTL_READ (rwbuf[0]=1 ; rwbuf[1]=66) if(rwbuf[1]=102) ECS_IOCTL_SET_MODE(AKECS_MODE_POWERDOWN) ECS_IOCTL_GET_OPEN_STATUS when ECS_IOCTL_GET_OPEN_STATUS answers, do init