Lines Matching refs:hhcd

76 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
77 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
78 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd);
79 static void HAL_HCD_ClearPhyChannel(HCD_HandleTypeDef *hhcd);
80 static uint8_t HAL_HCD_GetLogical_Channel(HCD_HandleTypeDef const *hhcd, uint8_t phy_chnum, uint8_t…
81 static uint8_t HAL_HCD_Check_usedChannel(HCD_HandleTypeDef const *hhcd, uint8_t ch_num);
82 static uint8_t HAL_HCD_Get_FreePhyChannel(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t epnum, u…
85 static void HCD_HC_IN_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32_t r…
86 static void HCD_HC_OUT_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32_t …
89 static uint16_t HAL_HCD_GetFreePMA(HCD_HandleTypeDef *hhcd, uint16_t mps);
90 static HAL_StatusTypeDef HAL_HCD_PMAFree(HCD_HandleTypeDef *hhcd, uint32_t pma_base, uint16_t mps);
91 static void inline HCD_HC_IN_ISO(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32…
119 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd) in HAL_HCD_Init() argument
122 if (hhcd == NULL) in HAL_HCD_Init()
128 assert_param(IS_HCD_ALL_INSTANCE(hhcd->Instance)); in HAL_HCD_Init()
130 if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_Init()
133 hhcd->Lock = HAL_UNLOCKED; in HAL_HCD_Init()
136 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_Init()
137 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_Init()
138 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_Init()
139 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_Init()
140 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_Init()
141 hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; in HAL_HCD_Init()
143 if (hhcd->MspInitCallback == NULL) in HAL_HCD_Init()
145 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_Init()
149 hhcd->MspInitCallback(hhcd); in HAL_HCD_Init()
152 HAL_HCD_MspInit(hhcd); in HAL_HCD_Init()
155 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_Init()
158 (void)__HAL_HCD_DISABLE(hhcd); in HAL_HCD_Init()
161 hhcd->Init.dma_enable = 0U; in HAL_HCD_Init()
164 (void)USB_CoreInit(hhcd->Instance, hhcd->Init); in HAL_HCD_Init()
167 (void)USB_SetCurrentMode(hhcd->Instance, USB_HOST_MODE); in HAL_HCD_Init()
170 (void)USB_HostInit(hhcd->Instance, hhcd->Init); in HAL_HCD_Init()
173 hhcd->Instance->CNTR &= ~USB_CNTR_PDWN; in HAL_HCD_Init()
175 hhcd->State = HAL_HCD_STATE_READY; in HAL_HCD_Init()
178 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HAL_HCD_Init()
181 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_Init()
183 hhcd->State = HAL_HCD_STATE_READY; in HAL_HCD_Init()
212 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_Init() argument
220 __HAL_LOCK(hhcd); in HAL_HCD_HC_Init()
223 used_channel = HAL_HCD_Check_usedChannel(hhcd, ch_num); in HAL_HCD_HC_Init()
229 hhcd->hc[ch_num & 0xFU].phy_ch_num = HAL_HCD_Get_FreePhyChannel(hhcd, ch_num, epnum, ep_type); in HAL_HCD_HC_Init()
232 if (hhcd->hc[ch_num & 0xFU].phy_ch_num == HCD_FREE_CH_NOT_FOUND) in HAL_HCD_HC_Init()
241 hhcd->hc[ch_num & 0xFU].phy_ch_num = (used_channel & 0xF0U) >> 4U; in HAL_HCD_HC_Init()
246 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
250 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
253 hhcd->hc[ch_num & 0xFU].dev_addr = dev_address; in HAL_HCD_HC_Init()
254 hhcd->hc[ch_num & 0xFU].max_packet = mps; in HAL_HCD_HC_Init()
255 hhcd->hc[ch_num & 0xFU].ep_type = ep_type; in HAL_HCD_HC_Init()
256 hhcd->hc[ch_num & 0xFU].ep_num = epnum & 0x7FU; in HAL_HCD_HC_Init()
257 hhcd->hc[ch_num & 0xFU].speed = speed; in HAL_HCD_HC_Init()
262 if (((ep_type == EP_TYPE_ISOC) && (hhcd->Init.iso_singlebuffer_enable == 0U)) || in HAL_HCD_HC_Init()
263 ((ep_type == EP_TYPE_BULK) && (hhcd->Init.bulk_doublebuffer_enable == 1U))) in HAL_HCD_HC_Init()
266 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_DBL_BUF, mps); in HAL_HCD_HC_Init()
274 HCD_CLEAR_TX_DTOG(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Init()
277 HCD_CLEAR_RX_DTOG(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Init()
282 if (hhcd->hc[ch_num & 0xFU].ep_num != 0U) in HAL_HCD_HC_Init()
284 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, mps); in HAL_HCD_HC_Init()
295 ep0_virtual_channel = (uint8_t)(hhcd->ep0_PmaAllocState & 0xFU); in HAL_HCD_HC_Init()
297 … if ((ep0_virtual_channel != 0U) && (((hhcd->ep0_PmaAllocState & 0xF0U) >> 4) == CH_IN_DIR)) in HAL_HCD_HC_Init()
299 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_OUT_DIR) in HAL_HCD_HC_Init()
301 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
316 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
317 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
325 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
326 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
336 if (((hhcd->ep0_PmaAllocState & 0xF00U) >> 8) == 1U) in HAL_HCD_HC_Init()
338 ep0_virtual_channel = (uint8_t)(hhcd->ep0_PmaAllocState & 0xFU); in HAL_HCD_HC_Init()
340 if (((hhcd->ep0_PmaAllocState & 0xF0U) >> 4) == CH_IN_DIR) in HAL_HCD_HC_Init()
342 hhcd->hc[ch_num & 0xFU].pmaaddr1 = hhcd->hc[ep0_virtual_channel & 0xFU].pmaaddr1; in HAL_HCD_HC_Init()
346 hhcd->hc[ch_num & 0xFU].pmaaddr0 = hhcd->hc[ep0_virtual_channel & 0xFU].pmaaddr0; in HAL_HCD_HC_Init()
351 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
365 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
367 if (hhcd->hc[ch_num & 0xFU].ep_num == 0U) in HAL_HCD_HC_Init()
369 hhcd->hc[ch_num & 0xFU].pmaadress = hhcd->hc[ch_num & 0xFU].pmaaddr1; in HAL_HCD_HC_Init()
374 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
376 if (hhcd->hc[ch_num & 0xFU].ep_num == 0U) in HAL_HCD_HC_Init()
378 hhcd->hc[ch_num & 0xFU].pmaadress = hhcd->hc[ch_num & 0xFU].pmaaddr0; in HAL_HCD_HC_Init()
383 status = USB_HC_Init(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
389 if (hhcd->Init.iso_singlebuffer_enable == 1U) in HAL_HCD_HC_Init()
391 (void)USB_HC_DoubleBuffer(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
399 if (hhcd->Init.bulk_doublebuffer_enable == 1U) in HAL_HCD_HC_Init()
401 (void)USB_HC_DoubleBuffer(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
406 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
418 HAL_StatusTypeDef HAL_HCD_HC_Close(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_Close() argument
421 (void) HAL_HCD_HC_Halt(hhcd, ch_num); in HAL_HCD_HC_Close()
425 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_IN_DIR) in HAL_HCD_HC_Close()
428 hhcd->phy_chin_state[hhcd->hc[ch_num & 0xFU].phy_ch_num] = 0U; in HAL_HCD_HC_Close()
433 hhcd->phy_chout_state[hhcd->hc[ch_num & 0xFU].phy_ch_num] = 0U; in HAL_HCD_HC_Close()
437 (void)HAL_HCD_PMADeAlloc(hhcd, ch_num); in HAL_HCD_HC_Close()
449 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_Halt() argument
453 __HAL_LOCK(hhcd); in HAL_HCD_HC_Halt()
454 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_IN_DIR) in HAL_HCD_HC_Halt()
456 (void)USB_HC_IN_Halt(hhcd->Instance, (uint8_t) hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Halt()
460 (void)USB_HC_OUT_Halt(hhcd->Instance, (uint8_t) hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Halt()
462 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Halt()
472 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_DeInit() argument
477 if (hhcd == NULL) in HAL_HCD_DeInit()
483 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HAL_HCD_DeInit()
486 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_DeInit()
488 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_DeInit()
490 hhcd->phy_chin_state[idx] = 0U; in HAL_HCD_DeInit()
491 hhcd->phy_chout_state[idx] = 0U; in HAL_HCD_DeInit()
495 hhcd->ep0_PmaAllocState = 0U; in HAL_HCD_DeInit()
497 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_DeInit()
500 if (hhcd->MspDeInitCallback == NULL) in HAL_HCD_DeInit()
502 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; /* Legacy weak MspDeInit */ in HAL_HCD_DeInit()
506 hhcd->MspDeInitCallback(hhcd); in HAL_HCD_DeInit()
509 HAL_HCD_MspDeInit(hhcd); in HAL_HCD_DeInit()
512 hhcd->State = HAL_HCD_STATE_RESET; in HAL_HCD_DeInit()
522 __weak void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspInit() argument
525 UNUSED(hhcd); in HAL_HCD_MspInit()
537 __weak void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspDeInit() argument
540 UNUSED(hhcd); in HAL_HCD_MspDeInit()
547 __weak void HAL_HCD_SuspendCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_SuspendCallback() argument
550 UNUSED(hhcd); in HAL_HCD_SuspendCallback()
558 __weak void HAL_HCD_ResumeCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResumeCallback() argument
561 UNUSED(hhcd); in HAL_HCD_ResumeCallback()
610 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_SubmitRequest() argument
619 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_SETUP; in HAL_HCD_HC_SubmitRequest()
623 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
635 hhcd->hc[ch_num & 0xFU].toggle_out = 1U; in HAL_HCD_HC_SubmitRequest()
639 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
642 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
647 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
656 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
659 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
664 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
669 if (hhcd->hc[ch_num & 0xFU].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
671 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
675 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
684 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
687 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
692 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
697 if (hhcd->hc[ch_num & 0xFU].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
699 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
703 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
709 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
716 hhcd->hc[ch_num & 0xFU].xfer_buff = pbuff; in HAL_HCD_HC_SubmitRequest()
717 hhcd->hc[ch_num & 0xFU].xfer_len = length; in HAL_HCD_HC_SubmitRequest()
718 hhcd->hc[ch_num & 0xFU].xfer_len_db = length; in HAL_HCD_HC_SubmitRequest()
719 hhcd->hc[ch_num & 0xFU].urb_state = URB_IDLE; in HAL_HCD_HC_SubmitRequest()
720 hhcd->hc[ch_num & 0xFU].xfer_count = 0U; in HAL_HCD_HC_SubmitRequest()
721 hhcd->hc[ch_num & 0xFU].state = HC_IDLE; in HAL_HCD_HC_SubmitRequest()
723 return USB_HC_StartXfer(hhcd->Instance, &hhcd->hc[ch_num & 0xFU]); in HAL_HCD_HC_SubmitRequest()
730 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd) in HAL_HCD_IRQHandler() argument
735 uint32_t wIstr = USB_ReadInterrupts(hhcd->Instance); in HAL_HCD_IRQHandler()
747 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_DCON); in HAL_HCD_IRQHandler()
750 HCD_Port_IRQHandler(hhcd); in HAL_HCD_IRQHandler()
759 for (phy_chnum = 0U; phy_chnum < hhcd->Init.Host_channels; phy_chnum++) in HAL_HCD_IRQHandler()
761 if ((HCD_GET_CHANNEL(hhcd->Instance, phy_chnum) & USB_CH_VTRX) != 0U) in HAL_HCD_IRQHandler()
764 chnum = HAL_HCD_GetLogical_Channel(hhcd, phy_chnum, 1U); in HAL_HCD_IRQHandler()
769 HCD_HC_IN_IRQHandler(hhcd, chnum); in HAL_HCD_IRQHandler()
774 epch_reg = HCD_GET_CHANNEL(hhcd->Instance, phy_chnum); in HAL_HCD_IRQHandler()
778 HCD_SET_CHANNEL(hhcd->Instance, phy_chnum, epch_reg); in HAL_HCD_IRQHandler()
782 if ((HCD_GET_CHANNEL(hhcd->Instance, phy_chnum) & USB_CH_VTTX) != 0U) in HAL_HCD_IRQHandler()
785 chnum = HAL_HCD_GetLogical_Channel(hhcd, phy_chnum, 0U); in HAL_HCD_IRQHandler()
790 HCD_HC_OUT_IRQHandler(hhcd, chnum); in HAL_HCD_IRQHandler()
795 epch_reg = HCD_GET_CHANNEL(hhcd->Instance, phy_chnum); in HAL_HCD_IRQHandler()
799 HCD_SET_CHANNEL(hhcd->Instance, phy_chnum, epch_reg); in HAL_HCD_IRQHandler()
810 if (hhcd->HostState == HCD_HCD_STATE_SUSPEND) in HAL_HCD_IRQHandler()
813 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_IRQHandler()
816 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_WKUP); in HAL_HCD_IRQHandler()
819 HAL_HCD_ResumeCallback(hhcd); in HAL_HCD_IRQHandler()
820 hhcd->HostState = HCD_HCD_STATE_RESUME; in HAL_HCD_IRQHandler()
825 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_WKUP); in HAL_HCD_IRQHandler()
834 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_ERR); in HAL_HCD_IRQHandler()
842 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_PMAOVR); in HAL_HCD_IRQHandler()
851 hhcd->HostState = HCD_HCD_STATE_SUSPEND; in HAL_HCD_IRQHandler()
854 hhcd->Instance->CNTR |= USB_CNTR_SUSPEN; in HAL_HCD_IRQHandler()
857 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_SUSP); in HAL_HCD_IRQHandler()
860 HAL_HCD_SuspendCallback(hhcd); in HAL_HCD_IRQHandler()
869 hhcd->SOFCallback(hhcd); in HAL_HCD_IRQHandler()
871 HAL_HCD_SOF_Callback(hhcd); in HAL_HCD_IRQHandler()
874 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_SOF); in HAL_HCD_IRQHandler()
877 if (hhcd->HostState == HCD_HCD_STATE_RESETED) in HAL_HCD_IRQHandler()
880 hhcd->HostState = HCD_HCD_STATE_RUN; in HAL_HCD_IRQHandler()
883 hhcd->PortEnabledCallback(hhcd); in HAL_HCD_IRQHandler()
885 HAL_HCD_PortEnabled_Callback(hhcd); in HAL_HCD_IRQHandler()
898 __weak void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_SOF_Callback() argument
901 UNUSED(hhcd); in HAL_HCD_SOF_Callback()
913 __weak void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Connect_Callback() argument
916 UNUSED(hhcd); in HAL_HCD_Connect_Callback()
928 __weak void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Disconnect_Callback() argument
931 UNUSED(hhcd); in HAL_HCD_Disconnect_Callback()
942 __weak void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortEnabled_Callback() argument
945 UNUSED(hhcd); in HAL_HCD_PortEnabled_Callback()
956 __weak void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortDisabled_Callback() argument
959 UNUSED(hhcd); in HAL_HCD_PortDisabled_Callback()
981 __weak void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, in HAL_HCD_HC_NotifyURBChange_Callback() argument
985 UNUSED(hhcd); in HAL_HCD_HC_NotifyURBChange_Callback()
1010 HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterCallback() argument
1019 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
1023 __HAL_LOCK(hhcd); in HAL_HCD_RegisterCallback()
1025 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterCallback()
1030 hhcd->SOFCallback = pCallback; in HAL_HCD_RegisterCallback()
1034 hhcd->ConnectCallback = pCallback; in HAL_HCD_RegisterCallback()
1038 hhcd->DisconnectCallback = pCallback; in HAL_HCD_RegisterCallback()
1042 hhcd->PortEnabledCallback = pCallback; in HAL_HCD_RegisterCallback()
1046 hhcd->PortDisabledCallback = pCallback; in HAL_HCD_RegisterCallback()
1050 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
1054 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
1059 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
1065 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_RegisterCallback()
1070 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
1074 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
1079 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
1088 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
1094 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterCallback()
1113 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_UnRegisterCallback() argument
1119 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterCallback()
1122 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterCallback()
1127 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_UnRegisterCallback()
1131 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_UnRegisterCallback()
1135 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_UnRegisterCallback()
1139 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_UnRegisterCallback()
1143 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_UnRegisterCallback()
1147 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
1151 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
1156 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
1163 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_UnRegisterCallback()
1168 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
1172 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
1177 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
1187 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
1194 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterCallback()
1205 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterHC_NotifyURBChangeCallback() argument
1213 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1219 __HAL_LOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1221 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1223 hhcd->HC_NotifyURBChangeCallback = pCallback; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1228 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1235 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1247 HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback() argument
1252 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1254 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1256hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; /* Legacy weak DataOutStag… in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1261 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1268 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1299 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd) in HAL_HCD_Start() argument
1301 __HAL_LOCK(hhcd); in HAL_HCD_Start()
1304 hhcd->Instance->BCDR |= USB_BCDR_DPPD; in HAL_HCD_Start()
1307 hhcd->Instance->CNTR &= ~USB_CNTR_USBRST; in HAL_HCD_Start()
1310 hhcd->Instance->CNTR &= ~USB_CNTR_PDWN; in HAL_HCD_Start()
1312 __HAL_UNLOCK(hhcd); in HAL_HCD_Start()
1322 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd) in HAL_HCD_Stop() argument
1324 __HAL_LOCK(hhcd); in HAL_HCD_Stop()
1326 (void)USB_StopHost(hhcd->Instance); in HAL_HCD_Stop()
1329 HAL_HCD_ClearPhyChannel(hhcd); in HAL_HCD_Stop()
1332 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_Stop()
1335 hhcd->ep0_PmaAllocState = 0U; in HAL_HCD_Stop()
1337 __HAL_UNLOCK(hhcd); in HAL_HCD_Stop()
1346 HAL_StatusTypeDef HAL_HCD_Suspend(HCD_HandleTypeDef *hhcd) in HAL_HCD_Suspend() argument
1351 hhcd->Instance->CNTR |= USB_CNTR_SUSPEN; in HAL_HCD_Suspend()
1354 while ((hhcd->Instance->CNTR & USB_CNTR_SUSPRDY) == 0U) in HAL_HCD_Suspend()
1370 HAL_StatusTypeDef HAL_HCD_Resume(HCD_HandleTypeDef *hhcd) in HAL_HCD_Resume() argument
1373 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_Resume()
1383 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResetPort() argument
1385 __HAL_LOCK(hhcd); in HAL_HCD_ResetPort()
1388 (void)USB_ResetPort(hhcd->Instance); in HAL_HCD_ResetPort()
1390 if (hhcd->HostState == HCD_HCD_STATE_CONNECTED) in HAL_HCD_ResetPort()
1392 hhcd->HostState = HCD_HCD_STATE_RESETED; in HAL_HCD_ResetPort()
1394 __HAL_UNLOCK(hhcd); in HAL_HCD_ResetPort()
1404 HAL_StatusTypeDef HAL_HCD_ResumePort(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResumePort() argument
1407 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_ResumePort()
1411 hhcd->Instance->CNTR &= ~USB_CNTR_L2RES; in HAL_HCD_ResumePort()
1441 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef const *hhcd) in HAL_HCD_GetState() argument
1443 return hhcd->State; in HAL_HCD_GetState()
1460 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetURBState() argument
1462 return hhcd->hc[chnum].urb_state; in HAL_HCD_HC_GetURBState()
1473 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetXferCount() argument
1475 return hhcd->hc[chnum].xfer_count; in HAL_HCD_HC_GetXferCount()
1495 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetState() argument
1497 return hhcd->hc[chnum].state; in HAL_HCD_HC_GetState()
1505 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentFrame() argument
1507 return (USB_GetCurrentFrame(hhcd->Instance)); in HAL_HCD_GetCurrentFrame()
1518 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentSpeed() argument
1520 return (USB_GetHostSpeed(hhcd->Instance)); in HAL_HCD_GetCurrentSpeed()
1532 HAL_StatusTypeDef HAL_HCD_HC_SetHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_SetHubInfo() argument
1535 hhcd->hc[ch_num].hub_addr = addr; in HAL_HCD_HC_SetHubInfo()
1536 hhcd->hc[ch_num].hub_port_nbr = PortNbr; in HAL_HCD_HC_SetHubInfo()
1549 HAL_StatusTypeDef HAL_HCD_HC_ClearHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_ClearHubInfo() argument
1551 hhcd->hc[ch_num].hub_addr = 0U; in HAL_HCD_HC_ClearHubInfo()
1552 hhcd->hc[ch_num].hub_port_nbr = 0U; in HAL_HCD_HC_ClearHubInfo()
1566 static void HCD_HC_OUT_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HCD_HC_OUT_BulkDb() argument
1577 if (hhcd->hc[ch_num & 0xFU].xfer_len >= data_xfr) in HCD_HC_OUT_BulkDb()
1579 hhcd->hc[ch_num & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_BulkDb()
1583 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_OUT_BulkDb()
1587 if (hhcd->hc[ch_num & 0xFU].xfer_len != 0U) in HCD_HC_OUT_BulkDb()
1590 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
1596 HCD_CLEAR_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1597 HCD_CLEAR_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1598 HCD_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1602 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > 0U) /* Still data to fill in the buffer */ in HCD_HC_OUT_BulkDb()
1604 hhcd->hc[ch_num & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_BulkDb()
1607 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > hhcd->hc[ch_num & 0xFU].max_packet) in HCD_HC_OUT_BulkDb()
1609 len = (uint16_t)hhcd->hc[ch_num & 0xFU].max_packet; in HCD_HC_OUT_BulkDb()
1610 hhcd->hc[ch_num & 0xFU].xfer_len_db -= len; in HCD_HC_OUT_BulkDb()
1614 len = (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_len_db; in HCD_HC_OUT_BulkDb()
1615 hhcd->hc[ch_num & 0xFU].xfer_len_db = 0U; /* end of fill buffer */ in HCD_HC_OUT_BulkDb()
1619 HCD_SET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum, 1U, (uint16_t)len); in HCD_HC_OUT_BulkDb()
1620 USB_WritePMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_OUT_BulkDb()
1621 hhcd->hc[ch_num & 0xFU].pmaaddr0, (uint16_t)len); in HCD_HC_OUT_BulkDb()
1624 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_VALID); in HCD_HC_OUT_BulkDb()
1629 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
1630 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_BulkDb()
1631 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_BulkDb()
1632 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_BulkDb()
1634 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_BulkDb()
1642 if (hhcd->hc[ch_num & 0xFU].xfer_len >= data_xfr) /* updated */ in HCD_HC_OUT_BulkDb()
1644 hhcd->hc[ch_num & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_BulkDb()
1648 if (hhcd->hc[ch_num & 0xFU].xfer_len != 0U) in HCD_HC_OUT_BulkDb()
1651 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
1657 HCD_CLEAR_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1658 HCD_CLEAR_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1659 HCD_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
1663 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > 0U) /* Still data to fill in the buffer */ in HCD_HC_OUT_BulkDb()
1665 hhcd->hc[ch_num & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_BulkDb()
1668 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > hhcd->hc[ch_num & 0xFU].max_packet) in HCD_HC_OUT_BulkDb()
1670 len = hhcd->hc[ch_num & 0xFU].max_packet; in HCD_HC_OUT_BulkDb()
1671 hhcd->hc[ch_num & 0xFU].xfer_len_db -= len; in HCD_HC_OUT_BulkDb()
1675 len = (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_len_db; in HCD_HC_OUT_BulkDb()
1676 hhcd->hc[ch_num & 0xFU].xfer_len_db = 0U; /* end of fill buffer */ in HCD_HC_OUT_BulkDb()
1680 HCD_SET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum, 1U, (uint16_t)len); in HCD_HC_OUT_BulkDb()
1682 USB_WritePMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_OUT_BulkDb()
1683 hhcd->hc[ch_num & 0xFU].pmaaddr1, (uint16_t)len); in HCD_HC_OUT_BulkDb()
1687 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_VALID); in HCD_HC_OUT_BulkDb()
1692 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
1693 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_BulkDb()
1694 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_BulkDb()
1695 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_BulkDb()
1698 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_BulkDb()
1712 static void HCD_HC_IN_BulkDb(HCD_HandleTypeDef *hhcd, in HCD_HC_IN_BulkDb() argument
1720 received_bytes = (uint16_t)HCD_GET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_BulkDb()
1722 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_BulkDb()
1724 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_BulkDb()
1728 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_BulkDb()
1732 if ((hhcd->hc[ch_num & 0xFU].xfer_len != 0U) && ((regvalue & USB_CH_DTOG_TX) != 0U)) in HCD_HC_IN_BulkDb()
1735 HCD_FREE_USER_BUFFER(hhcd->Instance, phy_chnum, 0U); in HCD_HC_IN_BulkDb()
1739 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_BulkDb()
1740 hhcd->hc[ch_num & 0xFU].pmaaddr0, (uint16_t)received_bytes); in HCD_HC_IN_BulkDb()
1745 received_bytes = (uint16_t) HCD_GET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_BulkDb()
1747 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_BulkDb()
1749 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_BulkDb()
1753 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_BulkDb()
1757 if ((hhcd->hc[ch_num & 0xFU].xfer_len != 0U) && ((regvalue & USB_CH_DTOG_TX) == 0U)) in HCD_HC_IN_BulkDb()
1760 HCD_FREE_USER_BUFFER(hhcd->Instance, phy_chnum, 0U); in HCD_HC_IN_BulkDb()
1764 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_BulkDb()
1765 hhcd->hc[ch_num & 0xFU].pmaaddr1, (uint16_t)received_bytes); in HCD_HC_IN_BulkDb()
1769 hhcd->hc[ch_num & 0xFU].xfer_count += received_bytes; in HCD_HC_IN_BulkDb()
1772 hhcd->hc[ch_num & 0xFU].state = HC_ACK; in HCD_HC_IN_BulkDb()
1773 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_BulkDb()
1775 if ((hhcd->hc[ch_num & 0xFU].xfer_len == 0U) || in HCD_HC_IN_BulkDb()
1776 ((received_bytes < hhcd->hc[ch_num & 0xFU].max_packet))) in HCD_HC_IN_BulkDb()
1778 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_BulkDb()
1779 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_BulkDb()
1782 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_BulkDb()
1786 hhcd->hc[ch_num & 0xFU].xfer_buff += received_bytes; in HCD_HC_IN_BulkDb()
1789 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_STRX); in HCD_HC_IN_BulkDb()
1802 static void inline HCD_HC_IN_ISO(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HCD_HC_IN_ISO() argument
1809 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_RX_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
1810 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
1812 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
1813 hhcd->hc[ch_num & 0xFU].pmaadress, in HCD_HC_IN_ISO()
1814 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
1816 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
1826 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
1828 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
1831 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
1832 hhcd->hc[ch_num & 0xFU].pmaaddr0, in HCD_HC_IN_ISO()
1833 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
1835 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
1841 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
1843 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
1846 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
1847 hhcd->hc[ch_num & 0xFU].pmaaddr1, in HCD_HC_IN_ISO()
1848 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
1850 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
1857 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_ISO()
1860 HCD_CLEAR_RX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
1870 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HCD_HC_IN_IRQHandler() argument
1873 uint8_t phy_chnum = (uint8_t)__HAL_HCD_GET_CHNUM(hhcd); in HCD_HC_IN_IRQHandler()
1876 uint32_t ch_reg = HCD_GET_CHANNEL(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
1884 HCD_HC_IN_ISO(hhcd, ch_num, phy_chnum, ch_reg); in HCD_HC_IN_IRQHandler()
1892 received_bytes = (uint16_t)HCD_GET_CH_RX_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
1895 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_IRQHandler()
1896 hhcd->hc[ch_num & 0xFU].pmaadress, (uint16_t)received_bytes); in HCD_HC_IN_IRQHandler()
1899 hhcd->hc[ch_num & 0xFU].xfer_count += received_bytes; in HCD_HC_IN_IRQHandler()
1902 hhcd->hc[ch_num & 0xFU].state = HC_ACK; in HCD_HC_IN_IRQHandler()
1903 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1905 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_IRQHandler()
1907 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_IRQHandler()
1911 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_IRQHandler()
1914 if ((hhcd->hc[ch_num & 0xFU].xfer_len == 0U) || in HCD_HC_IN_IRQHandler()
1915 ((received_bytes < hhcd->hc[ch_num & 0xFU].max_packet))) in HCD_HC_IN_IRQHandler()
1917 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_IRQHandler()
1918 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_IRQHandler()
1922 hhcd->hc[ch_num & 0xFU].xfer_buff += received_bytes; in HCD_HC_IN_IRQHandler()
1925 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_STRX); in HCD_HC_IN_IRQHandler()
1928 if ((hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_BULK) || in HCD_HC_IN_IRQHandler()
1929 (hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_INTR)) in HCD_HC_IN_IRQHandler()
1931 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_IN_IRQHandler()
1936 && (hhcd->hc[ch_num & 0xFU].urb_state != URB_DONE)) in HCD_HC_IN_IRQHandler()
1938 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1939 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1940 hhcd->hc[ch_num & 0xFU].state = HC_NAK; in HCD_HC_IN_IRQHandler()
1942 if (hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_INTR) in HCD_HC_IN_IRQHandler()
1945 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
1951 (void)HAL_HCD_HC_Halt(hhcd, ch_num); in HCD_HC_IN_IRQHandler()
1952 hhcd->hc[ch_num & 0xFU].state = HC_STALL; in HCD_HC_IN_IRQHandler()
1953 hhcd->hc[ch_num & 0xFU].urb_state = URB_STALL; in HCD_HC_IN_IRQHandler()
1956 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
1964 HCD_HC_IN_BulkDb(hhcd, ch_num, phy_chnum, ch_reg); in HCD_HC_IN_IRQHandler()
1974 hhcd->HC_NotifyURBChangeCallback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
1976 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
1980 HCD_CLEAR_RX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
1986 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1987 hhcd->hc[ch_num & 0xFU].ErrCnt++; in HCD_HC_IN_IRQHandler()
1988 hhcd->hc[ch_num & 0xFU].state = HC_XACTERR; in HCD_HC_IN_IRQHandler()
1991 HCD_CLEAR_RX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
1994 if (hhcd->hc[ch_num & 0xFU].ErrCnt > 3U) in HCD_HC_IN_IRQHandler()
1996 hhcd->hc[ch_num & 0xFU].urb_state = URB_ERROR; in HCD_HC_IN_IRQHandler()
1997 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
2000 HCD_CLEAR_RX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
2004 hhcd->HC_NotifyURBChangeCallback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
2006 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
2019 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum) in HCD_HC_OUT_IRQHandler() argument
2025 uint32_t phy_chnum = (uint8_t)__HAL_HCD_GET_CHNUM(hhcd); in HCD_HC_OUT_IRQHandler()
2028 uint32_t ch_reg = *(__IO uint32_t *)(&(hhcd->Instance->CHEP0R) + phy_chnum); in HCD_HC_OUT_IRQHandler()
2037 if ((hhcd->Instance->ISTR & USB_ISTR_ERR) == 0U) in HCD_HC_OUT_IRQHandler()
2042 HCD_SET_CH_TX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
2050 HCD_SET_CH_TX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
2055 HCD_SET_CH_RX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
2058 USB_DRD_SET_CHEP_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_IRQHandler()
2063 hhcd->hc[chnum & 0xFU].state = HC_XFRC; in HCD_HC_OUT_IRQHandler()
2064 hhcd->hc[chnum & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_IRQHandler()
2068 HCD_CLEAR_TX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
2072 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2074 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2085 if (hhcd->hc[chnum & 0xFU].xfer_len >= data_xfr) in HCD_HC_OUT_IRQHandler()
2087 hhcd->hc[chnum & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_IRQHandler()
2091 hhcd->hc[chnum & 0xFU].xfer_len = 0U; in HCD_HC_OUT_IRQHandler()
2095 if (hhcd->hc[chnum & 0xFU].xfer_len != 0U) in HCD_HC_OUT_IRQHandler()
2098 hhcd->hc[chnum & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_IRQHandler()
2099 hhcd->hc[chnum & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_IRQHandler()
2102 (void) USB_HC_StartXfer(hhcd->Instance, &hhcd->hc[chnum & 0xFU]); in HCD_HC_OUT_IRQHandler()
2107 hhcd->hc[chnum & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_IRQHandler()
2108 hhcd->hc[chnum & 0xFU].state = HC_XFRC; in HCD_HC_OUT_IRQHandler()
2109 hhcd->hc[chnum & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_IRQHandler()
2111 if ((hhcd->hc[chnum & 0xFU].ep_type == EP_TYPE_BULK) || in HCD_HC_OUT_IRQHandler()
2112 (hhcd->hc[chnum & 0xFU].ep_type == EP_TYPE_INTR)) in HCD_HC_OUT_IRQHandler()
2114 hhcd->hc[chnum & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_IRQHandler()
2123 hhcd->hc[chnum & 0xFU].state = HC_NAK; in HCD_HC_OUT_IRQHandler()
2124 hhcd->hc[chnum & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
2125 hhcd->hc[chnum & 0xFU].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
2128 WregCh = *(__IO uint32_t *)(&(hhcd->Instance->CHEP0R) + phy_chnum); in HCD_HC_OUT_IRQHandler()
2134 HCD_SET_CHANNEL(hhcd->Instance, phy_chnum, WregCh); in HCD_HC_OUT_IRQHandler()
2136 if (hhcd->hc[chnum & 0xFU].doublebuffer == 0U) in HCD_HC_OUT_IRQHandler()
2139 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2141 … HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2148 (void) HAL_HCD_HC_Halt(hhcd, (uint8_t)chnum); in HCD_HC_OUT_IRQHandler()
2149 hhcd->hc[chnum & 0xFU].state = HC_STALL; in HCD_HC_OUT_IRQHandler()
2150 hhcd->hc[chnum & 0xFU].urb_state = URB_STALL; in HCD_HC_OUT_IRQHandler()
2157 (void) HCD_HC_OUT_BulkDb(hhcd, chnum, (uint8_t)phy_chnum, ch_reg); in HCD_HC_OUT_IRQHandler()
2168 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2170 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2174 HCD_CLEAR_TX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
2180 hhcd->hc[chnum & 0xFU].ErrCnt++; in HCD_HC_OUT_IRQHandler()
2181 if (hhcd->hc[chnum & 0xFU].ErrCnt > 3U) in HCD_HC_OUT_IRQHandler()
2183 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_IRQHandler()
2184 hhcd->hc[chnum & 0xFU].urb_state = URB_ERROR; in HCD_HC_OUT_IRQHandler()
2188 hhcd->hc[chnum & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
2191 hhcd->hc[chnum & 0xFU].state = HC_XACTERR; in HCD_HC_OUT_IRQHandler()
2194 HCD_CLEAR_TX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
2197 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2199 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)chnum, hhcd->hc[chnum & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
2210 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd) in HCD_Port_IRQHandler() argument
2212 uint32_t FnrReg = hhcd->Instance->FNR; in HCD_Port_IRQHandler()
2213 uint32_t IstrReg = hhcd->Instance->ISTR; in HCD_Port_IRQHandler()
2219 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HCD_Port_IRQHandler()
2222 HAL_HCD_ClearPhyChannel(hhcd); in HCD_Port_IRQHandler()
2225 (void)HAL_HCD_PMAReset(hhcd); in HCD_Port_IRQHandler()
2228 hhcd->ep0_PmaAllocState = 0U; in HCD_Port_IRQHandler()
2232 hhcd->DisconnectCallback(hhcd); in HCD_Port_IRQHandler()
2234 HAL_HCD_Disconnect_Callback(hhcd); in HCD_Port_IRQHandler()
2240 if ((hhcd->HostState == HCD_HCD_STATE_DISCONNECTED) != 0U) in HCD_Port_IRQHandler()
2245 hhcd->HostState = HCD_HCD_STATE_CONNECTED; in HCD_Port_IRQHandler()
2248 hhcd->ConnectCallback(hhcd); in HCD_Port_IRQHandler()
2250 HAL_HCD_Connect_Callback(hhcd); in HCD_Port_IRQHandler()
2260 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HCD_Port_IRQHandler()
2263 HAL_HCD_ClearPhyChannel(hhcd); in HCD_Port_IRQHandler()
2266 (void)HAL_HCD_PMAReset(hhcd); in HCD_Port_IRQHandler()
2269 hhcd->ep0_PmaAllocState = 0U; in HCD_Port_IRQHandler()
2273 hhcd->DisconnectCallback(hhcd); in HCD_Port_IRQHandler()
2275 HAL_HCD_Disconnect_Callback(hhcd); in HCD_Port_IRQHandler()
2289 static uint8_t HAL_HCD_Check_usedChannel(HCD_HandleTypeDef const *hhcd, uint8_t ch_num) in HAL_HCD_Check_usedChannel() argument
2294 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Check_usedChannel()
2296 if ((((hhcd->phy_chin_state[idx] & 0xF0U) >> 4U) == ((uint16_t)ch_num + 1U)) && in HAL_HCD_Check_usedChannel()
2297 (hhcd->phy_chin_state[idx] != 0U)) in HAL_HCD_Check_usedChannel()
2302 if ((((hhcd->phy_chout_state[idx] & 0xF0U) >> 4U) == ((uint16_t)ch_num + 1U)) && in HAL_HCD_Check_usedChannel()
2303 (hhcd->phy_chout_state[idx] != 0U)) in HAL_HCD_Check_usedChannel()
2323 static uint8_t HAL_HCD_GetLogical_Channel(HCD_HandleTypeDef const *hhcd, in HAL_HCD_GetLogical_Channel() argument
2329 if (((hhcd->phy_chout_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) != 0U) in HAL_HCD_GetLogical_Channel()
2331 return ((uint8_t)((hhcd->phy_chout_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) - 1U); in HAL_HCD_GetLogical_Channel()
2342 if (((hhcd->phy_chin_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) != 0U) in HAL_HCD_GetLogical_Channel()
2344 return ((uint8_t)((hhcd->phy_chin_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) - 1U); in HAL_HCD_GetLogical_Channel()
2371 static uint8_t HAL_HCD_Get_FreePhyChannel(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_Get_FreePhyChannel() argument
2382 if (hhcd->phy_chin_state[idx] == 0U) in HAL_HCD_Get_FreePhyChannel()
2386 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2391 if (hhcd->phy_chout_state[idx] == 0U) in HAL_HCD_Get_FreePhyChannel()
2395 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2404 if (((hhcd->phy_chin_state[idx] & 0xF0U) >> 4U) != ((uint16_t)ch_num + 1U)) in HAL_HCD_Get_FreePhyChannel()
2408 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2415 if (((hhcd->phy_chout_state[idx] & 0xF0U) >> 4U) != ((uint16_t)ch_num + 1U)) in HAL_HCD_Get_FreePhyChannel()
2419 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2432 for (idx = 1U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Get_FreePhyChannel()
2435 if ((hhcd->phy_chin_state[idx] == 0U) && in HAL_HCD_Get_FreePhyChannel()
2436 ((((hhcd->phy_chout_state[idx] & 0x000FU) == ((uint16_t)ep_type + 1U)) && in HAL_HCD_Get_FreePhyChannel()
2437 (((hhcd->phy_chout_state[idx] & 0x0F00U) == ((uint16_t)epnum & 0x0FU)))) || in HAL_HCD_Get_FreePhyChannel()
2438 (hhcd->phy_chout_state[idx] == 0U))) in HAL_HCD_Get_FreePhyChannel()
2442 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2453 for (idx = 1U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Get_FreePhyChannel()
2456 if ((hhcd->phy_chout_state[idx] == 0U) && in HAL_HCD_Get_FreePhyChannel()
2457 ((((hhcd->phy_chin_state[idx] & 0x0FU) == ((uint16_t)ep_type + 1U)) && in HAL_HCD_Get_FreePhyChannel()
2458 ((hhcd->phy_chin_state[idx] & 0x0F00U) == ((uint16_t)epnum & 0x0FU))) || in HAL_HCD_Get_FreePhyChannel()
2459 (hhcd->phy_chin_state[idx] == 0U))) in HAL_HCD_Get_FreePhyChannel()
2463 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
2481 static void HAL_HCD_ClearPhyChannel(HCD_HandleTypeDef *hhcd) in HAL_HCD_ClearPhyChannel() argument
2485 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_ClearPhyChannel()
2488 hhcd->phy_chout_state[idx] = 0U; in HAL_HCD_ClearPhyChannel()
2489 hhcd->phy_chin_state[idx] = 0U; in HAL_HCD_ClearPhyChannel()
2514 static uint16_t HAL_HCD_GetFreePMA(HCD_HandleTypeDef *hhcd, uint16_t mps) in HAL_HCD_GetFreePMA() argument
2545 Entry = hhcd->PMALookupTable[i]; in HAL_HCD_GetFreePMA()
2593 hhcd->PMALookupTable[i] |= ((uint32_t)1U << j); in HAL_HCD_GetFreePMA()
2621 HAL_StatusTypeDef HAL_HCD_PMAlloc(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_PMAlloc() argument
2630 HCD_HCTypeDef *hc = &(hhcd->hc[ch_num]); in HAL_HCD_PMAlloc()
2633 pma_addr0 = HAL_HCD_GetFreePMA(hhcd, mps); in HAL_HCD_PMAlloc()
2650 hhcd->ep0_PmaAllocState = ch_num; in HAL_HCD_PMAlloc()
2651 hhcd->ep0_PmaAllocState |= (1U << 8); in HAL_HCD_PMAlloc()
2662 hhcd->ep0_PmaAllocState |= (CH_IN_DIR << 4); in HAL_HCD_PMAlloc()
2681 pma_addr1 = HAL_HCD_GetFreePMA(hhcd, mps); in HAL_HCD_PMAlloc()
2686 (void)HAL_HCD_PMAFree(hhcd, pma_addr0, mps); in HAL_HCD_PMAlloc()
2724 HAL_StatusTypeDef HAL_HCD_PMADeAlloc(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_PMADeAlloc() argument
2733 HCD_HCTypeDef *hc = &(hhcd->hc[ch_num]); in HAL_HCD_PMADeAlloc()
2738 status = HAL_HCD_PMAFree(hhcd, hc->pmaadress, hc->max_packet); in HAL_HCD_PMADeAlloc()
2743 status = HAL_HCD_PMAFree(hhcd, hc->pmaaddr0, hc->max_packet); in HAL_HCD_PMADeAlloc()
2749 status = HAL_HCD_PMAFree(hhcd, hc->pmaaddr1, hc->max_packet); in HAL_HCD_PMADeAlloc()
2773 HAL_StatusTypeDef HAL_HCD_PMAReset(HCD_HandleTypeDef *hhcd) in HAL_HCD_PMAReset() argument
2778 hhcd->PMALookupTable[i] = 0U; in HAL_HCD_PMAReset()
2782 for (uint8_t i = 0U; i < hhcd->Init.Host_channels; i++) in HAL_HCD_PMAReset()
2784 hhcd->PMALookupTable[0] |= ((uint32_t)1U << i); in HAL_HCD_PMAReset()
2797 static HAL_StatusTypeDef HAL_HCD_PMAFree(HCD_HandleTypeDef *hhcd, uint32_t pma_base, uint16_t mps) in HAL_HCD_PMAFree() argument
2846 if ((hhcd->PMALookupTable[i] & ((uint32_t)1U << j)) == 0U) in HAL_HCD_PMAFree()
2851 hhcd->PMALookupTable[i] &= ~(1U << j); in HAL_HCD_PMAFree()