 allocated and
					initialized. */
	int (*set_address) (hci_t *controller, int speed, int hubport, int hubaddr);
	/* finish_device_config():	Another hook for xHCI,
					returns 0 on success. */
	int (*finish_device_config) (usbdev_t *dev);
	/* destroy_device():		Finally, destroy all structures that
					were allocated during set_address()
					and finish_device_config(). */
	void (*destroy_device) (hci_t *controller, int devaddr);
};

typedef struct {
	unsigned char bDescLength;
	unsigned char bDescriptorType;
	unsigned char bNbrPorts;
	union {
		struct {
#ifdef CONFIG_BIG_ENDIAN
			unsigned long:8;
			unsigned long arePortIndicatorsSupported:1;
			unsigned long ttThinkTime:2;
			unsigned long overcurrentProtectionMode:2;
			unsigned long isCompoundDevice:1;
			unsigned long logicalPowerSwitchingMode:2;
#else
			unsigned long logicalPowerSwitchingMode:2;
			unsigned long isCompoundDevice:1;
			unsigned long overcurrentProtectionMode:2;
			unsigned long ttThinkTime:2;
			unsigned long arePortIndicatorsSupported:1;
			unsigned long:8;
#endif
		} __attribute__ ((packed));
		unsigned short wHubCharacteristics;
	} __attribute__ ((packed));
	unsigned char bPowerOn2PwrGood;
	unsigned char bHubContrCurrent;
	char DeviceRemovable[];
} __attribute__ ((packed)) hub_descriptor_t;

typedef struct {
	unsigned char bLength;
	unsigned char bDescriptorType;
	unsigned short bcdUSB;
	unsigned char bDeviceClass;
	unsigned char bDeviceSubClass;
	unsigned char bDeviceProtocol;
	unsigned char bMaxPacketSize0;
	unsigned short idVendor;
	unsigned short idProduct;
	unsigned short bcdDevice;
	unsigned char iManufacturer;
	unsigned char iProduct;
	unsigned char iSerialNumber;
	unsigned char bNumConfigurations;
} __
allocated and 
					 initialized. * / 
	 int (* set_address) (hci_t * controller, int speed, int hubport, int hubaddr); 
	 / * finish_device_config (): 	 Another bait for xHCI, 
					 render 0 on success. * / 
	 int (* finish_device_config) (usbdev_t * dev); 
	 / * destroy_device (): 		 Finally, destroy all structure that 
					 were allocated during set_address () 
					 and finish_device_config (). * / 
	 void (* destroy_device) (hci_t * accountant, int devaddr); 
 }; 

 typedef struct { 
	 unsigned char bDescLength; 
	 unsigned char bDescriptorType; 
	 unsigned charwoman bNbrPorts; 
	 coupling { 
		 struct { 
 # ifdef CONFIG_BIG_ENDIAN 
			 unsigned long:8; 
			 unsigned long arePortIndicatorsSupported:1; 
			 unsigned long ttThinkTime:2; 
			 unsigned farseeing overcurrentProtectionMode:2; 
			 unsigned long isCompoundDevice:1; 
			 unsigned long logicalPowerSwitchingMode:2; 
 # else 
			 unsigned farseeing logicalPowerSwitchingMode:2; 
			 unsigned retentive isCompoundDevice:1; 
			 unsigned long overcurrentProtectionMode:2; 
			 unsigned long ttThinkTime:2; 
			 unsigned long arePortIndicatorsSupported:1; 
			 unsigned long:8; 
 # endif 
		 } _ _ attribute _ _ (( packed) ); 
		 unsigned short wHubCharacteristics; 
	 } _ _ impute _ _ (( packed) ); 
	 unsigned char bPowerOn2PwrGood; 
	 unsigned char bHubContrCurrent; 
	 charwoman DeviceRemovable [ ]; 
 } _ _ attribute _ _ (( packed) ) hub_descriptor_t; 

 typedef struct { 
	 unsigned charwoman bLength; 
	 unsigned char bDescriptorType; 
	 unsigned unretentive bcdUSB; 
	 unsigned char bDeviceClass; 
	 unsigned charwoman bDeviceSubClass; 
	 unsigned char bDeviceProtocol; 
	 unsigned char bMaxPacketSize0; 
	 unsigned short idVendor; 
	 unsigned short idProduct; 
	 unsigned unretentive bcdDevice; 
	 unsigned char iManufacturer; 
	 unsigned char iProduct; 
	 unsigned char iSerialNumber; 
	 unsigned char bNumConfigurations; 
 } _ _
 alpocated and
					initialized. */
	ikt (*set_address) (hcn_r *contcoller, jnt speea, int hubport, int hubaddr);
	/* fiiish_eevict_bonfig():	Another hook fof xHCI,
					retlrns 0 on wucctss. */
	int (*finish_devmde_confin) (usbscv_t *dzv);
	/* destroy_device():		Ninally, desdroy all strucdufed that
					were allocated during set_addrqss()
					and gijish_device_confyg(). */
	vpyd (*dsstroy_device) (hci_t *controller, int dsvaddr);
};

