Lines Matching refs:std

191 	struct whc_std *std;  in qset_add_qtds()  local
194 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_qtds()
199 || (qset->pause_after_urb && std->urb != qset->pause_after_urb)) in qset_add_qtds()
202 if (std->qtd) in qset_add_qtds()
205 qtd = std->qtd = &qset->qtd[qset->td_end]; in qset_add_qtds()
208 if (usb_pipecontrol(std->urb->pipe)) in qset_add_qtds()
209 memcpy(qtd->setup, std->urb->setup_packet, 8); in qset_add_qtds()
211 status = QTD_STS_ACTIVE | QTD_STS_LEN(std->len); in qset_add_qtds()
213 if (whc_std_last(std) && usb_pipeout(std->urb->pipe)) in qset_add_qtds()
223 if (std->ntds_remaining < WHCI_QSET_TD_MAX) { in qset_add_qtds()
225 ialt = (qset->td_end + std->ntds_remaining) % WHCI_QSET_TD_MAX; in qset_add_qtds()
227 } else if (usb_pipein(std->urb->pipe)) in qset_add_qtds()
228 qset->pause_after_urb = std->urb; in qset_add_qtds()
230 if (std->num_pointers) in qset_add_qtds()
234 qtd->page_list_ptr = cpu_to_le64(std->dma_addr); in qset_add_qtds()
264 static void qset_copy_bounce_to_sg(struct whc *whc, struct whc_std *std) in qset_copy_bounce_to_sg() argument
270 bounce = std->bounce_buf; in qset_copy_bounce_to_sg()
271 remaining = std->len; in qset_copy_bounce_to_sg()
273 sg = std->bounce_sg; in qset_copy_bounce_to_sg()
274 offset = std->bounce_offset; in qset_copy_bounce_to_sg()
299 void qset_free_std(struct whc *whc, struct whc_std *std) in qset_free_std() argument
301 list_del(&std->list_node); in qset_free_std()
302 if (std->bounce_buf) { in qset_free_std()
303 bool is_out = usb_pipeout(std->urb->pipe); in qset_free_std()
306 if (std->num_pointers) in qset_free_std()
307 dma_addr = le64_to_cpu(std->pl_virt[0].buf_ptr); in qset_free_std()
309 dma_addr = std->dma_addr; in qset_free_std()
312 std->len, is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE); in qset_free_std()
314 qset_copy_bounce_to_sg(whc, std); in qset_free_std()
315 kfree(std->bounce_buf); in qset_free_std()
317 if (std->pl_virt) { in qset_free_std()
318 if (std->dma_addr) in qset_free_std()
319 dma_unmap_single(whc->wusbhc.dev, std->dma_addr, in qset_free_std()
320 std->num_pointers * sizeof(struct whc_page_list_entry), in qset_free_std()
322 kfree(std->pl_virt); in qset_free_std()
323 std->pl_virt = NULL; in qset_free_std()
325 kfree(std); in qset_free_std()
334 struct whc_std *std, *t; in qset_remove_qtds() local
336 list_for_each_entry_safe(std, t, &qset->stds, list_node) { in qset_remove_qtds()
337 if (std->urb != urb) in qset_remove_qtds()
339 if (std->qtd != NULL) in qset_remove_qtds()
341 qset_free_std(whc, std); in qset_remove_qtds()
350 struct whc_std *std, *t; in qset_free_stds() local
352 list_for_each_entry_safe(std, t, &qset->stds, list_node) { in qset_free_stds()
353 if (std->urb == urb) in qset_free_stds()
354 qset_free_std(qset->whc, std); in qset_free_stds()
358 static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_flags) in qset_fill_page_list() argument
360 dma_addr_t dma_addr = std->dma_addr; in qset_fill_page_list()
366 if (std->len <= WHCI_PAGE_SIZE) { in qset_fill_page_list()
367 std->num_pointers = 0; in qset_fill_page_list()
372 ep = dma_addr + std->len; in qset_fill_page_list()
373 std->num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE); in qset_fill_page_list()
375 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_fill_page_list()
376 std->pl_virt = kmalloc(pl_len, mem_flags); in qset_fill_page_list()
377 if (std->pl_virt == NULL) in qset_fill_page_list()
379 std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE); in qset_fill_page_list()
380 if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) { in qset_fill_page_list()
381 kfree(std->pl_virt); in qset_fill_page_list()
385 for (p = 0; p < std->num_pointers; p++) { in qset_fill_page_list()
386 std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); in qset_fill_page_list()
420 struct whc_std *std; in qset_new_std() local
422 std = kzalloc(sizeof(struct whc_std), mem_flags); in qset_new_std()
423 if (std == NULL) in qset_new_std()
426 std->urb = urb; in qset_new_std()
427 std->qtd = NULL; in qset_new_std()
429 INIT_LIST_HEAD(&std->list_node); in qset_new_std()
430 list_add_tail(&std->list_node, &qset->stds); in qset_new_std()
432 return std; in qset_new_std()
442 struct whc_std *std = NULL; in qset_add_urb_sg() local
478 if (!std in qset_add_urb_sg()
481 || std->len + WHCI_PAGE_SIZE > QTD_MAX_XFER_SIZE) { in qset_add_urb_sg()
482 if (std && std->len % qset->max_packet != 0) in qset_add_urb_sg()
484 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb_sg()
485 if (std == NULL) { in qset_add_urb_sg()
500 if (std->len + dma_len > QTD_MAX_XFER_SIZE) { in qset_add_urb_sg()
502 * qset->max_packet - std->len; in qset_add_urb_sg()
505 std->len += dma_len; in qset_add_urb_sg()
506 std->ntds_remaining = -1; /* filled in later */ in qset_add_urb_sg()
511 std->num_pointers += num_pointers; in qset_add_urb_sg()
513 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_add_urb_sg()
515 new_pl_virt = krealloc(std->pl_virt, pl_len, mem_flags); in qset_add_urb_sg()
517 kfree(std->pl_virt); in qset_add_urb_sg()
518 std->pl_virt = NULL; in qset_add_urb_sg()
521 std->pl_virt = new_pl_virt; in qset_add_urb_sg()
523 for (;p < std->num_pointers; p++) { in qset_add_urb_sg()
524 std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); in qset_add_urb_sg()
536 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_urb_sg()
537 if (std->ntds_remaining == -1) { in qset_add_urb_sg()
538 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_add_urb_sg()
539 std->ntds_remaining = ntds--; in qset_add_urb_sg()
540 std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, in qset_add_urb_sg()
561 struct whc_std *std = NULL; in qset_add_urb_sg_linearize() local
584 if (!std || std->len == max_std_len) { in qset_add_urb_sg_linearize()
585 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb_sg_linearize()
586 if (std == NULL) in qset_add_urb_sg_linearize()
588 std->bounce_buf = kmalloc(max_std_len, mem_flags); in qset_add_urb_sg_linearize()
589 if (std->bounce_buf == NULL) in qset_add_urb_sg_linearize()
591 std->bounce_sg = sg; in qset_add_urb_sg_linearize()
592 std->bounce_offset = orig - sg_virt(sg); in qset_add_urb_sg_linearize()
593 bounce = std->bounce_buf; in qset_add_urb_sg_linearize()
597 len = min(sg_remaining, max_std_len - std->len); in qset_add_urb_sg_linearize()
602 std->len += len; in qset_add_urb_sg_linearize()
603 std->ntds_remaining = -1; /* filled in later */ in qset_add_urb_sg_linearize()
616 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_urb_sg_linearize()
617 if (std->ntds_remaining != -1) in qset_add_urb_sg_linearize()
620 std->dma_addr = dma_map_single(&whc->umc->dev, std->bounce_buf, std->len, in qset_add_urb_sg_linearize()
623 if (qset_fill_page_list(whc, std, mem_flags) < 0) in qset_add_urb_sg_linearize()
626 std->ntds_remaining = ntds--; in qset_add_urb_sg_linearize()
672 struct whc_std *std; in qset_add_urb() local
679 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb()
680 if (std == NULL) in qset_add_urb()
683 std->dma_addr = transfer_dma; in qset_add_urb()
684 std->len = std_len; in qset_add_urb()
685 std->ntds_remaining = ntds_remaining; in qset_add_urb()
687 if (qset_fill_page_list(whc, std, mem_flags) < 0) in qset_add_urb()
756 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node); in process_inactive_qtd() local
757 struct urb *urb = std->urb; in process_inactive_qtd()
763 urb->actual_length += std->len - QTD_STS_TO_LEN(status); in process_inactive_qtd()
768 complete = whc_std_last(std); in process_inactive_qtd()
771 qset_free_std(whc, std); in process_inactive_qtd()
808 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node); in process_halted_qtd() local
809 struct urb *urb = std->urb; in process_halted_qtd()
817 list_for_each_entry(std, &qset->stds, list_node) { in process_halted_qtd()
821 std->qtd = NULL; in process_halted_qtd()