@@ -95,13 +95,14 @@ static int usbd_ctrl_feed_dout(const struct device *dev, const size_t length)
95
95
static int udc_ambiq_tx (const struct device * dev , uint8_t ep , struct net_buf * buf )
96
96
{
97
97
const struct udc_ambiq_data * priv = udc_get_private (dev );
98
+ struct udc_ep_config * cfg = udc_get_ep_cfg (dev , ep );
98
99
uint32_t status ;
99
100
100
- if (udc_ep_is_busy (dev , ep )) {
101
+ if (udc_ep_is_busy (cfg )) {
101
102
LOG_WRN ("ep 0x%02x is busy!" , ep );
102
103
return 0 ;
103
104
}
104
- udc_ep_set_busy (dev , ep , true);
105
+ udc_ep_set_busy (cfg , true);
105
106
106
107
/* buf equals NULL is used as indication of ZLP request */
107
108
if (buf == NULL ) {
@@ -111,7 +112,7 @@ static int udc_ambiq_tx(const struct device *dev, uint8_t ep, struct net_buf *bu
111
112
}
112
113
113
114
if (status != AM_HAL_STATUS_SUCCESS ) {
114
- udc_ep_set_busy (dev , ep , false);
115
+ udc_ep_set_busy (cfg , false);
115
116
LOG_ERR ("am_hal_usb_ep_xfer write failed(0x%02x), %d" , ep , (int )status );
116
117
return - EIO ;
117
118
}
@@ -122,15 +123,16 @@ static int udc_ambiq_tx(const struct device *dev, uint8_t ep, struct net_buf *bu
122
123
static int udc_ambiq_rx (const struct device * dev , uint8_t ep , struct net_buf * buf )
123
124
{
124
125
struct udc_ambiq_data * priv = udc_get_private (dev );
126
+ struct udc_ep_config * ep_cfg = udc_get_ep_cfg (dev , ep );
125
127
struct udc_ep_config * cfg = udc_get_ep_cfg (dev , USB_CONTROL_EP_OUT );
126
128
uint32_t status ;
127
129
uint16_t rx_size = buf -> size ;
128
130
129
- if (udc_ep_is_busy (dev , ep )) {
131
+ if (udc_ep_is_busy (ep_cfg )) {
130
132
LOG_WRN ("ep 0x%02x is busy!" , ep );
131
133
return 0 ;
132
134
}
133
- udc_ep_set_busy (dev , ep , true);
135
+ udc_ep_set_busy (ep_cfg , true);
134
136
135
137
/* Make sure that OUT transaction size triggered doesn't exceed EP's MPS */
136
138
if ((ep != USB_CONTROL_EP_OUT ) && (cfg -> mps < rx_size )) {
@@ -139,7 +141,7 @@ static int udc_ambiq_rx(const struct device *dev, uint8_t ep, struct net_buf *bu
139
141
140
142
status = am_hal_usb_ep_xfer (priv -> usb_handle , ep , buf -> data , rx_size );
141
143
if (status != AM_HAL_STATUS_SUCCESS ) {
142
- udc_ep_set_busy (dev , ep , false);
144
+ udc_ep_set_busy (ep_cfg , false);
143
145
LOG_ERR ("am_hal_usb_ep_xfer read(rx) failed(0x%02x), %d" , ep , (int )status );
144
146
return - EIO ;
145
147
}
@@ -222,7 +224,9 @@ static void udc_ambiq_ep_xfer_complete_callback(const struct device *dev, uint8_
222
224
if (USB_EP_DIR_IS_IN (ep_addr )) {
223
225
evt .type = UDC_AMBIQ_EVT_HAL_IN_CMP ;
224
226
} else {
225
- buf = udc_buf_peek (dev , ep_addr );
227
+ struct udc_ep_config * ep_cfg = udc_get_ep_cfg (dev , ep_addr );
228
+
229
+ buf = udc_buf_peek (ep_cfg );
226
230
if (buf == NULL ) {
227
231
LOG_ERR ("No buffer for ep 0x%02x" , ep_addr );
228
232
udc_submit_event (dev , UDC_EVT_ERROR , - ENOBUFS );
@@ -280,12 +284,12 @@ static int udc_ambiq_ep_dequeue(const struct device *dev, struct udc_ep_config *
280
284
281
285
lock_key = irq_lock ();
282
286
283
- buf = udc_buf_get_all (dev , ep_cfg -> addr );
287
+ buf = udc_buf_get_all (ep_cfg );
284
288
if (buf ) {
285
289
udc_submit_ep_event (dev , buf , - ECONNABORTED );
286
290
}
287
291
288
- udc_ep_set_busy (dev , ep_cfg -> addr , false);
292
+ udc_ep_set_busy (ep_cfg , false);
289
293
am_hal_usb_ep_state_reset (priv -> usb_handle , ep_cfg -> addr );
290
294
irq_unlock (lock_key );
291
295
@@ -319,7 +323,7 @@ static int udc_ambiq_ep_clear_halt(const struct device *dev, struct udc_ep_confi
319
323
ep_cfg -> stat .halted = false;
320
324
321
325
/* Resume queued transfer if any */
322
- if (udc_buf_peek (dev , ep_cfg -> addr )) {
326
+ if (udc_buf_peek (ep_cfg )) {
323
327
struct udc_ambiq_event evt = {
324
328
.ep = ep_cfg -> addr ,
325
329
.type = UDC_AMBIQ_EVT_XFER ,
@@ -646,14 +650,14 @@ static inline void ambiq_handle_evt_dout(const struct device *dev, struct udc_ep
646
650
struct net_buf * buf ;
647
651
648
652
/* retrieve endpoint buffer */
649
- buf = udc_buf_get (dev , cfg -> addr );
653
+ buf = udc_buf_get (cfg );
650
654
if (buf == NULL ) {
651
655
LOG_ERR ("No buffer queued for control ep" );
652
656
return ;
653
657
}
654
658
655
659
/* Clear endpoint busy status */
656
- udc_ep_set_busy (dev , cfg -> addr , false);
660
+ udc_ep_set_busy (cfg , false);
657
661
658
662
/* Handle transfer complete event */
659
663
if (cfg -> addr == USB_CONTROL_EP_OUT ) {
@@ -685,9 +689,9 @@ static void ambiq_handle_evt_din(const struct device *dev, struct udc_ep_config
685
689
bool udc_ambiq_rx_status_in_completed = false;
686
690
687
691
/* Clear endpoint busy status */
688
- udc_ep_set_busy (dev , cfg -> addr , false);
692
+ udc_ep_set_busy (cfg , false);
689
693
/* Check and Handle ZLP flag */
690
- buf = udc_buf_peek (dev , cfg -> addr );
694
+ buf = udc_buf_peek (cfg );
691
695
if (cfg -> addr != USB_CONTROL_EP_IN ) {
692
696
if (udc_ep_buf_has_zlp (buf )) {
693
697
udc_ep_buf_clear_zlp (buf );
@@ -698,7 +702,7 @@ static void ambiq_handle_evt_din(const struct device *dev, struct udc_ep_config
698
702
}
699
703
700
704
/* retrieve endpoint buffer */
701
- buf = udc_buf_get (dev , cfg -> addr );
705
+ buf = udc_buf_get (cfg );
702
706
if (buf == NULL ) {
703
707
LOG_ERR ("No buffer queued for control ep" );
704
708
return ;
@@ -753,7 +757,7 @@ static void udc_event_xfer(const struct device *dev, struct udc_ep_config *const
753
757
{
754
758
struct net_buf * buf ;
755
759
756
- buf = udc_buf_peek (dev , cfg -> addr );
760
+ buf = udc_buf_peek (cfg );
757
761
if (buf == NULL ) {
758
762
LOG_ERR ("No buffer for ep 0x%02x" , cfg -> addr );
759
763
return ;
0 commit comments