forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/usb/dwc3/gadget.h
....@@ -1,8 +1,8 @@
1
-// SPDX-License-Identifier: GPL-2.0
1
+/* SPDX-License-Identifier: GPL-2.0 */
22 /*
33 * gadget.h - DesignWare USB3 DRD Gadget Header
44 *
5
- * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
5
+ * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com
66 *
77 * Authors: Felipe Balbi <balbi@ti.com>,
88 * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
....@@ -17,7 +17,7 @@
1717
1818 struct dwc3;
1919 #define to_dwc3_ep(ep) (container_of(ep, struct dwc3_ep, endpoint))
20
-#define gadget_to_dwc(g) (container_of(g, struct dwc3, gadget))
20
+#define gadget_to_dwc(g) (dev_get_platdata(&g->dev))
2121
2222 /* DEPCFG parameter 1 */
2323 #define DWC3_DEPCFG_INT_NUM(n) (((n) & 0x1f) << 0)
....@@ -48,6 +48,14 @@
4848 /* DEPXFERCFG parameter 0 */
4949 #define DWC3_DEPXFERCFG_NUM_XFER_RES(n) ((n) & 0xffff)
5050
51
+/* U1 Device exit Latency */
52
+#define DWC3_DEFAULT_U1_DEV_EXIT_LAT 0x0A /* Less then 10 microsec */
53
+
54
+/* U2 Device exit Latency */
55
+#define DWC3_DEFAULT_U2_DEV_EXIT_LAT 0x1FF /* Less then 511 microsec */
56
+
57
+/* Frame/Microframe Number Mask */
58
+#define DWC3_FRNUMBER_MASK 0x3fff
5159 /* -------------------------------------------------------------------------- */
5260
5361 #define to_dwc3_request(r) (container_of(r, struct dwc3_request, request))
....@@ -62,21 +70,6 @@
6270 static inline struct dwc3_request *next_request(struct list_head *list)
6371 {
6472 return list_first_entry_or_null(list, struct dwc3_request, list);
65
-}
66
-
67
-/**
68
- * dwc3_gadget_move_queued_request - move @req to the pending_list
69
- * @req: the request to be moved
70
- *
71
- * Caller should take care of locking. This function will move @req from its
72
- * current list to the endpoint's pending_list.
73
- */
74
-static inline void dwc3_gadget_move_queued_request(struct dwc3_request *req)
75
-{
76
- struct dwc3_ep *dep = req->dep;
77
-
78
- req->status = DWC3_REQUEST_STATUS_QUEUED;
79
- list_move_tail(&req->list, &dep->pending_list);
8073 }
8174
8275 /**
....@@ -97,16 +90,34 @@
9790 /**
9891 * dwc3_gadget_move_cancelled_request - move @req to the cancelled_list
9992 * @req: the request to be moved
93
+ * @reason: cancelled reason for the dwc3 request
10094 *
10195 * Caller should take care of locking. This function will move @req from its
10296 * current list to the endpoint's cancelled_list.
10397 */
104
-static inline void dwc3_gadget_move_cancelled_request(struct dwc3_request *req)
98
+static inline void dwc3_gadget_move_cancelled_request(struct dwc3_request *req,
99
+ unsigned int reason)
105100 {
106101 struct dwc3_ep *dep = req->dep;
107102
108
- req->status = DWC3_REQUEST_STATUS_CANCELLED;
103
+ req->status = reason;
109104 list_move_tail(&req->list, &dep->cancelled_list);
105
+}
106
+
107
+/**
108
+ * dwc3_gadget_move_queued_request - move @req to the pending_list
109
+ * @req: the request to be moved
110
+ *
111
+ * Caller should take care of locking. This function will move @req from its
112
+ * current list to the endpoint's pending_list.
113
+ *
114
+ */
115
+static inline void dwc3_gadget_move_queued_request(struct dwc3_request *req)
116
+{
117
+ struct dwc3_ep *dep = req->dep;
118
+
119
+ req->status = DWC3_REQUEST_STATUS_QUEUED;
120
+ list_move_tail(&req->list, &dep->pending_list);
110121 }
111122
112123 void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
....@@ -115,11 +126,15 @@
115126 void dwc3_ep0_interrupt(struct dwc3 *dwc,
116127 const struct dwc3_event_depevt *event);
117128 void dwc3_ep0_out_start(struct dwc3 *dwc);
129
+void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep);
130
+void dwc3_ep0_stall_and_restart(struct dwc3 *dwc);
118131 int __dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value);
119132 int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value);
120133 int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
121134 gfp_t gfp_flags);
122135 int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol);
136
+void dwc3_ep0_send_delayed_status(struct dwc3 *dwc);
137
+void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, bool interrupt);
123138
124139 /**
125140 * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW
....@@ -136,4 +151,18 @@
136151 dep->resource_index = DWC3_DEPCMD_GET_RSC_IDX(res_id);
137152 }
138153
154
+/**
155
+ * dwc3_gadget_dctl_write_safe - write to DCTL safe from link state change
156
+ * @dwc: pointer to our context structure
157
+ * @value: value to write to DCTL
158
+ *
159
+ * Use this function when doing read-modify-write to DCTL. It will not
160
+ * send link state change request.
161
+ */
162
+static inline void dwc3_gadget_dctl_write_safe(struct dwc3 *dwc, u32 value)
163
+{
164
+ value &= ~DWC3_DCTL_ULSTCHNGREQ_MASK;
165
+ dwc3_writel(dwc->regs, DWC3_DCTL, value);
166
+}
167
+
139168 #endif /* __DRIVERS_USB_DWC3_GADGET_H */