Lines Matching refs:ctrl

104 static void xhci_scratchpad_free(struct xhci_ctrl *ctrl)  in xhci_scratchpad_free()  argument
106 if (!ctrl->scratchpad) in xhci_scratchpad_free()
109 ctrl->dcbaa->dev_context_ptrs[0] = 0; in xhci_scratchpad_free()
111 free((void *)(uintptr_t)ctrl->scratchpad->sp_array[0]); in xhci_scratchpad_free()
112 free(ctrl->scratchpad->sp_array); in xhci_scratchpad_free()
113 free(ctrl->scratchpad); in xhci_scratchpad_free()
114 ctrl->scratchpad = NULL; in xhci_scratchpad_free()
135 static void xhci_free_virt_devices(struct xhci_ctrl *ctrl) in xhci_free_virt_devices() argument
146 virt_dev = ctrl->devs[slot_id]; in xhci_free_virt_devices()
150 ctrl->dcbaa->dev_context_ptrs[slot_id] = 0; in xhci_free_virt_devices()
163 ctrl->devs[slot_id] = NULL; in xhci_free_virt_devices()
173 void xhci_cleanup(struct xhci_ctrl *ctrl) in xhci_cleanup() argument
175 xhci_ring_free(ctrl->event_ring); in xhci_cleanup()
176 xhci_ring_free(ctrl->cmd_ring); in xhci_cleanup()
177 xhci_scratchpad_free(ctrl); in xhci_cleanup()
178 xhci_free_virt_devices(ctrl); in xhci_cleanup()
179 free(ctrl->erst.entries); in xhci_cleanup()
180 free(ctrl->dcbaa); in xhci_cleanup()
181 memset(ctrl, '\0', sizeof(struct xhci_ctrl)); in xhci_cleanup()
348 static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl) in xhci_scratchpad_alloc() argument
350 struct xhci_hccr *hccr = ctrl->hccr; in xhci_scratchpad_alloc()
351 struct xhci_hcor *hcor = ctrl->hcor; in xhci_scratchpad_alloc()
365 ctrl->scratchpad = scratchpad; in xhci_scratchpad_alloc()
370 ctrl->dcbaa->dev_context_ptrs[0] = in xhci_scratchpad_alloc()
373 xhci_flush_cache((uintptr_t)&ctrl->dcbaa->dev_context_ptrs[0], in xhci_scratchpad_alloc()
374 sizeof(ctrl->dcbaa->dev_context_ptrs[0])); in xhci_scratchpad_alloc()
403 ctrl->scratchpad = NULL; in xhci_scratchpad_alloc()
417 *xhci_alloc_container_ctx(struct xhci_ctrl *ctrl, int type) in xhci_alloc_container_ctx() argument
428 CTX_SIZE(readl(&ctrl->hccr->cr_hccparams)); in xhci_alloc_container_ctx()
430 ctx->size += CTX_SIZE(readl(&ctrl->hccr->cr_hccparams)); in xhci_alloc_container_ctx()
443 int xhci_alloc_virt_device(struct xhci_ctrl *ctrl, unsigned int slot_id) in xhci_alloc_virt_device() argument
449 if (ctrl->devs[slot_id]) { in xhci_alloc_virt_device()
454 ctrl->devs[slot_id] = (struct xhci_virt_device *) in xhci_alloc_virt_device()
457 if (!ctrl->devs[slot_id]) { in xhci_alloc_virt_device()
462 memset(ctrl->devs[slot_id], 0, sizeof(struct xhci_virt_device)); in xhci_alloc_virt_device()
463 virt_dev = ctrl->devs[slot_id]; in xhci_alloc_virt_device()
466 virt_dev->out_ctx = xhci_alloc_container_ctx(ctrl, in xhci_alloc_virt_device()
474 virt_dev->in_ctx = xhci_alloc_container_ctx(ctrl, in xhci_alloc_virt_device()
487 ctrl->dcbaa->dev_context_ptrs[slot_id] = byte_64; in xhci_alloc_virt_device()
489 xhci_flush_cache((uintptr_t)&ctrl->dcbaa->dev_context_ptrs[slot_id], in xhci_alloc_virt_device()
503 int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr, in xhci_mem_init() argument
514 ctrl->dcbaa = (struct xhci_device_context_array *) in xhci_mem_init()
516 if (ctrl->dcbaa == NULL) { in xhci_mem_init()
521 val_64 = (uintptr_t)ctrl->dcbaa; in xhci_mem_init()
526 ctrl->cmd_ring = xhci_ring_alloc(1, true); in xhci_mem_init()
529 trb_64 = (uintptr_t)ctrl->cmd_ring->first_seg->trbs; in xhci_mem_init()
533 ctrl->cmd_ring->cycle_state; in xhci_mem_init()
539 ctrl->dba = (struct xhci_doorbell_array *)((char *)hccr + val); in xhci_mem_init()
544 ctrl->run_regs = (struct xhci_run_regs *)((char *)hccr + val); in xhci_mem_init()
547 ctrl->ir_set = &ctrl->run_regs->ir_set[0]; in xhci_mem_init()
550 ctrl->event_ring = xhci_ring_alloc(ERST_NUM_SEGS, false); in xhci_mem_init()
551 ctrl->erst.entries = (struct xhci_erst_entry *) in xhci_mem_init()
554 ctrl->erst.num_entries = ERST_NUM_SEGS; in xhci_mem_init()
556 for (val = 0, seg = ctrl->event_ring->first_seg; in xhci_mem_init()
561 struct xhci_erst_entry *entry = &ctrl->erst.entries[val]; in xhci_mem_init()
567 xhci_flush_cache((uintptr_t)ctrl->erst.entries, in xhci_mem_init()
570 deq = (unsigned long)ctrl->event_ring->dequeue; in xhci_mem_init()
573 xhci_writeq(&ctrl->ir_set->erst_dequeue, in xhci_mem_init()
577 val = xhci_readl(&ctrl->ir_set->erst_size); in xhci_mem_init()
580 xhci_writel(&ctrl->ir_set->erst_size, val); in xhci_mem_init()
583 val_64 = xhci_readq(&ctrl->ir_set->erst_base); in xhci_mem_init()
585 val_64 |= ((uintptr_t)(ctrl->erst.entries) & ~ERST_PTR_MASK); in xhci_mem_init()
587 xhci_writeq(&ctrl->ir_set->erst_base, val_64); in xhci_mem_init()
590 xhci_scratchpad_alloc(ctrl); in xhci_mem_init()
594 ctrl->devs[i] = NULL; in xhci_mem_init()
626 struct xhci_slot_ctx *xhci_get_slot_ctx(struct xhci_ctrl *ctrl, in xhci_get_slot_ctx() argument
633 (ctx->bytes + CTX_SIZE(readl(&ctrl->hccr->cr_hccparams))); in xhci_get_slot_ctx()
644 struct xhci_ep_ctx *xhci_get_ep_ctx(struct xhci_ctrl *ctrl, in xhci_get_ep_ctx() argument
655 (ep_index * CTX_SIZE(readl(&ctrl->hccr->cr_hccparams)))); in xhci_get_ep_ctx()
669 void xhci_endpoint_copy(struct xhci_ctrl *ctrl, in xhci_endpoint_copy() argument
677 out_ep_ctx = xhci_get_ep_ctx(ctrl, out_ctx, ep_index); in xhci_endpoint_copy()
678 in_ep_ctx = xhci_get_ep_ctx(ctrl, in_ctx, ep_index); in xhci_endpoint_copy()
698 void xhci_slot_copy(struct xhci_ctrl *ctrl, struct xhci_container_ctx *in_ctx, in xhci_slot_copy() argument
704 in_slot_ctx = xhci_get_slot_ctx(ctrl, in_ctx); in xhci_slot_copy()
705 out_slot_ctx = xhci_get_slot_ctx(ctrl, out_ctx); in xhci_slot_copy()
719 void xhci_setup_addressable_virt_dev(struct xhci_ctrl *ctrl, in xhci_setup_addressable_virt_dev() argument
735 virt_dev = ctrl->devs[slot_id]; in xhci_setup_addressable_virt_dev()
740 ep0_ctx = xhci_get_ep_ctx(ctrl, virt_dev->in_ctx, 0); in xhci_setup_addressable_virt_dev()
741 slot_ctx = xhci_get_slot_ctx(ctrl, virt_dev->in_ctx); in xhci_setup_addressable_virt_dev()