X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FCore%2Finclude%2Fusb_host.h;h=7806e1bcf1f091b2bf4a42deb006cdccb1d96775;hb=7e72bedb501f047d214cbe97d35c48bb181e169d;hp=eda42cf985738e75b0150a8c097b92b23a8030a5;hpb=06f200335c3bcbd68c6df92589d8b17b73ac3679;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/Core/include/usb_host.h b/KernelLand/Modules/USB/Core/include/usb_host.h index eda42cf9..7806e1bc 100644 --- a/KernelLand/Modules/USB/Core/include/usb_host.h +++ b/KernelLand/Modules/USB/Core/include/usb_host.h @@ -13,26 +13,48 @@ typedef struct sUSBHostDef tUSBHostDef; -typedef void (*tUSBHostCb)(void *DataPtr, void *Data, int Length); - -typedef void *(*tUSBHostOp)(void *Ptr, int Dest, int DataTgl, tUSBHostCb CB, void *CbData, void *Data, size_t Length); +typedef void (*tUSBHostCb)(void *DataPtr, void *Data, size_t Length); + +typedef void *(*tUSBInitInt)(void *Ptr, int Endpt, int bOutbound, int Period, tUSBHostCb Cb, void *CbData, void *Buf, size_t Len); +typedef void *(*tUSBInit)(void *Ptr, int Endpt, size_t MaxPacketSize); +typedef void *(*tUSBDataOp)(void *Dest, tUSBHostCb Cb, void *CbData, void *Data, size_t Length); + +typedef void *(*tUSBControlOp)(void *Ptr, void *Endpt, tUSBHostCb Cb, void *CbData, + int bOutbound, // (1) SETUP, OUT, IN vs (0) SETUP, IN, OUT + const void *SetupData, size_t SetupLength, + const void *OutData, size_t OutLength, + void *InData, size_t InLength + ); +typedef void *(*tUSBBulkOp)(void *Ptr, void *Endpt, tUSBHostCb Cb, void *CbData, + int bOutbound, void *Data, size_t Length + ); +typedef void *(*tUSBIsochOp)(void *Ptr, void *Endpt, tUSBHostCb Cb, void *CbData, + int bOutbound, void *Data, size_t Length, int When + ); /** * \brief Defines a USB Host Controller type */ struct sUSBHostDef { - tUSBHostOp SendIN; - tUSBHostOp SendOUT; - tUSBHostOp SendSETUP; - - /** - * \brief Check if an operation has completed - * \note Only valid to call if CB passed was ERRPTR - */ - int (*IsOpComplete)(void *Ptr, void *OpPtr); - + tUSBInitInt InitInterrupt; + tUSBInit InitIsoch; + tUSBInit InitControl; + tUSBInit InitBulk; + void (*RemEndpoint)(void *Ptr, void *Handle); + + // NOTE: If \a Cb is ERRPTR, the handle returned must be free'd by the calling code + // otherwise the controller will free it once done + tUSBIsochOp SendIsoch; + tUSBControlOp SendControl; + tUSBBulkOp SendBulk; + void (*FreeOp)(void *Ptr, void *Handle); + + // Root hub stuff void (*CheckPorts)(void *Ptr); + void (*SetPortFeature)(void *Ptr, int PortNum, int Feat); + void (*ClearPortFeature)(void *Ptr, int PortNum, int Feat); + int (*GetPortStatus)(void *Ptr, int PortNum, int Flag); }; extern tUSBHub *USB_RegisterHost(tUSBHostDef *HostDef, void *ControllerPtr, int nPorts);