1: uhs_status_t Usb_HubApi_RESET_TT(
struct usb_hub_info* hub_info, uhs_ubit16_t tt_port )
2: {
3: uhs_status_t retval =
UDI_OK;
4: uhs_status_t result =
UDI_OK;
5:
6:
7:
8:
9:
if( ( g_usb_hub_stat != USB_HUB_IDLE ) && ( g_usb_hub_stat != USB_HUB_RUN ) ){
10: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_ClearTTBuffer: status error" ) );
11: HUB_REPORT_ERROR(
USBCLS_HUB_INVALID_STATUS, 0 );
12:
return UDI_STAT_INVALID_STATE;
13: }
14:
15:
16:
17:
18:
if( hub_info == NULL ){
19: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_ClearTTBuffer: parameter error" ) );
20: HUB_REPORT_ERROR(
USBCLS_HUB_INVALID_PARAMETER, 0 );
21:
return UDI_STAT_DATA_ERROR;
22: }
23:
if( (hub_info->port_num < 1) || (hub_info->port_num > HUB_MAX_PORT_NUM) ){
24: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_ClearTTBuffer: parameter error" ) );
25: HUB_REPORT_ERROR(
USBCLS_HUB_INVALID_PARAMETER, 0 );
26:
return UDI_STAT_DATA_ERROR;
27: }
28:
29:
30:
31:
32: retval = kernel_acquisition_semaphore( &(hub_info->hub_info_sem), USB_HOST_SEMTIMEOUT, in_interrupt() );
33:
if( retval !=
UDI_OK ){
34: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_ClearTTBuffer: semaphore error" ) );
35: HUB_REPORT_WARNING(
USBCLS_HUB_RESOURCE_UNAVAIL, 0 );
36:
return retval;
37: }
38:
39:
40:
41:
42:
#ifdef USBH_DBG_ADD_MESSAGE
43: uhs_debug_print( DBG_ERR, ( "RESET_TT called by external module( Usb_HubApi_RESET_TT() )" ) );
44:
#endif
45: result = Usb_Hub_RESET_TT( hub_info, tt_port );
46:
if( result !=
UDI_OK ){
47: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_PortDevDttached: PortDevDetach error" ) );
48: HUB_REPORT_WARNING(
USBCLS_HUB_ILLEGAL_ERROR, 0 );
49: }
50:
51:
52:
53:
54: retval = kernel_release_semaphore( &(hub_info->hub_info_sem), in_interrupt() );
55:
if( retval !=
UDI_OK ){
56: uhs_debug_print( DBG_ERR, ( "Usb_HubApi_ClearTTBuffer: semaphore error" ) );
57: HUB_REPORT_ERROR(
USBCLS_HUB_RESOURCE_UNAVAIL, 0 );
58:
59:
if( result ==
UDI_OK ){
60:
return retval;
61: }
62: }
63:
64:
return result;
65: }