Split up brcm63xx into files/
[openwrt.git] / target / linux / brcm63xx-2.6 / files / arch / mips / bcm963xx / include / board.h
1 /*
2 <:copyright-gpl 
3  Copyright 2002 Broadcom Corp. All Rights Reserved. 
4  
5  This program is free software; you can distribute it and/or modify it 
6  under the terms of the GNU General Public License (Version 2) as 
7  published by the Free Software Foundation. 
8  
9  This program is distributed in the hope it will be useful, but WITHOUT 
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
11  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
12  for more details. 
13  
14  You should have received a copy of the GNU General Public License along 
15  with this program; if not, write to the Free Software Foundation, Inc., 
16  59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 
17 :>
18 */
19 /***********************************************************************/
20 /*                                                                     */
21 /*   MODULE:  board.h                                                  */
22 /*   DATE:    97/02/18                                                 */
23 /*   PURPOSE: Board specific information.  This module should include  */
24 /*            all base device addresses and board specific macros.     */
25 /*                                                                     */
26 /***********************************************************************/
27 #ifndef _BOARD_H
28 #define _BOARD_H
29
30 /*****************************************************************************/
31 /*                    Misc board definitions                                 */
32 /*****************************************************************************/
33
34 #define DYING_GASP_API
35
36 /*****************************************************************************/
37 /*                    Physical Memory Map                                    */
38 /*****************************************************************************/
39
40 #define PHYS_DRAM_BASE           0x00000000     /* Dynamic RAM Base */
41 #define PHYS_FLASH_BASE          0x1FC00000     /* Flash Memory         */
42
43 /*****************************************************************************/
44 /* Note that the addresses above are physical addresses and that programs    */
45 /* have to use converted addresses defined below:                            */
46 /*****************************************************************************/
47 #define DRAM_BASE           (0x80000000 | PHYS_DRAM_BASE)   /* cached DRAM */
48 #define DRAM_BASE_NOCACHE   (0xA0000000 | PHYS_DRAM_BASE)   /* uncached DRAM */
49 #define FLASH_BASE          (0xA0000000 | PHYS_FLASH_BASE)  /* uncached Flash  */
50
51 /*****************************************************************************/
52 /*  Select the PLL value to get the desired CPU clock frequency.             */
53 /*                                                                           */
54 /*                                                                           */
55 /*****************************************************************************/
56 #define FPERIPH            50000000
57
58 #define ONEK                            1024
59 #define BLK64K                          (64*ONEK)
60 #define FLASH45_BLKS_BOOT_ROM           1
61 #define FLASH45_LENGTH_BOOT_ROM         (FLASH45_BLKS_BOOT_ROM * BLK64K)
62 #define FLASH_RESERVED_AT_END           (64*ONEK) /*reserved for PSI, scratch pad*/
63     
64 /*****************************************************************************/
65 /* Note that the addresses above are physical addresses and that programs    */
66 /* have to use converted addresses defined below:                            */
67 /*****************************************************************************/
68 #define DRAM_BASE           (0x80000000 | PHYS_DRAM_BASE)   /* cached DRAM */
69 #define DRAM_BASE_NOCACHE   (0xA0000000 | PHYS_DRAM_BASE)   /* uncached DRAM */
70 #define FLASH_BASE          (0xA0000000 | PHYS_FLASH_BASE)  /* uncached Flash  */
71
72 /*****************************************************************************/
73 /*  Select the PLL value to get the desired CPU clock frequency.             */
74 /*                                                                           */
75 /*                                                                           */
76 /*****************************************************************************/
77 #define FPERIPH            50000000
78     
79 #define SDRAM_TYPE_ADDRESS_OFFSET   16
80 #define NVRAM_DATA_OFFSET           0x0580
81 #define NVRAM_DATA_ID               0x0f1e2d3c
82 #define BOARD_SDRAM_TYPE            *(unsigned long *) \
83                                     (FLASH_BASE + SDRAM_TYPE_ADDRESS_OFFSET)
84
85 #define ONEK                1024
86 #define BLK64K              (64*ONEK)
87
88 // nvram and psi flash definitions for 45
89 #define FLASH45_LENGTH_NVRAM            ONEK            // 1k nvram 
90 #define NVRAM_PSI_DEFAULT               24              // default psi in K byes
91
92 /*****************************************************************************/
93 /*       NVRAM Offset and definition                                         */
94 /*****************************************************************************/
95
96 #define NVRAM_VERSION_NUMBER            2
97 #define NVRAM_VERSION_NUMBER_ADDRESS    0
98
99 #define NVRAM_BOOTLINE_LEN              256
100 #define NVRAM_BOARD_ID_STRING_LEN       16
101 #define NVRAM_MAC_ADDRESS_LEN           6
102 #define NVRAM_MAC_COUNT_MAX             32
103
104 /*****************************************************************************/
105 /*       Misc Offsets                                                        */
106 /*****************************************************************************/
107
108 #define CFE_VERSION_OFFSET           0x0570
109 #define CFE_VERSION_MARK_SIZE        5
110 #define CFE_VERSION_SIZE             5
111
112 typedef struct
113 {
114     unsigned long ulVersion;
115     char szBootline[NVRAM_BOOTLINE_LEN];
116     char szBoardId[NVRAM_BOARD_ID_STRING_LEN];
117     unsigned long ulReserved1[2];
118     unsigned long ulNumMacAddrs;
119     unsigned char ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
120     char chReserved[2];
121     unsigned long ulCheckSum;
122 } NVRAM_DATA, *PNVRAM_DATA;
123
124
125 /*****************************************************************************/
126 /*          board ioctl calls for flash, led and some other utilities        */
127 /*****************************************************************************/
128
129
130 /* Defines. for board driver */
131 #define BOARD_IOCTL_MAGIC       'B'
132 #define BOARD_DRV_MAJOR          206
133
134 #define MAC_ADDRESS_ANY         (unsigned long) -1
135
136 #define BOARD_IOCTL_FLASH_INIT \
137     _IOWR(BOARD_IOCTL_MAGIC, 0, BOARD_IOCTL_PARMS)
138
139 #define BOARD_IOCTL_FLASH_WRITE \
140     _IOWR(BOARD_IOCTL_MAGIC, 1, BOARD_IOCTL_PARMS)
141
142 #define BOARD_IOCTL_FLASH_READ \
143     _IOWR(BOARD_IOCTL_MAGIC, 2, BOARD_IOCTL_PARMS)
144
145 #define BOARD_IOCTL_GET_NR_PAGES \
146     _IOWR(BOARD_IOCTL_MAGIC, 3, BOARD_IOCTL_PARMS)
147
148 #define BOARD_IOCTL_DUMP_ADDR \
149     _IOWR(BOARD_IOCTL_MAGIC, 4, BOARD_IOCTL_PARMS)
150
151 #define BOARD_IOCTL_SET_MEMORY \
152     _IOWR(BOARD_IOCTL_MAGIC, 5, BOARD_IOCTL_PARMS)
153
154 #define BOARD_IOCTL_MIPS_SOFT_RESET \
155     _IOWR(BOARD_IOCTL_MAGIC, 6, BOARD_IOCTL_PARMS)
156
157 #define BOARD_IOCTL_LED_CTRL \
158     _IOWR(BOARD_IOCTL_MAGIC, 7, BOARD_IOCTL_PARMS)
159
160 #define BOARD_IOCTL_GET_ID \
161     _IOWR(BOARD_IOCTL_MAGIC, 8, BOARD_IOCTL_PARMS)
162
163 #define BOARD_IOCTL_GET_MAC_ADDRESS \
164     _IOWR(BOARD_IOCTL_MAGIC, 9, BOARD_IOCTL_PARMS)
165
166 #define BOARD_IOCTL_RELEASE_MAC_ADDRESS \
167     _IOWR(BOARD_IOCTL_MAGIC, 10, BOARD_IOCTL_PARMS)
168
169 #define BOARD_IOCTL_GET_PSI_SIZE \
170     _IOWR(BOARD_IOCTL_MAGIC, 11, BOARD_IOCTL_PARMS)
171
172 #define BOARD_IOCTL_GET_SDRAM_SIZE \
173     _IOWR(BOARD_IOCTL_MAGIC, 12, BOARD_IOCTL_PARMS)
174
175 #define BOARD_IOCTL_SET_MONITOR_FD \
176     _IOWR(BOARD_IOCTL_MAGIC, 13, BOARD_IOCTL_PARMS)
177     
178 #define BOARD_IOCTL_WAKEUP_MONITOR_TASK \
179     _IOWR(BOARD_IOCTL_MAGIC, 14, BOARD_IOCTL_PARMS)
180
181 #define BOARD_IOCTL_GET_BOOTLINE \
182     _IOWR(BOARD_IOCTL_MAGIC, 15, BOARD_IOCTL_PARMS)
183
184 #define BOARD_IOCTL_SET_BOOTLINE \
185     _IOWR(BOARD_IOCTL_MAGIC, 16, BOARD_IOCTL_PARMS)
186
187 #define BOARD_IOCTL_GET_BASE_MAC_ADDRESS \
188     _IOWR(BOARD_IOCTL_MAGIC, 17, BOARD_IOCTL_PARMS)
189
190 #define BOARD_IOCTL_GET_CHIP_ID \
191     _IOWR(BOARD_IOCTL_MAGIC, 18, BOARD_IOCTL_PARMS)
192
193 #define BOARD_IOCTL_GET_NUM_ENET \
194     _IOWR(BOARD_IOCTL_MAGIC, 19, BOARD_IOCTL_PARMS)
195
196 #define BOARD_IOCTL_GET_CFE_VER \
197     _IOWR(BOARD_IOCTL_MAGIC, 20, BOARD_IOCTL_PARMS)
198
199 #define BOARD_IOCTL_GET_ENET_CFG \
200     _IOWR(BOARD_IOCTL_MAGIC, 21, BOARD_IOCTL_PARMS)
201
202 #define BOARD_IOCTL_GET_WLAN_ANT_INUSE \
203     _IOWR(BOARD_IOCTL_MAGIC, 22, BOARD_IOCTL_PARMS)
204     
205 #define BOARD_IOCTL_SET_TRIGGER_EVENT \
206     _IOWR(BOARD_IOCTL_MAGIC, 23, BOARD_IOCTL_PARMS)        
207
208 #define BOARD_IOCTL_GET_TRIGGER_EVENT \
209     _IOWR(BOARD_IOCTL_MAGIC, 24, BOARD_IOCTL_PARMS)        
210
211 #define BOARD_IOCTL_UNSET_TRIGGER_EVENT \
212     _IOWR(BOARD_IOCTL_MAGIC, 25, BOARD_IOCTL_PARMS) 
213
214 #define BOARD_IOCTL_SET_SES_LED \
215     _IOWR(BOARD_IOCTL_MAGIC, 26, BOARD_IOCTL_PARMS)
216
217 //<<JUNHON, 2004/09/15, get reset button status , tim hou , 05/04/12
218 #define RESET_BUTTON_UP           1
219 #define RESET_BUTTON_PRESSDOWN    0
220 #define BOARD_IOCTL_GET_RESETHOLD \
221     _IOWR(BOARD_IOCTL_MAGIC, 27, BOARD_IOCTL_PARMS)
222 //>>JUNHON, 2004/09/15    
223     
224 // for the action in BOARD_IOCTL_PARMS for flash operation
225 typedef enum 
226 {
227     PERSISTENT,
228     NVRAM,
229     BCM_IMAGE_CFE,
230     BCM_IMAGE_FS,
231     BCM_IMAGE_KERNEL,
232     BCM_IMAGE_WHOLE,
233     SCRATCH_PAD,
234     FLASH_SIZE,
235 } BOARD_IOCTL_ACTION;
236     
237     
238 typedef struct boardIoctParms
239 {
240     char *string;
241     char *buf;
242     int strLen;
243     int offset;
244     BOARD_IOCTL_ACTION  action;        /* flash read/write: nvram, persistent, bcm image */
245     int result;
246 } BOARD_IOCTL_PARMS;
247
248
249 // LED defines 
250 typedef enum
251 {   
252     kLedAdsl,
253     kLedWireless,
254     kLedUsb,
255     kLedHpna,
256     kLedWanData,
257     kLedPPP,
258     kLedVoip,
259     kLedSes,
260     kLedLan,
261     kLedSelfTest,
262     kLedEnd,                // NOTE: Insert the new led name before this one.  Alway stay at the end.
263 } BOARD_LED_NAME;
264
265 typedef enum
266 {
267     kLedStateOff,                        /* turn led off */
268     kLedStateOn,                         /* turn led on */
269     kLedStateFail,                       /* turn led on red */
270     kLedStateBlinkOnce,                  /* blink once, ~100ms and ignore the same call during the 100ms period */
271     kLedStateSlowBlinkContinues,         /* slow blink continues at ~600ms interval */
272     kLedStateFastBlinkContinues,         /* fast blink continues at ~200ms interval */
273 } BOARD_LED_STATE;
274
275
276 // virtual and physical map pair defined in board.c
277 typedef struct ledmappair
278 {
279     BOARD_LED_NAME ledName;         // virtual led name
280     BOARD_LED_STATE ledInitState;   // initial led state when the board boots.
281     unsigned short ledMask;         // physical GPIO pin mask
282     unsigned short ledActiveLow;    // reset bit to turn on LED
283     unsigned short ledMaskFail;     // physical GPIO pin mask for state failure
284     unsigned short ledActiveLowFail;// reset bit to turn on LED
285 } LED_MAP_PAIR, *PLED_MAP_PAIR;
286
287 typedef void (*HANDLE_LED_FUNC)(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState);
288
289 /* Flash storage address information that is determined by the flash driver. */
290 typedef struct flashaddrinfo
291 {
292     int flash_persistent_start_blk;
293     int flash_persistent_number_blk;
294     int flash_persistent_length;
295     unsigned long flash_persistent_blk_offset;
296     int flash_scratch_pad_start_blk;         // start before psi (SP_BUF_LEN)
297     int flash_scratch_pad_number_blk;
298     int flash_scratch_pad_length;
299     unsigned long flash_scratch_pad_blk_offset;
300     int flash_nvram_start_blk;
301     int flash_nvram_number_blk;
302     int flash_nvram_length;
303     unsigned long flash_nvram_blk_offset;
304 } FLASH_ADDR_INFO, *PFLASH_ADDR_INFO;
305
306 // scratch pad defines
307 /* SP - Persisten Scratch Pad format:
308        sp header        : 32 bytes
309        tokenId-1        : 8 bytes
310        tokenId-1 len    : 4 bytes
311        tokenId-1 data    
312        ....
313        tokenId-n        : 8 bytes
314        tokenId-n len    : 4 bytes
315        tokenId-n data    
316 */
317
318 #define MAGIC_NUM_LEN       8
319 #define MAGIC_NUMBER        "gOGoBrCm"
320 #define TOKEN_NAME_LEN      16
321 #define SP_VERSION          1
322 #define SP_MAX_LEN          8 * 1024            // 8k buf before psi
323 #define SP_RESERVERD        16
324
325 typedef struct _SP_HEADER
326 {
327     char SPMagicNum[MAGIC_NUM_LEN];             // 8 bytes of magic number
328     int SPVersion;                              // version number
329     int SPUsedLen;                              // used sp len   
330     char SPReserved[SP_RESERVERD];              // reservied, total 32 bytes
331 } SP_HEADER, *PSP_HEADER;
332
333 typedef struct _TOKEN_DEF
334 {
335     char tokenName[TOKEN_NAME_LEN];
336     int tokenLen;
337 } SP_TOKEN, *PSP_TOKEN;
338
339
340 /*****************************************************************************/
341 /*          Function Prototypes                                              */
342 /*****************************************************************************/
343 #if !defined(__ASM_ASM_H)
344 void dumpaddr( unsigned char *pAddr, int nLen );
345
346 int kerSysNvRamGet(char *string, int strLen, int offset);
347 int kerSysNvRamSet(char *string, int strLen, int offset);
348 int kerSysPersistentGet(char *string, int strLen, int offset);
349 int kerSysPersistentSet(char *string, int strLen, int offset);
350 int kerSysScratchPadGet(char *tokName, char *tokBuf, int tokLen);
351 int kerSysScratchPadSet(char *tokName, char *tokBuf, int tokLen);
352 int kerSysBcmImageSet( int flash_start_addr, char *string, int size);
353 int kerSysGetMacAddress( unsigned char *pucaAddr, unsigned long ulId );
354 int kerSysReleaseMacAddress( unsigned char *pucaAddr );
355 int kerSysGetSdramSize( void );
356 void kerSysGetBootline(char *string, int strLen);
357 void kerSysSetBootline(char *string, int strLen);
358 void kerSysMipsSoftReset(void);
359 void kerSysLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
360 void kerSysLedRegisterHwHandler( BOARD_LED_NAME, HANDLE_LED_FUNC, int );
361 int kerSysFlashSizeGet(void);
362 void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context);
363 void kerSysDeregisterDyingGaspHandler(char *devname);    
364 void kerSysWakeupMonitorTask( void );
365 #endif
366
367 #define BOOT_CFE     0
368 #define BOOT_REDBOOT 1
369
370 extern int boot_loader_type;
371
372 #endif /* _BOARD_H */
373