www.usr.com/support/gpl/USR9107_release.1.4.tar.gz
[bcm963xx.git] / userapps / broadcom / cfm / util / psi / board_api.c
1 /***************************************************************************
2  * Broadcom Corp. Confidential
3  * Copyright 2001 Broadcom Corp. All Rights Reserved.
4  *
5  * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
6  * SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM.
7  * YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
8  * SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9  *
10  ***************************************************************************
11  * File Name  : board_api.c
12  *
13  * Description: interface for board level calls: flash,
14  *              led, soft reset, free memory page, and memory dump.
15  *              Adapted form flash_api.c by Yen Tran.
16  *
17  * Created on : 02/20/2002  seanl
18  *
19  ***************************************************************************/
20 #include <stdio.h>
21 #include <unistd.h>
22 #include <stdlib.h>
23 #include <errno.h>
24 #include <fcntl.h>      /* open */
25 #include <unistd.h>     /* exit */
26 #include <sys/ioctl.h>  /* ioctl */
27 #include <memory.h>
28
29 #include <bcmtypes.h>
30 #include <board_api.h>
31
32 int boardIoctl(int board_ioctl, BOARD_IOCTL_ACTION action, char *string, int strLen, int offset, char *buf)
33 {
34     BOARD_IOCTL_PARMS IoctlParms;
35     int boardFd = 0;
36
37     boardFd = open("/dev/brcmboard", O_RDWR);
38     if ( boardFd != -1 ) {
39         IoctlParms.string = string;
40         IoctlParms.strLen = strLen;
41         IoctlParms.offset = offset;
42         IoctlParms.action = action;
43         IoctlParms.buf    = buf;
44         ioctl(boardFd, board_ioctl, &IoctlParms);
45         close(boardFd);
46         boardFd = IoctlParms.result;
47     } else
48         printf("Unable to open device /dev/brcmboard.\n");
49
50     return boardFd;
51 }
52 #ifdef USE_ALL
53
54
55 /*****************************************************************************
56 * sysScratchPadGet - get the contents of persistent stratch pad flash memory
57 * INPUT:   tokenId -- token id, ASCIZ tokBuf (up to 15 char)
58 *          tokBuf  -- buf 
59 *          bufLen  -- buf len
60 * RETURNS: 0 - ok, -1 fail.
61 */
62 int sysScratchPadGet(char *tokenId, char *tokBuf, int bufLen)
63 {
64     return (boardIoctl(BOARD_IOCTL_FLASH_READ, SCRATCH_PAD, tokenId, bufLen, bufLen, tokBuf));
65 }
66
67 /*****************************************************************************
68 * sysScratchPadSet - write the contents of persistent scratch pad flash memory
69 * INPUT:   tokenId -- token id, ASCIZ tokBuf (up to 15 char)
70 *          tokBuf  -- buf 
71 *          bufLen  -- buf len
72 * RETURNS: 0 - ok, -1 fail.
73 */
74 int sysScratchPadSet(char *tokenId, char *tokBuf, int bufLen)
75 {
76     return (boardIoctl(BOARD_IOCTL_FLASH_WRITE, SCRATCH_PAD, tokenId, bufLen, bufLen, tokBuf));
77 }
78
79
80 /*****************************************************************************
81 * sysPersistentGet - get the contents of non-volatile RAM,
82 * RETURNS: OK, always.
83 */
84 int sysNvRamGet(char *string, int strLen, int offset)
85 {
86     return (boardIoctl(BOARD_IOCTL_FLASH_READ, NVRAM, string, strLen, offset, ""));
87 }
88
89 /*****************************************************************************
90 * sysPersistentSet - write the contents of non-volatile RAM
91 * RETURNS: OK, always.
92 */
93 int sysNvRamSet(char *string, int strLen, int offset)
94 {
95     return (boardIoctl(BOARD_IOCTL_FLASH_WRITE, NVRAM, string, strLen, offset, ""));
96 }
97
98 /*****************************************************************************
99 * sysNrPagesGet - returns number of free system pages.  Each page is 4K bytes.
100 * RETURNS: Number of 4K pages.
101 */
102 int sysNrPagesGet(void)
103 {
104     return (boardIoctl(BOARD_IOCTL_GET_NR_PAGES, 0, "", 0, 0, ""));
105 }
106
107 /*****************************************************************************
108 * sysDumpAddr - Dump kernel memory.
109 * RETURNS: OK, always.
110 */
111 int sysDumpAddr(char *addr, int len)
112 {
113     return (boardIoctl(BOARD_IOCTL_DUMP_ADDR, 0, addr, len, 0, ""));
114 }
115
116 /*****************************************************************************
117 * sysDumpAddr - Set kernel memory.
118 * RETURNS: OK, always.
119 */
120 int sysSetMemory(char *addr, int size, unsigned long value )
121 {
122     return (boardIoctl(BOARD_IOCTL_SET_MEMORY, 0, addr, size, (int) value, ""));
123 }
124
125 /*****************************************************************************
126  * image points to image to be programmed to flash; size is the size (in bytes)
127  * of the image.
128  * if error, return -1; otherwise return 0
129  */
130
131 #endif // USE_ALL
132
133 /*****************************************************************************
134 * sysPersistentGet - get the contents of persistent flash memory
135 * RETURNS: OK, always.
136 */
137 int sysPersistentGet(char *string, int strLen, int offset)
138 {
139     return (boardIoctl(BOARD_IOCTL_FLASH_READ, PERSISTENT, string, strLen, offset, ""));
140 }
141
142 /*****************************************************************************
143 * sysPersistenSet - write the contents of persistent Scrach Pad flash memory
144 * RETURNS: OK, always.
145 */
146 int sysPersistentSet(char *string, int strLen, int offset)
147 {
148     return (boardIoctl(BOARD_IOCTL_FLASH_WRITE, PERSISTENT, string, strLen, offset, ""));
149 }
150
151 //********************************************************************************
152 // Get PSI size
153 //********************************************************************************
154 int sysGetPsiSize( void )
155 {
156     return( boardIoctl(BOARD_IOCTL_GET_PSI_SIZE, 0, "", 0, 0, "") );
157 }
158
159 int sysFlashImageSet(void *image, int size, int addr,
160     BOARD_IOCTL_ACTION imageType)
161 {
162     int result;
163
164     result = boardIoctl(BOARD_IOCTL_FLASH_WRITE, imageType, image, size, addr, "");
165
166     return(result);
167 }
168
169 /*****************************************************************************
170  * Get flash size 
171  * return int flash size
172  */
173 int sysFlashSizeGet(void)
174 {
175     return (boardIoctl(BOARD_IOCTL_FLASH_READ, FLASH_SIZE, "", 0, 0, ""));
176 }
177
178 /*****************************************************************************
179 * kerSysMipsSoftReset - soft reset the mips. (reboot, go to 0xbfc00000)
180 * RETURNS: NEVER
181 */
182 void sysMipsSoftReset(void)
183 {  
184     boardIoctl(BOARD_IOCTL_MIPS_SOFT_RESET, 0, "", 0, 0, "");
185 }
186
187 //********************************************************************************
188 // Get Chip Id
189 //********************************************************************************
190 int sysGetChipId( void )
191 {
192     return( boardIoctl(BOARD_IOCTL_GET_CHIP_ID, 0, "", 0, 0, "") );
193 }
194
195 //********************************************************************************
196 // Wakeup monitor task
197 //********************************************************************************
198 void sysWakeupMonitorTask(void)
199 {
200     return (boardIoctl(BOARD_IOCTL_WAKEUP_MONITOR_TASK, 0, "", 0, 0, ""));
201 }
202
203 #ifdef USE_ALL
204 //********************************************************************************
205 // LED status display:  ADSL link: DOWN/UP, PPP: DOWN/STARTING/UP
206 //********************************************************************************
207 void sysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
208 {
209     boardIoctl(BOARD_IOCTL_LED_CTRL, 0, "", (int)ledName, (int)ledState, "");
210 }
211
212
213 //********************************************************************************
214 // Get board id
215 //********************************************************************************
216 int sysGetBoardIdName(char *name, int length)
217 {
218     return( boardIoctl(BOARD_IOCTL_GET_ID, 0, name, length, 0, "") );
219 }
220
221
222 //********************************************************************************
223 // Get MAC Address
224 //********************************************************************************
225 int sysGetMacAddress( unsigned char *pucaAddr, unsigned long ulId )
226 {
227     return(boardIoctl(BOARD_IOCTL_GET_MAC_ADDRESS, 0, pucaAddr, 6, (int) ulId, ""));
228 }
229
230
231 //********************************************************************************
232 // Release MAC Address
233 //********************************************************************************
234 int sysReleaseMacAddress( unsigned char *pucaAddr )
235 {
236     return( boardIoctl(BOARD_IOCTL_RELEASE_MAC_ADDRESS, 0, pucaAddr, 6, 0, "") );
237 }
238
239
240 //********************************************************************************
241 // Get SDRAM size
242 //********************************************************************************
243 int sysGetSdramSize( void )
244 {
245     return( boardIoctl(BOARD_IOCTL_GET_SDRAM_SIZE, 0, "", 0, 0, "") );
246 }
247
248
249 /*****************************************************************************
250 * sysGetBooline - get bootline
251 * RETURNS: OK, always.
252 */
253 int sysGetBootline(char *string, int strLen)
254 {
255     return (boardIoctl(BOARD_IOCTL_GET_BOOTLINE, 0, string, strLen, 0, ""));
256 }
257
258 /*****************************************************************************
259 * sysSetBootline - write the bootline to nvram
260 * RETURNS: OK, always.
261 */
262 int sysSetBootline(char *string, int strLen)
263 {
264     return (boardIoctl(BOARD_IOCTL_SET_BOOTLINE, 0, string, strLen, 0, ""));
265 }
266
267 //********************************************************************************
268 // Get MAC Address
269 //********************************************************************************
270 int sysGetBaseMacAddress( unsigned char *pucaAddr )
271 {
272     return(boardIoctl(BOARD_IOCTL_GET_BASE_MAC_ADDRESS, 0, pucaAddr, 6, 0, ""));
273 }
274
275 //********************************************************************************
276 // Get number of Ethernet phys
277 //********************************************************************************
278 int sysGetNumEnet(void)
279 {
280     return(boardIoctl(BOARD_IOCTL_GET_NUM_ENET, 0, "", 0, 0, ""));
281 }
282
283 //********************************************************************************
284 // Get CFE vesion info
285 //********************************************************************************
286 int sysGetCFEVersion(char *string, int strLen)
287 {
288     return (boardIoctl(BOARD_IOCTL_GET_CFE_VER, 0, string, strLen, 0, ""));
289 }
290
291 //********************************************************************************
292 // Get board Ethernet configuration
293 //********************************************************************************
294 int sysGetEnetCfg(char *string, int strLen)
295 {
296     return(boardIoctl(BOARD_IOCTL_GET_ENET_CFG, 0, string, strLen, 0, ""));
297 }
298 //********************************************************************************
299 // Get Wi-Fi Country selection
300 //********************************************************************************
301 int sysGetCountry(char *string, int strLen)
302 {
303     return(boardIoctl(BOARD_IOCTL_GET_CNTRY_SEL, 0, string, strLen, 0, ""));
304 }
305
306 //********************************************************************************
307 // Set monitor loop file descriptor
308 //********************************************************************************
309 int sysSetMonitorFd(int fd)
310 {
311     return (boardIoctl(BOARD_IOCTL_SET_MONITOR_FD, 0, "", 0, fd, ""));
312 }
313
314 #endif // USE_ALL
315