+ host = malloc(sizeof(tUSBHost) + nPorts*sizeof(void*));
+ if(!host) {
+ // Oh, bugger.
+ return NULL;
+ }
+ host->HostDef = HostDef;
+ host->Ptr = ControllerPtr;
+ memset(host->AddressBitmap, 0, sizeof(host->AddressBitmap));
+
+ host->RootHubDev.ParentHub = NULL;
+ host->RootHubDev.Host = host;
+ host->RootHubDev.Address = 0;
+
+// host->RootHubIf.Next = NULL;
+ host->RootHubIf.Dev = &host->RootHubDev;
+ host->RootHubIf.Driver = NULL;
+ host->RootHubIf.Data = NULL;
+ host->RootHubIf.nEndpoints = 0;
+
+ host->RootHub.Interface = &host->RootHubIf;
+ host->RootHub.nPorts = nPorts;
+ memset(host->RootHub.Devices, 0, sizeof(void*)*nPorts);
+
+ // TODO: Lock
+ host->Next = gUSB_Hosts;
+ gUSB_Hosts = host;
+
+ return &host->RootHub;