X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FCore%2Fusb_io.c;h=a1bf50b1c691fcf290bee35150fc6dddb8a7f7cd;hb=d8bf9f747a87c3c1d23461c155ef90b7fc148a21;hp=38509d349a585bc4babc8cc507757116a9e2a282;hpb=0387e49399279e685d2a2657392f3bccbf624184;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/Core/usb_io.c b/KernelLand/Modules/USB/Core/usb_io.c index 38509d34..a1bf50b1 100644 --- a/KernelLand/Modules/USB/Core/usb_io.c +++ b/KernelLand/Modules/USB/Core/usb_io.c @@ -11,21 +11,12 @@ #include "usb.h" #include "usb_lowlevel.h" #include - -typedef struct sAsyncOp tAsyncOp; - -struct sAsyncOp -{ - tAsyncOp *Next; - tUSBEndpoint *Endpt; - int Length; - void *Data; -}; +#include "usb_async.h" // === PROTOTYPES === void USB_ReadDescriptor(tUSBInterface *Iface, int Type, int Index, int Length, void *Data); void USB_Request(tUSBInterface *Iface, int Endpoint, int Type, int Req, int Value, int Index, int Len, void *Data); -void USB_AsyncCallback(void *Ptr, void *Buf, int Length); +void USB_AsyncCallback(void *Ptr, void *Buf, size_t Length); void USB_AsyncThread(void *unused); // === GLOBALS === @@ -79,10 +70,11 @@ void USB_RecvDataA(tUSBInterface *Dev, int Endpoint, int Length, void *DataBuf, op->Data = DataBuf; // TODO: Handle transfers that are larger than one packet + // TODO: Data toggle host = Dev->Dev->Host; LOG("IN from %p %i:%i", host->Ptr, Dev->Dev->Address, op->Endpt->EndpointNum); - host->HostDef->SendIN( + host->HostDef->BulkIN( host->Ptr, Dev->Dev->Address*16 + op->Endpt->EndpointNum, 0, USB_AsyncCallback, op, DataBuf, Length @@ -93,7 +85,7 @@ void USB_RecvDataA(tUSBInterface *Dev, int Endpoint, int Length, void *DataBuf, // Log_Warning("USB", "TODO: Implement USB_RecvDataA"); } -void USB_AsyncCallback(void *Ptr, void *Buf, int Length) +void USB_AsyncCallback(void *Ptr, void *Buf, size_t Length) { tAsyncOp *op = Ptr; op->Length = Length; @@ -114,6 +106,8 @@ void USB_AsyncThread(void *Unused) iface->Driver->Endpoints[op->Endpt->EndpointIdx].DataAvail( iface, op->Endpt->EndpointIdx, op->Length, op->Data); + + free(op); } }