equal
deleted
inserted
replaced
1226 // schedule request. |
1226 // schedule request. |
1227 list_add_tail(&request.list, &master->foe_requests); |
1227 list_add_tail(&request.list, &master->foe_requests); |
1228 |
1228 |
1229 up(&master->master_sem); |
1229 up(&master->master_sem); |
1230 |
1230 |
|
1231 if (master->debug_level) { |
|
1232 EC_DBG("Scheduled FoE read request on slave %u.\n", |
|
1233 request.slave->ring_position); |
|
1234 } |
|
1235 |
1231 // wait for processing through FSM |
1236 // wait for processing through FSM |
1232 if (wait_event_interruptible(master->foe_queue, |
1237 if (wait_event_interruptible(master->foe_queue, |
1233 request.req.state != EC_REQUEST_QUEUED)) { |
1238 request.req.state != EC_REQUEST_QUEUED)) { |
1234 // interrupted by signal |
1239 // interrupted by signal |
1235 down(&master->master_sem); |
1240 down(&master->master_sem); |
1244 } |
1249 } |
1245 |
1250 |
1246 // wait until master FSM has finished processing |
1251 // wait until master FSM has finished processing |
1247 wait_event(master->foe_queue, request.req.state != EC_REQUEST_BUSY); |
1252 wait_event(master->foe_queue, request.req.state != EC_REQUEST_BUSY); |
1248 |
1253 |
1249 data.abort_code = request.req.abort_code; |
1254 data.result = request.req.result; |
|
1255 data.error_code = request.req.error_code; |
1250 |
1256 |
1251 if (master->debug_level) { |
1257 if (master->debug_level) { |
1252 EC_DBG("%d bytes read via FoE (abort_code = 0x%x).\n", |
1258 EC_DBG("Read %d bytes via FoE (result = 0x%x).\n", |
1253 request.req.data_size, request.req.abort_code); |
1259 request.req.data_size, request.req.result); |
1254 } |
1260 } |
1255 |
1261 |
1256 if (request.req.state != EC_REQUEST_SUCCESS) { |
1262 if (request.req.state != EC_REQUEST_SUCCESS) { |
1257 data.data_size = 0; |
1263 data.data_size = 0; |
1258 retval = -EIO; |
1264 retval = -EIO; |
1273 |
1279 |
1274 if (__copy_to_user((void __user *) arg, &data, sizeof(data))) { |
1280 if (__copy_to_user((void __user *) arg, &data, sizeof(data))) { |
1275 retval = -EFAULT; |
1281 retval = -EFAULT; |
1276 } |
1282 } |
1277 |
1283 |
|
1284 if (master->debug_level) |
|
1285 EC_DBG("FoE read request finished on slave %u.\n", |
|
1286 request.slave->ring_position); |
|
1287 |
1278 ec_foe_request_clear(&request.req); |
1288 ec_foe_request_clear(&request.req); |
|
1289 |
1279 return retval; |
1290 return retval; |
1280 } |
1291 } |
1281 |
1292 |
1282 /*****************************************************************************/ |
1293 /*****************************************************************************/ |
1283 |
1294 |
1348 } |
1359 } |
1349 |
1360 |
1350 // wait until master FSM has finished processing |
1361 // wait until master FSM has finished processing |
1351 wait_event(master->foe_queue, request.req.state != EC_REQUEST_BUSY); |
1362 wait_event(master->foe_queue, request.req.state != EC_REQUEST_BUSY); |
1352 |
1363 |
1353 data.abort_code = request.req.abort_code; |
1364 data.result = request.req.result; |
|
1365 data.error_code = request.req.error_code; |
1354 |
1366 |
1355 retval = request.req.state == EC_REQUEST_SUCCESS ? 0 : -EIO; |
1367 retval = request.req.state == EC_REQUEST_SUCCESS ? 0 : -EIO; |
1356 |
1368 |
1357 if (__copy_to_user((void __user *) arg, &data, sizeof(data))) { |
1369 if (__copy_to_user((void __user *) arg, &data, sizeof(data))) { |
1358 retval = -EFAULT; |
1370 retval = -EFAULT; |