13948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* 23948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * drivers/usb/gadget/qe_udc.h 33948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * 43948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * Copyright (C) 2006-2008 Freescale Semiconductor, Inc. All rights reserved. 53948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * 63948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * Xiaobo Xie <X.Xie@freescale.com> 73948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * Li Yang <leoli@freescale.com> 83948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * 93948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * Description: 103948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * Freescale USB device/endpoint management registers 113948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * 123948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * This program is free software; you can redistribute it and/or modify 133948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * it under the terms of the GNU General Public License as published by 143948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * the Free Software Foundation; either version 2 of the License, or (at 153948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * your option) any later version. 163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang */ 173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 183948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#ifndef __FSL_QE_UDC_H 193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define __FSL_QE_UDC_H 203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* SoC type */ 223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define PORT_CPM 0 233948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define PORT_QE 1 243948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 253948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MAX_ENDPOINTS 4 263948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MAX_PIPES USB_MAX_ENDPOINTS 273948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EP0_MAX_SIZE 64 283948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MAX_CTRL_PAYLOAD 0x4000 293948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BDRING_LEN 16 303948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BDRING_LEN_RX 256 313948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BDRING_LEN_TX 16 323948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define MIN_EMPTY_BDS 128 333948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define MAX_DATA_BDS 8 343948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CRC_SIZE 2 353948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_DIR_BOTH 0x88 363948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_BUF_MAXSIZE 0x800 373948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EP_PARA_ALIGNMENT 32 383948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 393948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Mode Register bit define */ 403948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_EN 0x01 413948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_HOST 0x02 423948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_TEST 0x04 433948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_SFTE 0x08 443948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_RESUME 0x40 453948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_MODE_LSS 0x80 463948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 473948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Slave Address Register Mask */ 483948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_SLVADDR_MASK 0x7F 493948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 503948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Endpoint register define */ 513948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EPNUM_MASK 0xF000 523948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EPNUM_SHIFT 12 533948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 543948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_TRANS_MODE_SHIFT 8 553948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_TRANS_CTR 0x0000 563948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_TRANS_INT 0x0100 573948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_TRANS_BULK 0x0200 583948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_TRANS_ISO 0x0300 593948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 603948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EP_MF 0x0020 613948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_EP_RTE 0x0010 623948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 633948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_SHIFT 2 643948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_MASK 0x000c 653948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_NORMAL 0x0 663948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_IGNORE_IN 0x0004 673948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_NACK 0x0008 683948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_THS_STALL 0x000c 693948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 703948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_SHIFT 0 713948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_MASK 0x0003 723948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_NORMAL 0x0 733948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_IGNORE_OUT 0x0001 743948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_NACK 0x0002 753948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RHS_STALL 0x0003 763948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 773948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_RTHS_MASK 0x000f 783948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 793948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Command Register define */ 803948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CMD_STR_FIFO 0x80 813948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CMD_FLUSH_FIFO 0x40 823948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CMD_ISFT 0x20 833948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CMD_DSFT 0x10 843948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_CMD_EP_MASK 0x03 853948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 863948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Event and Mask Register define */ 873948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_MSF_MASK 0x0800 883948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_SFT_MASK 0x0400 893948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_RESET_MASK 0x0200 903948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_IDLE_MASK 0x0100 913948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXE4_MASK 0x0080 923948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXE3_MASK 0x0040 933948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXE2_MASK 0x0020 943948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXE1_MASK 0x0010 953948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_SOF_MASK 0x0008 963948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_BSY_MASK 0x0004 973948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXB_MASK 0x0002 983948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_RXB_MASK 0x0001 993948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USBER_ALL_CLEAR 0x0fff 1003948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1013948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_DEFAULT_DEVICE (USB_E_RESET_MASK | USB_E_TXE4_MASK | \ 1023948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_E_TXE3_MASK | USB_E_TXE2_MASK | \ 1033948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_E_TXE1_MASK | USB_E_BSY_MASK | \ 1043948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_E_TXB_MASK | USB_E_RXB_MASK) 1053948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1063948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_E_TXE_MASK (USB_E_TXE4_MASK | USB_E_TXE3_MASK|\ 1073948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_E_TXE2_MASK | USB_E_TXE1_MASK) 1083948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Status Register define */ 1093948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_IDLE_STATUS_MASK 0x01 1103948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1113948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Start of Frame Timer */ 1123948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_USSFT_MASK 0x3FFF 1133948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1143948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* USB Frame Number Register */ 1153948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_USFRN_MASK 0xFFFF 1163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct usb_device_para{ 1183948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 epptr[4]; 1193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 rstate; 1203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 rptr; 1213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 frame_n; 1223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 rbcnt; 1233948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 rtemp; 1243948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 rxusb_data; 1253948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 rxuptr; 1263948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 reso[2]; 1273948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 softbl; 1283948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 sofucrctemp; 1293948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 1303948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1313948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct usb_ep_para{ 1323948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 rbase; 1333948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 tbase; 1343948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 rbmr; 1353948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 tbmr; 1363948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 mrblr; 1373948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 rbptr; 1383948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 tbptr; 1393948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 tstate; 1403948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 tptr; 1413948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 tcrc; 1423948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 tbcnt; 1433948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 ttemp; 1443948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 txusbu_ptr; 1453948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 reserve[2]; 1463948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 1473948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1483948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_GBL 0x20 1493948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_BO_MASK 0x18 1503948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_BO_SHIFT 0x3 1513948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_BE 0x2 1523948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_CETM 0x04 1533948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USB_BUSMODE_DTB 0x02 1543948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1553948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Endpoint basic handle */ 1563948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ep_index(EP) ((EP)->desc->bEndpointAddress & 0xF) 1573948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ep_maxpacket(EP) ((EP)->ep.maxpacket) 1583948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ep_is_in(EP) ((ep_index(EP) == 0) ? (EP->udc->ep0_dir == \ 1593948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_DIR_IN) : ((EP)->desc->bEndpointAddress \ 1603948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang & USB_DIR_IN) == USB_DIR_IN) 1613948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1623948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* ep0 transfer state */ 1633948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define WAIT_FOR_SETUP 0 1643948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define DATA_STATE_XMIT 1 1653948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define DATA_STATE_NEED_ZLP 2 1663948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define WAIT_FOR_OUT_STATUS 3 1673948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define DATA_STATE_RECV 4 1683948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1693948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* ep tramsfer mode */ 1703948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USBP_TM_CTL 0 1713948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USBP_TM_ISO 1 1723948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USBP_TM_BULK 2 1733948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define USBP_TM_INT 3 1743948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1753948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/*----------------------------------------------------------------------------- 1763948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB RX And TX DATA Frame 1773948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang -----------------------------------------------------------------------------*/ 1783948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct qe_frame{ 1793948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 *data; 1803948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 len; 1813948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 status; 1823948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 info; 1833948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1843948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang void *privdata; 1853948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct list_head node; 1863948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 1873948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 1883948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Frame structure, info field. */ 1893948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define PID_DATA0 0x80000000 /* Data toggle zero */ 1903948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define PID_DATA1 0x40000000 /* Data toggle one */ 1913948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define PID_SETUP 0x20000000 /* setup bit */ 1923948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define SETUP_STATUS 0x10000000 /* setup status bit */ 1933948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define SETADDR_STATUS 0x08000000 /* setupup address status bit */ 1943948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define NO_REQ 0x04000000 /* Frame without request */ 1953948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define HOST_DATA 0x02000000 /* Host data frame */ 1963948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define FIRST_PACKET_IN_FRAME 0x01000000 /* first packet in the frame */ 1973948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define TOKEN_FRAME 0x00800000 /* Host token frame */ 1983948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ZLP 0x00400000 /* Zero length packet */ 1993948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define IN_TOKEN_FRAME 0x00200000 /* In token package */ 2003948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define OUT_TOKEN_FRAME 0x00100000 /* Out token package */ 2013948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define SETUP_TOKEN_FRAME 0x00080000 /* Setup token package */ 2023948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define STALL_FRAME 0x00040000 /* Stall handshake */ 2033948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define NACK_FRAME 0x00020000 /* Nack handshake */ 2043948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define NO_PID 0x00010000 /* No send PID */ 2053948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define NO_CRC 0x00008000 /* No send CRC */ 2063948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define HOST_COMMAND 0x00004000 /* Host command frame */ 2073948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2083948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Frame status field */ 2093948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Receive side */ 21074d1dc8d8d13fef55c33b49f06ab84eeebf967c4Weiping Pan(潘卫平)#define FRAME_OK 0x00000000 /* Frame transmitted or received OK */ 21125985edcedea6396277003854657b5f3cb31a628Lucas De Marchi#define FRAME_ERROR 0x80000000 /* Error occurred on frame */ 2123948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define START_FRAME_LOST 0x40000000 /* START_FRAME_LOST */ 2133948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define END_FRAME_LOST 0x20000000 /* END_FRAME_LOST */ 2143948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define RX_ER_NONOCT 0x10000000 /* Rx Non Octet Aligned Packet */ 2153948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define RX_ER_BITSTUFF 0x08000000 /* Frame Aborted --Received packet 2163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang with bit stuff error */ 2173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define RX_ER_CRC 0x04000000 /* Received packet with CRC error */ 21825985edcedea6396277003854657b5f3cb31a628Lucas De Marchi#define RX_ER_OVERUN 0x02000000 /* Over-run occurred on reception */ 2193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define RX_ER_PID 0x01000000 /* Wrong PID received */ 2203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Tranmit side */ 2213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define TX_ER_NAK 0x00800000 /* Received NAK handshake */ 2223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define TX_ER_STALL 0x00400000 /* Received STALL handshake */ 2233948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define TX_ER_TIMEOUT 0x00200000 /* Transmit time out */ 2243948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define TX_ER_UNDERUN 0x00100000 /* Transmit underrun */ 2253948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define FRAME_INPROGRESS 0x00080000 /* Frame is being transmitted */ 2263948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ER_DATA_UNDERUN 0x00040000 /* Frame is shorter then expected */ 2273948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define ER_DATA_OVERUN 0x00020000 /* Frame is longer then expected */ 2283948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2293948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* QE USB frame operation functions */ 2303948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_get_length(frm) (frm->len) 2313948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_set_length(frm, leng) (frm->len = leng) 2323948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_get_data(frm) (frm->data) 2333948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_set_data(frm, dat) (frm->data = dat) 2343948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_get_info(frm) (frm->info) 2353948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_set_info(frm, inf) (frm->info = inf) 2363948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_get_status(frm) (frm->status) 2373948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_set_status(frm, stat) (frm->status = stat) 2383948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_get_privdata(frm) (frm->privdata) 2393948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define frame_set_privdata(frm, dat) (frm->privdata = dat) 2403948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2413948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstatic inline void qe_frame_clean(struct qe_frame *frm) 2423948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang{ 2433948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang frame_set_data(frm, NULL); 2443948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang frame_set_length(frm, 0); 2453948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang frame_set_status(frm, FRAME_OK); 2463948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang frame_set_info(frm, 0); 2473948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang frame_set_privdata(frm, NULL); 2483948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang} 2493948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2503948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstatic inline void qe_frame_init(struct qe_frame *frm) 2513948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang{ 2523948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang qe_frame_clean(frm); 2533948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang INIT_LIST_HEAD(&(frm->node)); 2543948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang} 2553948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2563948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct qe_req { 2573948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_request req; 2583948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct list_head queue; 2593948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang /* ep_queue() func will add 2603948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang a request->queue into a udc_ep->queue 'd tail */ 2613948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_ep *ep; 2623948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned mapped:1; 2633948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 2643948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2653948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct qe_ep { 2663948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_ep ep; 2673948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct list_head queue; 2683948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_udc *udc; 2693948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang const struct usb_endpoint_descriptor *desc; 2703948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_gadget *gadget; 2713948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2723948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 state; 2733948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2743948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *rxbase; 2753948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *n_rxbd; 2763948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *e_rxbd; 2773948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2783948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *txbase; 2793948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *n_txbd; 2803948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_bd __iomem *c_txbd; 2813948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2823948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_frame *rxframe; 2833948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 *rxbuffer; 2843948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang dma_addr_t rxbuf_d; 2853948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 rxbufmap; 2863948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned char localnack; 2873948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang int has_data; 2883948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2893948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_frame *txframe; 2903948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_req *tx_req; 2913948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang int sent; /*data already sent */ 2923948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang int last; /*data sent in the last time*/ 2933948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 2943948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 dir; 2953948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 epnum; 2963948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 tm; /* transfer mode */ 2973948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 data01; 2983948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 init; 2993948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3003948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 already_seen; 3013948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 enable_tasklet; 3023948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 setup_stage; 3033948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 last_io; /* timestamp */ 3043948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3053948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang char name[14]; 3063948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3073948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned double_buf:1; 3083948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned stopped:1; 3093948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned fnf:1; 3103948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned has_dma:1; 3113948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3123948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 ackwait; 3133948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 dma_channel; 3143948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u16 dma_counter; 3153948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang int lch; 3163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct timer_list timer; 3183948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 3193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yangstruct qe_udc { 3213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_gadget gadget; 3223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_gadget_driver *driver; 3233948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct device *dev; 3243948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_ep eps[USB_MAX_ENDPOINTS]; 3253948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_ctrlrequest local_setup_buff; 3263948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang spinlock_t lock; /* lock for set/config qe_udc */ 3273948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned long soc_type; /* QE or CPM soc */ 3283948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3293948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct qe_req *status_req; /* ep0 status request */ 3303948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3313948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang /* USB and EP Parameter Block pointer */ 3323948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_device_para __iomem *usb_param; 3333948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_ep_para __iomem *ep_param[4]; 3343948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3353948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 max_pipes; /* Device max pipes */ 3363948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 max_use_endpts; /* Max endpointes to be used */ 3373948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 bus_reset; /* Device is bus reseting */ 3383948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 resume_state; /* USB state to resume*/ 3393948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 usb_state; /* USB current state */ 3403948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 usb_next_state; /* USB next state */ 3413948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 ep0_state; /* Enpoint zero state */ 3423948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 ep0_dir; /* Enpoint zero direction: can be 3433948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang USB_DIR_IN or USB_DIR_OUT*/ 3443948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 usb_sof_count; /* SOF count */ 3453948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 errors; /* USB ERRORs count */ 3463948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3473948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 *tmpbuf; 3483948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 c_start; 3493948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u32 c_end; 3503948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3513948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 *nullbuf; 352928dfa6c625c17d810ae3ee6c73dc37fc4b91bcdLi Yang u8 *statusbuf; 3533948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang dma_addr_t nullp; 3543948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 nullmap; 3553948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang u8 device_address; /* Device USB address */ 3563948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3573948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned int usb_clock; 3583948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang unsigned int usb_irq; 3593948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct usb_ctlr __iomem *usb_regs; 3603948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3613948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct tasklet_struct rx_tasklet; 3623948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3633948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang struct completion *done; /* to make sure release() is done */ 3643948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang}; 3653948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3663948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define EP_STATE_IDLE 0 3673948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define EP_STATE_NACK 1 3683948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define EP_STATE_STALL 2 3693948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3703948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* 3713948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * transmit BD's status 3723948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang */ 3733948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_R 0x80000000 /* ready bit */ 3743948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_W 0x20000000 /* wrap bit */ 3753948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_I 0x10000000 /* interrupt on completion */ 3763948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_L 0x08000000 /* last */ 3773948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_TC 0x04000000 /* transmit CRC */ 3783948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_CNF 0x02000000 /* wait for transmit confirm */ 3793948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_LSP 0x01000000 /* Low-speed transaction */ 3803948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_PID 0x00c00000 /* packet id */ 3813948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_NAK 0x00100000 /* No ack. */ 38225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi#define T_STAL 0x00080000 /* Stall received */ 3833948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_TO 0x00040000 /* time out */ 3843948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_UN 0x00020000 /* underrun */ 3853948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3863948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define DEVICE_T_ERROR (T_UN | T_TO) 3873948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define HOST_T_ERROR (T_UN | T_TO | T_NAK | T_STAL) 3883948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define DEVICE_T_BD_MASK DEVICE_T_ERROR 3893948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define HOST_T_BD_MASK HOST_T_ERROR 3903948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3913948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_PID_SHIFT 6 3923948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_PID_DATA0 0x00800000 /* Data 0 toggle */ 3933948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define T_PID_DATA1 0x00c00000 /* Data 1 toggle */ 3943948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 3953948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* 3963948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang * receive BD's status 3973948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang */ 3983948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_E 0x80000000 /* buffer empty */ 3993948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_W 0x20000000 /* wrap bit */ 4003948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_I 0x10000000 /* interrupt on reception */ 4013948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_L 0x08000000 /* last */ 4023948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_F 0x04000000 /* first */ 4033948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_PID 0x00c00000 /* packet id */ 4043948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_NO 0x00100000 /* Rx Non Octet Aligned Packet */ 4053948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_AB 0x00080000 /* Frame Aborted */ 4063948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_CR 0x00040000 /* CRC Error */ 4073948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_OV 0x00020000 /* Overrun */ 4083948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 4093948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_ERROR (R_NO | R_AB | R_CR | R_OV) 4103948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_BD_MASK R_ERROR 4113948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 4123948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_PID_DATA0 0x00000000 4133948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_PID_DATA1 0x00400000 4143948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define R_PID_SETUP 0x00800000 4153948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 4163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define CPM_USB_STOP_TX 0x2e600000 4173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define CPM_USB_RESTART_TX 0x2e600000 4183948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define CPM_USB_STOP_TX_OPCODE 0x0a 4193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define CPM_USB_RESTART_TX_OPCODE 0x0b 4203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define CPM_USB_EP_SHIFT 5 4213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang 4223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#endif /* __FSL_QE_UDC_H */ 423