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

lfn serial ticket/834-toolchain-update topic/fix-logger-deadlock topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 27de618 was e0a5d4c, checked in by Ondřej Hlavatý <aearsis@…>, 8 years ago

usb: update copyrights

The data was generated by a script, guided manually. If you feel your
name is missing somewhere, please add it!

The semi-automated process was roughly:

1) Changes per file and author (limited to our team) were counted
2) Trivial numbers were thrown away
3) Authors were sorted by lines added to file
4) All previous copyrights were replaced by the newly generated one
5) Hunks changing only year were discarded

It seems that a lot of my copyrights were added. It is due to me being
both sticking my nose everywhere and lazy to update the copyright right
away :)

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*
2 * Copyright (c) 2018 Ondrej Hlavaty, Jan Hrach, Jaroslav Jindrak, Petr Manek
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 <usb/host/utility.h>
42#include "hw_struct/regs.h"
43#include "hw_struct/context.h"
44#include "scratchpad.h"
45#include "trb_ring.h"
46
47#include "rh.h"
48#include "commands.h"
49#include "bus.h"
50
51typedef struct xhci_command xhci_cmd_t;
52
53typedef struct xhci_hc {
54 /** Common HC device header */
55 hc_device_t base;
56
57 /* MMIO range */
58 addr_range_t mmio_range;
59
60 /* Mapped register sets */
61 void *reg_base;
62 xhci_cap_regs_t *cap_regs;
63 xhci_op_regs_t *op_regs;
64 xhci_rt_regs_t *rt_regs;
65 xhci_doorbell_t *db_arry;
66 xhci_extcap_t *xecp; /**< First extended capability */
67 xhci_legsup_t *legsup; /**< Legacy support capability */
68
69 /* Structures in allocated memory */
70 xhci_event_ring_t event_ring;
71 uint64_t *dcbaa;
72 dma_buffer_t dcbaa_dma;
73 dma_buffer_t scratchpad_array;
74
75 /* Command ring management */
76 xhci_cmd_ring_t cr;
77
78 /* Buffer for events */
79 xhci_sw_ring_t sw_ring;
80
81 /** Event handling fibril */
82 joinable_fibril_t *event_worker;
83
84 /* Root hub emulation */
85 xhci_rh_t rh;
86
87 /* Bus bookkeeping */
88 xhci_bus_t bus;
89
90 /* Fibril that is currently hanling events */
91 fid_t event_handler;
92
93 /* Cached capabilities */
94 unsigned max_slots;
95 bool ac64;
96 bool csz;
97 uint64_t wrap_time; /** The last time when mfindex wrap happened */
98 uint64_t wrap_count; /** Amount of mfindex wraps HC has done */
99 unsigned ist; /**< IST in microframes */
100
101 /** Port speed mapping */
102 xhci_port_speed_t speeds [16];
103} xhci_hc_t;
104
105static inline xhci_hc_t *bus_to_hc(bus_t *bus)
106{
107 assert(bus);
108 return member_to_inst(bus, xhci_hc_t, bus);
109}
110
111typedef struct xhci_endpoint xhci_endpoint_t;
112typedef struct xhci_device xhci_device_t;
113
114extern errno_t hc_init_mmio(xhci_hc_t *, const hw_res_list_parsed_t *);
115extern errno_t hc_init_memory(xhci_hc_t *, ddf_dev_t *);
116extern errno_t hc_claim(xhci_hc_t *, ddf_dev_t *);
117extern errno_t hc_irq_code_gen(irq_code_t *, xhci_hc_t *, const hw_res_list_parsed_t *, int *);
118extern errno_t hc_start(xhci_hc_t *);
119extern void hc_fini(xhci_hc_t *);
120
121extern void hc_ring_doorbell(xhci_hc_t *, unsigned, unsigned);
122extern void hc_ring_ep_doorbell(xhci_endpoint_t *, uint32_t);
123extern unsigned hc_speed_to_psiv(usb_speed_t);
124
125extern errno_t hc_enable_slot(xhci_device_t *);
126extern errno_t hc_disable_slot(xhci_device_t *);
127extern errno_t hc_address_device(xhci_device_t *);
128extern errno_t hc_configure_device(xhci_device_t *);
129extern errno_t hc_deconfigure_device(xhci_device_t *);
130extern errno_t hc_add_endpoint(xhci_endpoint_t *);
131extern errno_t hc_drop_endpoint(xhci_endpoint_t *);
132extern errno_t hc_update_endpoint(xhci_endpoint_t *);
133extern errno_t hc_stop_endpoint(xhci_endpoint_t *);
134extern errno_t hc_reset_endpoint(xhci_endpoint_t *);
135extern errno_t hc_reset_ring(xhci_endpoint_t *, uint32_t);
136
137extern errno_t hc_status(bus_t *, uint32_t *);
138extern void hc_interrupt(bus_t *, uint32_t);
139
140#endif
141
142/**
143 * @}
144 */
Note: See TracBrowser for help on using the repository browser.