blob: bf39516651279db6b00afaa082a50f4546c4a124 [file] [log] [blame]
wdenk591dda52002-11-18 00:14:45 +00001/*
2 * (C) Copyright 2002
3 * Daniel Engström, Omicron Ceti AB <daniel@omicron.se>.
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#ifndef _ASM_IC_SC520_H_
25#define _ASM_IC_SC520_H_ 1
26
27/* Memory mapped configuration registers, MMCR */
Wolfgang Denka1be4762008-05-20 16:00:29 +020028#define SC520_REVID 0x0000 /* ElanSC520 Microcontroller Revision ID Register */
29#define SC520_CPUCTL 0x0002 /* Am5x86 CPU Control Register */
30#define SC520_DRCCTL 0x0010 /* SDRAM Control Register */
31#define SC520_DRCTMCTL 0x0012 /* SDRAM Timing Control Register */
32#define SC520_DRCCFG 0x0014 /* SDRAM Bank Configuration Register*/
33#define SC520_DRCBENDADR 0x0018 /* SDRAM Bank 0-3 Ending Address Register*/
34#define SC520_ECCCTL 0x0020 /* ECC Control Register */
35#define SC520_ECCSTA 0x0021 /* ECC Status Register */
36#define SC520_ECCCKBPOS 0x0022 /* ECC Check Bit Position Register */
37#define SC520_ECCSBADD 0x0024 /* ECC Single-Bit Error Address Register */
38#define SC520_DBCTL 0x0040 /* SDRAM Buffer Control Register */
39#define SC520_BOOTCSCTL 0x0050 /* /BOOTCS Control Register */
40#define SC520_ROMCS1CTL 0x0054 /* /ROMCS1 Control Register */
41#define SC520_ROMCS2CTL 0x0056 /* /ROMCS2 Control Register */
42#define SC520_HBCTL 0x0060 /* Host Bridge Control Register */
43#define SC520_HBTGTIRQCTL 0x0062 /* Host Bridge Target Interrupt Control Register */
44#define SC520_HBTGTIRQSTA 0x0064 /* Host Bridge Target Interrupt Status Register */
45#define SC520_HBMSTIRQCTL 0x0066 /* Host Bridge Target Interrupt Control Register */
46#define SC520_HBMSTIRQSTA 0x0068 /* Host Bridge Master Interrupt Status Register */
47#define SC520_MSTINTADD 0x006c /* Host Bridge Master Interrupt Address Register */
48#define SC520_SYSARBCTL 0x0070 /* System Arbiter Control Register */
49#define SC520_PCIARBSTA 0x0071 /* PCI Bus Arbiter Status Register */
50#define SC520_SYSARBMENB 0x0072 /* System Arbiter Master Enable Register */
51#define SC520_ARBPRICTL 0x0074 /* Arbiter Priority Control Register */
52#define SC520_ADDDECCTL 0x0080 /* Address Decode Control Register */
53#define SC520_WPVSTA 0x0082 /* Write-Protect Violation Status Register */
54#define SC520_PAR0 0x0088 /* Programmable Address Region 0 Register */
55#define SC520_PAR1 0x008c /* Programmable Address Region 1 Register */
56#define SC520_PAR2 0x0090 /* Programmable Address Region 2 Register */
57#define SC520_PAR3 0x0094 /* Programmable Address Region 3 Register */
58#define SC520_PAR4 0x0098 /* Programmable Address Region 4 Register */
59#define SC520_PAR5 0x009c /* Programmable Address Region 5 Register */
60#define SC520_PAR6 0x00a0 /* Programmable Address Region 6 Register */
61#define SC520_PAR7 0x00a4 /* Programmable Address Region 7 Register */
62#define SC520_PAR8 0x00a8 /* Programmable Address Region 8 Register */
63#define SC520_PAR9 0x00ac /* Programmable Address Region 9 Register */
64#define SC520_PAR10 0x00b0 /* Programmable Address Region 10 Register */
65#define SC520_PAR11 0x00b4 /* Programmable Address Region 11 Register */
66#define SC520_PAR12 0x00b8 /* Programmable Address Region 12 Register */
67#define SC520_PAR13 0x00bc /* Programmable Address Region 13 Register */
68#define SC520_PAR14 0x00c0 /* Programmable Address Region 14 Register */
69#define SC520_PAR15 0x00c4 /* Programmable Address Region 15 Register */
70#define SC520_GPECHO 0x0c00 /* GP Echo Mode Register */
71#define SC520_GPCSDW 0x0c01 /* GP Chip Select Data Width Register */
72#define SC520_GPCSQUAL 0x0c02 /* GP Chip Select Qualification Register */
73#define SC520_GPCSRT 0x0c08 /* GP Chip Select Recovery Time Register */
74#define SC520_GPCSPW 0x0c09 /* GP Chip Select Pulse Width Register */
75#define SC520_GPCSOFF 0x0c0a /* GP Chip Select Offset Register */
76#define SC520_GPRDW 0x0c0b /* GP Read Pulse Width Register */
77#define SC520_GPRDOFF 0x0c0c /* GP Read Offset Register */
78#define SC520_GPWRW 0x0c0d /* GP Write Pulse Width Register */
79#define SC520_GPWROFF 0x0c0e /* GP Write Offset Register */
80#define SC520_GPALEW 0x0c0f /* GP ALE Pulse Width Register */
81#define SC520_GPALEOFF 0x0c10 /* GP ALE Offset Register */
82#define SC520_PIOPFS15_0 0x0c20 /* PIO15-PIO0 Pin Function Select */
83#define SC520_PIOPFS31_16 0x0c22 /* PIO31-PIO16 Pin Function Select */
84#define SC520_CSPFS 0x0c24 /* Chip Select Pin Function Select */
85#define SC520_CLKSEL 0x0c26 /* Clock Select */
86#define SC520_DSCTL 0x0c28 /* Drive Strength Control */
87#define SC520_PIODIR15_0 0x0c2a /* PIO15-PIO0 Direction */
88#define SC520_PIODIR31_16 0x0c2c /* PIO31-PIO16 Direction */
89#define SC520_PIODATA15_0 0x0c30 /* PIO15-PIO0 Data */
90#define SC520_PIODATA31_16 0x0c32 /* PIO31-PIO16 Data */
91#define SC520_PIOSET15_0 0x0c34 /* PIO15-PIO0 Set */
92#define SC520_PIOSET31_16 0x0c36 /* PIO31-PIO16 Set */
93#define SC520_PIOCLR15_0 0x0c38 /* PIO15-PIO0 Clear */
94#define SC520_PIOCLR31_16 0x0c3a /* PIO31-PIO16 Clear */
95#define SC520_SWTMRMILLI 0x0c60 /* Software Timer Millisecond Count */
96#define SC520_SWTMRMICRO 0x0c62 /* Software Timer Microsecond Count */
97#define SC520_SWTMRCFG 0x0c64 /* Software Timer Configuration */
98#define SC520_GPTMRSTA 0x0c70 /* GP Timers Status Register */
99#define SC520_GPTMR0CTL 0x0c72 /* GP Timer 0 Mode/Control Register */
100#define SC520_GPTMR0CNT 0x0c74 /* GP Timer 0 Count Register */
101#define SC520_GPTMR0MAXCMPA 0x0c76 /* GP Timer 0 Maxcount Compare A Register */
102#define SC520_GPTMR0MAXCMPB 0x0c78 /* GP Timer 0 Maxcount Compare B Register */
103#define SC520_GPTMR1CTL 0x0c7a /* GP Timer 1 Mode/Control Register */
104#define SC520_GPTMR1CNT 0x0c7c /* GP Timer 1 Count Register */
105#define SC520_GPTMR1MAXCMPA 0x0c7e /* GP Timer 1 Maxcount Compare Register A */
106#define SC520_GPTMR1MAXCMPB 0x0c80 /* GP Timer 1 Maxcount Compare B Register */
107#define SC520_GPTMR2CTL 0x0c82 /* GP Timer 2 Mode/Control Register */
108#define SC520_GPTMR2CNT 0x0c84 /* GP Timer 2 Count Register */
109#define SC520_GPTMR2MAXCMPA 0x0c8e /* GP Timer 2 Maxcount Compare A Register */
110#define SC520_WDTMRCTL 0x0cb0 /* Watchdog Timer Control Register */
111#define SC520_WDTMRCNTL 0x0cb2 /* Watchdog Timer Count Low Register */
112#define SC520_WDTMRCNTH 0x0cb4 /* Watchdog Timer Count High Register */
113#define SC520_UART1CTL 0x0cc0 /* UART 1 General Control Register */
114#define SC520_UART1STA 0x0cc1 /* UART 1 General Status Register */
115#define SC520_UART1FCRSHAD 0x0cc2 /* UART 1 FIFO Control Shadow Register */
116#define SC520_UART2CTL 0x0cc4 /* UART 2 General Control Register */
117#define SC520_UART2STA 0x0cc5 /* UART 2 General Status Register */
118#define SC520_UART2FCRSHAD 0x0cc6 /* UART 2 FIFO Control Shadow Register */
119#define SC520_SSICTL 0x0cd0 /* SSI Control */
120#define SC520_SSIXMIT 0x0cd1 /* SSI Transmit */
121#define SC520_SSICMD 0x0cd2 /* SSI Command */
122#define SC520_SSISTA 0x0cd3 /* SSI Status */
123#define SC520_SSIRCV 0x0cd4 /* SSI Receive */
124#define SC520_PICICR 0x0d00 /* Interrupt Control Register */
125#define SC520_MPICMODE 0x0d02 /* Master PIC Interrupt Mode Register */
126#define SC520_SL1PICMODE 0x0d03 /* Slave 1 PIC Interrupt Mode Register */
127#define SC520_SL2PICMODE 0x0d04 /* Slave 2 PIC Interrupt Mode Register */
128#define SC520_SWINT16_1 0x0d08 /* Software Interrupt 16-1 Control Register */
129#define SC520_SWINT22_17 0x0d0a /* Software Interrupt 22-17/NMI Control Register */
130#define SC520_INTPINPOL 0x0d10 /* Interrupt Pin Polarity Register */
131#define SC520_PCIHOSTMAP 0x0d14 /* PCI Host Bridge Interrupt Mappin Register */
132#define SC520_ECCMAP 0x0d18 /* ECC Interrupt Mapping Register */
133#define SC520_GPTMR0MAP 0x0d1a /* GP Timer 0 Interrupt Mapping Register */
134#define SC520_GPTMR1MAP 0x0d1b /* GP Timer 1 Interrupt Mapping Register */
135#define SC520_GPTMR2MAP 0x0d1c /* GP Timer 2 Interrupt Mapping Register */
136#define SC520_PIT0MAP 0x0d20 /* PIT0 Interrupt Mapping Register */
137#define SC520_PIT1MAP 0x0d21 /* PIT1 Interrupt Mapping Register */
138#define SC520_PIT2MAP 0x0d22 /* PIT2 Interrupt Mapping Register */
139#define SC520_UART1MAP 0x0d28 /* UART 1 Interrupt Mapping Register */
140#define SC520_UART2MAP 0x0d29 /* UART 2 Interrupt Mapping Register */
141#define SC520_PCIINTAMAP 0x0d30 /* PCI Interrupt A Mapping Register */
142#define SC520_PCIINTBMAP 0x0d31 /* PCI Interrupt B Mapping Register */
143#define SC520_PCIINTCMAP 0x0d32 /* PCI Interrupt C Mapping Register */
144#define SC520_PCIINTDMAP 0x0d33 /* PCI Interrupt D Mapping Register */
145#define SC520_DMABCINTMAP 0x0d40 /* DMA Buffer Chaining Interrupt Mapping Register */
146#define SC520_SSIMAP 0x0d41 /* SSI Interrupt Mapping Register */
147#define SC520_WDTMAP 0x0d42 /* Watchdog Timer Interrupt Mapping Register */
148#define SC520_RTCMAP 0x0d43 /* RTC Interrupt Mapping Register */
149#define SC520_WPVMAP 0x0d44 /* Write-Protect Interrupt Mapping Register */
150#define SC520_ICEMAP 0x0d45 /* AMDebug JTAG RX/TX Interrupt Mapping Register */
151#define SC520_FERRMAP 0x0d46 /* Floating Point Error Interrupt Mapping Register */
152#define SC520_GP0IMAP 0x0d50 /* GPIRQ0 Interrupt Mapping Register */
153#define SC520_GP1IMAP 0x0d51 /* GPIRQ1 Interrupt Mapping Register */
154#define SC520_GP2IMAP 0x0d52 /* GPIRQ2 Interrupt Mapping Register */
155#define SC520_GP3IMAP 0x0d53 /* GPIRQ3 Interrupt Mapping Register */
156#define SC520_GP4IMAP 0x0d54 /* GPIRQ4 Interrupt Mapping Register */
157#define SC520_GP5IMAP 0x0d55 /* GPIRQ5 Interrupt Mapping Register */
158#define SC520_GP6IMAP 0x0d56 /* GPIRQ6 Interrupt Mapping Register */
159#define SC520_GP7IMAP 0x0d57 /* GPIRQ7 Interrupt Mapping Register */
160#define SC520_GP8IMAP 0x0d58 /* GPIRQ8 Interrupt Mapping Register */
161#define SC520_GP9IMAP 0x0d59 /* GPIRQ9 Interrupt Mapping Register */
162#define SC520_GP10IMAP 0x0d5a /* GPIRQ10 Interrupt Mapping Register */
163#define SC520_SYSINFO 0x0d70 /* System Board Information Register */
164#define SC520_RESCFG 0x0d72 /* Reset Configuration Register */
165#define SC520_RESSTA 0x0d74 /* Reset Status Register */
166#define SC520_GPDMAMMIO 0x0d81 /* GP-DMA Memory-Mapped I/O Register */
167#define SC520_GPDMAEXTCHMAPA 0x0d82 /* GP-DMA Resource Channel Map A */
168#define SC520_GPDMAEXTCHMAPB 0x0d84 /* GP-DMA Resource Channel Map B */
169#define SC520_GPDMAEXTPG0 0x0d86 /* GP-DMA Channel 0 Extended Page */
170#define SC520_GPDMAEXTPG1 0x0d87 /* GP-DMA Channel 1 Extended Page */
171#define SC520_GPDMAEXTPG2 0x0d88 /* GP-DMA Channel 2 Extended Page */
172#define SC520_GPDMAEXTPG3 0x0d89 /* GP-DMA Channel 3 Extended Page */
173#define SC520_GPDMAEXTPG5 0x0d8a /* GP-DMA Channel 5 Extended Page */
174#define SC520_GPDMAEXTPG6 0x0d8b /* GP-DMA Channel 6 Extended Page */
175#define SC520_GPDMAEXTPG7 0x0d8c /* GP-DMA Channel 7 Extended Page */
176#define SC520_GPDMAEXTTC3 0x0d90 /* GP-DMA Channel 3 Extender Transfer count */
177#define SC520_GPDMAEXTTC5 0x0d91 /* GP-DMA Channel 5 Extender Transfer count */
178#define SC520_GPDMAEXTTC6 0x0d92 /* GP-DMA Channel 6 Extender Transfer count */
179#define SC520_GPDMAEXTTC7 0x0d93 /* GP-DMA Channel 7 Extender Transfer count */
180#define SC520_GPDMABCCTL 0x0d98 /* Buffer Chaining Control */
181#define SC520_GPDMABCSTA 0x0d99 /* Buffer Chaining Status */
182#define SC520_GPDMABSINTENB 0x0d9a /* Buffer Chaining Interrupt Enable */
183#define SC520_GPDMABCVAL 0x0d9b /* Buffer Chaining Valid */
184#define SC520_GPDMANXTADDL3 0x0da0 /* GP-DMA Channel 3 Next Address Low */
185#define SC520_GPDMANXTADDH3 0x0da2 /* GP-DMA Channel 3 Next Address High */
186#define SC520_GPDMANXTADDL5 0x0da4 /* GP-DMA Channel 5 Next Address Low */
187#define SC520_GPDMANXTADDH5 0x0da6 /* GP-DMA Channel 5 Next Address High */
188#define SC520_GPDMANXTADDL6 0x0da8 /* GP-DMA Channel 6 Next Address Low */
189#define SC520_GPDMANXTADDH6 0x0daa /* GP-DMA Channel 6 Next Address High */
190#define SC520_GPDMANXTADDL7 0x0dac /* GP-DMA Channel 7 Next Address Low */
191#define SC520_GPDMANXTADDH7 0x0dae /* GP-DMA Channel 7 Next Address High */
192#define SC520_GPDMANXTTCL3 0x0db0 /* GP-DMA Channel 3 Next Transfer Count Low */
193#define SC520_GPDMANXTTCH3 0x0db2 /* GP-DMA Channel 3 Next Transfer Count High */
194#define SC520_GPDMANXTTCL5 0x0db4 /* GP-DMA Channel 5 Next Transfer Count Low */
195#define SC520_GPDMANXTTCH5 0x0db6 /* GP-DMA Channel 5 Next Transfer Count High */
196#define SC520_GPDMANXTTCL6 0x0db8 /* GP-DMA Channel 6 Next Transfer Count Low */
197#define SC520_GPDMANXTTCH6 0x0dba /* GP-DMA Channel 6 Next Transfer Count High */
198#define SC520_GPDMANXTTCL7 0x0dbc /* GP-DMA Channel 7 Next Transfer Count Low */
199#define SC520_GPDMANXTTCH7 0x0dbe /* GP-DMA Channel 7 Next Transfer Count High */
wdenk591dda52002-11-18 00:14:45 +0000200
201/* MMCR Register bits (not all of them :) ) */
202
wdenkabda5ca2003-05-31 18:35:21 +0000203/* SSI Stuff */
Wolfgang Denka1be4762008-05-20 16:00:29 +0200204#define CTL_CLK_SEL_4 0x00 /* Nominal Bit Rate = 8 MHz */
205#define CTL_CLK_SEL_8 0x10 /* Nominal Bit Rate = 4 MHz */
206#define CTL_CLK_SEL_16 0x20 /* Nominal Bit Rate = 2 MHz */
207#define CTL_CLK_SEL_32 0x30 /* Nominal Bit Rate = 1 MHz */
208#define CTL_CLK_SEL_64 0x40 /* Nominal Bit Rate = 512 KHz */
209#define CTL_CLK_SEL_128 0x50 /* Nominal Bit Rate = 256 KHz */
210#define CTL_CLK_SEL_256 0x60 /* Nominal Bit Rate = 128 KHz */
211#define CTL_CLK_SEL_512 0x70 /* Nominal Bit Rate = 64 KHz */
wdenkabda5ca2003-05-31 18:35:21 +0000212
Wolfgang Denka1be4762008-05-20 16:00:29 +0200213#define TC_INT_ENB 0x08 /* Transaction Complete Interrupt Enable */
214#define PHS_INV_ENB 0x04 /* SSI Inverted Phase Mode Enable */
215#define CLK_INV_ENB 0x02 /* SSI Inverted Clock Mode Enable */
216#define MSBF_ENB 0x01 /* SSI Most Significant Bit First Mode Enable */
wdenkabda5ca2003-05-31 18:35:21 +0000217
Wolfgang Denka1be4762008-05-20 16:00:29 +0200218#define SSICMD_CMD_SEL_XMITRCV 0x03 /* Simultaneous Transmit / Receive Transaction */
219#define SSICMD_CMD_SEL_RCV 0x02 /* Receive Transaction */
220#define SSICMD_CMD_SEL_XMIT 0x01 /* Transmit Transaction */
221#define SSISTA_BSY 0x02 /* SSI Busy */
222#define SSISTA_TC_INT 0x01 /* SSI Transaction Complete Interrupt */
wdenkabda5ca2003-05-31 18:35:21 +0000223
224
wdenk591dda52002-11-18 00:14:45 +0000225/* BITS for SC520_ADDDECCTL: */
Wolfgang Denka1be4762008-05-20 16:00:29 +0200226#define WPV_INT_ENB 0x80 /* Write-Protect Violation Interrupt Enable */
227#define IO_HOLE_DEST_PCI 0x10 /* I/O Hole Access Destination */
228#define RTC_DIS 0x04 /* RTC Disable */
229#define UART2_DIS 0x02 /* UART2 Disable */
230#define UART1_DIS 0x01 /* UART1 Disable */
wdenk591dda52002-11-18 00:14:45 +0000231
232/* bus mapping constants (used for PCI core initialization) */ /* bus mapping constants */
wdenk57b2d802003-06-27 21:31:46 +0000233#define SC520_REG_ADDR 0x00000cf8
wdenk591dda52002-11-18 00:14:45 +0000234#define SC520_REG_DATA 0x00000cfc
235
236
237#define SC520_ISA_MEM_PHYS 0x00000000
238#define SC520_ISA_MEM_BUS 0x00000000
239#define SC520_ISA_MEM_SIZE 0x01000000
240
241#define SC520_ISA_IO_PHYS 0x00000000
242#define SC520_ISA_IO_BUS 0x00000000
243#define SC520_ISA_IO_SIZE 0x00001000
244
wdenk57b2d802003-06-27 21:31:46 +0000245/* PCI I/O space from 0x1000 to 0xdfff
wdenkabda5ca2003-05-31 18:35:21 +0000246 * (make 0xe000-0xfdff available for stuff like PCCard boot) */
wdenk591dda52002-11-18 00:14:45 +0000247#define SC520_PCI_IO_PHYS 0x00001000
248#define SC520_PCI_IO_BUS 0x00001000
wdenkabda5ca2003-05-31 18:35:21 +0000249#define SC520_PCI_IO_SIZE 0x0000d000
wdenk591dda52002-11-18 00:14:45 +0000250
251/* system memory from 0x00000000 to 0x0fffffff */
252#define SC520_PCI_MEMORY_PHYS 0x00000000
253#define SC520_PCI_MEMORY_BUS 0x00000000
254#define SC520_PCI_MEMORY_SIZE 0x10000000
255
wdenk57b2d802003-06-27 21:31:46 +0000256/* PCI bus memory from 0x10000000 to 0x26ffffff
wdenkabda5ca2003-05-31 18:35:21 +0000257 * (make 0x27000000 - 0x27ffffff available for stuff like PCCard boot) */
wdenk591dda52002-11-18 00:14:45 +0000258#define SC520_PCI_MEM_PHYS 0x10000000
Wolfgang Denka1be4762008-05-20 16:00:29 +0200259#define SC520_PCI_MEM_BUS 0x10000000
wdenkabda5ca2003-05-31 18:35:21 +0000260#define SC520_PCI_MEM_SIZE 0x17000000
wdenk591dda52002-11-18 00:14:45 +0000261
262/* 0x28000000 - 0x3fffffff is used by the flash banks */
263
264/* 0x40000000 - 0xffffffff is not adressable by the SC520 */
265
wdenkabda5ca2003-05-31 18:35:21 +0000266/* priority numbers used for interrupt channel mappings */
267#define SC520_IRQ_DISABLED 0
268#define SC520_IRQ0 1
269#define SC520_IRQ1 2
270#define SC520_IRQ2 4 /* same as IRQ9 */
271#define SC520_IRQ3 11
272#define SC520_IRQ4 12
273#define SC520_IRQ5 13
274#define SC520_IRQ6 21
275#define SC520_IRQ7 22
276#define SC520_IRQ8 3
277#define SC520_IRQ9 4
wdenk57b2d802003-06-27 21:31:46 +0000278#define SC520_IRQ10 5
wdenkabda5ca2003-05-31 18:35:21 +0000279#define SC520_IRQ11 6
280#define SC520_IRQ12 7
281#define SC520_IRQ13 8
282#define SC520_IRQ14 9
283#define SC520_IRQ15 10
284
wdenk591dda52002-11-18 00:14:45 +0000285/* utility functions */
286void write_mmcr_byte(u16 mmcr, u8 data);
287void write_mmcr_word(u16 mmcr, u16 data);
288void write_mmcr_long(u16 mmcr, u32 data);
289u8 read_mmcr_byte(u16 mmcr);
290u16 read_mmcr_word(u16 mmcr);
291u32 read_mmcr_long(u16 mmcr);
292
293void init_sc520(void);
294unsigned long init_sc520_dram(void);
wdenk591dda52002-11-18 00:14:45 +0000295
296#endif