master/cdev.c
branch1.4-foe
changeset 1708 fae3a1759126
parent 1707 11ec009e145d
child 1709 63e4bc918640
equal deleted inserted replaced
1707:11ec009e145d 1708:fae3a1759126
  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;