00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00034 #ifndef DRV_OHCI_OHCI_REGS_H
00035 #define DRV_OHCI_OHCI_REGS_H
00036 #include <stdint.h>
00037
00039 typedef struct ohci_regs {
00040 const volatile uint32_t revision;
00041 volatile uint32_t control;
00042 #define C_CSBR_MASK (0x3)
00043 #define C_CSBR_1_1 (0x0)
00044 #define C_CSBR_1_2 (0x1)
00045 #define C_CSBR_1_3 (0x2)
00046 #define C_CSBR_1_4 (0x3)
00047 #define C_CSBR_SHIFT (0)
00048
00049 #define C_PLE (1 << 2)
00050 #define C_IE (1 << 3)
00051 #define C_CLE (1 << 4)
00052 #define C_BLE (1 << 5)
00053
00054 #define C_HCFS_MASK (0x3)
00055 #define C_HCFS_RESET (0x0)
00056 #define C_HCFS_RESUME (0x1)
00057 #define C_HCFS_OPERATIONAL (0x2)
00058 #define C_HCFS_SUSPEND (0x3)
00059 #define C_HCFS_SHIFT (6)
00060
00061 #define C_IR (1 << 8)
00062 #define C_RWC (1 << 9)
00063 #define C_RWE (1 << 10)
00064
00065 volatile uint32_t command_status;
00066 #define CS_HCR (1 << 0)
00067 #define CS_CLF (1 << 1)
00068 #define CS_BLF (1 << 2)
00069 #define CS_OCR (1 << 3)
00070 #define CS_SOC_MASK (0x3)
00071 #define CS_SOC_SHIFT (16)
00072
00077 volatile uint32_t interrupt_status;
00078 volatile uint32_t interrupt_enable;
00079 volatile uint32_t interrupt_disable;
00080 #define I_SO (1 << 0)
00081 #define I_WDH (1 << 1)
00082 #define I_SF (1 << 2)
00083 #define I_RD (1 << 3)
00084 #define I_UE (1 << 4)
00085 #define I_FNO (1 << 5)
00086 #define I_RHSC (1 << 6)
00087 #define I_OC (1 << 30)
00088 #define I_MI (1 << 31)
00089
00091 volatile uint32_t hcca;
00092 #define HCCA_PTR_MASK 0xffffff00
00093
00095 const volatile uint32_t periodic_current;
00096
00098 volatile uint32_t control_head;
00099
00101 volatile uint32_t control_current;
00102
00104 volatile uint32_t bulk_head;
00105
00107 volatile uint32_t bulk_current;
00108
00110 const volatile uint32_t done_head;
00111
00113 volatile uint32_t fm_interval;
00114 #define FMI_FI_MASK (0x3fff)
00115 #define FMI_FI_SHIFT (0)
00116 #define FMI_FSMPS_MASK (0x7fff)
00117 #define FMI_FSMPS_SHIFT (16)
00118 #define FMI_TOGGLE_FLAG (1 << 31)
00119
00121 const volatile uint32_t fm_remaining;
00122 #define FMR_FR_MASK FMI_FI_MASK
00123 #define FMR_FR_SHIFT FMI_FI_SHIFT
00124 #define FMR_TOGGLE_FLAG FMI_TOGGLE_FLAG
00125
00127 const volatile uint32_t fm_number;
00128 #define FMN_NUMBER_MASK (0xffff)
00129
00131 volatile uint32_t periodic_start;
00132 #define PS_PS_MASK (0x3fff)
00133
00135 volatile uint32_t ls_threshold;
00136 #define LST_LST_MASK (0x7fff)
00137
00139 volatile uint32_t rh_desc_a;
00140 #define RHDA_NDS_MASK (0xff)
00141 #define RHDA_NDS_SHIFT (0)
00142 #define RHDA_PSM_FLAG (1 << 8)
00143 #define RHDA_NPS_FLAG (1 << 9)
00144 #define RHDA_DT_FLAG (1 << 10)
00145 #define RHDA_OCPM_FLAG (1 << 11)
00146 #define RHDA_NOCP (1 << 12)
00147 #define RHDA_POTPGT_MASK (0xff)
00148 #define RHDA_POTPGT_SHIFT (24)
00149
00151 volatile uint32_t rh_desc_b;
00152 #define RHDB_DR_MASK (0xffff)
00153 #define RHDB_DR_SHIFT (0)
00154 #define RHDB_PCC_MASK (0xffff)
00155 #define RHDB_PCC_SHIFT (16)
00156
00157
00158 #define RHDB_DR_FLAG(port) (((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
00159
00160 #define RHDB_PPC_FLAG(port) (((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
00161
00163 volatile uint32_t rh_status;
00164 #define RHS_LPS_FLAG (1 << 0)
00165
00166
00167
00168
00169 #define RHS_CLEAR_PORT_POWER RHS_LPS_FLAG
00170 #define RHS_OCI_FLAG (1 << 1)
00171 #define RHS_DRWE_FLAG (1 << 15)
00172
00173
00174 #define RHS_SET_DRWE RHS_DRWE_FLAG
00175 #define RHS_LPSC_FLAG (1 << 16)
00176
00177
00178
00179
00180 #define RHS_SET_PORT_POWER RHS_LPSC_FLAG
00181 #define RHS_OCIC_FLAG (1 << 17)
00182 #define RHS_CLEAR_DRWE (1 << 31)
00183
00185 volatile uint32_t rh_port_status[];
00186 #define RHPS_CCS_FLAG (1 << 0)
00187
00188 #define RHPS_CLEAR_PORT_ENABLE RHPS_CCS_FLAG
00189 #define RHPS_PES_FLAG (1 << 1)
00190
00191 #define RHPS_SET_PORT_ENABLE RHPS_PES_FLAG
00192 #define RHPS_PSS_FLAG (1 << 2)
00193
00194 #define RHPS_SET_PORT_SUSPEND RHPS_PSS_FLAG
00195 #define RHPS_POCI_FLAG (1 << 3)
00196
00197
00198
00199 #define RHPS_CLEAR_PORT_SUSPEND RHPS_POCI_FLAG
00200 #define RHPS_PRS_FLAG (1 << 4)
00201
00202 #define RHPS_SET_PORT_RESET RHPS_PRS_FLAG
00203 #define RHPS_PPS_FLAG (1 << 8)
00204
00205 #define RHPS_SET_PORT_POWER RHPS_PPS_FLAG
00206 #define RHPS_LSDA_FLAG (1 << 9)
00207
00208 #define RHPS_CLEAR_PORT_POWER RHPS_LSDA_FLAG
00209 #define RHPS_CSC_FLAG (1 << 16)
00210 #define RHPS_PESC_FLAG (1 << 17)
00211 #define RHPS_PSSC_FLAG (1 << 18)
00212 #define RHPS_OCIC_FLAG (1 << 19)
00213 #define RHPS_PRSC_FLAG (1 << 20)
00214 #define RHPS_CHANGE_WC_MASK 0x1f0000
00215 } __attribute__((packed)) ohci_regs_t;
00216 #endif
00217