usb
Vitis Drivers API Documentation
xusb_storage_polled_mode.c File Reference

Overview

This file contains Mass storage device application related functions implemented in polled mode.

Note
The example is tested on MicroBlaze, with caches included in the H/W design. This example works for USB high speed interface only.
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...
 

Function Documentation

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.

Parameters
CallBackRefis the callback reference passed from the caller function, which in our case is a pointer to the driver instance.
EpNumis the end point number.
IntrStatusis a bit mask indicating pending interrupts.
Returns
None.
Note
EpNum is not used in this function as the handler is attached specific to end point zero. This parameter is useful when a single handler is used for processing all end point 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.

Parameters
CallBackRefis the callback reference passed from the caller function, which in our case is a pointer to the driver instance.
IntrStatusis a bit mask indicating pending interrupts.
Returns
None.
Note
EpNum is not used in this function as the handler is attached specific to end point one. This parameter is useful when a single handler is used for processing all end point 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.

Parameters
CallBackRefis the callback reference passed from the caller function, which in our case is a pointer to the driver instance.
IntrStatusis a bit mask indicating pending interrupts.
Returns
None.
Note
EpNum is not used in this function as the handler is attached specific to end point two. This parameter is useful when a single handler is used for processing all end point 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.

Parameters
InstancePtris a pointer to the XUsb instance of the controller.
Returns
None.
Note
None.

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.

  • EP0 : CONTROL end point, Bidirectional, Packet size 64 bytes.
  • EP1 : NON_ISOCHRONOUS, BULK_IN, packet size 512 bytes.
  • EP2 : NON_ISOCHRONOUS, BULK_OUT, packet size 512 bytes
Parameters
InstancePtris a pointer to the XUsb instance.
Returns
None.
Note
None.

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().

void MassStorageReset ( XUsb InstancePtr)

This routine is called when a RESET class command is received.

Parameters
InstancePtris a pointer to the XUsb instance of the controller.
Returns
None.
Note
None.

References SetupControlWriteStatusStage().

void ProcessRxCmd ( XUsb InstancePtr)

This function processes mass storage specific commands and sends the required response.

Parameters
InstancePtris a pointer to the XUsb instance.
Returns
None.
Note
None.

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.

Parameters
InstancePtris a pointer to the XUsb instance.
pCmdBlockis a pointer to the Mass Storage Command Block wrapper.
pStatusBlockis a pointer to the Mass Storage Status wrapper.
Returns
None.
Note
None.

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.

Parameters
CallBackRefis the callback reference passed from to the function, which in our case is a pointer to the driver instance.
IntrStatusis a bit mask indicating pending interrupts.
Returns
None.
Note
None.

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.

Parameters
InstancePtris a pointer to the XUsb instance.
pCmdBlockis a pointer to the Mass Storage Command Block wrapper.
pStatusBlockis a pointer to the Mass Storage Status wrapper.
Returns
None.
Note
None.

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.