349 list_add_tail(&request.list, &master->sdo_requests); |
349 list_add_tail(&request.list, &master->sdo_requests); |
350 up(&master->sdo_sem); |
350 up(&master->sdo_sem); |
351 |
351 |
352 // wait for processing through FSM |
352 // wait for processing through FSM |
353 if (wait_event_interruptible(master->sdo_queue, |
353 if (wait_event_interruptible(master->sdo_queue, |
354 request.state != EC_REQ_QUEUED)) { |
354 request.state != EC_REQUEST_QUEUED)) { |
355 // interrupted by signal |
355 // interrupted by signal |
356 down(&master->sdo_sem); |
356 down(&master->sdo_sem); |
357 if (request.state == EC_REQ_QUEUED) { |
357 if (request.state == EC_REQUEST_QUEUED) { |
358 list_del(&request.list); |
358 list_del(&request.list); |
359 up(&master->sdo_sem); |
359 up(&master->sdo_sem); |
360 return -EINTR; |
360 return -EINTR; |
361 } |
361 } |
362 // request already processing: interrupt not possible. |
362 // request already processing: interrupt not possible. |
363 up(&master->sdo_sem); |
363 up(&master->sdo_sem); |
364 } |
364 } |
365 |
365 |
366 // wait until master FSM has finished processing |
366 // wait until master FSM has finished processing |
367 wait_event(master->sdo_queue, request.state != EC_REQ_BUSY); |
367 wait_event(master->sdo_queue, request.state != EC_REQUEST_IN_PROGRESS); |
368 |
368 |
369 if (request.state != EC_REQ_COMPLETED) |
369 if (request.state != EC_REQUEST_COMPLETE) |
370 return -EIO; |
370 return -EIO; |
371 |
371 |
372 off += ec_sdo_entry_format_data(entry, &request, buffer); |
372 off += ec_sdo_entry_format_data(entry, &request, buffer); |
373 |
373 |
374 ec_sdo_request_clear(&request); |
374 ec_sdo_request_clear(&request); |