]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - drivers/usb/chipidea/udc.h
Merge tag 'drm-next-2019-07-16' of git://anongit.freedesktop.org/drm/drm
[mirror_ubuntu-focal-kernel.git] / drivers / usb / chipidea / udc.h
CommitLineData
5fd54ace 1// SPDX-License-Identifier: GPL-2.0
e443b333
AS
2/*
3 * udc.h - ChipIdea UDC structures
4 *
5 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
6 *
7 * Author: David Lopo
e443b333
AS
8 */
9
10#ifndef __DRIVERS_USB_CHIPIDEA_UDC_H
11#define __DRIVERS_USB_CHIPIDEA_UDC_H
12
13#include <linux/list.h>
14
15#define CTRL_PAYLOAD_MAX 64
16#define RX 0 /* similar to USB_DIR_OUT but can be used as an index */
17#define TX 1 /* similar to USB_DIR_IN but can be used as an index */
18
19/* DMA layout of transfer descriptors */
8e22978c 20struct ci_hw_td {
e443b333 21 /* 0 */
34445fb4 22 __le32 next;
e443b333
AS
23#define TD_TERMINATE BIT(0)
24#define TD_ADDR_MASK (0xFFFFFFEUL << 5)
25 /* 1 */
34445fb4 26 __le32 token;
e443b333
AS
27#define TD_STATUS (0x00FFUL << 0)
28#define TD_STATUS_TR_ERR BIT(3)
29#define TD_STATUS_DT_ERR BIT(5)
30#define TD_STATUS_HALTED BIT(6)
31#define TD_STATUS_ACTIVE BIT(7)
32#define TD_MULTO (0x0003UL << 10)
33#define TD_IOC BIT(15)
34#define TD_TOTAL_BYTES (0x7FFFUL << 16)
35 /* 2 */
34445fb4 36 __le32 page[5];
e443b333
AS
37#define TD_CURR_OFFSET (0x0FFFUL << 0)
38#define TD_FRAME_NUM (0x07FFUL << 0)
39#define TD_RESERVED_MASK (0x0FFFUL << 0)
a9c17430 40} __attribute__ ((packed, aligned(4)));
e443b333
AS
41
42/* DMA layout of queue heads */
8e22978c 43struct ci_hw_qh {
e443b333 44 /* 0 */
34445fb4 45 __le32 cap;
e443b333
AS
46#define QH_IOS BIT(15)
47#define QH_MAX_PKT (0x07FFUL << 16)
48#define QH_ZLT BIT(29)
49#define QH_MULT (0x0003UL << 30)
e4ce4ecd 50#define QH_ISO_MULT(x) ((x >> 11) & 0x03)
e443b333 51 /* 1 */
34445fb4 52 __le32 curr;
e443b333 53 /* 2 - 8 */
8e22978c 54 struct ci_hw_td td;
e443b333 55 /* 9 */
34445fb4 56 __le32 RESERVED;
e443b333 57 struct usb_ctrlrequest setup;
a9c17430 58} __attribute__ ((packed, aligned(4)));
e443b333 59
cc9e6c49
MG
60struct td_node {
61 struct list_head td;
62 dma_addr_t dma;
8e22978c 63 struct ci_hw_td *ptr;
cc9e6c49
MG
64};
65
551a8ac6 66/**
8e22978c 67 * struct ci_hw_req - usb request representation
551a8ac6 68 * @req: request structure for gadget drivers
551a8ac6
AS
69 * @queue: link to QH list
70 * @ptr: transfer descriptor for this request
71 * @dma: dma address for the transfer descriptor
72 * @zptr: transfer descriptor for the zero packet
73 * @zdma: dma address of the zero packet's transfer descriptor
74 */
8e22978c 75struct ci_hw_req {
551a8ac6 76 struct usb_request req;
551a8ac6 77 struct list_head queue;
cc9e6c49 78 struct list_head tds;
e443b333
AS
79};
80
81#ifdef CONFIG_USB_CHIPIDEA_UDC
5f36e231 82
8e22978c 83int ci_hdrc_gadget_init(struct ci_hdrc *ci);
3f124d23 84void ci_hdrc_gadget_destroy(struct ci_hdrc *ci);
5f36e231 85
e443b333 86#else
e443b333 87
8e22978c 88static inline int ci_hdrc_gadget_init(struct ci_hdrc *ci)
e443b333 89{
5f36e231 90 return -ENXIO;
e443b333
AS
91}
92
3f124d23
PC
93static inline void ci_hdrc_gadget_destroy(struct ci_hdrc *ci)
94{
95
96}
97
e443b333
AS
98#endif
99
100#endif /* __DRIVERS_USB_CHIPIDEA_UDC_H */