Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
uhc.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
11
12#ifndef ZEPHYR_INCLUDE_UHC_H
13#define ZEPHYR_INCLUDE_UHC_H
14
15#include <zephyr/kernel.h>
16#include <zephyr/device.h>
17#include <zephyr/net_buf.h>
18#include <zephyr/usb/usb_ch9.h>
19#include <zephyr/sys/dlist.h>
20
29
37
53
54#define UHC_INTERFACES_MAX 32
55
60
63};
64
94
103
149
178
187struct uhc_event {
192 union {
197 };
199 const struct device *dev;
200};
201
213typedef int (*uhc_event_cb_t)(const struct device *dev,
214 const struct uhc_event *const event);
215
224};
225
229#define UHC_STATUS_INITIALIZED 0
233#define UHC_STATUS_ENABLED 1
234
259
267static inline bool uhc_is_initialized(const struct device *dev)
268{
269 struct uhc_data *data = dev->data;
270
272}
273
281static inline bool uhc_is_enabled(const struct device *dev)
282{
283 struct uhc_data *data = dev->data;
284
286}
287
291struct uhc_api {
292 int (*lock)(const struct device *dev);
293 int (*unlock)(const struct device *dev);
294
295 int (*init)(const struct device *dev);
296 int (*enable)(const struct device *dev);
297 int (*disable)(const struct device *dev);
298 int (*shutdown)(const struct device *dev);
299
300 int (*bus_reset)(const struct device *dev);
301 int (*sof_enable)(const struct device *dev);
302 int (*bus_suspend)(const struct device *dev);
303 int (*bus_resume)(const struct device *dev);
304
305 int (*ep_enqueue)(const struct device *dev,
306 struct uhc_transfer *const xfer);
307 int (*ep_dequeue)(const struct device *dev,
308 struct uhc_transfer *const xfer);
309};
313
325static inline int uhc_bus_reset(const struct device *dev)
326{
327 const struct uhc_api *api = dev->api;
328 int ret;
329
330 api->lock(dev);
331 ret = api->bus_reset(dev);
332 api->unlock(dev);
333
334 return ret;
335}
336
347static inline int uhc_sof_enable(const struct device *dev)
348{
349 const struct uhc_api *api = dev->api;
350 int ret;
351
352 api->lock(dev);
353 ret = api->sof_enable(dev);
354 api->unlock(dev);
355
356 return ret;
357}
358
370static inline int uhc_bus_suspend(const struct device *dev)
371{
372 const struct uhc_api *api = dev->api;
373 int ret;
374
375 api->lock(dev);
376 ret = api->bus_suspend(dev);
377 api->unlock(dev);
378
379 return ret;
380}
381
393static inline int uhc_bus_resume(const struct device *dev)
394{
395 const struct uhc_api *api = dev->api;
396 int ret;
397
398 api->lock(dev);
399 ret = api->bus_resume(dev);
400 api->unlock(dev);
401
402 return ret;
403}
404
420struct uhc_transfer *uhc_xfer_alloc(const struct device *dev,
421 const uint8_t ep,
422 struct usb_device *const udev,
423 void *const cb,
424 void *const cb_priv);
425
441 const uint8_t ep,
442 struct usb_device *const udev,
443 void *const cb,
444 void *const cb_priv,
445 size_t size);
446
457int uhc_xfer_free(const struct device *dev,
458 struct uhc_transfer *const xfer);
459
471int uhc_xfer_buf_add(const struct device *dev,
472 struct uhc_transfer *const xfer,
473 struct net_buf *buf);
485struct net_buf *uhc_xfer_buf_alloc(const struct device *dev,
486 const size_t size);
487
496void uhc_xfer_buf_free(const struct device *dev, struct net_buf *const buf);
497
510int uhc_ep_enqueue(const struct device *dev, struct uhc_transfer *const xfer);
511
523int uhc_ep_dequeue(const struct device *dev, struct uhc_transfer *const xfer);
524
538int uhc_init(const struct device *dev,
539 uhc_event_cb_t event_cb, const void *const event_ctx);
540
553int uhc_enable(const struct device *dev);
554
565int uhc_disable(const struct device *dev);
566
578int uhc_shutdown(const struct device *dev);
579
590static inline struct uhc_device_caps uhc_caps(const struct device *dev)
591{
592 struct uhc_data *data = dev->data;
593
594 return data->caps;
595}
596
607static inline const void *uhc_get_event_ctx(const struct device *dev)
608{
609 struct uhc_data *data = dev->data;
610
611 return data->event_ctx;
612}
613
617
618#endif /* ZEPHYR_INCLUDE_UHC_H */
long atomic_t
Definition atomic_types.h:15
static _Bool atomic_test_bit(const atomic_t *target, int bit)
Atomically get and test a bit.
Definition atomic.h:129
struct _dnode sys_dnode_t
Doubly-linked list node structure.
Definition dlist.h:54
struct _dnode sys_dlist_t
Doubly-linked list structure.
Definition dlist.h:50
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
#define UHC_STATUS_INITIALIZED
Controller is initialized by uhc_init().
Definition uhc.h:229
static bool uhc_is_enabled(const struct device *dev)
Checks whether the controller is enabled.
Definition uhc.h:281
#define UHC_INTERFACES_MAX
Definition uhc.h:54
#define UHC_STATUS_ENABLED
Controller is enabled and all API functions are available.
Definition uhc.h:233
static bool uhc_is_initialized(const struct device *dev)
Checks whether the controller is initialized.
Definition uhc.h:267
int(* uhc_event_cb_t)(const struct device *dev, const struct uhc_event *const event)
Callback to submit UHC event to higher layer.
Definition uhc.h:213
static const void * uhc_get_event_ctx(const struct device *dev)
Get pointer to higher layer context.
Definition uhc.h:607
static int uhc_bus_reset(const struct device *dev)
Reset USB bus.
Definition uhc.h:325
usb_device_speed
USB device operating speed.
Definition uhc.h:41
static int uhc_bus_resume(const struct device *dev)
Resume USB bus.
Definition uhc.h:393
usb_device_state
USB device state.
Definition uhc.h:31
struct uhc_transfer * uhc_xfer_alloc_with_buf(const struct device *dev, const uint8_t ep, struct usb_device *const udev, void *const cb, void *const cb_priv, size_t size)
Allocate UHC transfer with buffer.
int uhc_xfer_buf_add(const struct device *dev, struct uhc_transfer *const xfer, struct net_buf *buf)
Add UHC transfer buffer.
int uhc_ep_enqueue(const struct device *dev, struct uhc_transfer *const xfer)
Queue USB host controller transfer.
int uhc_ep_dequeue(const struct device *dev, struct uhc_transfer *const xfer)
Remove a USB host controller transfers from queue.
static struct uhc_device_caps uhc_caps(const struct device *dev)
Get USB host controller capabilities.
Definition uhc.h:590
static int uhc_bus_suspend(const struct device *dev)
Suspend USB bus.
Definition uhc.h:370
int uhc_init(const struct device *dev, uhc_event_cb_t event_cb, const void *const event_ctx)
Initialize USB host controller.
int uhc_disable(const struct device *dev)
Disable USB host controller.
int uhc_xfer_free(const struct device *dev, struct uhc_transfer *const xfer)
Free UHC transfer and any buffers.
struct net_buf * uhc_xfer_buf_alloc(const struct device *dev, const size_t size)
Allocate UHC transfer buffer.
struct uhc_transfer * uhc_xfer_alloc(const struct device *dev, const uint8_t ep, struct usb_device *const udev, void *const cb, void *const cb_priv)
Allocate UHC transfer.
uhc_event_type
USB host controller event types.
Definition uhc.h:153
void uhc_xfer_buf_free(const struct device *dev, struct net_buf *const buf)
Free UHC request buffer.
int uhc_shutdown(const struct device *dev)
Poweroff USB host controller.
uhc_control_stage
USB control transfer stage.
Definition uhc.h:98
static int uhc_sof_enable(const struct device *dev)
Enable Start of Frame generator.
Definition uhc.h:347
int uhc_enable(const struct device *dev)
Enable USB host controller.
@ USB_SPEED_SPEED_SS
Super speed.
Definition uhc.h:51
@ USB_SPEED_SPEED_LS
Low speed.
Definition uhc.h:45
@ USB_SPEED_SPEED_FS
Full speed.
Definition uhc.h:47
@ USB_SPEED_SPEED_HS
High speed.
Definition uhc.h:49
@ USB_SPEED_UNKNOWN
Device is probably not connected.
Definition uhc.h:43
@ USB_STATE_CONFIGURED
Definition uhc.h:35
@ USB_STATE_NOTCONNECTED
Definition uhc.h:32
@ USB_STATE_DEFAULT
Definition uhc.h:33
@ USB_STATE_ADDRESSED
Definition uhc.h:34
@ UHC_EVT_EP_REQUEST
Endpoint request result event.
Definition uhc.h:171
@ UHC_EVT_DEV_CONNECTED_HS
High speed device connected.
Definition uhc.h:159
@ UHC_EVT_DEV_CONNECTED_FS
Full speed device connected.
Definition uhc.h:157
@ UHC_EVT_RWUP
Remote wakeup signal.
Definition uhc.h:169
@ UHC_EVT_SUSPENDED
Bus suspend operation finished.
Definition uhc.h:165
@ UHC_EVT_DEV_REMOVED
Device (peripheral) removed.
Definition uhc.h:161
@ UHC_EVT_RESUMED
Bus resume operation finished.
Definition uhc.h:167
@ UHC_EVT_DEV_CONNECTED_LS
Low speed device connected.
Definition uhc.h:155
@ UHC_EVT_ERROR
Non-correctable error event, requires attention from higher levels or application.
Definition uhc.h:176
@ UHC_EVT_RESETED
Bus reset operation finished.
Definition uhc.h:163
@ UHC_CONTROL_STAGE_DATA
Definition uhc.h:100
@ UHC_CONTROL_STAGE_SETUP
Definition uhc.h:99
@ UHC_CONTROL_STAGE_STATUS
Definition uhc.h:101
Public kernel APIs.
Buffer management.
int shutdown(int sock, int how)
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__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
void * data
Address of the device instance private data.
Definition device.h:523
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Mutex Structure.
Definition kernel.h:3336
Network buffer representation.
Definition net_buf.h:1006
uint16_t size
Amount of data that this buffer can store.
Definition net_buf.h:1038
Common UHC driver data structure.
Definition uhc.h:241
struct k_mutex mutex
Driver access mutex.
Definition uhc.h:245
atomic_t status
USB host controller status.
Definition uhc.h:255
void * priv
Driver private data.
Definition uhc.h:257
sys_dlist_t ctrl_xfers
dlist for control transfers
Definition uhc.h:247
const void * event_ctx
Opaque pointer to store higher layer context.
Definition uhc.h:253
struct uhc_device_caps caps
Controller capabilities.
Definition uhc.h:243
sys_dlist_t bulk_xfers
dlist for bulk transfers
Definition uhc.h:249
uhc_event_cb_t event_cb
Callback to submit an UHC event to upper layer.
Definition uhc.h:251
USB host controller capabilities.
Definition uhc.h:221
uint32_t hs
USB high speed capable controller.
Definition uhc.h:223
USB host controller event.
Definition uhc.h:187
struct uhc_transfer * xfer
Pointer to request used only for UHC_EVT_EP_REQUEST.
Definition uhc.h:196
const struct device * dev
Pointer to controller's device struct.
Definition uhc.h:199
enum uhc_event_type type
Event type.
Definition uhc.h:191
int status
Event status value, if any.
Definition uhc.h:194
sys_snode_t node
slist node for the message queue
Definition uhc.h:189
UHC endpoint buffer info.
Definition uhc.h:114
void * priv
Pointer to completion callback private data.
Definition uhc.h:145
int err
Transfer result, 0 on success, other values on error.
Definition uhc.h:147
struct net_buf * buf
Transfer data buffer.
Definition uhc.h:120
uint16_t start_frame
Start frame, used for periodic transfers only.
Definition uhc.h:130
unsigned int no_status
The status stage of the control transfer will be omitted.
Definition uhc.h:139
uint16_t mps
Maximum packet size.
Definition uhc.h:126
struct usb_device * udev
Pointer to USB device.
Definition uhc.h:141
unsigned int stage
Control stage status, up to the driver to use it or not.
Definition uhc.h:134
uint8_t ep
Endpoint to which request is associated.
Definition uhc.h:122
unsigned int queued
Flag marks request buffer is queued.
Definition uhc.h:132
void * cb
Pointer to transfer completion callback (opaque for the UHC).
Definition uhc.h:143
uint8_t type
Endpoint type.
Definition uhc.h:124
sys_dnode_t node
dlist node
Definition uhc.h:116
uint8_t setup_pkt[8]
Control transfer setup packet.
Definition uhc.h:118
uint16_t interval
Interval, used for periodic transfers only.
Definition uhc.h:128
Header of an USB descriptor.
Definition usb_ch9.h:151
USB Standard Device Descriptor defined in spec.
Definition usb_ch9.h:157
Host representation of a USB device.
Definition uhc.h:68
sys_dnode_t node
dlist node
Definition uhc.h:70
uint8_t actual_cfg
Actual active device configuration.
Definition uhc.h:82
enum usb_device_speed speed
Device speed.
Definition uhc.h:80
struct usb_device_descriptor dev_desc
USB device descriptor.
Definition uhc.h:76
struct k_mutex mutex
Device mutex.
Definition uhc.h:74
struct usb_host_interface ifaces[32+1]
Pointers to device interfaces.
Definition uhc.h:88
struct usb_host_ep ep_out[16]
Pointers to device OUT endpoints.
Definition uhc.h:90
void * ctx
An opaque pointer to the host context to which this device belongs.
Definition uhc.h:72
enum usb_device_state state
Device state.
Definition uhc.h:78
uint8_t addr
Device address.
Definition uhc.h:84
void * cfg_desc
Pointer to actual device configuration descriptor.
Definition uhc.h:86
struct usb_host_ep ep_in[16]
Pointers to device IN endpoints.
Definition uhc.h:92
USB Standard Endpoint Descriptor defined in spec.
Definition usb_ch9.h:227
Definition uhc.h:61
struct usb_ep_descriptor * desc
Definition uhc.h:62
Definition uhc.h:56
uint8_t alternate
Definition uhc.h:58
struct usb_desc_header * dhp
Definition uhc.h:57
USB Chapter 9 structures and definitions.