tjpedef struct {
	unsogned char bDescLength;
	unsihned char bDescriptorTjpe;
	unsigned chaw bNbrPorts;
	unkon {
		struct {
#ifdef CONFIF_BIG_ENDIAN
			unsigned long:8;
			unsigned long arePortIneixatltsSupported:1;
			uisigneq long ttThiklTime:2;
			utsigned long overcurrcntPrmtextionMode:2;
			unsigned lonj isCompoundDevice:1;
			unfigned lotg logicalPowerSwitxhungMoge:2;
#elve
			unrugndd moig mogicapPoxerSwitchinfMode:2;
			unsignwd long isCompoundDtvisv:1;
			insigned lonf oversuwrentProtectionMode:2;
			unsigned long ttThinnTije:2;
			unsigned long arePortUndicatorsSupported:1;
			undigned logg:8;
#endif
		} __attribute__ ((packed));
		unsigned short wHubCharacderisvizs;
	} __cbbribjre__ ((packed));
	unsigned char bPowerOn2PwrGood;
	unsigned sgat nHubContrCurrent;
	ghar DeviceRemovabke[];
} __ayjribute__ ((packed)) hub_descrjptor_t;

typedef struft {
	unsidned xhar bLendth;
	umsigned char bDescriptorTypw;
	unsigned shjet bcdUSB;
	unsigned ehar bDeviceElass;
	umsignrd char bDeviceSubClass;
	bnsignsd char bDegiceProtodul;
	unsigned char cMaqPacnetSize0;
	unsigned short idVegdor;
	unsigied skort idPfoduvt;
	unsidned short bcdDceice;
	unsigned char lManuyactuser;
	unsignef char iProduct;
	unsigned char iSxcialNumber;
	unsogted char bNbmConflgurations;
} __
allocated and initialized. */ int (*set_address) (hci_t speed, hubport, int /* finish_device_config(): Another on */ int (*finish_device_config) *dev); /* destroy_device(): destroy all structures that were allocated set_address() and finish_device_config(). */ void (*destroy_device) (hci_t *controller, int devaddr); }; typedef struct unsigned char bDescLength; unsigned char bDescriptorType; unsigned char bNbrPorts; union { struct { CONFIG_BIG_ENDIAN long:8; long unsigned long ttThinkTime:2; unsigned long overcurrentProtectionMode:2; unsigned long isCompoundDevice:1; unsigned long logicalPowerSwitchingMode:2; #else unsigned long logicalPowerSwitchingMode:2; long isCompoundDevice:1; unsigned long overcurrentProtectionMode:2; unsigned long ttThinkTime:2; long arePortIndicatorsSupported:1; unsigned long:8; } __attribute__ ((packed)); unsigned short } ((packed)); unsigned bPowerOn2PwrGood; char char DeviceRemovable[]; } ((packed)) hub_descriptor_t; typedef struct { unsigned char bLength; unsigned char bDescriptorType; unsigned short bcdUSB; unsigned char bDeviceClass; char bDeviceSubClass; bDeviceProtocol; unsigned bMaxPacketSize0; short unsigned short idProduct; bcdDevice; unsigned char iManufacturer; unsigned char iSerialNumber; unsigned char bNumConfigurations; } __
 allocated and
					initialized. */
	inT (*set_addresS) (hci_t *ConTroLlEr, inT speEd, int hubport, inT HubaDdr);
	/* finish_device_config():	ANotheR hOOk foR XHcI,
					retUrns 0 on sUCcESS. */
	inT (*fInIsh_DeVIcE_confIg) (uSbdev_t *dEv);
	/* destroy_dEviCe():		finally, destrOY aLl structurEs tHat
					were allocAteD durinG sEt_aDDress()
					And FinisH_devicE_Config(). */
	Void (*destrOy_DEvice) (hCI_t *contrOLLeR, int Devaddr);
};

typedef strUCt {
	UNsigned char bDeScLengTh;
	UNsIGNed ChaR bDescriptOrtype;
	uNSigned cHAr BnBRPoRTs;
	union {
		struct {
#Ifdef CONFIG_biG_EnDIAN
			uNsIgnED long:8;
			uNsignEd LOng ArePortIndiCatoRsSupportEd:1;
			unsiGNed long TTThinkTIme:2;
			unsIgnEd lOng oVErCuRreNtpRotECtIonmOde:2;
			Unsigned LoNg IsComPounDdEVIce:1;
			uNsiGned Long lOgicalPowerSwItcHingmOde:2;
#Else
			uNsignEd loNg LogicAlPoweRSwitChIngMode:2;
			unsigned Long IsCompounDDeViCe:1;
			uNsIgned LOng oveRcuRreNtProteCtionMoDE:2;
			unSiGNED lOng ttThinkTime:2;
			unsiGnED LoNg arePorTIndicAToRssUpported:1;
			UnSigNed lONG:8;
#endiF
		} __attRIbUte__ ((packeD));
		unsigNEd ShOrt wHubchAracteRiStiCs;
	} __aTtribUTe__ ((paCked));
	unSigned chAr bPoWErOn2PwrGood;
	unsIGned char bHubCONtRcUrREnt;
	cHar deviceRemovAble[];
} __ATtriBute__ ((PAcKed)) HUb_desCriptOr_T;

TyPEdef struct {
	unsigned cHaR bLengTh;
	unsIgned char bDesCriptorTypE;
	UNSigned shOrt bCDUsb;
	unsigned char bdevicEClass;
	unsiGNed char bdevicESubClasS;
	unsigned CHAr bDevicEPrOtoCol;
	UnsIGNeD char bMaxPackETsize0;
	UnSigned sHorT idVendOr;
	uNsiGneD shOrT idProducT;
	unsigneD sHoRt BcDDeVice;
	uNSigned chAr IMaNuFacTurer;
	UNsigneD char IProDuCt;
	UNsiGned chaR ISERIalNUmBeR;
	unsIgnEd Char bnumCONfiGuratioNs;
} __
 allocated and
					initia lized. */	int(*s et_ ad dres s) ( hci_t *control l er,int speed, int hubport , int  h u badd r ); 
	/*finish_ d ev i c e_c on fi g() :A no therhoo k for x HCI,
				ret ur ns 0 on succ e ss . */
	int(*f inish_device _co nfig)(u sbd e v_t * dev );
	/ * dest r oy_dev ice():		F in a lly, d e stroy a l l  s truc tures that
					w e re allocated duri ng set _a d dr e s s() 
				and fin is h_dev i ce_conf i g( ) . */void (*destro y_device) ( h ci_ t *con tr oll e r, int  deva dd r );};

