| 25 | } |
| 26 | |
| 27 | static uint32_t |
| 28 | write_dma_client_oob(uint8_t *work_queue_buffer_pointer, |
| 29 | const struct gdma_work_request *work_request, |
| 30 | uint32_t client_oob_size) |
| 31 | { |
| 32 | uint8_t *p = work_queue_buffer_pointer; |
| 33 | |
| 34 | struct gdma_wqe_dma_oob *header = (struct gdma_wqe_dma_oob *)p; |
| 35 | |
| 36 | memset(header, 0, sizeof(struct gdma_wqe_dma_oob)); |
| 37 | header->num_sgl_entries = work_request->num_sgl_elements; |
| 38 | header->inline_client_oob_size_in_dwords = |
| 39 | client_oob_size / sizeof(uint32_t); |
| 40 | header->client_data_unit = work_request->client_data_unit; |
| 41 | |
| 42 | DP_LOG(DEBUG, "queue buf %p sgl %u oob_h %u du %u oob_buf %p oob_b %u", |
| 43 | work_queue_buffer_pointer, header->num_sgl_entries, |
| 44 | header->inline_client_oob_size_in_dwords, |
| 45 | header->client_data_unit, work_request->inline_oob_data, |
| 46 | work_request->inline_oob_size_in_bytes); |
| 47 | |
| 48 | p += sizeof(struct gdma_wqe_dma_oob); |
| 49 | if (work_request->inline_oob_data && |
| 50 | work_request->inline_oob_size_in_bytes > 0) { |
| 51 | memcpy(p, work_request->inline_oob_data, |
| 52 | work_request->inline_oob_size_in_bytes); |
| 53 | if (client_oob_size > work_request->inline_oob_size_in_bytes) |
| 54 | memset(p + work_request->inline_oob_size_in_bytes, 0, |
| 55 | client_oob_size - |
| 56 | work_request->inline_oob_size_in_bytes); |
| 57 | } |
| 58 | |
| 59 | return sizeof(struct gdma_wqe_dma_oob) + client_oob_size; |
| 60 | } |
| 61 | |
| 62 | static uint32_t |
| 63 | write_scatter_gather_list(uint8_t *work_queue_head_pointer, |
no test coverage detected