AM261x MCU+ SDK: pcd.h File Reference

| AM261x MCU+ SDK 26.00.00 |

Data Structures | Macros | Enumerations | Functions
pcd.h File Reference
APIs for SOC Specific Device Drivers » APIs for USB » APIs for Synopsys driver

## Introduction

This file contains the structures, constants, and interfaces for the Perpherial Contoller Driver (PCD).

The Peripheral Controller Driver (PCD) for Linux will implement the Gadget API, so that the existing Gadget drivers can be used. For the Mass Storage function, the File-backed USB Storage Gadget (FBS) driver will be used. The FBS driver supports the Control-Bulk (CB), Control-Bulk-Interrupt (CBI), and Bulk-Only transports.

Go to the source code of this file.

## Data Structures
struct | dwc_req_t
| Structure representing a USB transfer request. More...
struct | dwc_usb3_pcd_req_t
| DWC_usb3 request structure. More...
struct | dwc_ep_t
| The `dwc_ep` structure represents the state of a single EP when acting in device mode. It contains the data items needed for an EP to be activated and transfer packets. More...
union | dwc_setup_pkt_t
| Buffer used to store the SETUP packet for EP0. More...
struct | dwc_usb3_pcd_ep_t
| PCD Endpoint structure. This structure represents an endpoint (EP) in the Peripheral Controller Driver (PCD). More...
struct | dwc_hiber_scratchpad_array
| Structure representing an array of hibernation scratchpad DMA addresses. More...
struct | dwc_usb3_pcd_t
| DWC_usb3 PCD Structure. This structure encapsulates the data for the dwc_usb3 PCD. More...

## Macros
#define | DWC_MAX_TX_FIFOS 16
| Maximum number of Tx FIFOs. Depends on the RTL configuration. No way to probe the value at runtime. More...
#define | DWC_MAX_PHYS_EP 32
| Maximum number of physical EPs. Depends on the RTL configuration. No way to probe the value at runtime. More...
#define | DWC_MAX_DATA_BUFS 13
| Maximum number of data buffers per TRB. OS/application specific. More...
#define | DWC_MAX_EPS 5U
| Maximum number of EPs, defined by USB spec. More...
#define | DWC_MAX_EP0_SIZE 512
| Maxpacket size for EP0, defined by USB3 spec. More...
#define | DWC_MAX_PACKET_SIZE 1024
| Maxpacket size for any EP, defined by USB3 spec. More...
#define | DWC_PCD_REQ_ZERO 0x001U
#define | DWC_PCD_REQ_STARTED 0x002U
#define | DWC_PCD_REQ_MAP_DMA 0x100
#define | DWC_PCD_REQ_IN 0x200
#define | dwc_usb3_pcd_ep_to_pcd(pcd_ep) ((pcd_ep)->dwc_ep.pcd)
| Macro to retrieve the PCD structure from a PCD endpoint. More...
#define | dwc_usb3_pcd_ep_num(pcd_ep) ((pcd_ep)->dwc_ep.num)
| Macro to retrieve the endpoint number from a PCD endpoint. More...
#define | dwc_usb3_pcd_ep_type(pcd_ep) ((pcd_ep)->dwc_ep.type)
| Macro to retrieve the endpoint type from a PCD endpoint. More...
#define | dwc_usb3_pcd_ep_is_in(pcd_ep) ((pcd_ep)->dwc_ep.is_in)
| Macro to check if the endpoint direction is IN. More...
#define | DWC_STATUS_BUF_SIZE 512U
#define | dwc_usb3_ep0_setup_desc(pcd) (pcd)->ep0_setup_desc
| Macro to retrieve the descriptor for SETUP packets for EP0. More...
#define | dwc_usb3_ep0_setup_desc_dma(pcd) (pcd)->ep0_setup_desc_dma
| Macro to retrieve the DMA address of the SETUP packet descriptor for EP0. More...
#define | dwc_usb3_ep0_out_desc(pcd) (pcd)->ep0_out_desc
| Macro to retrieve the descriptor for Data Out or Status Out phases for EP0. More...
#define | dwc_usb3_ep0_out_desc_dma(pcd) (pcd)->ep0_out_desc_dma
| Macro to retrieve the DMA address of the Data Out or Status Out descriptor for EP0. More...
#define | dwc_usb3_ep0_in_desc(pcd) (pcd)->ep0_in_desc
| Macro to retrieve the descriptor for Data In or Status In phases for EP0. More...
#define | dwc_usb3_ep0_in_desc_dma(pcd) (pcd)->ep0_in_desc_dma
| Macro to retrieve the DMA address of the Data In or Status In descriptor for EP0. More...
#define | dwc_usb3_ep0_setup_pkt(pcd) (pcd)->ep0_setup_pkt
| Macro to retrieve the SETUP packet buffer for EP0. More...
#define | dwc_usb3_ep0_setup_pkt_dma(pcd) (pcd)->ep0_setup_pkt_dma
| Macro to retrieve the DMA address of the SETUP packet buffer for EP0. More...

