Lines Matching refs:task
94 void (*complete)(struct pci_doe_task *task);
298 struct pci_doe_task *task) in pci_doe_send_req() argument
332 length = 2 + DIV_ROUND_UP(task->request_pl_sz, sizeof(__le32)); in pci_doe_send_req()
339 val = FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_VID, task->feat.vid) | in pci_doe_send_req()
340 FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_TYPE, task->feat.type); in pci_doe_send_req()
347 for (i = 0; i < task->request_pl_sz / sizeof(__le32); i++) in pci_doe_send_req()
349 le32_to_cpu(task->request_pl[i])); in pci_doe_send_req()
352 remainder = task->request_pl_sz % sizeof(__le32); in pci_doe_send_req()
355 memcpy(&val, &task->request_pl[i], remainder); in pci_doe_send_req()
377 static int pci_doe_recv_resp(struct pci_doe_mb *doe_mb, struct pci_doe_task *task) in pci_doe_recv_resp() argument
387 if ((FIELD_GET(PCI_DOE_DATA_OBJECT_HEADER_1_VID, val) != task->feat.vid) || in pci_doe_recv_resp()
388 (FIELD_GET(PCI_DOE_DATA_OBJECT_HEADER_1_TYPE, val) != task->feat.type)) { in pci_doe_recv_resp()
390 doe_mb->cap_offset, task->feat.vid, task->feat.type, in pci_doe_recv_resp()
410 received = task->response_pl_sz; in pci_doe_recv_resp()
411 payload_length = DIV_ROUND_UP(task->response_pl_sz, sizeof(__le32)); in pci_doe_recv_resp()
412 remainder = task->response_pl_sz % sizeof(__le32); in pci_doe_recv_resp()
429 task->response_pl[i] = cpu_to_le32(val); in pci_doe_recv_resp()
436 memcpy(&task->response_pl[i], &val, remainder); in pci_doe_recv_resp()
458 static void signal_task_complete(struct pci_doe_task *task, int rv) in signal_task_complete() argument
460 task->rv = rv; in signal_task_complete()
461 destroy_work_on_stack(&task->work); in signal_task_complete()
462 task->complete(task); in signal_task_complete()
465 static void signal_task_abort(struct pci_doe_task *task, int rv) in signal_task_abort() argument
467 struct pci_doe_mb *doe_mb = task->doe_mb; in signal_task_abort()
479 signal_task_complete(task, rv); in signal_task_abort()
484 struct pci_doe_task *task = container_of(work, struct pci_doe_task, in doe_statemachine_work() local
486 struct pci_doe_mb *doe_mb = task->doe_mb; in doe_statemachine_work()
494 signal_task_complete(task, -EIO); in doe_statemachine_work()
499 rc = pci_doe_send_req(doe_mb, task); in doe_statemachine_work()
511 signal_task_abort(task, rc); in doe_statemachine_work()
520 signal_task_abort(task, -EIO); in doe_statemachine_work()
526 signal_task_abort(task, -EIO); in doe_statemachine_work()
531 signal_task_abort(task, rc); in doe_statemachine_work()
537 rc = pci_doe_recv_resp(doe_mb, task); in doe_statemachine_work()
539 signal_task_abort(task, rc); in doe_statemachine_work()
543 signal_task_complete(task, rc); in doe_statemachine_work()
546 static void pci_doe_task_complete(struct pci_doe_task *task) in pci_doe_task_complete() argument
548 complete(task->private); in pci_doe_task_complete()
757 struct pci_doe_task *task) in pci_doe_submit_task() argument
759 if (!pci_doe_supports_feat(doe_mb, task->feat.vid, task->feat.type)) in pci_doe_submit_task()
765 task->doe_mb = doe_mb; in pci_doe_submit_task()
766 INIT_WORK_ONSTACK(&task->work, doe_statemachine_work); in pci_doe_submit_task()
767 queue_work(doe_mb->work_queue, &task->work); in pci_doe_submit_task()
804 struct pci_doe_task task = { in pci_doe() local
816 rc = pci_doe_submit_task(doe_mb, &task); in pci_doe()
822 return task.rv; in pci_doe()