• Home
  • Raw
  • Download

Lines Matching full:std

179 	struct whc_std *std;  in qset_add_qtds()  local
182 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_qtds()
187 || (qset->pause_after_urb && std->urb != qset->pause_after_urb)) in qset_add_qtds()
190 if (std->qtd) in qset_add_qtds()
193 qtd = std->qtd = &qset->qtd[qset->td_end]; in qset_add_qtds()
196 if (usb_pipecontrol(std->urb->pipe)) in qset_add_qtds()
197 memcpy(qtd->setup, std->urb->setup_packet, 8); in qset_add_qtds()
199 status = QTD_STS_ACTIVE | QTD_STS_LEN(std->len); in qset_add_qtds()
201 if (whc_std_last(std) && usb_pipeout(std->urb->pipe)) in qset_add_qtds()
211 if (std->ntds_remaining < WHCI_QSET_TD_MAX) { in qset_add_qtds()
213 ialt = (qset->td_end + std->ntds_remaining) % WHCI_QSET_TD_MAX; in qset_add_qtds()
215 } else if (usb_pipein(std->urb->pipe)) in qset_add_qtds()
216 qset->pause_after_urb = std->urb; in qset_add_qtds()
218 if (std->num_pointers) in qset_add_qtds()
222 qtd->page_list_ptr = cpu_to_le64(std->dma_addr); in qset_add_qtds()
252 static void qset_copy_bounce_to_sg(struct whc *whc, struct whc_std *std) in qset_copy_bounce_to_sg() argument
258 bounce = std->bounce_buf; in qset_copy_bounce_to_sg()
259 remaining = std->len; in qset_copy_bounce_to_sg()
261 sg = std->bounce_sg; in qset_copy_bounce_to_sg()
262 offset = std->bounce_offset; in qset_copy_bounce_to_sg()
283 * qset_free_std - remove an sTD and free it.
285 * @std: the sTD to remove and free.
287 void qset_free_std(struct whc *whc, struct whc_std *std) in qset_free_std() argument
289 list_del(&std->list_node); in qset_free_std()
290 if (std->bounce_buf) { in qset_free_std()
291 bool is_out = usb_pipeout(std->urb->pipe); in qset_free_std()
294 if (std->num_pointers) in qset_free_std()
295 dma_addr = le64_to_cpu(std->pl_virt[0].buf_ptr); in qset_free_std()
297 dma_addr = std->dma_addr; in qset_free_std()
300 std->len, is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE); in qset_free_std()
302 qset_copy_bounce_to_sg(whc, std); in qset_free_std()
303 kfree(std->bounce_buf); in qset_free_std()
305 if (std->pl_virt) { in qset_free_std()
306 if (!dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) in qset_free_std()
307 dma_unmap_single(whc->wusbhc.dev, std->dma_addr, in qset_free_std()
308 std->num_pointers * sizeof(struct whc_page_list_entry), in qset_free_std()
310 kfree(std->pl_virt); in qset_free_std()
311 std->pl_virt = NULL; in qset_free_std()
313 kfree(std); in qset_free_std()
322 struct whc_std *std, *t; in qset_remove_qtds() local
324 list_for_each_entry_safe(std, t, &qset->stds, list_node) { in qset_remove_qtds()
325 if (std->urb != urb) in qset_remove_qtds()
327 if (std->qtd != NULL) in qset_remove_qtds()
329 qset_free_std(whc, std); in qset_remove_qtds()
338 struct whc_std *std, *t; in qset_free_stds() local
340 list_for_each_entry_safe(std, t, &qset->stds, list_node) { in qset_free_stds()
341 if (std->urb == urb) in qset_free_stds()
342 qset_free_std(qset->whc, std); in qset_free_stds()
346 static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_flags) in qset_fill_page_list() argument
348 dma_addr_t dma_addr = std->dma_addr; in qset_fill_page_list()
354 if (std->len <= WHCI_PAGE_SIZE) { in qset_fill_page_list()
355 std->num_pointers = 0; in qset_fill_page_list()
360 ep = dma_addr + std->len; in qset_fill_page_list()
361 std->num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE); in qset_fill_page_list()
363 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_fill_page_list()
364 std->pl_virt = kmalloc(pl_len, mem_flags); in qset_fill_page_list()
365 if (std->pl_virt == NULL) in qset_fill_page_list()
367 std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE); in qset_fill_page_list()
368 if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) { in qset_fill_page_list()
369 kfree(std->pl_virt); in qset_fill_page_list()
373 for (p = 0; p < std->num_pointers; p++) { in qset_fill_page_list()
374 std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); in qset_fill_page_list()
408 struct whc_std *std; in qset_new_std() local
410 std = kzalloc(sizeof(struct whc_std), mem_flags); in qset_new_std()
411 if (std == NULL) in qset_new_std()
414 std->urb = urb; in qset_new_std()
415 std->qtd = NULL; in qset_new_std()
417 INIT_LIST_HEAD(&std->list_node); in qset_new_std()
418 list_add_tail(&std->list_node, &qset->stds); in qset_new_std()
420 return std; in qset_new_std()
430 struct whc_std *std = NULL; in qset_add_urb_sg() local
455 * We can use the previous std (if it exists) provided that: in qset_add_urb_sg()
460 * If a new std is needed but the previous one in qset_add_urb_sg()
466 if (!std in qset_add_urb_sg()
469 || std->len + WHCI_PAGE_SIZE > QTD_MAX_XFER_SIZE) { in qset_add_urb_sg()
470 if (std && std->len % qset->max_packet != 0) in qset_add_urb_sg()
472 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb_sg()
473 if (std == NULL) { in qset_add_urb_sg()
488 if (std->len + dma_len > QTD_MAX_XFER_SIZE) { in qset_add_urb_sg()
490 * qset->max_packet - std->len; in qset_add_urb_sg()
493 std->len += dma_len; in qset_add_urb_sg()
494 std->ntds_remaining = -1; /* filled in later */ in qset_add_urb_sg()
499 std->num_pointers += num_pointers; in qset_add_urb_sg()
501 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_add_urb_sg()
503 new_pl_virt = krealloc(std->pl_virt, pl_len, mem_flags); in qset_add_urb_sg()
505 kfree(std->pl_virt); in qset_add_urb_sg()
506 std->pl_virt = NULL; in qset_add_urb_sg()
509 std->pl_virt = new_pl_virt; in qset_add_urb_sg()
511 for (;p < std->num_pointers; p++) { in qset_add_urb_sg()
512 std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); in qset_add_urb_sg()
523 std->ntds_remaining. */ in qset_add_urb_sg()
524 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_urb_sg()
525 if (std->ntds_remaining == -1) { in qset_add_urb_sg()
526 pl_len = std->num_pointers * sizeof(struct whc_page_list_entry); in qset_add_urb_sg()
527 std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, in qset_add_urb_sg()
529 if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) in qset_add_urb_sg()
531 std->ntds_remaining = ntds--; in qset_add_urb_sg()
551 struct whc_std *std = NULL; in qset_add_urb_sg_linearize() local
574 if (!std || std->len == max_std_len) { in qset_add_urb_sg_linearize()
575 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb_sg_linearize()
576 if (std == NULL) in qset_add_urb_sg_linearize()
578 std->bounce_buf = kmalloc(max_std_len, mem_flags); in qset_add_urb_sg_linearize()
579 if (std->bounce_buf == NULL) in qset_add_urb_sg_linearize()
581 std->bounce_sg = sg; in qset_add_urb_sg_linearize()
582 std->bounce_offset = orig - sg_virt(sg); in qset_add_urb_sg_linearize()
583 bounce = std->bounce_buf; in qset_add_urb_sg_linearize()
587 len = min(sg_remaining, max_std_len - std->len); in qset_add_urb_sg_linearize()
592 std->len += len; in qset_add_urb_sg_linearize()
593 std->ntds_remaining = -1; /* filled in later */ in qset_add_urb_sg_linearize()
604 * page lists (if necessary), and fill in std->ntds_remaining. in qset_add_urb_sg_linearize()
606 list_for_each_entry(std, &qset->stds, list_node) { in qset_add_urb_sg_linearize()
607 if (std->ntds_remaining != -1) in qset_add_urb_sg_linearize()
610 std->dma_addr = dma_map_single(&whc->umc->dev, std->bounce_buf, std->len, in qset_add_urb_sg_linearize()
612 if (dma_mapping_error(&whc->umc->dev, std->dma_addr)) in qset_add_urb_sg_linearize()
615 if (qset_fill_page_list(whc, std, mem_flags) < 0) in qset_add_urb_sg_linearize()
618 std->ntds_remaining = ntds--; in qset_add_urb_sg_linearize()
628 * At least one qTD (and sTD) is required even if the transfer has no
664 struct whc_std *std; in qset_add_urb() local
671 std = qset_new_std(whc, qset, urb, mem_flags); in qset_add_urb()
672 if (std == NULL) in qset_add_urb()
675 std->dma_addr = transfer_dma; in qset_add_urb()
676 std->len = std_len; in qset_add_urb()
677 std->ntds_remaining = ntds_remaining; in qset_add_urb()
679 if (qset_fill_page_list(whc, std, mem_flags) < 0) in qset_add_urb()
748 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node); in process_inactive_qtd() local
749 struct urb *urb = std->urb; in process_inactive_qtd()
755 urb->actual_length += std->len - QTD_STS_TO_LEN(status); in process_inactive_qtd()
760 complete = whc_std_last(std); in process_inactive_qtd()
763 qset_free_std(whc, std); in process_inactive_qtd()
800 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node); in process_halted_qtd() local
801 struct urb *urb = std->urb; in process_halted_qtd()
809 list_for_each_entry(std, &qset->stds, list_node) { in process_halted_qtd()
813 std->qtd = NULL; in process_halted_qtd()