1: uhs_status_t Usbh_Api_DriverRegister(
struct class_driver_reginfo * driver_info)
2: {
3: uhs_status_t retval =
UDI_OK;
4:
5:
6:
if( Usbh_susres_get_state() != USBH_SUSRES_STS_IDLE ){
7: uhs_debug_print (DBG_ERR, ("ERROR : Don't Call Current State!!"));
8: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
9:
return UDI_STAT_INVALID_STATE;
10: }
11:
12:
if ( driver_info == NULL ) {
13: CORE_REPORT_ERROR(
USBC_INVALID_PARAMETER);
14:
return UDI_STAT_DATA_ERROR;
15: }
16:
17: 18: retval = kernel_acquisition_semaphore(
19: &(g_apiwrap_info.drvinfo_semid),
20: USB_HOST_SEMTIMEOUT,
21: in_interrupt());
22:
if ( retval !=
UDI_OK ) {
23:
24: 25:
26: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
27:
28:
return UDI_STAT_INVALID_STATE; 29: }
30:
31:
if ( g_apiwrap_info.apiwrap_stat != USBWRAP_STAT_USBD_INITCOMP ) {
32:
35:
36:
37: lists_addition_ListTail(
38: &g_apiwrap_info.tmp_drvlist,
39: driver_info );
40:
41: }
else {
42:
45: retval = Usbh_DriverRegister( driver_info );
46:
if ( retval !=
UDI_OK ) {
47: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
48:
49:
50: retval = kernel_release_semaphore(&(g_apiwrap_info.drvinfo_semid), in_interrupt());
51:
if( retval !=
UDI_OK ) {
52: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR);
53: }
54:
55:
return UDI_STAT_INVALID_STATE;
56: }
57: }
58:
59:
60: retval = kernel_release_semaphore(&(g_apiwrap_info.drvinfo_semid), in_interrupt());
61:
if( retval !=
UDI_OK ) {
62: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR);
63:
return UDI_STAT_INVALID_STATE;
64: }
65:
66:
return UDI_OK;
67: }