source: mainline/uspace/drv/bus/usb/uhci/hc.h@ e0a5d4c

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since e0a5d4c was e0a5d4c, checked in by Ondřej Hlavatý <aearsis@…>, 7 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.9 KB
Line 
1/*
2 * Copyright (c) 2011 Jan Vesely
3 * Copyright (c) 2018 Ondrej Hlavaty
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup drvusbuhcihc
31 * @{
32 */
33/** @file
34 * @brief UHCI host controller driver structure
35 */
36
37#ifndef DRV_UHCI_HC_H
38#define DRV_UHCI_HC_H
39
40#include <device/hw_res_parsed.h>
41#include <fibril.h>
42#include <macros.h>
43#include <stdbool.h>
44#include <ddi.h>
45#include <usb/host/hcd.h>
46#include <usb/host/usb2_bus.h>
47#include <usb/host/usb_transfer_batch.h>
48
49#include "uhci_rh.h"
50#include "transfer_list.h"
51#include "hw_struct/link_pointer.h"
52
53/** UHCI I/O registers layout */
54typedef struct uhci_regs {
55 /** Command register, controls HC behaviour */
56 ioport16_t usbcmd;
57#define UHCI_CMD_MAX_PACKET (1 << 7)
58#define UHCI_CMD_CONFIGURE (1 << 6)
59#define UHCI_CMD_DEBUG (1 << 5)
60#define UHCI_CMD_FORCE_GLOBAL_RESUME (1 << 4)
61#define UHCI_CMD_FORCE_GLOBAL_SUSPEND (1 << 3)
62#define UHCI_CMD_GLOBAL_RESET (1 << 2)
63#define UHCI_CMD_HCRESET (1 << 1)
64#define UHCI_CMD_RUN_STOP (1 << 0)
65
66 /** Status register, 1 means interrupt is asserted (if enabled) */
67 ioport16_t usbsts;
68#define UHCI_STATUS_HALTED (1 << 5)
69#define UHCI_STATUS_PROCESS_ERROR (1 << 4)
70#define UHCI_STATUS_SYSTEM_ERROR (1 << 3)
71#define UHCI_STATUS_RESUME (1 << 2)
72#define UHCI_STATUS_ERROR_INTERRUPT (1 << 1)
73#define UHCI_STATUS_INTERRUPT (1 << 0)
74#define UHCI_STATUS_NM_INTERRUPTS \
75 (UHCI_STATUS_PROCESS_ERROR | UHCI_STATUS_SYSTEM_ERROR)
76
77 /** Interrupt enabled registers */
78 ioport16_t usbintr;
79#define UHCI_INTR_SHORT_PACKET (1 << 3)
80#define UHCI_INTR_COMPLETE (1 << 2)
81#define UHCI_INTR_RESUME (1 << 1)
82#define UHCI_INTR_CRC (1 << 0)
83
84 /** Register stores frame number used in SOF packet */
85 ioport16_t frnum;
86
87 /** Pointer(physical) to the Frame List */
88 ioport32_t flbaseadd;
89
90 /** SOF modification to match external timers */
91 ioport8_t sofmod;
92
93 PADD8[3];
94 ioport16_t ports[];
95} uhci_regs_t;
96
97#define UHCI_FRAME_LIST_COUNT 1024
98#define UHCI_DEBUGER_TIMEOUT 5000000
99#define UHCI_ALLOWED_HW_FAIL 5
100
101/** Main UHCI driver structure */
102typedef struct hc {
103 /* Common hc_device header */
104 hc_device_t base;
105
106 uhci_rh_t rh;
107 bus_t bus;
108 usb2_bus_helper_t bus_helper;
109
110 /** Addresses of I/O registers */
111 uhci_regs_t *registers;
112
113 /** Frame List contains 1024 link pointers */
114 link_pointer_t *frame_list;
115
116 /** List and queue of interrupt transfers */
117 transfer_list_t transfers_interrupt;
118 /** List and queue of low speed control transfers */
119 transfer_list_t transfers_control_slow;
120 /** List and queue of full speed bulk transfers */
121 transfer_list_t transfers_bulk_full;
122 /** List and queue of full speed control transfers */
123 transfer_list_t transfers_control_full;
124
125 /** Pointer table to the above lists, helps during scheduling */
126 transfer_list_t *transfers[2][4];
127
128 /**
129 * Guard for the pending list. Can be locked under EP guard, but not
130 * vice versa.
131 */
132 fibril_mutex_t guard;
133 /** List of endpoints with a transfer scheduled */
134 list_t pending_endpoints;
135
136 /** Number of hw failures detected. */
137 unsigned hw_failures;
138} hc_t;
139
140typedef struct uhci_endpoint {
141 endpoint_t base;
142
143 bool toggle;
144} uhci_endpoint_t;
145
146static inline hc_t *hcd_to_hc(hc_device_t *hcd)
147{
148 assert(hcd);
149 return (hc_t *) hcd;
150}
151
152static inline hc_t *bus_to_hc(bus_t *bus)
153{
154 assert(bus);
155 return member_to_inst(bus, hc_t, bus);
156}
157
158int hc_unschedule_batch(usb_transfer_batch_t *);
159
160extern errno_t hc_add(hc_device_t *, const hw_res_list_parsed_t *);
161extern errno_t hc_gen_irq_code(irq_code_t *, hc_device_t *, const hw_res_list_parsed_t *, int *);
162extern errno_t hc_start(hc_device_t *);
163extern errno_t hc_setup_roothub(hc_device_t *);
164extern errno_t hc_gone(hc_device_t *);
165
166#endif
167
168/**
169 * @}
170 */
Note: See TracBrowser for help on using the repository browser.