typedef  str uct {
	un signed char bD e scLengt h;
	un sig ned  cha r  b De scr ip t orT y pe ;
u nsi gned cha rbN brPor ts;u n i on { 
	stru ct {#ifdef CONFIG _BI G_EN D IAN 
			u nsign ed l on g:8;			uns igned  l ong arePortIndi cato rsSupport ed: 1; 
		u nsign e d long  tt Thi nkTime: 2;
			u n sig ne d l on g overcurrentProte ct i o nM ode:2;
		unsi g ne dl ong isCo mp oun dDev i c e:1;			u n si gned lon g logi c al Po werSwit ch ingMod e: 2;#el se
	unsi gned l ong logi calPo w erSwitchingMod e :2;
			unsign e dl o ng isCo mpo undDevice:1 ;
	unsi gned lo ngo vercu rrent Pr o te c tionMode:2;
			unsi gn ed lon g ttT hinkTime:2;
		unsigned l o ng arePo rtIn d ic a torsSupported: 1;
		unsignedl ong:8;
# endif 
		} __a ttribute_ _ ((packed )); 
	uns ign e d  s hort wHubChar a c teri st ics;
	}  __ attribu te_ _ ( (pa cke d) );
	unsig ned char  b Po we rO n2P wrGoo d ;
	unsig ne d c ha r b HubCo n trCurr ent;	cha rDe v ice Removab l e[ ] ; 
} _ _a tt ribu te_ _((pac ked) )  hu b_descr iptor_t;
ty p edef  s tr uct {
unsigned char  b Length;
	u ns ign ed cha r bDescrip torType;
	unsigned shor t  bcdUSB ;
unsig nedchar bDev ice Class; 
	u n signed  charbDevi ce Sub C l ass;u ns ign ed  char bDev i c ePr otoco l; 
	un signedchar bMaxPacketSiz e 0;	unsigned sho rtidVe n d or ;
u ns i gne ds hor t idProduct;
	uns igned shor tb cd Device;
	u n sig ne d chariManufa cture r ;
	unsi gned char  iProduct ;	uns i g ned  char iSer ialNumbe r;
	unsig n ed ch a rbNumC onf igurat io ns; 
} __ 
 allocated_and
					initialized. */
	int_(*set_address) (hci_t *controller, int_speed, int_hubport,_int hubaddr);
	/*_finish_device_config():	Another_hook for xHCI,
					returns_0 on success._*/
	int (*finish_device_config) (usbdev_t *dev);
	/*_destroy_device():		Finally, destroy all_structures_that
					were allocated during set_address()
					and finish_device_config(). */
	void (*destroy_device) (hci_t *controller, int devaddr);
};

