3 Copyright 2002 Broadcom Corp. All Rights Reserved.
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.
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
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.
19 /***********************************************************************/
23 /* PURPOSE: Board specific information. This module should include */
24 /* all base device addresses and board specific macros. */
26 /***********************************************************************/
33 /*****************************************************************************/
34 /* Misc board definitions */
35 /*****************************************************************************/
37 /*****************************************************************************/
38 /* Physical Memory Map */
39 /*****************************************************************************/
41 #define PHYS_DRAM_BASE 0x00000000 /* Dynamic RAM Base */
42 #define PHYS_FLASH_BASE 0x1FC00000 /* Flash Memory */
44 /*****************************************************************************/
45 /* Note that the addresses above are physical addresses and that programs */
46 /* have to use converted addresses defined below: */
47 /*****************************************************************************/
48 #define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
49 #define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
50 #define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
52 /*****************************************************************************/
53 /* Select the PLL value to get the desired CPU clock frequency. */
56 /*****************************************************************************/
57 #define FPERIPH 50000000
60 #define BLK64K (64*ONEK)
61 #define FLASH45_BLKS_BOOT_ROM 1
62 #define FLASH45_LENGTH_BOOT_ROM (FLASH45_BLKS_BOOT_ROM * BLK64K)
63 #define FLASH_RESERVED_AT_END (64*ONEK) /*reserved for PSI, scratch pad*/
65 /*****************************************************************************/
66 /* Note that the addresses above are physical addresses and that programs */
67 /* have to use converted addresses defined below: */
68 /*****************************************************************************/
69 #define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
70 #define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
71 #define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
73 /*****************************************************************************/
74 /* Select the PLL value to get the desired CPU clock frequency. */
77 /*****************************************************************************/
78 #define FPERIPH 50000000
80 #define SDRAM_TYPE_ADDRESS_OFFSET 16
81 #define NVRAM_DATA_OFFSET 0x0580
82 #define NVRAM_DATA_ID 0x0f1e2d3c
83 #define BOARD_SDRAM_TYPE *(unsigned long *) \
84 (FLASH_BASE + SDRAM_TYPE_ADDRESS_OFFSET)
87 #define BLK64K (64*ONEK)
89 // nvram and psi flash definitions for 45
90 #define FLASH45_LENGTH_NVRAM ONEK // 1k nvram
91 #define NVRAM_PSI_DEFAULT 24 // default psi in K byes
93 /*****************************************************************************/
94 /* NVRAM Offset and definition */
95 /*****************************************************************************/
97 #define NVRAM_VERSION_NUMBER 2
98 #define NVRAM_VERSION_NUMBER_ADDRESS 0
100 #define NVRAM_BOOTLINE_LEN 256
101 #define NVRAM_BOARD_ID_STRING_LEN 16
102 #define NVRAM_MAC_ADDRESS_LEN 6
103 #define NVRAM_MAC_COUNT_MAX 32
105 /*****************************************************************************/
107 /*****************************************************************************/
109 #define CFE_VERSION_OFFSET 0x0570
110 #define CFE_VERSION_MARK_SIZE 5
111 #define CFE_VERSION_SIZE 5
115 unsigned long ulVersion;
116 char szBootline[NVRAM_BOOTLINE_LEN];
117 char szBoardId[NVRAM_BOARD_ID_STRING_LEN];
118 unsigned long ulReserved1[2];
119 unsigned long ulNumMacAddrs;
120 unsigned char ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
122 char chCountry[4]; // USR9108
123 unsigned long ulCheckSum;
124 } NVRAM_DATA, *PNVRAM_DATA;
127 /*****************************************************************************/
128 /* board ioctl calls for flash, led and some other utilities */
129 /*****************************************************************************/
132 /* Defines. for board driver */
133 #define BOARD_IOCTL_MAGIC 'B'
134 #define BOARD_DRV_MAJOR 206
136 #define MAC_ADDRESS_ANY (unsigned long) -1
138 #define BOARD_IOCTL_FLASH_INIT \
139 _IOWR(BOARD_IOCTL_MAGIC, 0, BOARD_IOCTL_PARMS)
141 #define BOARD_IOCTL_FLASH_WRITE \
142 _IOWR(BOARD_IOCTL_MAGIC, 1, BOARD_IOCTL_PARMS)
144 #define BOARD_IOCTL_FLASH_READ \
145 _IOWR(BOARD_IOCTL_MAGIC, 2, BOARD_IOCTL_PARMS)
147 #define BOARD_IOCTL_GET_NR_PAGES \
148 _IOWR(BOARD_IOCTL_MAGIC, 3, BOARD_IOCTL_PARMS)
150 #define BOARD_IOCTL_DUMP_ADDR \
151 _IOWR(BOARD_IOCTL_MAGIC, 4, BOARD_IOCTL_PARMS)
153 #define BOARD_IOCTL_SET_MEMORY \
154 _IOWR(BOARD_IOCTL_MAGIC, 5, BOARD_IOCTL_PARMS)
156 #define BOARD_IOCTL_MIPS_SOFT_RESET \
157 _IOWR(BOARD_IOCTL_MAGIC, 6, BOARD_IOCTL_PARMS)
159 #define BOARD_IOCTL_LED_CTRL \
160 _IOWR(BOARD_IOCTL_MAGIC, 7, BOARD_IOCTL_PARMS)
162 #define BOARD_IOCTL_GET_ID \
163 _IOWR(BOARD_IOCTL_MAGIC, 8, BOARD_IOCTL_PARMS)
165 #define BOARD_IOCTL_GET_MAC_ADDRESS \
166 _IOWR(BOARD_IOCTL_MAGIC, 9, BOARD_IOCTL_PARMS)
168 #define BOARD_IOCTL_RELEASE_MAC_ADDRESS \
169 _IOWR(BOARD_IOCTL_MAGIC, 10, BOARD_IOCTL_PARMS)
171 #define BOARD_IOCTL_GET_PSI_SIZE \
172 _IOWR(BOARD_IOCTL_MAGIC, 11, BOARD_IOCTL_PARMS)
174 #define BOARD_IOCTL_GET_SDRAM_SIZE \
175 _IOWR(BOARD_IOCTL_MAGIC, 12, BOARD_IOCTL_PARMS)
177 #define BOARD_IOCTL_GET_ENET_MODE_FLAG \
178 _IOWR(BOARD_IOCTL_MAGIC, 13, BOARD_IOCTL_PARMS)
180 #define BOARD_IOCTL_SET_ENET_MODE_FLAG \
181 _IOWR(BOARD_IOCTL_MAGIC, 14, BOARD_IOCTL_PARMS)
183 #define BOARD_IOCTL_GET_BOOTLINE \
184 _IOWR(BOARD_IOCTL_MAGIC, 15, BOARD_IOCTL_PARMS)
186 #define BOARD_IOCTL_SET_BOOTLINE \
187 _IOWR(BOARD_IOCTL_MAGIC, 16, BOARD_IOCTL_PARMS)
189 #define BOARD_IOCTL_GET_BASE_MAC_ADDRESS \
190 _IOWR(BOARD_IOCTL_MAGIC, 17, BOARD_IOCTL_PARMS)
192 #define BOARD_IOCTL_GET_CHIP_ID \
193 _IOWR(BOARD_IOCTL_MAGIC, 18, BOARD_IOCTL_PARMS)
195 #define BOARD_IOCTL_GET_NUM_ENET \
196 _IOWR(BOARD_IOCTL_MAGIC, 19, BOARD_IOCTL_PARMS)
198 #define BOARD_IOCTL_GET_CFE_VER \
199 _IOWR(BOARD_IOCTL_MAGIC, 20, BOARD_IOCTL_PARMS)
201 #define BOARD_IOCTL_GET_ENET_CFG \
202 _IOWR(BOARD_IOCTL_MAGIC, 21, BOARD_IOCTL_PARMS)
204 #define BOARD_IOCTL_GET_WLAN_ANT_INUSE \
205 _IOWR(BOARD_IOCTL_MAGIC, 22, BOARD_IOCTL_PARMS)
207 #define BOARD_IOCTL_SET_TRIGGER_EVENT \
208 _IOWR(BOARD_IOCTL_MAGIC, 23, BOARD_IOCTL_PARMS)
210 #define BOARD_IOCTL_GET_TRIGGER_EVENT \
211 _IOWR(BOARD_IOCTL_MAGIC, 24, BOARD_IOCTL_PARMS)
213 #define BOARD_IOCTL_UNSET_TRIGGER_EVENT \
214 _IOWR(BOARD_IOCTL_MAGIC, 25, BOARD_IOCTL_PARMS)
216 #define BOARD_IOCTL_SET_SES_LED \
217 _IOWR(BOARD_IOCTL_MAGIC, 26, BOARD_IOCTL_PARMS)
219 #define BOARD_IOCTL_GET_CNTRY_SEL \
220 _IOWR(BOARD_IOCTL_MAGIC, 27, BOARD_IOCTL_PARMS)
223 // for the action in BOARD_IOCTL_PARMS for flash operation
234 } BOARD_IOCTL_ACTION;
237 typedef struct boardIoctParms
243 BOARD_IOCTL_ACTION action; /* flash read/write: nvram, persistent, bcm image */
259 kLedEnd, // NOTE: Insert the new led name before this one. Alway stay at the end.
264 kLedStateOff, /* turn led off */
265 kLedStateOn, /* turn led on */
266 kLedStateFail, /* turn led on red */
267 kLedStateBlinkOnce, /* blink once, ~100ms and ignore the same call during the 100ms period */
268 kLedStateSlowBlinkContinues, /* slow blink continues at ~600ms interval */
269 kLedStateFastBlinkContinues, /* fast blink continues at ~200ms interval */
273 // virtual and physical map pair defined in board.c
274 typedef struct ledmappair
276 BOARD_LED_NAME ledName; // virtual led name
277 BOARD_LED_STATE ledInitState; // initial led state when the board boots.
278 unsigned short ledMask; // physical GPIO pin mask
279 unsigned short ledActiveLow; // reset bit to turn on LED
280 unsigned short ledMaskFail; // physical GPIO pin mask for state failure
281 unsigned short ledActiveLowFail;// reset bit to turn on LED
282 } LED_MAP_PAIR, *PLED_MAP_PAIR;
284 typedef void (*HANDLE_LED_FUNC)(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState);
286 /* Flash storage address information that is determined by the flash driver. */
287 typedef struct flashaddrinfo
289 int flash_persistent_start_blk;
290 int flash_persistent_number_blk;
291 int flash_persistent_length;
292 unsigned long flash_persistent_blk_offset;
293 int flash_scratch_pad_start_blk; // start before psi (SP_BUF_LEN)
294 int flash_scratch_pad_number_blk;
295 int flash_scratch_pad_length;
296 unsigned long flash_scratch_pad_blk_offset;
297 int flash_nvram_start_blk;
298 int flash_nvram_number_blk;
299 int flash_nvram_length;
300 unsigned long flash_nvram_blk_offset;
301 } FLASH_ADDR_INFO, *PFLASH_ADDR_INFO;
303 // scratch pad defines
304 /* SP - Persisten Scratch Pad format:
307 tokenId-1 len : 4 bytes
311 tokenId-n len : 4 bytes
315 #define MAGIC_NUM_LEN 8
316 #define MAGIC_NUMBER "gOGoBrCm"
317 #define TOKEN_NAME_LEN 16
319 #define SP_MAX_LEN 8 * 1024 // 8k buf before psi
320 #define SP_RESERVERD 16
322 typedef struct _SP_HEADER
324 char SPMagicNum[MAGIC_NUM_LEN]; // 8 bytes of magic number
325 int SPVersion; // version number
326 int SPUsedLen; // used sp len
327 char SPReserved[SP_RESERVERD]; // reservied, total 32 bytes
328 } SP_HEADER, *PSP_HEADER;
330 typedef struct _TOKEN_DEF
332 char tokenName[TOKEN_NAME_LEN];
334 } SP_TOKEN, *PSP_TOKEN;
337 /*****************************************************************************/
338 /* Function Prototypes */
339 /*****************************************************************************/
340 #if !defined(__ASM_ASM_H)
341 void dumpaddr( unsigned char *pAddr, int nLen );
343 void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info);
344 int kerSysNvRamGet(char *string, int strLen, int offset);
345 int kerSysNvRamSet(char *string, int strLen, int offset);
346 int kerSysPersistentGet(char *string, int strLen, int offset);
347 int kerSysPersistentSet(char *string, int strLen, int offset);
348 int kerSysScratchPadGet(char *tokName, char *tokBuf, int tokLen);
349 int kerSysScratchPadSet(char *tokName, char *tokBuf, int tokLen);
350 int kerSysBcmImageSet( int flash_start_addr, char *string, int size);
351 int kerSysGetMacAddress( unsigned char *pucaAddr, unsigned long ulId );
352 int kerSysReleaseMacAddress( unsigned char *pucaAddr );
353 int kerSysGetSdramSize( void );
354 void kerSysGetBootline(char *string, int strLen);
355 void kerSysSetBootline(char *string, int strLen);
356 void kerSysMipsSoftReset(void);
357 void kerSysLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
358 void kerSysLedRegisterHwHandler( BOARD_LED_NAME, HANDLE_LED_FUNC, int );
359 int kerSysFlashSizeGet(void);
366 #endif /* _BOARD_H */