1// Copyright 2016 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <lib/sync/completion.h> 8 9#include "xhci.h" 10#include "xhci-transfer.h" 11 12typedef struct { 13 xhci_command_context_t context; 14 sync_completion_t completion; 15 // from command completion event TRB 16 uint32_t status; 17 uint32_t control; 18} xhci_sync_command_t; 19 20void xhci_sync_command_init(xhci_sync_command_t* command); 21 22// returns condition code 23int xhci_sync_command_wait(xhci_sync_command_t* command); 24 25static inline int xhci_sync_command_slot_id(xhci_sync_command_t* command) { 26 return (command->control & XHCI_MASK(TRB_SLOT_ID_START, TRB_SLOT_ID_BITS)) >> TRB_SLOT_ID_START; 27} 28 29// executes a command with a 1 second timeout 30zx_status_t xhci_send_command(xhci_t* xhci, uint32_t command, uint64_t ptr, uint32_t control_bits); 31 32// Returns the next extended capability, optionally starting from a 33// specific capability and/or only matching a particular id. 34// 35// prev_cap: if non-NULL, searching begins at the following capability, otherwise 36// searching begins at mmio base. 37// match_cap_id: if non-NULL, only capabilities with this id will be returned. 38uint32_t* xhci_get_next_ext_cap(void* mmio, uint32_t* prev_cap, uint32_t* match_cap_id); 39