Zephyr API Documentation 4.3.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
36
42 unsigned int initialized : 1;
44 unsigned int enabled : 1;
45};
46
52 const char *name;
54 struct k_mutex mutex;
56 const struct device *dev;
64 struct sys_bitarray *addr_ba;
65};
66
67#define USBH_CONTROLLER_DEFINE(device_name, uhc_dev) \
68 SYS_BITARRAY_DEFINE_STATIC(ba_##device_name, 128); \
69 static STRUCT_SECTION_ITERABLE(usbh_context, device_name) = { \
70 .name = STRINGIFY(device_name), \
71 .mutex = Z_MUTEX_INITIALIZER(device_name.mutex), \
72 .dev = uhc_dev, \
73 .addr_ba = &ba_##device_name, \
74 }
75
76struct usbh_class_data;
77
95
101 int (*init)(struct usbh_class_data *const c_data);
103 int (*completion_cb)(struct usbh_class_data *const c_data,
104 struct uhc_transfer *const xfer);
106 int (*probe)(struct usbh_class_data *const c_data,
107 struct usb_device *const udev,
108 const uint8_t iface);
110 int (*removed)(struct usbh_class_data *const c_data);
112 int (*suspended)(struct usbh_class_data *const c_data);
114 int (*resumed)(struct usbh_class_data *const c_data);
115};
116
122 const char *name;
130 void *priv;
131};
132
139enum usbh_class_state {
141 USBH_CLASS_STATE_IDLE,
143 USBH_CLASS_STATE_BOUND,
145 USBH_CLASS_STATE_ERROR,
146};
147/* @endcond */
148
155struct usbh_class_node {
157 struct usbh_class_data *const c_data;
159 const struct usbh_class_filter *filters;
161 enum usbh_class_state state;
162};
163/* @endcond */
164
177#define USBH_DEFINE_CLASS(class_name, class_api, class_priv, filt) \
178 static struct usbh_class_data UTIL_CAT(class_data_, class_name) = { \
179 .name = STRINGIFY(class_name), \
180 .api = class_api, \
181 .priv = class_priv, \
182 }; \
183 static STRUCT_SECTION_ITERABLE(usbh_class_node, class_name) = { \
184 .c_data = &UTIL_CAT(class_data_, class_name), \
185 .filters = filt, \
186 };
187
195int usbh_init(struct usbh_context *uhs_ctx);
196
206int usbh_enable(struct usbh_context *uhs_ctx);
207
217int usbh_disable(struct usbh_context *uhs_ctx);
218
228int usbh_shutdown(struct usbh_context *const uhs_ctx);
229
233
234#ifdef __cplusplus
235}
236#endif
237
238#endif /* ZEPHYR_INCLUDE_USBH_H_ */
struct _dnode sys_dlist_t
Doubly-linked list structure.
Definition dlist.h:50
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
Mutex Structure.
Definition kernel.h:3402
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:99
int(* resumed)(struct usbh_class_data *const c_data)
Bus resumed handler (optional).
Definition usbh.h:114
int(* init)(struct usbh_class_data *const c_data)
Host initialization handler, before any device is connected.
Definition usbh.h:101
int(* probe)(struct usbh_class_data *const c_data, struct usb_device *const udev, const uint8_t iface)
Device connection handler.
Definition usbh.h:106
int(* suspended)(struct usbh_class_data *const c_data)
Bus suspended handler (optional).
Definition usbh.h:112
int(* completion_cb)(struct usbh_class_data *const c_data, struct uhc_transfer *const xfer)
Request completion handler.
Definition usbh.h:103
int(* removed)(struct usbh_class_data *const c_data)
Device removal handler.
Definition usbh.h:110
USB host class instance data.
Definition usbh.h:120
struct usbh_class_api * api
Pointer to host support class API.
Definition usbh.h:128
const char * name
Name of the USB host class instance.
Definition usbh.h:122
uint8_t iface
First interface number or claimed function.
Definition usbh.h:126
struct usb_device * udev
Pointer to USB device this class is used for.
Definition usbh.h:124
void * priv
Pointer to private data.
Definition usbh.h:130
Information about a device, which is relevant for matching a particular class.
Definition usbh.h:81
uint16_t pid
Product ID.
Definition usbh.h:85
uint8_t flags
Flags that tell which field to match.
Definition usbh.h:93
uint8_t sub
Subclass Code.
Definition usbh.h:89
uint16_t vid
Vendor ID.
Definition usbh.h:83
uint8_t proto
Protocol Code.
Definition usbh.h:91
USB host support runtime context.
Definition usbh.h:50
struct usb_device * root
USB root device.
Definition usbh.h:62
struct usbh_status status
Status of the USB host support.
Definition usbh.h:58
sys_dlist_t udevs
USB device list.
Definition usbh.h:60
struct k_mutex mutex
Access mutex.
Definition usbh.h:54
const char * name
Name of the USB device.
Definition usbh.h:52
struct sys_bitarray * addr_ba
Allocated device addresses bit array.
Definition usbh.h:64
const struct device * dev
Pointer to UHC device struct.
Definition usbh.h:56
USB host support status.
Definition usbh.h:40
unsigned int enabled
USB host support is enabled.
Definition usbh.h:44
unsigned int initialized
USB host support is initialized.
Definition usbh.h:42
Misc utilities.
USB host controller (UHC) driver API.