1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
|
//----------------------------------------------------------------------
// Test driver for the STMicroelectronics ADSL Chip Taurus
//----------------------------------------------------------------------
// File: hard.h
// Author: Christophe Piel
// Copyright F.H.L.P. 2000
// Copyright ST Microelectronics 2000
//----------------------------------------------------------------------
// Contains definitions of the hardware registers and configuration
//----------------------------------------------------------------------
#ifndef __HARD__H_
#define __HARD__H_
#define OBC_CMD_TIMEOUT 1000 // ms
#define TOSCA_INTR_WDOG 200 // ms
#define ATM_CELL_LENGTH 53
// Interrupt Status Register bit description
// -----------------------------------------
#define ISR_TOIF 0x0001 // TOSCA Direct Interrupt Flag
#define ISR_TOIE 0x0002 // TOSCA Direct Interrupt Enable
#define ISR_TOIFS 0x0004 // TOSCA Delayed Interrupt
#define ISR_TOIES 0x0008 // TOSCA Delayed Interrupt Enable
#define ISR_TIMIF 0x0010 // Timer Interrupt Flag
#define ISR_TIMIE 0x0020 // Timer Interrupt Enable
#define ISR_OSIF 0x0040 // OBC Slave Interrupt Flag
#define ISR_OSIE 0x0080 // OBC Slave Interrupt Enable
#define ISR_OMIF 0x0100 // OBC Master Interrupt Flag
#define ISR_OMIE 0x0200 // OBC Master Interrupt Enable
#define ISR_GPIFA 0x0400 // GPIN[0] Interrupt Flag
#define ISR_GPIEA 0x0800 // GPIN[0] Interrupt Enable
#define ISR_GPIFB 0x1000 // GPIN[4] Interrupt Flag
#define ISR_GPIEB 0x2000 // GPIN[4] Interrupt Enable
#define ISR_IF 0x1555 // Mask for all interrupts flags
#ifdef _PCI_DRIVER
//----------------------------------------------------------------------
// PCI interface hardware definitions
//----------------------------------------------------------------------
#define PCI_CELL_LENGTH 64
#define PCI_US_BUF_SIZE (30*(PCI_CELL_LENGTH/sizeof(DWORD)))
#define PCI_DS_BUF_SIZE (200*(PCI_CELL_LENGTH/sizeof(DWORD)))
typedef struct {
DWORD CmdBufW1[512];
DWORD CmdBufW2[512];
DWORD CmdBufRd[1312];
DWORD AtmUsBuf[2*PCI_US_BUF_SIZE];
DWORD AtmDsBuf[4*PCI_DS_BUF_SIZE];
} DMA_MEMORY, *PDMA_MEMORY;
// PCI_BRIDGE Register Map
// =======================
#define PR_LACFW 0x0000 // Local Arbitrer Configuration Word
#define PR_LACFW_SET 0x0004 // SET Local Arbitrer Configuration Word bits
#define PR_LACFW_CLR 0x0008 // CLR Local Arbitrer Configuration Word bits
#define PR_MWC 0x000C // Memory Write Control
#define PR_MRC 0x0010 // Memory Read Control
#define PR_PCFW 0x0014 // PCI Configuration Word Data Register
#define PR_ISDR 0x0018 // PCI Interrupt Status & Data Register
#define PR_RUNNING 0x001C // Reports status of PCI bus request
// Down-Stream DMA
#define PR_DS_PTR_1 0x0800 // Host Memory DS Start Pointer Buffer 1
#define PR_DS_PTR_2 0x0804 // Host Memory DS Start Pointer Buffer 2
#define PR_DS_SIZE_1 0x0808 // Set the Number of DMA data transfer 1
#define PR_DS_SIZE_2 0x080C // Set the Number of DMA data transfer 1
#define PR_DS_MOVED 0x0810 // Current number of double words transfered
// Up-Stream DMA
#define PR_US_PTR_1 0x1000 // Host Memory US Start Pointer Buffer 1
#define PR_US_PTR_2 0x1004 // Host Memory US Start Pointer Buffer 2
#define PR_US_SIZE_1 0x1008 // Set the Number of DMA data transfer 1
#define PR_US_SIZE_2 0x100C // Set the Number of DMA data transfer 1
#define PR_US_MOVED 0x1010 // Current number of double words transfered
// OBC Write DMA
#define PR_WR_PTR 0x1800 // Host Memory WR Start Pointer Buffer
#define PR_WR_SIZE 0x1808 // Set the Status of DMA channel
#define PR_WR_MOVED 0x1810 // Current number of double words transferred
// OBC Read DMA
#define PR_RD_PTR 0x2000 // Host Memory RD Start Pointer Buffer
#define PR_RD_SIZE 0x2008 // Set the Status of DMA channel
#define PR_RD_MOVED 0x2010 // Current number of double words transferred
// Handshaking
#define PR_DS_PTR_HS 0x2800 // Host Memory DS Handshaking 1 Location
#define PR_US_PTR_HS 0x2804 // Host Memory US Handshaking 1 Location
#define PR_OBC_PTR_HS 0x2808 // Host Memory OBC Handshaking Location
#define PR_PATTERN 0x280C // Pattern used by handshake pointers
// CFG_MEM Register Map
// --------------------
#define PR_C_ADR 0x4000 // SPI ADR & CONTROL Register
#define PR_C_DATA 0x4004 // SPI DATA Register
// ADSL uP Register Map: REGS
// --------------------------
#define PR_STATUS 0x8000 // Status Control Register
#define PR_IDATA_1 0x8004 // Indirect Data 1 Register (LSB)
#define PR_IDATA_2 0x8008 // Indirect Data 2 Register
#define PR_IDATA_3 0x800C // Indirect Data 3 Register (MSB)
#define PR_IDATA 0x8010 // Indirect Data 3 Register
#define PR_IADR 0x8014 // Indirect Address Register
#define PR_IMASKS 0x8018 // Mask to apply to Slave Indirect R/W
#define PR_IRMW 0x801C // Mask to apply to Slave R/M/W access
#define PR_IADR_TX 0x8020 // Indirect TX Reference Address Register
#define PR_IADR_RX 0x8024 // Indirect RX Reference Address Register
#define PR_IADR_MSG 0x8028 // Indirect MSG Reference Address Register
#define PR_IADR_CHK 0x802C // Indirect Address Check Register
#define PR_IADR_BURST 0x8030 // Burst Base Address Register
#define PR_SIZE_BURST 0x8034 // Number of Burst accesses to be executed
#define PR_IMASKM 0x8038 // Mask to apply to the Master Ind or Msg R/W
#define PR_IADR_IRQ 0x803C // Indirect Address of Tosca IRQ Table
#define PR_ITABLE 0x8040 // Interrupt Table Data Register
#define PR_ISR 0x807C // Interrupt Status Register
// ADSL uP Register Map: PERIPHERALs
// ---------------------------------
#define PR_GPIO_DATA 0x8080 // Status of the GPIO pins
#define PR_GPIO_DIR 0x8084 // Direction of the GPIO pins
#define PR_GPIO_PER 0x8088 // Persistency values of the GPIO pins
#define PR_TIM_REG_A 0x808C // Timer A mode and preset value
#define PR_TIM_REG_B 0x8090 // Timer B mode and preset value
#define PR_AFE_TEST 0x8094 // AFE Feedback Control Register
// PCI Interrupt Status & Data Register bit description
// ----------------------------------------------------
#define PISDR_DMA_DS1_IF 0x00000001 // DMA DS PTR1 Interrupt Flag
#define PISDR_DMA_DS2_IF 0x00000002 // DMA DS PTR2 Interrupt Flag
#define PISDR_DMA_DS_IF 0x00000003 // DMA DS PTRS Interrupt Flag
#define PISDR_DMA_US1_IF 0x00000004 // DMA US PTR1 Interrupt Flag
#define PISDR_DMA_US2_IF 0x00000008 // DMA US PTR2 Interrupt Flag
#define PISDR_DMA_US_IF 0x0000000C // DMA US PTRS Interrupt Flag
#define PISDR_DMA_OBC_IF 0x00000010 // DMA OBC Interrupt Flag
#define PISDR_AIF1 0x00000020 // ADSL Interrupt 1 Flag
#define PISDR_AIF2 0x00000040 // ADSL Interrupt 2 Flag
#define PISDR_PEIF 0x00000080 // Parity Error Interrupt Flag
#define PISDR_BEIF 0x00000100 // Bus Error Interrupt Flag
#define PISDR_ACTDIF 0x00000200 // ACTD interrupt flag
#define PISDR_DMA_DS1_IE 0x00000400 // DMA DS PTR1 Interrupt Enable
#define PISDR_DMA_DS2_IE 0x00000800 // DMA DS PTR2 Interrupt Enable
#define PISDR_DMA_DS_IE 0x00000C00 // DMA DS PTRS Interrupt Enable
#define PISDR_DMA_US1_IE 0x00001000 // DMA US PTR1 Interrupt Enable
#define PISDR_DMA_US2_IE 0x00002000 // DMA US PTR2 Interrupt Enable
#define PISDR_DMA_US_IE 0x00003000 // DMA US PTRS Interrupt Enable
#define PISDR_DMA_OBC_IE 0x00004000 // DMA OBC Interrupt Enable
#define PISDR_AIE1 0x00008000 // ADSL Interrupt 1 Enable
#define PISDR_AIE2 0x00010000 // ADSL Interrupt 2 Enable
#define PISDR_PEIE 0x00020000 // Parity Error Interrupt Enable
#define PISDR_BEIE 0x00040000 // Bus Error Interrupt Enable
#define PISDR_ACTDIE 0x00080000 // ACTD Interrupt Flag Enable
#define PISDR_IF 0x000003FF // Mask for all interrupts flags
// Local Arbitrer Configuration Word bit description
// -------------------------------------------------
#define LACFW_W_DS_SIZE 0x0001 // DS ATM transfer length
#define LACFW_W_US_SIZE 0x0002 // US ATM transfer length
#define LACFW_W_WR_SIZE 0x000C // WR OBC transfer length
#define LACFW_W_RD_SIZE 0x0030 // RD OBC transfer length
#define LACFW_EDMA_DS1 0x0040 // Enable DS DMA pointer 1
#define LACFW_EDMA_DS2 0x0080 // Enable DS DMA pointer 2
#define LACFW_EDMA_DS 0x00C0 // Enable DS DMA pointers
#define LACFW_EDMA_US1 0x0100 // Enable US DMA pointer 1
#define LACFW_EDMA_US2 0x0200 // Enable US DMA pointer 2
#define LACFW_EDMA_US 0x0300 // Enable US DMA pointers
#define LACFW_EDMA_WROBC 0x0400 // Enable WR OBC DMA channel
#define LACFW_EDMA_RDOBC 0x0800 // Enable RD OBC DMA channel
#define LACFW_EHS_DS 0x1000 // Enable DS DMA Handshaking
#define LACFW_EHS_US 0x2000 // Enable US DMS Handshaking
#define LACFW_EHS_OBC 0x4000 // Enable OBC DMA Handshaking
// Offset of Power Management Control/Status -PMCSR int PCI config space
#define PCI_PMCSR 224
#endif
#ifdef _USB_DRIVER
//----------------------------------------------------------------------
// USB interface hardware definitions
//----------------------------------------------------------------------
#define USB_CELL_LENGTH 56
#define ATM_DS_CELLS_PER_PKT 8 // ATM downstream cells per ISO packet (max alt 1)
#define ATM_READS 8 // max ATM downstream URB outstanding
#define ATM_DS_ISO_PACKETS 5 // ATM downstream ISO packets per URB
#define USB_DS_BUF_SIZE (ATM_DS_CELLS_PER_PKT*ATM_READS*ATM_DS_ISO_PACKETS*(USB_CELL_LENGTH/sizeof(WORD)))
// with bandwidth reduced to 1 cell per ISO packet we need more ISO packet
#define MAX_ISO_PACKETS (ATM_DS_CELLS_PER_PKT*ATM_DS_ISO_PACKETS)
#define ATM_US_CELLS_PER_PKT 3 // ATM upstream cells per ISO packet (max alt 1)
#define ATM_WRITES 2 // max ATM upstream URB outstanding
#define ATM_US_ISO_PACKETS 5 // ATM upstream ISO packets per URB
#define USB_US_BUF_SIZE (ATM_US_CELLS_PER_PKT*ATM_WRITES*ATM_US_ISO_PACKETS*(USB_CELL_LENGTH/sizeof(WORD)))
typedef struct {
WORD CmdBufW1[1024];
WORD CmdBufW2[1024];
WORD CmdBufRd[1024];
WORD CmdBufW_I1[1024];
WORD CmdBufW_I2[1024];
WORD CmdBufRd_I[1024];
WORD AtmUsBuf[USB_US_BUF_SIZE];
WORD AtmDsBuf[USB_DS_BUF_SIZE];
WORD IntBuf[2][17];
} USB_MEMORY, *PUSB_MEMORY;
// USB Endpoints
// -------------
enum {
USB_EP0,
EP_INTERRUPT,
EP_OBC_ISO_OUT,
EP_OBC_ISO_IN,
EP_ATM_ISO_OUT,
EP_ATM_ISO_IN,
EP_OBC_INT_OUT,
EP_OBC_INT_IN,
EP_MAX,
};
// USB_BRIDGE Register Map
// =======================
#define UR_CFW 0x00 // USB Configuration Word
#define UR_ISDR 0x01 // USB Interrupt Status & Data Register
#define UR_STAT 0x02 // USB Internal Status Register
// CFG_MEM Register Map
// --------------------
#define UR_C_ADR 0x20 // SPI ADR & CONTROL Register
#define UR_C_DATA 0x21 // SPI DATA Register
// ADSL uP Register Map: REGS
// --------------------------
#define UR_STATUS 0x40 // Status Control Register
#define UR_IDATA_1 0x41 // Indirect Data 1 Register (LSB)
#define UR_IDATA_2 0x42 // Indirect Data 2 Register
#define UR_IDATA_3 0x43 // Indirect Data 3 Register (MSB)
#define UR_IDATA 0x44 // Indirect Data 3 Register
#define UR_IADR 0x45 // Indirect Address Register
#define UR_IMASKS 0x46 // Mask to apply to Slave Indirect R/W
#define UR_IRMW 0x47 // Mask to apply to Slave R/M/W access
#define UR_IADR_TX 0x48 // Indirect TX Reference Address Register
#define UR_IADR_RX 0x49 // Indirect RX Reference Address Register
#define UR_IADR_MSG 0x4A // Indirect MSG Reference Address Register
#define UR_IADR_CHK 0x4B // Indirect Address Check Register
#define UR_IADR_BURST 0x4C // Burst Base Address Register
#define UR_SIZE_BURST 0x4D // Number of Burst accesses to be executed
#define UR_IMASKM 0x4E // Mask to apply to the Master Ind or Msg R/W
#define UR_IADR_IRQ 0x4F // Indirect Address of Tosca IRQ Table
#define UR_ITABLE 0x50 // Interrupt Table Data Register
#define UR_ISR 0x5F // Interrupt Status Register
// ADSL uP Register Map: PERIPHERALs
// ---------------------------------
#define UR_GPIO_DATA 0x60 // Status of the GPIO pins
#define UR_GPIO_DIR 0x61 // Direction of the GPIO pins
#define UR_GPIO_PER 0x62 // Persistency values of the GPIO pins
#define UR_TIM_REG_A 0x63 // Timer A mode and preset value
#define UR_TIM_REG_B 0x64 // Timer B mode and preset value
#define UR_AFE_TEST 0x65 // AFE Feedback Control Register
// USB insterrupt status register bitfields
// ----------------------------------------
#define UISDR_TIRQ1 0x0001 // ADSL uP interrupt flag 1
#define UISDR_TIRQ2 0x0002 // ADSL uP interrupt flag 2
#define UISDR_UTIRQ1 0x0004 // UTOPIA rising edge FIFO interrupt flag
#define UISDR_UTIRQ2 0x0008 // UTOPIA falling edge FIFO interrupt flag
#define UISDR_ERR_ATM 0x0010 // ATM operation Error flag
#define UISDR_ERR_OBC 0x0020 // WR OBC operation Error flag
#define UISDR_ERR_PIPE 0x0040 // WR OBC Access Error flag
#define UISDR_ACTDIF 0x0080 // ACTD interrupt flag
#define UISDR_INT_LO 0x0100 // INT_LO flag
#define UISDR_TIE1 0x0200 // Enable ADSL uP interrupt 1
#define UISDR_TIE2 0x0400 // Enable ADSL uP interrupt 2
#define UISDR_IE 0x0800 // Enable Error interrupts
#define UISDR_LOE 0x1000 // Enable INT_LO interrupts
#define UISDR_UTIE1 0x2000 // Enable UTOPIA FIFO interrupts
#define UISDR_UTIE2 0x4000 // Enable UTOPIA FIFO interrupts
#define UISDR_ACTDIE 0x8000 // Enable ACTD interrupts
#define UISDR_IF 0x018F // Mask for all interrupts flags
#define UISDR_ERF 0x0070 // Mask for all Error flags
#define UISDR_IEF 0xFE00 // Mask for all Enable flags
// Control COMMAND bitfields
// -------------------------
#define CTRL_FIRST 0x0001 // First control command in pipe
#define CTRL_LASTI 0x0002 // Last Frame of control cmds in pipe
#define CTRL_SET_OBCI 0x0004 // Connect WR OBC FIFO to EP6
#define CTRL_RST_OBCI 0x0008 // Connect WR OBC FIFO to EP2
#define CTRL_SET_OBCO 0x0010 // Connect RD OBC FIFO to EP7
#define CTRL_RST_OBCO 0x0020 // Connect RD OBC FIFO to EP3
#define CTRL_SET_ATM 0x0040 // Connect RD OBC FIFO to EP5
#define CTRL_RST_ATM 0x0080 // Connect RD OBC FIFO to EP3/EP7
#define CTRL_EWRITE 0x0100 // Enable Write Command
#define CTRL_LINK 0x0200 // Next DWORD is another control command
#define CTRL_ADR 0xFC00 // Mask for ADR field
// LED bitfields
// -------------
#define LED_POWER 0x0800
#define LED_SHOWTIME 0x0200
#define LED_INIT 0x0400
#endif
#endif
|