usb
Vitis Drivers API Documentation
xusb_storage.h File Reference

Overview

This file contains the constants, type definitions, variables and function prototypes used in the mass storage application.

Note
None.
MODIFICATION HISTORY:
Ver   Who  Date     Changes


1.00a hvm 2/12/07 First release 1.01a hvm 10/2/08 The variables IntLba in Lba and IntBlockCount in BlockCount are declared as volatile. 2.00a hvm 03/12/09 Modified the RAMDISKSECTORS constant value from 0x4000 to 0x400 as this would reduce the code size and the example can run in a smaller memory systems. 3.02a hvm 08/16/10 Updated with the little endian support changes. 4.00a hvm 10/25/10 Updated with DmaIntrHandler function prototype. Updated INQUIRY command with pad values. 4.00a hvm 06/01/11 Modified the USB Mass Storage Command Status Wrapper structure. The union for Signature is removed and only the array definition of Signature is retained. CR611761 fix. 4.00a hvm 06/24/11 Updated the INQUIRY command fourth parameter value to 0. CR614794 4.01a hvm 08/11/11 Updated the RamDisk variable to have a 32 bit address alignment. 4.01a hvm 09/14/11 Fixed the compilation issue at the RamDisk variable declaration. CR625055. 5.6 pm 07/05/23 Added support for system device-tree flow.

 

Macros

#define EP_CONTROL   0
 Control Endpoint. More...
 
#define EP_ISOCHRONOUS   1
 Isochronous Endpoint. More...
 
#define EP_BULK   2
 Bulk Endpoint. More...
 
#define EP_INTERRUPT   3
 Interrupt Endpoint. More...
 

Functions

void InitUsbInterface (XUsb *InstancePtr)
 This is the USB initialization function. More...
 
void UsbIfIntrHandler (void *CallBackRef, u32 IntrStatus)
 This function is the interrupt handler for the USB mass storage device application. More...
 
void Ep0IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus)
 This function is the interrupt handler for the USB End point Zero events. More...
 
void Ep1IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus)
 This function is the interrupt handler for the USB End point one events. More...
 
void Ep2IntrHandler (void *CallBackRef, u8 EpNum, u32 IntrStatus)
 This function is the interrupt handler for 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...
 

Macro Definition Documentation

#define EP_BULK   2

Bulk Endpoint.

#define EP_CONTROL   0

Control Endpoint.

#define EP_INTERRUPT   3

Interrupt Endpoint.

#define EP_ISOCHRONOUS   1

Isochronous Endpoint.

Function Documentation

void Ep0IntrHandler ( void *  CallBackRef,
u8  EpNum,
u32  IntrStatus 
)

This function is the interrupt handler for the USB End point Zero events.

Parameters
CallBackRefis the callback reference passed from the interrupt. handler, 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.

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 XUsb_Config::BaseAddress, Chapter9(), XUsb::Config, XUsb::EndPointOffset, EP0ProcessInToken(), EP0ProcessOutToken(), GetMaxLUN(), MassStorageReset(), XUSB_BUFFREADY_EP0_BUFF_MASK, XUSB_BUFFREADY_OFFSET, XUSB_EP_CFG_DATA_TOGGLE_MASK, XUsb_EpStall(), XUsb_IntrEnable(), XUsb_ReadReg, 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, XUSB_STATUS_SUSPEND_MASK, and XUsb_WriteReg.

Referenced by main(), UsbKbdExample(), and UsbMouseExample().

void Ep1IntrHandler ( void *  CallBackRef,
u8  EpNum,
u32  IntrStatus 
)

This function is the interrupt handler for the USB End point one events.

Parameters
CallBackRefis the callback reference passed from the interrupt handler, 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 one. This parameter is useful when a single handler is used for processing all end point interrupts.

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::Buffer0Count, XUsb_EpConfig::Buffer0Ready, XUsb_EpConfig::Buffer1Count, XUsb_EpConfig::Buffer1Ready, XUsb::Config, XUsb_DeviceConfig::CurrentSpeed, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb::EndPointOffset, XUsb_DeviceConfig::Ep, ReadTransfer(), XUSB_BUFFREADY_EP1_BUFF1_MASK, XUSB_BUFFREADY_EP1_BUFF2_MASK, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUSB_EP_BUF0COUNT_OFFSET, XUSB_EP_BUF1COUNT_OFFSET, XUSB_EP_HIGH_SPEED, XUsb_EpDataSend(), and XUsb_ReadReg.

Referenced by main(), UsbKbdExample(), and UsbMouseExample().

void Ep2IntrHandler ( void *  CallBackRef,
u8  EpNum,
u32  IntrStatus 
)

This function is the interrupt handler for the USB End point two events.

Parameters
CallBackRefis the callback reference passed from the interrupt handler, 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 two. This parameter is useful when a single handler is used for processing all end point interrupts.

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.

Referenced by main().

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.

Referenced by Ep0IntrHandler().

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.

This is the USB initialization function.

The following is the configuration.

  • EP0 : CONTROL end point, Bidirectional, Packet size 64 bytes.
  • EP1 : NON_ISOCHRONOUS, INTERRUPT_IN, packet size of 16 bytes.
Parameters
InstancePtris a pointer to the XUsb instance.
Returns
None.
Note
None.

This example initializes the device for Microphone Application. The following configuration is done.

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

This example initializes the USB device for USB mouse example. The following configuration is done.

  • EP0 : CONTROL end point, Bidirectional, Packet size 64 bytes.
  • EP1 : NON_ISOCHRONOUS, INTERRUPT_IN, packet size of 16 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.

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

Referenced by Ep0IntrHandler().

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.

Referenced by DmaIntrHandler(), and main().

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.

Referenced by ProcessRxCmd().

void UsbIfIntrHandler ( void *  CallBackRef,
u32  IntrStatus 
)

This function is the interrupt handler for the USB mass storage device application.

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

This function is the interrupt handler for the USB mass storage device application.

Parameters
CallBackRefis the callback reference passed from the interrupt handler, which in our case is a pointer to the driver instance.
IntrStatusis a bit mask indicating pending interrupts.
Returns
None.
Note
Each interrupt source is disabled upon reception. This is to avoid the repetitive occurrence of the same event. This is done because these event conditions exist for few milliseconds.

This function is the interrupt handler for the USB mass storage device application.

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

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.

Referenced by main(), UsbKbdExample(), and UsbMouseExample().

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::CurrentSpeed, XUsb::DeviceConfig, XUsb_Config::DmaEnabled, XUsb_DeviceConfig::Status, XUSB_DISCONNECTED, XUSB_DMA_DMASR_BUSY, XUSB_DMA_STATUS_OFFSET, XUSB_EP_HIGH_SPEED, XUsb_EpDataRecv(), and XUsb_ReadReg.

Referenced by ProcessRxCmd().