Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
usbh.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright Nordic Semiconductor ASA
3 * SPDX-FileCopyrightText: Copyright 2025 NXP
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13
14#ifndef ZEPHYR_INCLUDE_USBH_H_
15#define ZEPHYR_INCLUDE_USBH_H_
16
17#include <stdint.h>
18#include <zephyr/device.h>
19#include <zephyr/net_buf.h>
20#include <zephyr/sys/util.h>
21#include <zephyr/sys/dlist.h>
22#include <zephyr/sys/bitarray.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
38
44 unsigned int initialized : 1;
46 unsigned int enabled : 1;
47};
48
54 const char *name;
56 struct k_mutex mutex;
58 const struct device *dev;
66 struct sys_bitarray *addr_ba;
67};
68
69#define USBH_CONTROLLER_DEFINE(device_name, uhc_dev) \
70 SYS_BITARRAY_DEFINE_STATIC(ba_##device_name, 128); \
71 static STRUCT_SECTION_ITERABLE(usbh_context, device_name) = { \
72 .name = STRINGIFY(device_name), \
73 .mutex = Z_MUTEX_INITIALIZER(device_name.mutex), \
74 .dev = uhc_dev, \
75 .addr_ba = &ba_##device_name, \
76 }
77
78struct usbh_class_data;
79
97
103 int (*init)(struct usbh_class_data *const c_data);
105 int (*completion_cb)(struct usbh_class_data *const c_data,
106 struct uhc_transfer *const xfer);
108 int (*probe)(struct usbh_class_data *const c_data,
109 struct usb_device *const udev,
110 const uint8_t iface);
112 int (*removed)(struct usbh_class_data *const c_data);
114 int (*suspended)(struct usbh_class_data *const c_data);
116 int (*resumed)(struct usbh_class_data *const c_data);
117};
118
124 const char *name;
132 void *priv;
133};
134
141enum usbh_class_state {
143 USBH_CLASS_STATE_IDLE,
145 USBH_CLASS_STATE_BOUND,
147 USBH_CLASS_STATE_ERROR,
148};
149/* @endcond */
150
157struct usbh_class_node {
159 struct usbh_class_data *const c_data;
161 const struct usbh_class_filter *filters;
163 enum usbh_class_state state;
164};
165/* @endcond */
166
179#define USBH_DEFINE_CLASS(class_name, class_api, class_priv, filt) \
180 static struct usbh_class_data UTIL_CAT(class_data_, class_name) = { \
181 .name = STRINGIFY(class_name), \
182 .api = class_api, \
183 .priv = class_priv, \
184 }; \
185 static STRUCT_SECTION_ITERABLE(usbh_class_node, class_name) = { \
186 .c_data = &UTIL_CAT(class_data_, class_name), \
187 .filters = filt, \
188 };
189
197int usbh_init(struct usbh_context *uhs_ctx);
198
208int usbh_enable(struct usbh_context *uhs_ctx);
209
219int usbh_disable(struct usbh_context *uhs_ctx);
220
230int usbh_shutdown(struct usbh_context *const uhs_ctx);
231
235
236#ifdef __cplusplus
237}
238#endif
239
240#endif /* ZEPHYR_INCLUDE_USBH_H_ */
Header file for the bit array API.
Header file for the doubly-linked list API.
struct _dnode sys_dlist_t
Doubly-linked list structure.
Definition dlist.h:55
int usbh_enable(struct usbh_context *uhs_ctx)
Enable the USB host support and class instances.
int usbh_init(struct usbh_context *uhs_ctx)
Initialize the USB host support;.
int usbh_disable(struct usbh_context *uhs_ctx)
Disable the USB host support.
int usbh_shutdown(struct usbh_context *const uhs_ctx)
Shutdown the USB host support.
Buffer management.
state
Definition parser_state.h:29
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
Kernel mutex structure.
Definition kernel.h:3572
UHC endpoint buffer info.
Definition uhc.h:120
Host representation of a USB device.
Definition uhc.h:74
USB host class instance API.
Definition usbh.h:101
int(* resumed)(struct usbh_class_data *const c_data)
Bus resumed handler (optional).
Definition usbh.h:116
int(* init)(struct usbh_class_data *const c_data)
Host initialization handler, before any device is connected.
Definition usbh.h:103
int(* probe)(struct usbh_class_data *const c_data, struct usb_device *const udev, const uint8_t iface)
Device connection handler.
Definition usbh.h:108
int(* suspended)(struct usbh_class_data *const c_data)
Bus suspended handler (optional).
Definition usbh.h:114
int(* completion_cb)(struct usbh_class_data *const c_data, struct uhc_transfer *const xfer)
Request completion handler.
Definition usbh.h:105
int(* removed)(struct usbh_class_data *const c_data)
Device removal handler.
Definition usbh.h:112
USB host class instance data.
Definition usbh.h:122
struct usbh_class_api * api
Pointer to host support class API.
Definition usbh.h:130
const char * name
Name of the USB host class instance.
Definition usbh.h:124
uint8_t iface
First interface number or claimed function.
Definition usbh.h:128
struct usb_device * udev
Pointer to USB device this class is used for.
Definition usbh.h:126
void * priv
Pointer to private data.
Definition usbh.h:132
Information about a device, which is relevant for matching a particular class.
Definition usbh.h:83
uint16_t pid
Product ID.
Definition usbh.h:87
uint8_t flags
Flags that tell which field to match.
Definition usbh.h:95
uint8_t sub
Subclass Code.
Definition usbh.h:91
uint16_t vid
Vendor ID.
Definition usbh.h:85
uint8_t proto
Protocol Code.
Definition usbh.h:93
USB host support runtime context.
Definition usbh.h:52
struct usb_device * root
USB root device.
Definition usbh.h:64
struct usbh_status status
Status of the USB host support.
Definition usbh.h:60
sys_dlist_t udevs
USB device list.
Definition usbh.h:62
struct k_mutex mutex
Access mutex.
Definition usbh.h:56
const char * name
Name of the USB device.
Definition usbh.h:54
struct sys_bitarray * addr_ba
Allocated device addresses bit array.
Definition usbh.h:66
const struct device * dev
Pointer to UHC device struct.
Definition usbh.h:58
USB host support status.
Definition usbh.h:42
unsigned int enabled
USB host support is enabled.
Definition usbh.h:46
unsigned int initialized
USB host support is initialized.
Definition usbh.h:44
Iterable sections helpers.
Misc utilities.
USB host controller (UHC) driver API.