## Enumerations
enum | ep0state_e { EP0_IDLE, EP0_IN_DATA_PHASE, EP0_OUT_DATA_PHASE, EP0_IN_WAIT_GADGET, EP0_OUT_WAIT_GADGET, EP0_IN_WAIT_NRDY, EP0_OUT_WAIT_NRDY, EP0_IN_STATUS_PHASE, EP0_OUT_STATUS_PHASE, EP0_STALL }
| Enumeration representing the various states of Endpoint 0 (EP0). More...
enum | pcdstate_e { DWC_STATE_UNCONNECTED, DWC_STATE_DEFAULT, DWC_STATE_ADDRESSED, DWC_STATE_CONFIGURED }
| Enumeration representing the various states of the PCD. More...

## Functions
void | dwc_usb3_stop_all_xfers (dwc_usb3_pcd_t *pcd)
| Stop any active xfers on the non-EP0 endpoints. More...
void | dwc_usb3_complete_request (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, u32 event)
| This routine handles non-EP0 transfers. More...
dwc_usb3_pcd_ep_t * | dwc_usb3_get_out_ep (dwc_usb3_pcd_t *pcd, u32 ep_num)
| This routine returns a pointer to Out EP struct with number ep_num. More...
dwc_usb3_pcd_ep_t * | dwc_usb3_get_in_ep (dwc_usb3_pcd_t *pcd, u32 ep_num)
| This routine returns a pointer to In EP struct with number ep_num. More...
void | dwc_usb3_handle_ep_intr (dwc_usb3_pcd_t *pcd, u32 physep, u32 event)
| This interrupt indicates that an EP has a pending interrupt. More...
int | dwc_usb3_handle_dev_intr (dwc_usb3_pcd_t *pcd, u32 event)
| PCD interrupt handler. More...
void | dwc_usb3_handle_connect_done_intr (dwc_usb3_pcd_t *pcd)
| This interrupt occurs when a Connect Done is detected. Read the device status register and set the device speed in the data structure. Set up EP0 to receive SETUP packets. More...
void | dwc_enter_hibernation (dwc_usb3_pcd_t *pcd, int save_state)
| This routine sends the core into hibernation, saving the core's runtime state if requested. More...
void | dwc_exit_hibernation_after_connect (dwc_usb3_pcd_t *pcd, int connected)
| This routine finishes exiting from hibernation once the device is connected. More...
int | dwc_exit_hibernation (dwc_usb3_pcd_t *pcd, int restore_state)
| This routine wakes the core from hibernation. More...
int | dwc_usb3_handle_pme_intr (struct dwc_usb3_device *dev)
void | dwc_usb3_power_ctl (struct dwc_usb3_device *dev, int on)
int | dwc_usb3_pcd_init (struct dwc_usb3_device *dev)
void | dwc_usb3_pcd_remove (struct dwc_usb3_device *dev)
dwc_usb3_dma_desc_t * | dwc_usb3_pcd_trb_alloc (dwc_usb3_pcd_ep_t *ep, int num_trbs, uByte trb_type, int iso_intvl, int link, dwc_dma_t *trbs_dma_ret)
| This routine allocates the TRBs for an EP. More...
void | dwc_usb3_pcd_trb_free (dwc_usb3_pcd_ep_t *ep)
| This routine frees the TRBs allocated by dwc_usb3_pcd_trb_alloc(). More...
void | dwc_usb3_pcd_fill_trbs (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *req)
| This routine assigns and fills in the TRBs for a request. More...
void | dwc_usb3_ep_activate (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, int restore)
| This routine activates an EP. The Device EP control registers for the EP are configured as defined in the EP structure. More...
int | dwc_usb3_pcd_ep_enable (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, const usb_endpoint_descriptor_t *ep_desc, const ss_endpoint_companion_descriptor_t *ep_comp)
| This routine is called by the Function Driver for each EP (except EP0) to be configured for the current configuration (SET_CONFIGURATION). More...
int | dwc_usb3_pcd_ep_disable (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| This routine is called when an EP (except EP0) is disabled due to disconnect or change in configuration. Any pending requests will terminate with a status of -ESHUTDOWN. More...
int | dwc_usb3_pcd_ep_submit_req (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *req, u32 req_flags)
| This routine submits an I/O Request to an EP. More...
void | dwc_usb3_pcd_ep_cancel_req (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *req, u32 stream)
| This routine cancels an I/O request from an EP. More...
void | dwc_usb3_pcd_request_done (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *req, int status)
| This routine completes a request. It calls the request callback. More...
void | dwc_usb3_pcd_ep_start_transfer (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *req, u32 event)
| This routine does the setup for a data transfer for an EP and starts the transfer. More...
void | dwc_usb3_pcd_ep_set_stall (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| Set the EP to STALL. More...
void | dwc_usb3_pcd_ep_clear_stall (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| Clear the EP STALL. More...
void | dwc_usb3_pcd_ep_set_halt (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, int value)
| This function sets or clears a stall condition on an endpoint. More...
void | dwc_usb3_ep0_activate (dwc_usb3_pcd_t *pcd, int restore)
| This routine configures EP0 OUT to receive SETUP packets and configures EP0 IN for transmitting packets. More...
void | dwc_usb3_pcd_ep0_out_start (dwc_usb3_pcd_t *pcd)
| This routine sets up a SETUP stage transfer for EP0 and starts the transfer. More...
void | dwc_usb3_pcd_ep0_start_transfer (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_req_t *req)
| This routine sets up a data/status stage transfer for EP0 and starts the transfer. If pcd->ep0->dwc_ep.is_in is 0 it will be an OUT transfer, otherwise it will be an IN transfer. More...
void | dwc_usb3_pcd_ep0_data_stage (dwc_usb3_pcd_t *pcd, int length)
| This routine starts the data stage of a 3-stage control command. pcd->ep0state must be set to EP0_OUT_DATA_PHASE or EP0_IN_DATA_PHASE, and pcd->ep0->dwc_ep.is_in must be set to 0 or 1 before calling this routine. For IN, the data to be sent must be placed in pcd->ep0_status_buf before the call. More...
void | dwc_usb3_handle_ep0_xfer (dwc_usb3_pcd_t *pcd, u32 event)
| This routine handles EP0 transfers. More...
dwc_usb3_pcd_ep_t * | dwc_usb3_pcd_get_ep_by_addr (dwc_usb3_pcd_t *pcd, u16 idx)
| This routine gets a pointer to an EP from the wIndex address value of the control request. More...
int | dwc_usb3_pcd_get_frame_number (dwc_usb3_pcd_t *pcd)
| Gets the current USB frame number. More...
int | dwc_usb3_pcd_isoc_ep_hiber_restart (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| After hibernation, this function restarts the transfer using the TRB address that was active before hibernation. The address is stored in the hiber_desc_idx field of the dwc_ep structure during the wakeup process. More...
void | dwc_usb3_pcd_stop (dwc_usb3_pcd_t *pcd)
| This routine is called when the Device is disconnected. It stops any active requests and informs the Function Driver of the disconnect. More...
int | dwc_usb3_gadget_connect (dwc_usb3_pcd_t *pcd, int speed)
| This routine receives Connect notifications from the PCD. More...
int | dwc_usb3_gadget_disconnect (dwc_usb3_pcd_t *pcd)
| This routine receives Disconnect notifications from the PCD. More...
int | dwc_usb3_gadget_suspend (dwc_usb3_pcd_t *pcd)
| This routine receives Suspend notifications from the PCD. More...
int | dwc_usb3_gadget_resume (dwc_usb3_pcd_t *pcd)
| This routine receives Resume notifications from the PCD. More...
int | dwc_usb3_gadget_setup (dwc_usb3_pcd_t *pcd, usb_device_request_t *ctrl)
| This routine receives Setup request notifications from the PCD. More...
int | dwc_usb3_gadget_complete (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, dwc_usb3_pcd_req_t *pcd_req, int status)
| This routine receives Transfer Complete notifications from the PCD. More...
void * | dwc_usb3_gadget_alloc_dma (dwc_usb3_pcd_ep_t *ep, int size, dwc_dma_t *mem_dma_ret)
| This routine allocates coherent DMA memory. It is used by the PCD to allocate memory for TRBs. The block of memory returned must have a start address aligned to a 16-byte boundary. More...
void | dwc_usb3_gadget_free_dma (dwc_usb3_pcd_ep_t *ep, int size, void *mem, dwc_dma_t mem_dma)
| This routine frees DMA memory allocated by dwc_usb3_gadget_alloc_dma(). More...
dwc_usb3_pcd_req_t * | dwc_usb3_gadget_get_request (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| This routine returns the PCD request corresponding to the current transfer request for an endpoint. The current transfer request is the first request submitted that has not been completed yet. More...
void | dwc_usb3_gadget_start_next_request (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| This routine checks to see if there is another transfer request waiting on an endpoint that has not been started yet. If so then that transfer is started. More...
void | dwc_usb3_gadget_isoc_ep_start (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep, u32 event)
| This routine starts an Isoc EP running at the proper interval, after receiving the initial XferNrdy event. More...
void | dwc_usb3_gadget_request_nuke (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| This routine terminates all requests which are pending on an endpoint. More...
void | dwc_usb3_gadget_set_ep_not_started (dwc_usb3_pcd_t *pcd, dwc_usb3_pcd_ep_t *ep)
| This routine marks all pending requests for an EP as not started. More...
void | dwc_usb3_task_schedule (struct tasklet_struct *tasklet)
| OS-specific routines called from core code. More...

## Macro Definition Documentation

## ◆ DWC_PCD_REQ_ZERO

#define DWC_PCD_REQ_ZERO 0x001U

Flag indicating zero-length packet.

## ◆ DWC_PCD_REQ_STARTED

#define DWC_PCD_REQ_STARTED 0x002U

Flag indicating the request has started.

## ◆ DWC_PCD_REQ_MAP_DMA

#define DWC_PCD_REQ_MAP_DMA 0x100

Flag indicating DMA mapping is required.

## ◆ DWC_PCD_REQ_IN

#define DWC_PCD_REQ_IN 0x200

Flag indicating an IN transfer.

## ◆ DWC_STATUS_BUF_SIZE

#define DWC_STATUS_BUF_SIZE 512U