Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / KernelLand / Modules / USB / Core / usb.c
index 405a508..9a0e2bc 100644 (file)
@@ -21,15 +21,12 @@ extern tUSBDriver gUSBHub_Driver;
 tUSBHub        *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts);
 
 // === GLOBALS ===
+tMutex glUSB_Hosts;
+tUSBHost       *gUSB_Hosts = NULL;
+tMutex glUSB_InterfaceDrivers;
 tUSBDriver     *gpUSB_InterfaceDrivers = &gUSBHub_Driver;
 
 // === CODE ===
-void USB_RegisterDriver(tUSBDriver *Driver)
-{
-       Driver->Next = gpUSB_InterfaceDrivers;
-       gpUSB_InterfaceDrivers = Driver;
-}
-
 tUSBHub *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts)
 {
        tUSBHost        *host;
@@ -46,6 +43,7 @@ tUSBHub *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts)
        host->RootHubDev.ParentHub = NULL;
        host->RootHubDev.Host = host;
        host->RootHubDev.Address = 0;
+       host->RootHubDev.EndpointHandles[0] = HostDef->InitControl(ControllerPtr, 0, 64);
 
 //     host->RootHubIf.Next = NULL;
        host->RootHubIf.Dev = &host->RootHubDev;
@@ -57,9 +55,11 @@ tUSBHub *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts)
        host->RootHub.nPorts = nPorts;
        memset(host->RootHub.Devices, 0, sizeof(void*)*nPorts);
 
-       // TODO: Lock
+       // Append to list
+       Mutex_Acquire( &glUSB_Hosts );
        host->Next = gUSB_Hosts;
        gUSB_Hosts = host;
+       Mutex_Release( &glUSB_Hosts );
 
        return &host->RootHub;
 }
@@ -67,7 +67,12 @@ tUSBHub *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts)
 // --- Drivers ---
 void USB_RegisterDriver(tUSBDriver *Driver)
 {
-       Log_Warning("USB", "TODO: Implement USB_RegisterDriver");
+       Mutex_Acquire( &glUSB_InterfaceDrivers );
+       Driver->Next = gpUSB_InterfaceDrivers;
+       gpUSB_InterfaceDrivers = Driver;
+       Mutex_Release( &glUSB_InterfaceDrivers );
+       
+       // TODO: Recheck devices that didn't have a driver
 }
 
 tUSBDriver *USB_int_FindDriverByClass(Uint32 ClassCode)

UCC git Repository :: git.ucc.asn.au