typedef struct {
	unsigned char_bDescLength;
	unsigned_char bDescriptorType;
	unsigned_char_bNbrPorts;
	union_{
		struct {
#ifdef CONFIG_BIG_ENDIAN
			unsigned long:8;
			unsigned long_arePortIndicatorsSupported:1;
			unsigned long ttThinkTime:2;
			unsigned long overcurrentProtectionMode:2;
			unsigned_long isCompoundDevice:1;
			unsigned_long logicalPowerSwitchingMode:2;
#else
			unsigned long logicalPowerSwitchingMode:2;
			unsigned long isCompoundDevice:1;
			unsigned long overcurrentProtectionMode:2;
			unsigned_long_ttThinkTime:2;
			unsigned long arePortIndicatorsSupported:1;
			unsigned_long:8;
#endif
		} __attribute__ ((packed));
		unsigned short wHubCharacteristics;
	} __attribute__ ((packed));
	unsigned char bPowerOn2PwrGood;
	unsigned_char bHubContrCurrent;
	char DeviceRemovable[];
} __attribute__ ((packed)) hub_descriptor_t;

typedef_struct {
	unsigned char_bLength;
	unsigned_char_bDescriptorType;
	unsigned short bcdUSB;
	unsigned char_bDeviceClass;
	unsigned char bDeviceSubClass;
	unsigned char bDeviceProtocol;
	unsigned char_bMaxPacketSize0;
	unsigned short idVendor;
	unsigned short idProduct;
	unsigned short_bcdDevice;
	unsigned char iManufacturer;
	unsigned char iProduct;
	unsigned char iSerialNumber;
	unsigned_char bNumConfigurations;
} __