usb
Vitis Drivers API Documentation
|
This file contains Mass storage device application related functions implemented in polled mode.
MODIFICATION HISTORY:
Ver Who Date Changes
4.00a hvm 05/24/11 Created based on the xusb_storage.c example. 4.01a bss 11/01/11 Modified UsbIfIntrHandler function to unconditionally reset when USB reset is asserted (CR 627574). 4.02a bss 04/05/12 Modified the sequence of Cache Flush and Invalidation. The cache flush happens just before the driver API EPDataSend is called. Similarly the cache invalidation is done after the call to EPDataReceive and after the dma transfer is over. 5.6 pm 07/05/23 Removed powerpc support. 5.6 pm 07/05/23 Added support for system device-tree flow.
Functions | |
int | main () |
This main function starts the USB application. More... | |
void | InitUsbInterface (XUsb *InstancePtr) |
This is the USB initialization function. More... | |
void | UsbIfIntrHandler (void *CallBackRef, u32 IntrStatus) |
This function processes the reset and disconnect conditions of the USB mass storage device. More... | |
void | Ep0IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus) |
This function processes the USB End point Zero events. More... | |
void | Ep1IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus) |
This function processes the USB End point one events. More... | |
void | Ep2IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus) |
This function processes the USB End point two events. More... | |
void | ProcessRxCmd (XUsb *InstancePtr) |
This function processes mass storage specific commands and sends the required response. More... | |
void | Read10 (XUsb *InstancePtr, PUSBCBW pCmdBlock, PUSBCSW pStatusBlock) |
This function implements the transmission of data from the device to the READ request from the USB Host. More... | |
void | Write10 (XUsb *InstancePtr, PUSBCBW pCmdBlock, PUSBCSW pStatusBlock) |
This function implements the reception of data in the USB device for the write request from the USB Host. More... | |
void | MassStorageReset (XUsb *InstancePtr) |
This routine is called when a RESET class command is received. More... | |
void | GetMaxLUN (XUsb *InstancePtr) |
This routine is called when a GETMAXLUN class command is received. More... | |
void Ep0IntrHandler | ( | void * | CallBackRef, |
u8 | EpNum, | ||
u32 | IntrStatus | ||
) |
This function processes the USB End point Zero events.
This function is the interrupt handler for the USB End point Zero events.
CallBackRef | is the callback reference passed from the caller function, which in our case is a pointer to the driver instance. |
EpNum | is the end point number. |
IntrStatus | is a bit mask indicating pending interrupts. |
References Chapter9(), EP0ProcessInToken(), EP0ProcessOutToken(), GetMaxLUN(), MassStorageReset(), XUSB_BUFFREADY_EP0_BUFF_MASK, XUsb_EpStall(), XUsb_IntrEnable(), XUSB_STATUS_DISCONNECT_MASK, XUSB_STATUS_FIFO_BUFF_FREE_MASK, XUSB_STATUS_FIFO_BUFF_RDY_MASK, XUSB_STATUS_RESET_MASK, XUSB_STATUS_SETUP_PACKET_MASK, and XUSB_STATUS_SUSPEND_MASK.
void Ep1IntrHandler | ( | void * | CallBackRef, |
u8 | EpNum, | ||
u32 | IntrStatus | ||
) |
This function processes the USB End point one events.
This function is the interrupt handler for the USB End point one events.
CallBackRef | is the callback reference passed from the caller function, which in our case is a pointer to the driver instance. |
IntrStatus | is a bit mask indicating pending interrupts. |
References XUsb_Config::BaseAddress, XUsb_EpConfig::Buffer0Ready, XUsb_EpConfig::Buffer1Ready, XUsb::Config, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb_DeviceConfig::Ep, ReadTransfer(), XUSB_BUFFREADY_EP1_BUFF1_MASK, XUSB_BUFFREADY_EP1_BUFF2_MASK, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUsb_EpDataSend(), and XUsb_ReadReg.
void Ep2IntrHandler | ( | void * | CallBackRef, |
u8 | EpNum, | ||
u32 | IntrStatus | ||
) |
This function processes the USB End point two events.
This function is the interrupt handler for the USB End point two events.
CallBackRef | is the callback reference passed from the caller function, which in our case is a pointer to the driver instance. |
IntrStatus | is a bit mask indicating pending interrupts. |
References XUsb_Config::BaseAddress, XUsb_EpConfig::Buffer0Ready, XUsb_EpConfig::Buffer1Ready, XUsb::Config, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb_DeviceConfig::Ep, WriteTransfer(), XUSB_BUFFREADY_EP2_BUFF1_MASK, XUSB_BUFFREADY_EP2_BUFF2_MASK, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUsb_EpDataRecv(), XUsb_EpDataSend(), XUsb_ReadReg, and XUSB_STATUS_OFFSET.
void GetMaxLUN | ( | XUsb * | InstancePtr | ) |
This routine is called when a GETMAXLUN class command is received.
InstancePtr | is a pointer to the XUsb instance of the controller. |
References XUsb_Config::BaseAddress, XUsb_EpConfig::Buffer0Ready, XUsb::Config, XUsb::DeviceConfig, XUsb::EndPointOffset, XUsb_DeviceConfig::Ep, XUsb_EpConfig::RamBase, XUSB_BUFFREADY_OFFSET, XUSB_EP_BUF0COUNT_OFFSET, and XUsb_WriteReg.
void InitUsbInterface | ( | XUsb * | InstancePtr | ) |
This is the USB initialization function.
This example initializes the device for Mass Storage Application. The following configuration is done.
InstancePtr | is a pointer to the XUsb instance. |
References XUsb_Config::BaseAddress, XUsb_EpConfig::Buffer0Ready, XUsb_EpConfig::Buffer1Ready, XUsb::Config, XUsb::DeviceConfig, XUsb_DeviceConfig::Ep, XUsb_EpConfig::EpType, XUsb_DeviceConfig::NumEndpoints, XUsb_EpConfig::OutIn, XUsb_EpConfig::RamBase, XUsb_EpConfig::Size, XUsb_DeviceConfig::Status, XUSB_BUFFREADY_OFFSET, XUsb_ConfigureDevice(), XUSB_EP_DIRECTION_IN, XUSB_EP_DIRECTION_OUT, XUsb_EpEnable(), XUSB_RESET, XUSB_STATUS_EP_BUFF2_SHIFT, and XUsb_WriteReg.
Referenced by main(), SetConfiguration(), UsbIfIntrHandler(), UsbKbdExample(), and UsbMouseExample().
int main | ( | void | ) |
This main function starts the USB application.
None. |
References XUsb_Config::BaseAddress, XUsb::Config, XUsb_DeviceConfig::CurrentConfiguration, XUsb_DeviceConfig::CurrentSpeed, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, Ep0IntrHandler(), Ep1IntrHandler(), Ep2IntrHandler(), InitUsbInterface(), ProcessRxCmd(), UsbIfIntrHandler(), XUsb_CfgInitialize(), XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUSB_EP_HIGH_SPEED, XUsb_EpDataRecv(), XUsb_LookupConfig(), XUsb_ReadReg, XUsb_SetDeviceAddress(), XUsb_Start(), XUSB_STATUS_DISCONNECT_MASK, XUSB_STATUS_EP0_BUFF1_COMP_MASK, XUSB_STATUS_EP1_BUFF1_COMP_MASK, XUSB_STATUS_EP1_BUFF2_COMP_MASK, XUSB_STATUS_EP2_BUFF1_COMP_MASK, XUSB_STATUS_EP2_BUFF2_COMP_MASK, XUSB_STATUS_OFFSET, and XUSB_STATUS_RESET_MASK.
void MassStorageReset | ( | XUsb * | InstancePtr | ) |
This routine is called when a RESET class command is received.
InstancePtr | is a pointer to the XUsb instance of the controller. |
References SetupControlWriteStatusStage().
void ProcessRxCmd | ( | XUsb * | InstancePtr | ) |
This function processes mass storage specific commands and sends the required response.
InstancePtr | is a pointer to the XUsb instance. |
References XUsb_Config::BaseAddress, XUsb::Config, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, Read10(), XUsb_DeviceConfig::Status, Write10(), XUSB_DISCONNECTED, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUsb_EpDataSend(), and XUsb_ReadReg.
void Read10 | ( | XUsb * | InstancePtr, |
PUSBCBW | pCmdBlock, | ||
PUSBCSW | pStatusBlock | ||
) |
This function implements the transmission of data from the device to the READ request from the USB Host.
InstancePtr | is a pointer to the XUsb instance. |
pCmdBlock | is a pointer to the Mass Storage Command Block wrapper. |
pStatusBlock | is a pointer to the Mass Storage Status wrapper. |
References XUsb_Config::BaseAddress, XUsb::Config, XUsb_DeviceConfig::CurrentSpeed, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb_DeviceConfig::Status, XUSB_DISCONNECTED, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUSB_EP_HIGH_SPEED, XUsb_EpDataSend(), and XUsb_ReadReg.
void UsbIfIntrHandler | ( | void * | CallBackRef, |
u32 | IntrStatus | ||
) |
This function processes the reset and disconnect conditions of the USB mass storage device.
This function is the interrupt handler for the USB mass storage device application.
CallBackRef | is the callback reference passed from to the function, which in our case is a pointer to the driver instance. |
IntrStatus | is a bit mask indicating pending interrupts. |
References XUsb_Config::BaseAddress, XUsb::Config, XUsb_DeviceConfig::CurrentConfiguration, XUsb::DeviceConfig, InitUsbInterface(), XUsb_DeviceConfig::Status, XUsb_IntrDisable(), XUsb_IntrEnable(), XUSB_RESET, XUsb_SetDeviceAddress(), XUsb_Start(), XUSB_STATUS_DISCONNECT_MASK, XUSB_STATUS_RESET_MASK, XUSB_STATUS_SUSPEND_MASK, XUsb_Stop(), and XUsb_WriteReg.
void Write10 | ( | XUsb * | InstancePtr, |
PUSBCBW | pCmdBlock, | ||
PUSBCSW | pStatusBlock | ||
) |
This function implements the reception of data in the USB device for the write request from the USB Host.
InstancePtr | is a pointer to the XUsb instance. |
pCmdBlock | is a pointer to the Mass Storage Command Block wrapper. |
pStatusBlock | is a pointer to the Mass Storage Status wrapper. |
References XUsb_Config::BaseAddress, XUsb::Config, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb_DeviceConfig::Status, XUSB_DISCONNECTED, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUsb_EpDataRecv(), and XUsb_ReadReg.