add: case RH_SET_CONFIG: retval = B_OK; break;  case RH_CLEAR_FEATURE: if ( request->Index == 0 ) {  TRACE( "UHCI: RH_CLEAR_FEATURE no hub changes!\n" ); retval = EINVAL; break; } else if ( request->Index > uhci_hubd.bNbrPorts ) {  TRACE( "UHCI: RH_CLEAR_FEATURE invalid port!\n" ); retval = EINVAL; break; }  TRACE("UHCI: RH_CLEAR_FEATURE called. Feature: %u!\n" , request->Value ); switch( request->Value ) { case C_PORT_CONNECTION: port = m_pcimodule->read_io_16( m_data->reg_base + UHCI_PORTSC1 + (request->Index - 1 ) * 2 ); port = port & UHCI_PORTSC_DATAMASK; port |= UHCI_PORTSC_STATCHA; TRACE( "UHCI rh: port: %x\n" , port ); m_pcimodule->write_io_16( m_data->reg_base + UHCI_PORTSC1 + (request->Index - 1 ) * 2 , port ); retval = B_OK; break; default: retval = EINVAL; break; } break;
context: status_t rh_submit_packet( usb_packet_t *packet ){	usb_request_data *request = (usb_request_data *)packet->requestdata;	status_t retval;		TRACE( "USB UHCI: rh_submit_packet called\n" );		switch( request->Request )	{	case RH_SET_ADDRESS:		if ( request->Value >= 128 )		{			retval = EINVAL;			break;		}		TRACE( "USB UHCI: rh_submit_packet RH_ADDRESS: %d\n" , request->Value );		m_data->rh_address = request->Value;		retval = B_OK;		break;	case RH_GET_DESCRIPTOR:		{			TRACE( "USB UHCI: rh_submit_packet GET_DESC: %d\n" , request->Value );			switch ( request->Value )			{			case RH_DEVICE_DESCRIPTOR:				memcpy( packet->buffer , (void *)&uhci_devd , packet->bufferlength );				*(packet->actual_length) = packet->bufferlength; 				retval = B_OK;				break;			case RH_CONFIG_DESCRIPTOR:				memcpy( packet->buffer , (void *)&uhci_confd , packet->bufferlength );				*(packet->actual_length) = packet->bufferlength;				retval =  B_OK;				break;			case RH_SET_CONFIG:				retval = B_OK;				break;			default:				retval = EINVAL;				break;			}			break;		}	default: 		retval = EINVAL;		break;	}		return retval;} 	