XHCI Invalid Context

Почему с этим контекстом команда Address Device срабатывает без ошибок на портах USB 2.0, а на портах 3.0 возникает ошибка Parameter Error (Asserted by a command if a Context parameter is invalid)?

uptr in_ctx_base;
uptr in_ctx = xhci_alloc_page(&in_ctx_base);
((struct xhci_in_ctrl_ctx *)in_ctx)->add_ctx_flags = 0b11;
in_ctx += dev->ctx_sz;
((struct xhci_slot_ctx *)in_ctx)->root_port_num = port_id;
((struct xhci_slot_ctx *)in_ctx)->context_entries = 1;
((struct xhci_slot_ctx *)in_ctx)->speed = (port->portsc >> 10) & 0b1111;
in_ctx += dev->ctx_sz;
((struct xhci_ep_ctx *)in_ctx)->dword[1] = (4 << 3) | (8 << 16) | (3 << 1);
((struct xhci_ep_ctx *)in_ctx)->dword[2] = (VIRT2PHYS(tr.base) & 0xffffffff) | 1;
((struct xhci_ep_ctx *)in_ctx)->dword[3] = VIRT2PHYS(tr.base) >> 32;

uptr out_ctx = xhci_alloc_page(&dev->dcba_array[slot]);
if ((xhci_address_device(dev, slot, in_ctx_base, 1) >> 24) != 1) {
    print("Address Device with BSR = 1 error!\n");
    return;
}

xhci spec


Ответы (0 шт):