source: mainline/uspace/drv/bus/usb/xhci/rh.h@ 1f76b7d

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 1f76b7d was 370a1c8, checked in by Michal Staruch <salmelu@…>, 8 years ago

Extcap fix, not correctly determine if port is USB 2/3

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 * Copyright (c) 2017 Michal Staruch
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup drvusbxhci
30 * @{
31 */
32/** @file
33 * @brief The roothub structures abstraction.
34 */
35
36#ifndef XHCI_RH_H
37#define XHCI_RH_H
38
39#include <usb/host/usb_transfer_batch.h>
40#include <usbvirt/virthub_base.h>
41
42enum {
43 XHCI_MAX_PORTS = 255,
44};
45
46/* XHCI root hub instance */
47typedef struct {
48 /** Virtual hub instance */
49 virthub_base_t base;
50 /** USB hub descriptor describing the XHCI root hub */
51 struct {
52 usb_hub_descriptor_header_t header;
53 uint8_t rempow[STATUS_BYTES(XHCI_MAX_PORTS) * 2];
54 } __attribute__((packed)) hub_descriptor;
55 /** Interrupt transfer waiting for an actual interrupt to occur */
56 usb_transfer_batch_t *unfinished_interrupt_transfer;
57
58 uint8_t usb2_port_start;
59 uint8_t usb2_port_end;
60 uint8_t usb3_port_start;
61 uint8_t usb3_port_end;
62} xhci_rh_t;
63
64int xhci_rh_init(xhci_rh_t *);
65int xhci_rh_fini(xhci_rh_t *);
66int xhci_handle_port_status_change_event(xhci_hc_t *, xhci_trb_t *);
67int xhci_get_hub_port(xhci_trb_t *);
68int xhci_reset_hub_port(xhci_hc_t *, uint8_t);
69int xhci_rh_schedule(xhci_rh_t *, usb_transfer_batch_t *);
70int xhci_rh_interrupt(xhci_rh_t *);
71
72/** Get XHCI rh address.
73 *
74 * @param rh XHCI rh instance.
75 * @return USB address assigned to the hub.
76 * Wrapper for virtual hub address
77 */
78static inline usb_address_t xhci_rh_get_address(xhci_rh_t *rh)
79{
80 assert(rh);
81 return virthub_base_get_address(&rh->base);
82}
83
84static inline bool xhci_is_usb3_port(xhci_rh_t* rh, uint8_t port) {
85 return port >= rh->usb3_port_start && port <= rh->usb3_port_end;
86}
87
88#endif
89
90/**
91 * @}
92 */
Note: See TracBrowser for help on using the repository browser.