Lines Matching refs:task
106 struct pci_doe_task *task) in pci_doe_send_req() argument
127 val = FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_VID, task->prot.vid) | in pci_doe_send_req()
128 FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_TYPE, task->prot.type); in pci_doe_send_req()
133 2 + task->request_pl_sz / in pci_doe_send_req()
135 for (i = 0; i < task->request_pl_sz / sizeof(u32); i++) in pci_doe_send_req()
137 task->request_pl[i]); in pci_doe_send_req()
156 static int pci_doe_recv_resp(struct pci_doe_mb *doe_mb, struct pci_doe_task *task) in pci_doe_recv_resp() argument
166 if ((FIELD_GET(PCI_DOE_DATA_OBJECT_HEADER_1_VID, val) != task->prot.vid) || in pci_doe_recv_resp()
167 (FIELD_GET(PCI_DOE_DATA_OBJECT_HEADER_1_TYPE, val) != task->prot.type)) { in pci_doe_recv_resp()
169 doe_mb->cap_offset, task->prot.vid, task->prot.type, in pci_doe_recv_resp()
186 payload_length = min(length, task->response_pl_sz / sizeof(u32)); in pci_doe_recv_resp()
190 &task->response_pl[i]); in pci_doe_recv_resp()
208 return min(length, task->response_pl_sz / sizeof(u32)) * sizeof(u32); in pci_doe_recv_resp()
211 static void signal_task_complete(struct pci_doe_task *task, int rv) in signal_task_complete() argument
213 task->rv = rv; in signal_task_complete()
214 task->complete(task); in signal_task_complete()
217 static void signal_task_abort(struct pci_doe_task *task, int rv) in signal_task_abort() argument
219 struct pci_doe_mb *doe_mb = task->doe_mb; in signal_task_abort()
231 signal_task_complete(task, rv); in signal_task_abort()
236 struct pci_doe_task *task = container_of(work, struct pci_doe_task, in doe_statemachine_work() local
238 struct pci_doe_mb *doe_mb = task->doe_mb; in doe_statemachine_work()
246 signal_task_complete(task, -EIO); in doe_statemachine_work()
251 rc = pci_doe_send_req(doe_mb, task); in doe_statemachine_work()
263 signal_task_abort(task, rc); in doe_statemachine_work()
272 signal_task_abort(task, -EIO); in doe_statemachine_work()
278 signal_task_abort(task, -EIO); in doe_statemachine_work()
283 signal_task_abort(task, rc); in doe_statemachine_work()
289 rc = pci_doe_recv_resp(doe_mb, task); in doe_statemachine_work()
291 signal_task_abort(task, rc); in doe_statemachine_work()
295 signal_task_complete(task, rc); in doe_statemachine_work()
298 static void pci_doe_task_complete(struct pci_doe_task *task) in pci_doe_task_complete() argument
300 complete(task->private); in pci_doe_task_complete()
310 struct pci_doe_task task = { in pci_doe_discovery() local
322 rc = pci_doe_submit_task(doe_mb, &task); in pci_doe_discovery()
328 if (task.rv != sizeof(response_pl)) in pci_doe_discovery()
515 int pci_doe_submit_task(struct pci_doe_mb *doe_mb, struct pci_doe_task *task) in pci_doe_submit_task() argument
517 if (!pci_doe_supports_prot(doe_mb, task->prot.vid, task->prot.type)) in pci_doe_submit_task()
524 if (task->request_pl_sz % sizeof(u32) || in pci_doe_submit_task()
525 task->response_pl_sz < sizeof(u32)) in pci_doe_submit_task()
531 task->doe_mb = doe_mb; in pci_doe_submit_task()
532 INIT_WORK(&task->work, doe_statemachine_work); in pci_doe_submit_task()
533 queue_work(doe_mb->work_queue, &task->work); in pci_doe_submit_task()