x86: keep the BIOS area executable
[wrt350n-kernel.git] / include / asm-arm / arch-sa1100 / SA-1101.h
blob65ca8c79e6d21f757bfa1a429bc616602a39234f
1 /*
2 * SA-1101.h
4 * Copyright (c) Peter Danielsson 1999
6 * Definition of constants related to the sa1101
7 * support chip for the sa1100
9 */
12 /* Be sure that virtual mapping is defined right */
13 #ifndef __ASM_ARCH_HARDWARE_H
14 #error You must include hardware.h not SA-1101.h
15 #endif
17 #ifndef SA1101_BASE
18 #error You must define SA-1101 physical base address
19 #endif
21 #ifndef LANGUAGE
22 # ifdef __ASSEMBLY__
23 # define LANGUAGE Assembly
24 # else
25 # define LANGUAGE C
26 # endif
27 #endif
30 * We have mapped the sa1101 depending on the value of SA1101_BASE.
31 * It then appears from 0xf4000000.
34 #define SA1101_p2v( x ) ((x) - SA1101_BASE + 0xf4000000)
35 #define SA1101_v2p( x ) ((x) - 0xf4000000 + SA1101_BASE)
37 #ifndef SA1101_p2v
38 #define SA1101_p2v(PhAdd) (PhAdd)
39 #endif
41 #include <asm/arch/bitfield.h>
43 #define C 0
44 #define Assembly 1
48 * Memory map
51 #define __SHMEM_CONTROL0 0x00000000
52 #define __SYSTEM_CONTROL1 0x00000400
53 #define __ARBITER 0x00020000
54 #define __SYSTEM_CONTROL2 0x00040000
55 #define __SYSTEM_CONTROL3 0x00060000
56 #define __PARALLEL_PORT 0x00080000
57 #define __VIDMEM_CONTROL 0x00100000
58 #define __UPDATE_FIFO 0x00120000
59 #define __SHMEM_CONTROL1 0x00140000
60 #define __INTERRUPT_CONTROL 0x00160000
61 #define __USB_CONTROL 0x00180000
62 #define __TRACK_INTERFACE 0x001a0000
63 #define __MOUSE_INTERFACE 0x001b0000
64 #define __KEYPAD_INTERFACE 0x001c0000
65 #define __PCMCIA_INTERFACE 0x001e0000
66 #define __VGA_CONTROL 0x00200000
67 #define __GPIO_INTERFACE 0x00300000
70 * Macro that calculates real address for registers in the SA-1101
73 #define _SA1101( x ) ((x) + SA1101_BASE)
76 * Interface and shared memory controller registers
78 * Registers
79 * SKCR SA-1101 control register (read/write)
80 * SMCR Shared Memory Controller Register
81 * SNPR Snoop Register
84 #define _SKCR _SA1101( 0x00000000 ) /* SA-1101 Control Reg. */
85 #define _SMCR _SA1101( 0x00140000 ) /* Shared Mem. Control Reg. */
86 #define _SNPR _SA1101( 0x00140400 ) /* Snoop Reg. */
88 #if LANGUAGE == C
89 #define SKCR (*((volatile Word *) SA1101_p2v (_SKCR)))
90 #define SMCR (*((volatile Word *) SA1101_p2v (_SMCR)))
91 #define SNPR (*((volatile Word *) SA1101_p2v (_SNPR)))
93 #define SKCR_PLLEn 0x0001 /* Enable On-Chip PLL */
94 #define SKCR_BCLKEn 0x0002 /* Enables BCLK */
95 #define SKCR_Sleep 0x0004 /* Sleep Mode */
96 #define SKCR_IRefEn 0x0008 /* DAC Iref input enable */
97 #define SKCR_VCOON 0x0010 /* VCO bias */
98 #define SKCR_ScanTestEn 0x0020 /* Enables scan test */
99 #define SKCR_ClockTestEn 0x0040 /* Enables clock test */
101 #define SMCR_DCAC Fld(2,0) /* Number of column address bits */
102 #define SMCR_DRAC Fld(2,2) /* Number of row address bits */
103 #define SMCR_ArbiterBias 0x0008 /* favor video or USB */
104 #define SMCR_TopVidMem Fld(4,5) /* Top 4 bits of vidmem addr. */
106 #define SMCR_ColAdrBits( x ) /* col. addr bits 8..11 */ \
107 (( (x) - 8 ) << FShft (SMCR_DCAC))
108 #define SMCR_RowAdrBits( x ) /* row addr bits 9..12 */\
109 (( (x) - 9 ) << FShft (SMCR_DRAC))
111 #define SNPR_VFBstart Fld(12,0) /* Video frame buffer addr */
112 #define SNPR_VFBsize Fld(11,12) /* Video frame buffer size */
113 #define SNPR_WholeBank (1 << 23) /* Whole bank bit */
114 #define SNPR_BankSelect Fld(2,27) /* Bank select */
115 #define SNPR_SnoopEn (1 << 31) /* Enable snoop operation */
117 #define SNPR_Set_VFBsize( x ) /* set frame buffer size (in kb) */ \
118 ( (x) << FShft (SNPR_VFBsize))
119 #define SNPR_Select_Bank(x) /* select bank 0 or 1 */ \
120 (( (x) + 1 ) << FShft (SNPR_BankSelect ))
122 #endif /* LANGUAGE == C */
125 * Video Memory Controller
127 * Registers
128 * VMCCR Configuration register
129 * VMCAR VMC address register
130 * VMCDR VMC data register
134 #define _VMCCR _SA1101( 0x00100000 ) /* Configuration register */
135 #define _VMCAR _SA1101( 0x00101000 ) /* VMC address register */
136 #define _VMCDR _SA1101( 0x00101400 ) /* VMC data register */
138 #if LANGUAGE == C
139 #define VMCCR (*((volatile Word *) SA1101_p2v (_VMCCR)))
140 #define VMCAR (*((volatile Word *) SA1101_p2v (_VMCAR)))
141 #define VMCDR (*((volatile Word *) SA1101_p2v (_VMCDR)))
143 #define VMCCR_RefreshEn 0x0000 /* Enable memory refresh */
144 #define VMCCR_Config 0x0001 /* DRAM size */
145 #define VMCCR_RefPeriod Fld(2,3) /* Refresh period */
146 #define VMCCR_StaleDataWait Fld(4,5) /* Stale FIFO data timeout counter */
147 #define VMCCR_SleepState (1<<9) /* State of interface pins in sleep*/
148 #define VMCCR_RefTest (1<<10) /* refresh test */
149 #define VMCCR_RefLow Fld(6,11) /* refresh low counter */
150 #define VMCCR_RefHigh Fld(7,17) /* refresh high counter */
151 #define VMCCR_SDTCTest Fld(7,24) /* stale data timeout counter */
152 #define VMCCR_ForceSelfRef (1<<31) /* Force self refresh */
154 #endif LANGUAGE == C
157 /* Update FIFO
159 * Registers
160 * UFCR Update FIFO Control Register
161 * UFSR Update FIFO Status Register
162 * UFLVLR update FIFO level register
163 * UFDR update FIFO data register
166 #define _UFCR _SA1101(0x00120000) /* Update FIFO Control Reg. */
167 #define _UFSR _SA1101(0x00120400) /* Update FIFO Status Reg. */
168 #define _UFLVLR _SA1101(0x00120800) /* Update FIFO level reg. */
169 #define _UFDR _SA1101(0x00120c00) /* Update FIFO data reg. */
171 #if LANGUAGE == C
173 #define UFCR (*((volatile Word *) SA1101_p2v (_UFCR)))
174 #define UFSR (*((volatile Word *) SA1101_p2v (_UFSR)))
175 #define UFLVLR (*((volatile Word *) SA1101_p2v (_UFLVLR)))
176 #define UFDR (*((volatile Word *) SA1101_p2v (_UFDR)))
179 #define UFCR_FifoThreshhold Fld(7,0) /* Level for FifoGTn flag */
181 #define UFSR_FifoGTnFlag 0x01 /* FifoGTn flag */#define UFSR_FifoEmpty 0x80 /* FIFO is empty */
183 #endif /* LANGUAGE == C */
185 /* System Controller
187 * Registers
188 * SKPCR Power Control Register
189 * SKCDR Clock Divider Register
190 * DACDR1 DAC1 Data register
191 * DACDR2 DAC2 Data register
194 #define _SKPCR _SA1101(0x00000400)
195 #define _SKCDR _SA1101(0x00040000)
196 #define _DACDR1 _SA1101(0x00060000)
197 #define _DACDR2 _SA1101(0x00060400)
199 #if LANGUAGE == C
200 #define SKPCR (*((volatile Word *) SA1101_p2v (_SKPCR)))
201 #define SKCDR (*((volatile Word *) SA1101_p2v (_SKCDR)))
202 #define DACDR1 (*((volatile Word *) SA1101_p2v (_DACDR1)))
203 #define DACDR2 (*((volatile Word *) SA1101_p2v (_DACDR2)))
205 #define SKPCR_UCLKEn 0x01 /* USB Enable */
206 #define SKPCR_PCLKEn 0x02 /* PS/2 Enable */
207 #define SKPCR_ICLKEn 0x04 /* Interrupt Controller Enable */
208 #define SKPCR_VCLKEn 0x08 /* Video Controller Enable */
209 #define SKPCR_PICLKEn 0x10 /* parallel port Enable */
210 #define SKPCR_DCLKEn 0x20 /* DACs Enable */
211 #define SKPCR_nKPADEn 0x40 /* Multiplexer */
213 #define SKCDR_PLLMul Fld(7,0) /* PLL Multiplier */
214 #define SKCDR_VCLKEn Fld(2,7) /* Video controller clock divider */
215 #define SKDCR_BCLKEn (1<<9) /* BCLK Divider */
216 #define SKDCR_UTESTCLKEn (1<<10) /* Route USB clock during test mode */
217 #define SKDCR_DivRValue Fld(6,11) /* Input clock divider for PLL */
218 #define SKDCR_DivNValue Fld(5,17) /* Output clock divider for PLL */
219 #define SKDCR_PLLRSH Fld(3,22) /* PLL bandwidth control */
220 #define SKDCR_ChargePump (1<<25) /* Charge pump control */
221 #define SKDCR_ClkTestMode (1<<26) /* Clock output test mode */
222 #define SKDCR_ClkTestEn (1<<27) /* Test clock generator */
223 #define SKDCR_ClkJitterCntl Fld(3,28) /* video clock jitter compensation */
225 #define DACDR_DACCount Fld(8,0) /* Count value */
226 #define DACDR1_DACCount DACDR_DACCount
227 #define DACDR2_DACCount DACDR_DACCount
229 #endif /* LANGUAGE == C */
232 * Parallel Port Interface
234 * Registers
235 * IEEE_Config IEEE mode selection and programmable attributes
236 * IEEE_Control Controls the states of IEEE port control outputs
237 * IEEE_Data Forward transfer data register
238 * IEEE_Addr Forward transfer address register
239 * IEEE_Status Port IO signal status register
240 * IEEE_IntStatus Port interrupts status register
241 * IEEE_FifoLevels Rx and Tx FIFO interrupt generation levels
242 * IEEE_InitTime Forward timeout counter initial value
243 * IEEE_TimerStatus Forward timeout counter current value
244 * IEEE_FifoReset Reset forward transfer FIFO
245 * IEEE_ReloadValue Counter reload value
246 * IEEE_TestControl Control testmode
247 * IEEE_TestDataIn Test data register
248 * IEEE_TestDataInEn Enable test data
249 * IEEE_TestCtrlIn Test control signals
250 * IEEE_TestCtrlInEn Enable test control signals
251 * IEEE_TestDataStat Current data bus value
256 * The control registers are defined as offsets from a base address
259 #define _IEEE( x ) _SA1101( (x) + __PARALLEL_PORT )
261 #define _IEEE_Config _IEEE( 0x0000 )
262 #define _IEEE_Control _IEEE( 0x0400 )
263 #define _IEEE_Data _IEEE( 0x4000 )
264 #define _IEEE_Addr _IEEE( 0x0800 )
265 #define _IEEE_Status _IEEE( 0x0c00 )
266 #define _IEEE_IntStatus _IEEE( 0x1000 )
267 #define _IEEE_FifoLevels _IEEE( 0x1400 )
268 #define _IEEE_InitTime _IEEE( 0x1800 )
269 #define _IEEE_TimerStatus _IEEE( 0x1c00 )
270 #define _IEEE_FifoReset _IEEE( 0x2000 )
271 #define _IEEE_ReloadValue _IEEE( 0x3c00 )
272 #define _IEEE_TestControl _IEEE( 0x2400 )
273 #define _IEEE_TestDataIn _IEEE( 0x2800 )
274 #define _IEEE_TestDataInEn _IEEE( 0x2c00 )
275 #define _IEEE_TestCtrlIn _IEEE( 0x3000 )
276 #define _IEEE_TestCtrlInEn _IEEE( 0x3400 )
277 #define _IEEE_TestDataStat _IEEE( 0x3800 )
280 #if LANGUAGE == C
281 #define IEEE_Config (*((volatile Word *) SA1101_p2v (_IEEE_Config)))
282 #define IEEE_Control (*((volatile Word *) SA1101_p2v (_IEEE_Control)))
283 #define IEEE_Data (*((volatile Word *) SA1101_p2v (_IEEE_Data)))
284 #define IEEE_Addr (*((volatile Word *) SA1101_p2v (_IEEE_Addr)))
285 #define IEEE_Status (*((volatile Word *) SA1101_p2v (_IEEE_Status)))
286 #define IEEE_IntStatus (*((volatile Word *) SA1101_p2v (_IEEE_IntStatus)))
287 #define IEEE_FifoLevels (*((volatile Word *) SA1101_p2v (_IEEE_FifoLevels)))
288 #define IEEE_InitTime (*((volatile Word *) SA1101_p2v (_IEEE_InitTime)))
289 #define IEEE_TimerStatus (*((volatile Word *) SA1101_p2v (_IEEE_TimerStatus)))
290 #define IEEE_FifoReset (*((volatile Word *) SA1101_p2v (_IEEE_FifoReset)))
291 #define IEEE_ReloadValue (*((volatile Word *) SA1101_p2v (_IEEE_ReloadValue)))
292 #define IEEE_TestControl (*((volatile Word *) SA1101_p2v (_IEEE_TestControl)))
293 #define IEEE_TestDataIn (*((volatile Word *) SA1101_p2v (_IEEE_TestDataIn)))
294 #define IEEE_TestDataInEn (*((volatile Word *) SA1101_p2v (_IEEE_TestDataInEn)))
295 #define IEEE_TestCtrlIn (*((volatile Word *) SA1101_p2v (_IEEE_TestCtrlIn)))
296 #define IEEE_TestCtrlInEn (*((volatile Word *) SA1101_p2v (_IEEE_TestCtrlInEn)))
297 #define IEEE_TestDataStat (*((volatile Word *) SA1101_p2v (_IEEE_TestDataStat)))
300 #define IEEE_Config_M Fld(3,0) /* Mode select */
301 #define IEEE_Config_D 0x04 /* FIFO access enable */
302 #define IEEE_Config_B 0x08 /* 9-bit word enable */
303 #define IEEE_Config_T 0x10 /* Data transfer enable */
304 #define IEEE_Config_A 0x20 /* Data transfer direction */
305 #define IEEE_Config_E 0x40 /* Timer enable */
306 #define IEEE_Control_A 0x08 /* AutoFd output */
307 #define IEEE_Control_E 0x04 /* Selectin output */
308 #define IEEE_Control_T 0x02 /* Strobe output */
309 #define IEEE_Control_I 0x01 /* Port init output */
310 #define IEEE_Data_C (1<<31) /* Byte count */
311 #define IEEE_Data_Db Fld(9,16) /* Data byte 2 */
312 #define IEEE_Data_Da Fld(9,0) /* Data byte 1 */
313 #define IEEE_Addr_A Fld(8,0) /* forward address transfer byte */
314 #define IEEE_Status_A 0x0100 /* nAutoFd port output status */
315 #define IEEE_Status_E 0x0080 /* nSelectIn port output status */
316 #define IEEE_Status_T 0x0040 /* nStrobe port output status */
317 #define IEEE_Status_I 0x0020 /* nInit port output status */
318 #define IEEE_Status_B 0x0010 /* Busy port inout status */
319 #define IEEE_Status_S 0x0008 /* Select port input status */
320 #define IEEE_Status_K 0x0004 /* nAck port input status */
321 #define IEEE_Status_F 0x0002 /* nFault port input status */
322 #define IEEE_Status_R 0x0001 /* pError port input status */
324 #define IEEE_IntStatus_IntReqDat 0x0100
325 #define IEEE_IntStatus_IntReqEmp 0x0080
326 #define IEEE_IntStatus_IntReqInt 0x0040
327 #define IEEE_IntStatus_IntReqRav 0x0020
328 #define IEEE_IntStatus_IntReqTim 0x0010
329 #define IEEE_IntStatus_RevAddrComp 0x0008
330 #define IEEE_IntStatus_RevDataComp 0x0004
331 #define IEEE_IntStatus_FwdAddrComp 0x0002
332 #define IEEE_IntStatus_FwdDataComp 0x0001
333 #define IEEE_FifoLevels_RevFifoLevel 2
334 #define IEEE_FifoLevels_FwdFifoLevel 1
335 #define IEEE_InitTime_TimValInit Fld(22,0)
336 #define IEEE_TimerStatus_TimValStat Fld(22,0)
337 #define IEEE_ReloadValue_Reload Fld(4,0)
339 #define IEEE_TestControl_RegClk 0x04
340 #define IEEE_TestControl_ClockSelect Fld(2,1)
341 #define IEEE_TestControl_TimerTestModeEn 0x01
342 #define IEEE_TestCtrlIn_PError 0x10
343 #define IEEE_TestCtrlIn_nFault 0x08
344 #define IEEE_TestCtrlIn_nAck 0x04
345 #define IEEE_TestCtrlIn_PSel 0x02
346 #define IEEE_TestCtrlIn_Busy 0x01
348 #endif /* LANGUAGE == C */
351 * VGA Controller
353 * Registers
354 * VideoControl Video Control Register
355 * VgaTiming0 VGA Timing Register 0
356 * VgaTiming1 VGA Timing Register 1
357 * VgaTiming2 VGA Timing Register 2
358 * VgaTiming3 VGA Timing Register 3
359 * VgaBorder VGA Border Color Register
360 * VgaDBAR VGADMA Base Address Register
361 * VgaDCAR VGADMA Channel Current Address Register
362 * VgaStatus VGA Status Register
363 * VgaInterruptMask VGA Interrupt Mask Register
364 * VgaPalette VGA Palette Registers
365 * DacControl DAC Control Register
366 * VgaTest VGA Controller Test Register
369 #define _VGA( x ) _SA1101( ( x ) + __VGA_CONTROL )
371 #define _VideoControl _VGA( 0x0000 )
372 #define _VgaTiming0 _VGA( 0x0400 )
373 #define _VgaTiming1 _VGA( 0x0800 )
374 #define _VgaTiming2 _VGA( 0x0c00 )
375 #define _VgaTiming3 _VGA( 0x1000 )
376 #define _VgaBorder _VGA( 0x1400 )
377 #define _VgaDBAR _VGA( 0x1800 )
378 #define _VgaDCAR _VGA( 0x1c00 )
379 #define _VgaStatus _VGA( 0x2000 )
380 #define _VgaInterruptMask _VGA( 0x2400 )
381 #define _VgaPalette _VGA( 0x40000 )
382 #define _DacControl _VGA( 0x3000 )
383 #define _VgaTest _VGA( 0x2c00 )
385 #if (LANGUAGE == C)
386 #define VideoControl (*((volatile Word *) SA1101_p2v (_VideoControl)))
387 #define VgaTiming0 (*((volatile Word *) SA1101_p2v (_VgaTiming0)))
388 #define VgaTiming1 (*((volatile Word *) SA1101_p2v (_VgaTiming1)))
389 #define VgaTiming2 (*((volatile Word *) SA1101_p2v (_VgaTiming2)))
390 #define VgaTiming3 (*((volatile Word *) SA1101_p2v (_VgaTiming3)))
391 #define VgaBorder (*((volatile Word *) SA1101_p2v (_VgaBorder)))
392 #define VgaDBAR (*((volatile Word *) SA1101_p2v (_VgaDBAR)))
393 #define VgaDCAR (*((volatile Word *) SA1101_p2v (_VgaDCAR)))
394 #define VgaStatus (*((volatile Word *) SA1101_p2v (_VgaStatus)))
395 #define VgaInterruptMask (*((volatile Word *) SA1101_p2v (_VgaInterruptMask)))
396 #define VgaPalette (*((volatile Word *) SA1101_p2v (_VgaPalette)))
397 #define DacControl (*((volatile Word *) SA1101_p2v (_DacControl)))
398 #define VgaTest (*((volatile Word *) SA1101_p2v (_VgaTest)))
400 #define VideoControl_VgaEn 0x00000000
401 #define VideoControl_BGR 0x00000001
402 #define VideoControl_VCompVal Fld(2,2)
403 #define VideoControl_VgaReq Fld(4,4)
404 #define VideoControl_VBurstL Fld(4,8)
405 #define VideoControl_VMode (1<<12)
406 #define VideoControl_PalRead (1<<13)
408 #define VgaTiming0_PPL Fld(6,2)
409 #define VgaTiming0_HSW Fld(8,8)
410 #define VgaTiming0_HFP Fld(8,16)
411 #define VgaTiming0_HBP Fld(8,24)
413 #define VgaTiming1_LPS Fld(10,0)
414 #define VgaTiming1_VSW Fld(6,10)
415 #define VgaTiming1_VFP Fld(8,16)
416 #define VgaTiming1_VBP Fld(8,24)
418 #define VgaTiming2_IVS 0x01
419 #define VgaTiming2_IHS 0x02
420 #define VgaTiming2_CVS 0x04
421 #define VgaTiming2_CHS 0x08
423 #define VgaTiming3_HBS Fld(8,0)
424 #define VgaTiming3_HBE Fld(8,8)
425 #define VgaTiming3_VBS Fld(8,16)
426 #define VgaTiming3_VBE Fld(8,24)
428 #define VgaBorder_BCOL Fld(24,0)
430 #define VgaStatus_VFUF 0x01
431 #define VgaStatus_VNext 0x02
432 #define VgaStatus_VComp 0x04
434 #define VgaInterruptMask_VFUFMask 0x00
435 #define VgaInterruptMask_VNextMask 0x01
436 #define VgaInterruptMask_VCompMask 0x02
438 #define VgaPalette_R Fld(8,0)
439 #define VgaPalette_G Fld(8,8)
440 #define VgaPalette_B Fld(8,16)
442 #define DacControl_DACON 0x0001
443 #define DacControl_COMPON 0x0002
444 #define DacControl_PEDON 0x0004
445 #define DacControl_RTrim Fld(5,4)
446 #define DacControl_GTrim Fld(5,9)
447 #define DacControl_BTrim Fld(5,14)
449 #define VgaTest_TDAC 0x00
450 #define VgaTest_Datatest Fld(4,1)
451 #define VgaTest_DACTESTDAC 0x10
452 #define VgaTest_DACTESTOUT Fld(3,5)
454 #endif /* LANGUAGE == C */
457 * USB Host Interface Controller
459 * Registers
460 * Revision
461 * Control
462 * CommandStatus
463 * InterruptStatus
464 * InterruptEnable
465 * HCCA
466 * PeriodCurrentED
467 * ControlHeadED
468 * BulkHeadED
469 * BulkCurrentED
470 * DoneHead
471 * FmInterval
472 * FmRemaining
473 * FmNumber
474 * PeriodicStart
475 * LSThreshold
476 * RhDescriptorA
477 * RhDescriptorB
478 * RhStatus
479 * RhPortStatus
480 * USBStatus
481 * USBReset
482 * USTAR
483 * USWER
484 * USRFR
485 * USNFR
486 * USTCSR
487 * USSR
491 #define _USB( x ) _SA1101( ( x ) + __USB_CONTROL )
494 #define _Revision _USB( 0x0000 )
495 #define _Control _USB( 0x0888 )
496 #define _CommandStatus _USB( 0x0c00 )
497 #define _InterruptStatus _USB( 0x1000 )
498 #define _InterruptEnable _USB( 0x1400 )
499 #define _HCCA _USB( 0x1800 )
500 #define _PeriodCurrentED _USB( 0x1c00 )
501 #define _ControlHeadED _USB( 0x2000 )
502 #define _BulkHeadED _USB( 0x2800 )
503 #define _BulkCurrentED _USB( 0x2c00 )
504 #define _DoneHead _USB( 0x3000 )
505 #define _FmInterval _USB( 0x3400 )
506 #define _FmRemaining _USB( 0x3800 )
507 #define _FmNumber _USB( 0x3c00 )
508 #define _PeriodicStart _USB( 0x4000 )
509 #define _LSThreshold _USB( 0x4400 )
510 #define _RhDescriptorA _USB( 0x4800 )
511 #define _RhDescriptorB _USB( 0x4c00 )
512 #define _RhStatus _USB( 0x5000 )
513 #define _RhPortStatus _USB( 0x5400 )
514 #define _USBStatus _USB( 0x11800 )
515 #define _USBReset _USB( 0x11c00 )
517 #define _USTAR _USB( 0x10400 )
518 #define _USWER _USB( 0x10800 )
519 #define _USRFR _USB( 0x10c00 )
520 #define _USNFR _USB( 0x11000 )
521 #define _USTCSR _USB( 0x11400 )
522 #define _USSR _USB( 0x11800 )
525 #if (LANGUAGE == C)
527 #define Revision (*((volatile Word *) SA1101_p2v (_Revision)))
528 #define Control (*((volatile Word *) SA1101_p2v (_Control)))
529 #define CommandStatus (*((volatile Word *) SA1101_p2v (_CommandStatus)))
530 #define InterruptStatus (*((volatile Word *) SA1101_p2v (_InterruptStatus)))
531 #define InterruptEnable (*((volatile Word *) SA1101_p2v (_InterruptEnable)))
532 #define HCCA (*((volatile Word *) SA1101_p2v (_HCCA)))
533 #define PeriodCurrentED (*((volatile Word *) SA1101_p2v (_PeriodCurrentED)))
534 #define ControlHeadED (*((volatile Word *) SA1101_p2v (_ControlHeadED)))
535 #define BulkHeadED (*((volatile Word *) SA1101_p2v (_BulkHeadED)))
536 #define BulkCurrentED (*((volatile Word *) SA1101_p2v (_BulkCurrentED)))
537 #define DoneHead (*((volatile Word *) SA1101_p2v (_DoneHead)))
538 #define FmInterval (*((volatile Word *) SA1101_p2v (_FmInterval)))
539 #define FmRemaining (*((volatile Word *) SA1101_p2v (_FmRemaining)))
540 #define FmNumber (*((volatile Word *) SA1101_p2v (_FmNumber)))
541 #define PeriodicStart (*((volatile Word *) SA1101_p2v (_PeriodicStart)))
542 #define LSThreshold (*((volatile Word *) SA1101_p2v (_LSThreshold)))
543 #define RhDescriptorA (*((volatile Word *) SA1101_p2v (_RhDescriptorA)))
544 #define RhDescriptorB (*((volatile Word *) SA1101_p2v (_RhDescriptorB)))
545 #define RhStatus (*((volatile Word *) SA1101_p2v (_RhStatus)))
546 #define RhPortStatus (*((volatile Word *) SA1101_p2v (_RhPortStatus)))
547 #define USBStatus (*((volatile Word *) SA1101_p2v (_USBStatus)))
548 #define USBReset (*((volatile Word *) SA1101_p2v (_USBReset)))
549 #define USTAR (*((volatile Word *) SA1101_p2v (_USTAR)))
550 #define USWER (*((volatile Word *) SA1101_p2v (_USWER)))
551 #define USRFR (*((volatile Word *) SA1101_p2v (_USRFR)))
552 #define USNFR (*((volatile Word *) SA1101_p2v (_USNFR)))
553 #define USTCSR (*((volatile Word *) SA1101_p2v (_USTCSR)))
554 #define USSR (*((volatile Word *) SA1101_p2v (_USSR)))
557 #define USBStatus_IrqHciRmtWkp (1<<7)
558 #define USBStatus_IrqHciBuffAcc (1<<8)
559 #define USBStatus_nIrqHciM (1<<9)
560 #define USBStatus_nHciMFClr (1<<10)
562 #define USBReset_ForceIfReset 0x01
563 #define USBReset_ForceHcReset 0x02
564 #define USBReset_ClkGenReset 0x04
566 #define USTCR_RdBstCntrl Fld(3,0)
567 #define USTCR_ByteEnable Fld(4,3)
568 #define USTCR_WriteEn (1<<7)
569 #define USTCR_FifoCir (1<<8)
570 #define USTCR_TestXferSel (1<<9)
571 #define USTCR_FifoCirAtEnd (1<<10)
572 #define USTCR_nSimScaleDownClk (1<<11)
574 #define USSR_nAppMDEmpty 0x01
575 #define USSR_nAppMDFirst 0x02
576 #define USSR_nAppMDLast 0x04
577 #define USSR_nAppMDFull 0x08
578 #define USSR_nAppMAFull 0x10
579 #define USSR_XferReq 0x20
580 #define USSR_XferEnd 0x40
582 #endif /* LANGUAGE == C */
586 * Interrupt Controller
588 * Registers
589 * INTTEST0 Test register 0
590 * INTTEST1 Test register 1
591 * INTENABLE0 Interrupt Enable register 0
592 * INTENABLE1 Interrupt Enable register 1
593 * INTPOL0 Interrupt Polarity selection 0
594 * INTPOL1 Interrupt Polarity selection 1
595 * INTTSTSEL Interrupt source selection
596 * INTSTATCLR0 Interrupt Status 0
597 * INTSTATCLR1 Interrupt Status 1
598 * INTSET0 Interrupt Set 0
599 * INTSET1 Interrupt Set 1
602 #define _INT( x ) _SA1101( ( x ) + __INTERRUPT_CONTROL)
604 #define _INTTEST0 _INT( 0x1000 )
605 #define _INTTEST1 _INT( 0x1400 )
606 #define _INTENABLE0 _INT( 0x2000 )
607 #define _INTENABLE1 _INT( 0x2400 )
608 #define _INTPOL0 _INT( 0x3000 )
609 #define _INTPOL1 _INT( 0x3400 )
610 #define _INTTSTSEL _INT( 0x5000 )
611 #define _INTSTATCLR0 _INT( 0x6000 )
612 #define _INTSTATCLR1 _INT( 0x6400 )
613 #define _INTSET0 _INT( 0x7000 )
614 #define _INTSET1 _INT( 0x7400 )
616 #if ( LANGUAGE == C )
617 #define INTTEST0 (*((volatile Word *) SA1101_p2v (_INTTEST0)))
618 #define INTTEST1 (*((volatile Word *) SA1101_p2v (_INTTEST1)))
619 #define INTENABLE0 (*((volatile Word *) SA1101_p2v (_INTENABLE0)))
620 #define INTENABLE1 (*((volatile Word *) SA1101_p2v (_INTENABLE1)))
621 #define INTPOL0 (*((volatile Word *) SA1101_p2v (_INTPOL0)))
622 #define INTPOL1 (*((volatile Word *) SA1101_p2v (_INTPOL1)))
623 #define INTTSTSEL (*((volatile Word *) SA1101_p2v (_INTTSTSEL)))
624 #define INTSTATCLR0 (*((volatile Word *) SA1101_p2v (_INTSTATCLR0)))
625 #define INTSTATCLR1 (*((volatile Word *) SA1101_p2v (_INTSTATCLR1)))
626 #define INTSET0 (*((volatile Word *) SA1101_p2v (_INTSET0)))
627 #define INTSET1 (*((volatile Word *) SA1101_p2v (_INTSET1)))
629 #endif /* LANGUAGE == C */
632 * PS/2 Trackpad and Mouse Interfaces
634 * Registers (prefix kbd applies to trackpad interface, mse to mouse)
635 * KBDCR Control Register
636 * KBDSTAT Status Register
637 * KBDDATA Transmit/Receive Data register
638 * KBDCLKDIV Clock Division Register
639 * KBDPRECNT Clock Precount Register
640 * KBDTEST1 Test register 1
641 * KBDTEST2 Test register 2
642 * KBDTEST3 Test register 3
643 * KBDTEST4 Test register 4
644 * MSECR
645 * MSESTAT
646 * MSEDATA
647 * MSECLKDIV
648 * MSEPRECNT
649 * MSETEST1
650 * MSETEST2
651 * MSETEST3
652 * MSETEST4
656 #define _KBD( x ) _SA1101( ( x ) + __TRACK_INTERFACE )
657 #define _MSE( x ) _SA1101( ( x ) + __MOUSE_INTERFACE )
659 #define _KBDCR _KBD( 0x0000 )
660 #define _KBDSTAT _KBD( 0x0400 )
661 #define _KBDDATA _KBD( 0x0800 )
662 #define _KBDCLKDIV _KBD( 0x0c00 )
663 #define _KBDPRECNT _KBD( 0x1000 )
664 #define _KBDTEST1 _KBD( 0x2000 )
665 #define _KBDTEST2 _KBD( 0x2400 )
666 #define _KBDTEST3 _KBD( 0x2800 )
667 #define _KBDTEST4 _KBD( 0x2c00 )
668 #define _MSECR _MSE( 0x0000 )
669 #define _MSESTAT _MSE( 0x0400 )
670 #define _MSEDATA _MSE( 0x0800 )
671 #define _MSECLKDIV _MSE( 0x0c00 )
672 #define _MSEPRECNT _MSE( 0x1000 )
673 #define _MSETEST1 _MSE( 0x2000 )
674 #define _MSETEST2 _MSE( 0x2400 )
675 #define _MSETEST3 _MSE( 0x2800 )
676 #define _MSETEST4 _MSE( 0x2c00 )
678 #if ( LANGUAGE == C )
680 #define KBDCR (*((volatile Word *) SA1101_p2v (_KBDCR)))
681 #define KBDSTAT (*((volatile Word *) SA1101_p2v (_KBDSTAT)))
682 #define KBDDATA (*((volatile Word *) SA1101_p2v (_KBDDATA)))
683 #define KBDCLKDIV (*((volatile Word *) SA1101_p2v (_KBDCLKDIV)))
684 #define KBDPRECNT (*((volatile Word *) SA1101_p2v (_KBDPRECNT)))
685 #define KBDTEST1 (*((volatile Word *) SA1101_p2v (_KBDTEST1)))
686 #define KBDTEST2 (*((volatile Word *) SA1101_p2v (_KBDTEST2)))
687 #define KBDTEST3 (*((volatile Word *) SA1101_p2v (_KBDTEST3)))
688 #define KBDTEST4 (*((volatile Word *) SA1101_p2v (_KBDTEST4)))
689 #define MSECR (*((volatile Word *) SA1101_p2v (_MSECR)))
690 #define MSESTAT (*((volatile Word *) SA1101_p2v (_MSESTAT)))
691 #define MSEDATA (*((volatile Word *) SA1101_p2v (_MSEDATA)))
692 #define MSECLKDIV (*((volatile Word *) SA1101_p2v (_MSECLKDIV)))
693 #define MSEPRECNT (*((volatile Word *) SA1101_p2v (_MSEPRECNT)))
694 #define MSETEST1 (*((volatile Word *) SA1101_p2v (_MSETEST1)))
695 #define MSETEST2 (*((volatile Word *) SA1101_p2v (_MSETEST2)))
696 #define MSETEST3 (*((volatile Word *) SA1101_p2v (_MSETEST3)))
697 #define MSETEST4 (*((volatile Word *) SA1101_p2v (_MSETEST4)))
700 #define KBDCR_ENA 0x08
701 #define KBDCR_FKD 0x02
702 #define KBDCR_FKC 0x01
704 #define KBDSTAT_TXE 0x80
705 #define KBDSTAT_TXB 0x40
706 #define KBDSTAT_RXF 0x20
707 #define KBDSTAT_RXB 0x10
708 #define KBDSTAT_ENA 0x08
709 #define KBDSTAT_RXP 0x04
710 #define KBDSTAT_KBD 0x02
711 #define KBDSTAT_KBC 0x01
713 #define KBDCLKDIV_DivVal Fld(4,0)
715 #define MSECR_ENA 0x08
716 #define MSECR_FKD 0x02
717 #define MSECR_FKC 0x01
719 #define MSESTAT_TXE 0x80
720 #define MSESTAT_TXB 0x40
721 #define MSESTAT_RXF 0x20
722 #define MSESTAT_RXB 0x10
723 #define MSESTAT_ENA 0x08
724 #define MSESTAT_RXP 0x04
725 #define MSESTAT_MSD 0x02
726 #define MSESTAT_MSC 0x01
728 #define MSECLKDIV_DivVal Fld(4,0)
730 #define KBDTEST1_CD 0x80
731 #define KBDTEST1_RC1 0x40
732 #define KBDTEST1_MC 0x20
733 #define KBDTEST1_C Fld(2,3)
734 #define KBDTEST1_T2 0x40
735 #define KBDTEST1_T1 0x20
736 #define KBDTEST1_T0 0x10
737 #define KBDTEST2_TICBnRES 0x08
738 #define KBDTEST2_RKC 0x04
739 #define KBDTEST2_RKD 0x02
740 #define KBDTEST2_SEL 0x01
741 #define KBDTEST3_ms_16 0x80
742 #define KBDTEST3_us_64 0x40
743 #define KBDTEST3_us_16 0x20
744 #define KBDTEST3_DIV8 0x10
745 #define KBDTEST3_DIn 0x08
746 #define KBDTEST3_CIn 0x04
747 #define KBDTEST3_KD 0x02
748 #define KBDTEST3_KC 0x01
749 #define KBDTEST4_BC12 0x80
750 #define KBDTEST4_BC11 0x40
751 #define KBDTEST4_TRES 0x20
752 #define KBDTEST4_CLKOE 0x10
753 #define KBDTEST4_CRES 0x08
754 #define KBDTEST4_RXB 0x04
755 #define KBDTEST4_TXB 0x02
756 #define KBDTEST4_SRX 0x01
758 #define MSETEST1_CD 0x80
759 #define MSETEST1_RC1 0x40
760 #define MSETEST1_MC 0x20
761 #define MSETEST1_C Fld(2,3)
762 #define MSETEST1_T2 0x40
763 #define MSETEST1_T1 0x20
764 #define MSETEST1_T0 0x10
765 #define MSETEST2_TICBnRES 0x08
766 #define MSETEST2_RKC 0x04
767 #define MSETEST2_RKD 0x02
768 #define MSETEST2_SEL 0x01
769 #define MSETEST3_ms_16 0x80
770 #define MSETEST3_us_64 0x40
771 #define MSETEST3_us_16 0x20
772 #define MSETEST3_DIV8 0x10
773 #define MSETEST3_DIn 0x08
774 #define MSETEST3_CIn 0x04
775 #define MSETEST3_KD 0x02
776 #define MSETEST3_KC 0x01
777 #define MSETEST4_BC12 0x80
778 #define MSETEST4_BC11 0x40
779 #define MSETEST4_TRES 0x20
780 #define MSETEST4_CLKOE 0x10
781 #define MSETEST4_CRES 0x08
782 #define MSETEST4_RXB 0x04
783 #define MSETEST4_TXB 0x02
784 #define MSETEST4_SRX 0x01
786 #endif /* LANGUAGE == C */
790 * General-Purpose I/O Interface
792 * Registers
793 * PADWR Port A Data Write Register
794 * PBDWR Port B Data Write Register
795 * PADRR Port A Data Read Register
796 * PBDRR Port B Data Read Register
797 * PADDR Port A Data Direction Register
798 * PBDDR Port B Data Direction Register
799 * PASSR Port A Sleep State Register
800 * PBSSR Port B Sleep State Register
804 #define _PIO( x ) _SA1101( ( x ) + __GPIO_INTERFACE )
806 #define _PADWR _PIO( 0x0000 )
807 #define _PBDWR _PIO( 0x0400 )
808 #define _PADRR _PIO( 0x0000 )
809 #define _PBDRR _PIO( 0x0400 )
810 #define _PADDR _PIO( 0x0800 )
811 #define _PBDDR _PIO( 0x0c00 )
812 #define _PASSR _PIO( 0x1000 )
813 #define _PBSSR _PIO( 0x1400 )
816 #if ( LANGUAGE == C )
819 #define PADWR (*((volatile Word *) SA1101_p2v (_PADWR)))
820 #define PBDWR (*((volatile Word *) SA1101_p2v (_PBDWR)))
821 #define PADRR (*((volatile Word *) SA1101_p2v (_PADRR)))
822 #define PBDRR (*((volatile Word *) SA1101_p2v (_PBDRR)))
823 #define PADDR (*((volatile Word *) SA1101_p2v (_PADDR)))
824 #define PBDDR (*((volatile Word *) SA1101_p2v (_PBDDR)))
825 #define PASSR (*((volatile Word *) SA1101_p2v (_PASSR)))
826 #define PBSSR (*((volatile Word *) SA1101_p2v (_PBSSR)))
828 #endif
833 * Keypad Interface
835 * Registers
836 * PXDWR
837 * PXDRR
838 * PYDWR
839 * PYDRR
843 #define _KEYPAD( x ) _SA1101( ( x ) + __KEYPAD_INTERFACE )
845 #define _PXDWR _KEYPAD( 0x0000 )
846 #define _PXDRR _KEYPAD( 0x0000 )
847 #define _PYDWR _KEYPAD( 0x0400 )
848 #define _PYDRR _KEYPAD( 0x0400 )
850 #if ( LANGUAGE == C )
853 #define PXDWR (*((volatile Word *) SA1101_p2v (_PXDWR)))
854 #define PXDRR (*((volatile Word *) SA1101_p2v (_PXDRR)))
855 #define PYDWR (*((volatile Word *) SA1101_p2v (_PYDWR)))
856 #define PYDRR (*((volatile Word *) SA1101_p2v (_PYDRR)))
858 #endif
863 * PCMCIA Interface
865 * Registers
866 * PCSR Status Register
867 * PCCR Control Register
868 * PCSSR Sleep State Register
872 #define _CARD( x ) _SA1101( ( x ) + __PCMCIA_INTERFACE )
874 #define _PCSR _CARD( 0x0000 )
875 #define _PCCR _CARD( 0x0400 )
876 #define _PCSSR _CARD( 0x0800 )
878 #if ( LANGUAGE == C )
879 #define PCSR (*((volatile Word *) SA1101_p2v (_PCSR)))
880 #define PCCR (*((volatile Word *) SA1101_p2v (_PCCR)))
881 #define PCSSR (*((volatile Word *) SA1101_p2v (_PCSSR)))
883 #define PCSR_S0_ready 0x0001
884 #define PCSR_S1_ready 0x0002
885 #define PCSR_S0_detected 0x0004
886 #define PCSR_S1_detected 0x0008
887 #define PCSR_S0_VS1 0x0010
888 #define PCSR_S0_VS2 0x0020
889 #define PCSR_S1_VS1 0x0040
890 #define PCSR_S1_VS2 0x0080
891 #define PCSR_S0_WP 0x0100
892 #define PCSR_S1_WP 0x0200
893 #define PCSR_S0_BVD1_nSTSCHG 0x0400
894 #define PCSR_S0_BVD2_nSPKR 0x0800
895 #define PCSR_S1_BVD1_nSTSCHG 0x1000
896 #define PCSR_S1_BVD2_nSPKR 0x2000
898 #define PCCR_S0_VPP0 0x0001
899 #define PCCR_S0_VPP1 0x0002
900 #define PCCR_S0_VCC0 0x0004
901 #define PCCR_S0_VCC1 0x0008
902 #define PCCR_S1_VPP0 0x0010
903 #define PCCR_S1_VPP1 0x0020
904 #define PCCR_S1_VCC0 0x0040
905 #define PCCR_S1_VCC1 0x0080
906 #define PCCR_S0_reset 0x0100
907 #define PCCR_S1_reset 0x0200
908 #define PCCR_S0_float 0x0400
909 #define PCCR_S1_float 0x0800
911 #define PCSSR_S0_VCC0 0x0001
912 #define PCSSR_S0_VCC1 0x0002
913 #define PCSSR_S0_VPP0 0x0004
914 #define PCSSR_S0_VPP1 0x0008
915 #define PCSSR_S0_control 0x0010
916 #define PCSSR_S1_VCC0 0x0020
917 #define PCSSR_S1_VCC1 0x0040
918 #define PCSSR_S1_VPP0 0x0080
919 #define PCSSR_S1_VPP1 0x0100
920 #define PCSSR_S1_control 0x0200
922 #endif
924 #undef C
925 #undef Assembly