source: mainline/uspace/drv/bus/usb/xhci/hc.h@ d33dc780

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since d33dc780 was 9620a54, checked in by Petr Manek <petr.manek@…>, 8 years ago

Small changes. Temporarily fixed no device problem for endpoint logging. Added similar macro for device logging. Changed log messages to adopt these macros. TRB rings can be freed again. Made ring finalizers noexcept. Upon detach, the entire slot is disabled prior to unregistering endpoints in order to prevent invalid HC commands. Removed active endpoints count from XHCI device. Device context is freed in HC, so DCBAA is not touched from anywhere else.

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/*
2 * Copyright (c) 2017 Ondrej Hlavaty
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 host controller data bookkeeping.
34 */
35
36#ifndef XHCI_HC_H
37#define XHCI_HC_H
38
39#include <fibril_synch.h>
40#include <usb/host/usb_transfer_batch.h>
41#include "hw_struct/regs.h"
42#include "hw_struct/context.h"
43#include "scratchpad.h"
44#include "trb_ring.h"
45
46#include "rh.h"
47#include "bus.h"
48
49typedef struct xhci_hc {
50 /* MMIO range */
51 addr_range_t mmio_range;
52
53 /* Mapped register sets */
54 void *reg_base;
55 xhci_cap_regs_t *cap_regs;
56 xhci_op_regs_t *op_regs;
57 xhci_rt_regs_t *rt_regs;
58 xhci_doorbell_t *db_arry;
59 xhci_extcap_t *xecp; /**< First extended capability */
60 xhci_legsup_t *legsup; /**< Legacy support capability */
61
62 /* Structures in allocated memory */
63 xhci_trb_ring_t command_ring;
64 xhci_event_ring_t event_ring;
65 uint64_t *dcbaa;
66 xhci_scratchpad_t *scratchpad;
67
68 /* Root hub emulation */
69 xhci_rh_t rh;
70
71 /* Bus bookkeeping */
72 xhci_bus_t bus;
73
74 /* Cached capabilities */
75 unsigned max_slots;
76 bool ac64;
77
78 /** Port speed mapping */
79 xhci_port_speed_t speeds [16];
80 uint8_t speed_to_psiv [USB_SPEED_MAX];
81
82 /* Command list */
83 list_t commands;
84 fibril_mutex_t commands_mtx;
85
86 /* TODO: Hack. Figure out a better way. */
87 hcd_t *hcd;
88} xhci_hc_t;
89
90typedef struct xhci_endpoint xhci_endpoint_t;
91typedef struct xhci_device xhci_device_t;
92
93int hc_init_mmio(xhci_hc_t *, const hw_res_list_parsed_t *);
94int hc_init_memory(xhci_hc_t *, ddf_dev_t *);
95int hc_claim(xhci_hc_t *, ddf_dev_t *);
96int hc_irq_code_gen(irq_code_t *, xhci_hc_t *, const hw_res_list_parsed_t *);
97int hc_start(xhci_hc_t *, bool);
98int hc_schedule(xhci_hc_t *hc, usb_transfer_batch_t *batch);
99int hc_status(xhci_hc_t *, uint32_t *);
100void hc_interrupt(xhci_hc_t *, uint32_t);
101void hc_fini(xhci_hc_t *);
102int hc_ring_doorbell(xhci_hc_t *, unsigned, unsigned);
103int hc_enable_slot(xhci_hc_t *, uint32_t *);
104int hc_disable_slot(xhci_hc_t *, xhci_device_t *);
105int hc_address_device(xhci_hc_t *, xhci_device_t *, xhci_endpoint_t *);
106int hc_configure_device(xhci_hc_t *, uint32_t);
107int hc_deconfigure_device(xhci_hc_t *, uint32_t);
108int hc_add_endpoint(xhci_hc_t *, uint32_t, uint8_t, xhci_ep_ctx_t *);
109int hc_drop_endpoint(xhci_hc_t *, uint32_t, uint8_t);
110
111#endif
112
113/**
114 * @}
115 */
Note: See TracBrowser for help on using the repository browser.