linux/include/linux/usb/usb338x.h
<<
>>
Prefs
   1/*
   2 * USB 338x super/high/full speed USB device controller.
   3 * Unlike many such controllers, this one talks PCI.
   4 *
   5 * Copyright (C) 2002 NetChip Technology, Inc. (http://www.netchip.com)
   6 * Copyright (C) 2003 David Brownell
   7 * Copyright (C) 2014 Ricardo Ribalda - Qtechnology/AS
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 *
  19 */
  20
  21#ifndef __LINUX_USB_USB338X_H
  22#define __LINUX_USB_USB338X_H
  23
  24#include <linux/usb/net2280.h>
  25
  26/*
  27 * Extra defined bits for net2280 registers
  28 */
  29#define     SCRATCH                           0x0b
  30
  31#define     DEFECT7374_FSM_FIELD                28
  32#define     SUPER_SPEED                          8
  33#define     DMA_REQUEST_OUTSTANDING              5
  34#define     DMA_PAUSE_DONE_INTERRUPT            26
  35#define     SET_ISOCHRONOUS_DELAY               24
  36#define     SET_SEL                             22
  37#define     SUPER_SPEED_MODE                     8
  38
  39/*ep_cfg*/
  40#define     MAX_BURST_SIZE                      24
  41#define     EP_FIFO_BYTE_COUNT                  16
  42#define     IN_ENDPOINT_ENABLE                  14
  43#define     IN_ENDPOINT_TYPE                    12
  44#define     OUT_ENDPOINT_ENABLE                 10
  45#define     OUT_ENDPOINT_TYPE                    8
  46#define USB3380_EP_CFG_MASK_IN ((0x3 << IN_ENDPOINT_TYPE) | \
  47                                BIT(IN_ENDPOINT_ENABLE))
  48#define USB3380_EP_CFG_MASK_OUT ((0x3 << OUT_ENDPOINT_TYPE) | \
  49                                BIT(OUT_ENDPOINT_ENABLE))
  50
  51struct usb338x_usb_ext_regs {
  52        u32     usbclass;
  53#define     DEVICE_PROTOCOL                     16
  54#define     DEVICE_SUB_CLASS                     8
  55#define     DEVICE_CLASS                         0
  56        u32     ss_sel;
  57#define     U2_SYSTEM_EXIT_LATENCY               8
  58#define     U1_SYSTEM_EXIT_LATENCY               0
  59        u32     ss_del;
  60#define     U2_DEVICE_EXIT_LATENCY               8
  61#define     U1_DEVICE_EXIT_LATENCY               0
  62        u32     usb2lpm;
  63#define     USB_L1_LPM_HIRD                      2
  64#define     USB_L1_LPM_REMOTE_WAKE               1
  65#define     USB_L1_LPM_SUPPORT                   0
  66        u32     usb3belt;
  67#define     BELT_MULTIPLIER                     10
  68#define     BEST_EFFORT_LATENCY_TOLERANCE        0
  69        u32     usbctl2;
  70#define     LTM_ENABLE                           7
  71#define     U2_ENABLE                            6
  72#define     U1_ENABLE                            5
  73#define     FUNCTION_SUSPEND                     4
  74#define     USB3_CORE_ENABLE                     3
  75#define     USB2_CORE_ENABLE                     2
  76#define     SERIAL_NUMBER_STRING_ENABLE          0
  77        u32     in_timeout;
  78#define     GPEP3_TIMEOUT                       19
  79#define     GPEP2_TIMEOUT                       18
  80#define     GPEP1_TIMEOUT                       17
  81#define     GPEP0_TIMEOUT                       16
  82#define     GPEP3_TIMEOUT_VALUE                 13
  83#define     GPEP3_TIMEOUT_ENABLE                12
  84#define     GPEP2_TIMEOUT_VALUE                  9
  85#define     GPEP2_TIMEOUT_ENABLE                 8
  86#define     GPEP1_TIMEOUT_VALUE                  5
  87#define     GPEP1_TIMEOUT_ENABLE                 4
  88#define     GPEP0_TIMEOUT_VALUE                  1
  89#define     GPEP0_TIMEOUT_ENABLE                 0
  90        u32     isodelay;
  91#define     ISOCHRONOUS_DELAY                    0
  92} __packed;
  93
  94struct usb338x_fifo_regs {
  95        /* offset 0x0500, 0x0520, 0x0540, 0x0560, 0x0580 */
  96        u32     ep_fifo_size_base;
  97#define     IN_FIFO_BASE_ADDRESS                                22
  98#define     IN_FIFO_SIZE                                        16
  99#define     OUT_FIFO_BASE_ADDRESS                               6
 100#define     OUT_FIFO_SIZE                                       0
 101        u32     ep_fifo_out_wrptr;
 102        u32     ep_fifo_out_rdptr;
 103        u32     ep_fifo_in_wrptr;
 104        u32     ep_fifo_in_rdptr;
 105        u32     unused[3];
 106} __packed;
 107
 108
 109/* Link layer */
 110struct usb338x_ll_regs {
 111        /* offset 0x700 */
 112        u32   ll_ltssm_ctrl1;
 113        u32   ll_ltssm_ctrl2;
 114        u32   ll_ltssm_ctrl3;
 115        u32   unused[2];
 116        u32   ll_general_ctrl0;
 117        u32   ll_general_ctrl1;
 118#define     PM_U3_AUTO_EXIT                                     29
 119#define     PM_U2_AUTO_EXIT                                     28
 120#define     PM_U1_AUTO_EXIT                                     27
 121#define     PM_FORCE_U2_ENTRY                                   26
 122#define     PM_FORCE_U1_ENTRY                                   25
 123#define     PM_LGO_COLLISION_SEND_LAU                           24
 124#define     PM_DIR_LINK_REJECT                                  23
 125#define     PM_FORCE_LINK_ACCEPT                                22
 126#define     PM_DIR_ENTRY_U3                                     20
 127#define     PM_DIR_ENTRY_U2                                     19
 128#define     PM_DIR_ENTRY_U1                                     18
 129#define     PM_U2_ENABLE                                        17
 130#define     PM_U1_ENABLE                                        16
 131#define     SKP_THRESHOLD_ADJUST_FMW                            8
 132#define     RESEND_DPP_ON_LRTY_FMW                              7
 133#define     DL_BIT_VALUE_FMW                                    6
 134#define     FORCE_DL_BIT                                        5
 135        u32   ll_general_ctrl2;
 136#define     SELECT_INVERT_LANE_POLARITY                         7
 137#define     FORCE_INVERT_LANE_POLARITY                          6
 138        u32   ll_general_ctrl3;
 139        u32   ll_general_ctrl4;
 140        u32   ll_error_gen;
 141} __packed;
 142
 143struct usb338x_ll_lfps_regs {
 144        /* offset 0x748 */
 145        u32   ll_lfps_5;
 146#define     TIMER_LFPS_6US                                      16
 147        u32   ll_lfps_6;
 148#define     TIMER_LFPS_80US                                     0
 149} __packed;
 150
 151struct usb338x_ll_tsn_regs {
 152        /* offset 0x77C */
 153        u32   ll_tsn_counters_2;
 154#define     HOT_TX_NORESET_TS2                                  24
 155        u32   ll_tsn_counters_3;
 156#define     HOT_RX_RESET_TS2                                    0
 157} __packed;
 158
 159struct usb338x_ll_chi_regs {
 160        /* offset 0x79C */
 161        u32   ll_tsn_chicken_bit;
 162#define     RECOVERY_IDLE_TO_RECOVER_FMW                        3
 163} __packed;
 164
 165/* protocol layer */
 166struct usb338x_pl_regs {
 167        /* offset 0x800 */
 168        u32   pl_reg_1;
 169        u32   pl_reg_2;
 170        u32   pl_reg_3;
 171        u32   pl_reg_4;
 172        u32   pl_ep_ctrl;
 173        /* Protocol Layer Endpoint Control*/
 174#define     PL_EP_CTRL                                  0x810
 175#define     ENDPOINT_SELECT                             0
 176        /* [4:0] */
 177#define     EP_INITIALIZED                              16
 178#define     SEQUENCE_NUMBER_RESET                       17
 179#define     CLEAR_ACK_ERROR_CODE                        20
 180        u32   pl_reg_6;
 181        u32   pl_reg_7;
 182        u32   pl_reg_8;
 183        u32   pl_ep_status_1;
 184        /* Protocol Layer Endpoint Status 1*/
 185#define     PL_EP_STATUS_1                              0x820
 186#define     STATE                                       16
 187#define     ACK_GOOD_NORMAL                             0x11
 188#define     ACK_GOOD_MORE_ACKS_TO_COME                  0x16
 189        u32   pl_ep_status_2;
 190        u32   pl_ep_status_3;
 191        /* Protocol Layer Endpoint Status 3*/
 192#define     PL_EP_STATUS_3                              0x828
 193#define     SEQUENCE_NUMBER                             0
 194        u32   pl_ep_status_4;
 195        /* Protocol Layer Endpoint Status 4*/
 196#define     PL_EP_STATUS_4                              0x82c
 197        u32   pl_ep_cfg_4;
 198        /* Protocol Layer Endpoint Configuration 4*/
 199#define     PL_EP_CFG_4                                 0x830
 200#define     NON_CTRL_IN_TOLERATE_BAD_DIR                6
 201} __packed;
 202
 203#endif /* __LINUX_USB_USB338X_H */
 204