source: umon/main/common/moncom.c @ 87db514

Last change on this file since 87db514 was 87db514, checked in by Amar Takhar <amar@…>, on 04/16/15 at 19:26:21

Initial commit of the umon repository.

Prior to this three changes were made:

  • Remove umon_ prefix from parent directories.
  • Collapse main/target/ into main/
  • Remove ports/template/flashtest.scr.ucon script.
  • Property mode set to 100644
File size: 11.2 KB
Line 
1/**************************************************************************
2 *
3 * Copyright (c) 2013 Alcatel-Lucent
4 *
5 * Alcatel Lucent licenses this file to You under the Apache License,
6 * Version 2.0 (the "License"); you may not use this file except in
7 * compliance with the License.  A copy of the License is contained the
8 * file LICENSE at the top level of this repository.
9 * You may also obtain a copy of the License at:
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 **************************************************************************
20 *
21 * moncom.c:
22 *
23 * This function is used by the application to interface to code that
24 * is part of the monitor.  A pointer to this function exists at some
25 * "well-known" address in the monitors space.  This location must be
26 * known by the application (hence... "well-known").
27 *
28 * Original author:     Ed Sutter (ed.sutter@alcatel-lucent.com)
29 *
30 */
31#include "config.h"
32#include "monlib.h"
33#include "genlib.h"
34#include "stddefs.h"
35#include "tfs.h"
36#include "tfsprivate.h"
37#include "monflags.h"
38#include "pci.h"
39#include "i2c.h"
40#include "ether.h"
41#include "flash.h"
42#include "date.h"
43#include "timer.h"
44
45extern int addcommand(struct monCommand *cmdlist, char *cmdlvl);
46extern int profiler(void *);
47static int moncom_pcnt;
48
49int monErrorStub(void);
50
51int
52moncom(int cmd, void *arg1, void *arg2, void *arg3)
53{
54        int     retval;
55       
56        /* eliminate warnings due to arg2 & arg3 not being used...
57         */
58        if (arg2 == arg3)
59                retval = 0;
60        else
61                retval = 0;
62
63        switch(cmd) {
64                case GETMONFUNC_PUTCHAR:
65                        *(unsigned long *)arg1 = (unsigned long)putchar;
66                        break;
67                case GETMONFUNC_GETCHAR:
68                        *(unsigned long *)arg1 = (unsigned long)getchar;
69                        break;
70                case GETMONFUNC_GOTACHAR:
71                        *(unsigned long *)arg1 = (unsigned long)gotachar;
72                        break;
73                case GETMONFUNC_GETBYTES:
74                        *(unsigned long *)arg1 = (unsigned long)getbytes;
75                        break;
76                case GETMONFUNC_PRINTF:
77                        *(unsigned long *)arg1 = (unsigned long)printf;
78                        break;
79                case GETMONFUNC_CPRINTF:
80                        *(unsigned long *)arg1 = (unsigned long)cprintf;
81                        break;
82                case GETMONFUNC_SPRINTF:
83                        *(unsigned long *)arg1 = (unsigned long)sprintf;
84                        break;
85                case GETMONFUNC_RESTART:
86                        *(unsigned long *)arg1 = (unsigned long)monrestart;
87                        break;
88                case GETMONFUNC_GETENV:
89                        *(unsigned long *)arg1 = (unsigned long)getenv;
90                        break;
91                case GETMONFUNC_SETENV:
92                        *(unsigned long *)arg1 = (unsigned long)setenv;
93                        break;
94
95#if !INCLUDE_TFS
96                case GETMONFUNC_TFSINIT:
97                case GETMONFUNC_TFSADD:
98                case GETMONFUNC_TFSUNLINK:
99                case GETMONFUNC_TFSRUN:
100                case GETMONFUNC_TFSNEXT:
101                case GETMONFUNC_TFSFSTAT:
102                case GETMONFUNC_TFSTRUNCATE:
103                case GETMONFUNC_TFSEOF:
104                case GETMONFUNC_TFSSTAT:
105                case GETMONFUNC_TFSREAD:
106                case GETMONFUNC_TFSWRITE:
107                case GETMONFUNC_TFSOPEN:
108                case GETMONFUNC_TFSCLOSE:
109                case GETMONFUNC_TFSSEEK:
110                case GETMONFUNC_TFSGETLINE:
111                case GETMONFUNC_TFSIPMOD:
112                case GETMONFUNC_TFSCTRL:
113                case GETMONFUNC_TFSLINK:
114                case GETMONFUNC_TFSTELL:
115#endif
116#if !INCLUDE_UNZIP
117                case GETMONFUNC_DECOMPRESS:
118#endif
119#if !INCLUDE_MALLOC
120                case GETMONFUNC_MALLOC:
121                case GETMONFUNC_FREE:
122                case GETMONFUNC_HEAPXTEND:
123#endif
124#if !INCLUDE_PROFILER
125                case GETMONFUNC_PROFILER:
126#endif
127#if !INCLUDE_BBC
128                case GETMONFUNC_BBC:
129#endif
130#if !INCLUDE_MEMTRACE
131                case GETMONFUNC_MEMTRACE:
132#endif
133#if !INCLUDE_ETHERNET
134                case GETMONFUNC_SENDENETPKT:
135                case GETMONFUNC_RECVENETPKT:
136#endif
137#if !INCLUDE_ETHERVERBOSE
138                case GETMONFUNC_PRINTPKT:
139#endif
140#if !INCLUDE_FLASH
141                case GETMONFUNC_FLASHWRITE:
142                case GETMONFUNC_FLASHERASE:
143                case GETMONFUNC_FLASHINFO:
144                case GETMONFUNC_FLASHOVRRD:
145#endif
146#if !INCLUDE_PORTCMD
147                case GETMONFUNC_PORTCMD:
148#endif
149#ifndef ALLOW_HANDLER_ASSIGNMENT
150                case GETMONFUNC_ASSIGNHDLR:
151#endif
152#ifndef NO_MONLIB_PCI_STUBS
153                case GETMONFUNC_PCICFGREAD:
154                case GETMONFUNC_PCICFGWRITE:
155                case GETMONFUNC_PCICONTROL:
156#endif
157#ifndef NO_MONLIB_I2C_STUBS
158                case GETMONFUNC_I2CWRITE:
159                case GETMONFUNC_I2CREAD:
160                case GETMONFUNC_I2CCONTROL:
161#endif
162#if !INCLUDE_TIMEOFDAY
163                case GETMONFUNC_TIMEOFDAY:
164#endif
165#if !INCLUDE_SHELLVARS
166                case GETMONFUNC_GETARGV:
167#endif
168                case GETMONFUNC_PIOGET:         /* As of uMon 1.0, these are */
169                case GETMONFUNC_PIOSET:         /* no longer supported. */
170                case GETMONFUNC_PIOCLR:         
171                        *(unsigned long *)arg1 = (unsigned long)monErrorStub;
172                        break;
173
174#if INCLUDE_TFS
175                case GETMONFUNC_TFSINIT:
176                        *(unsigned long *)arg1 = (unsigned long)tfsinit;
177                        break;
178                case GETMONFUNC_TFSADD:
179                        *(unsigned long *)arg1 = (unsigned long)tfsadd;
180                        break;
181                case GETMONFUNC_TFSUNLINK:
182                        *(unsigned long *)arg1 = (unsigned long)tfsunlink;
183                        break;
184                case GETMONFUNC_TFSRUN:
185                        *(unsigned long *)arg1 = (unsigned long)tfsrun;
186                        break;
187                case GETMONFUNC_TFSNEXT:
188                        *(unsigned long *)arg1 = (unsigned long)tfsnext;
189                        break;
190                case GETMONFUNC_TFSFSTAT:
191                        *(unsigned long *)arg1 = (unsigned long)tfsfstat;
192                        break;
193                case GETMONFUNC_TFSTRUNCATE:
194                        *(unsigned long *)arg1 = (unsigned long)tfstruncate;
195                        break;
196                case GETMONFUNC_TFSEOF:
197                        *(unsigned long *)arg1 = (unsigned long)tfseof;
198                        break;
199                case GETMONFUNC_TFSSTAT:
200                        *(unsigned long *)arg1 = (unsigned long)tfsstat;
201                        break;
202                case GETMONFUNC_TFSREAD:
203                        *(unsigned long *)arg1 = (unsigned long)tfsread;
204                        break;
205                case GETMONFUNC_TFSWRITE:
206                        *(unsigned long *)arg1 = (unsigned long)tfswrite;
207                        break;
208                case GETMONFUNC_TFSOPEN:
209                        *(unsigned long *)arg1 = (unsigned long)tfsopen;
210                        break;
211                case GETMONFUNC_TFSCLOSE:
212                        *(unsigned long *)arg1 = (unsigned long)tfsclose;
213                        break;
214                case GETMONFUNC_TFSSEEK:
215                        *(unsigned long *)arg1 = (unsigned long)tfsseek;
216                        break;
217                case GETMONFUNC_TFSGETLINE:
218                        *(unsigned long *)arg1 = (unsigned long)tfsgetline;
219                        break;
220                case GETMONFUNC_TFSIPMOD:
221                        *(unsigned long *)arg1 = (unsigned long)tfsipmod;
222                        break;
223                case GETMONFUNC_TFSCTRL:
224                        *(unsigned long *)arg1 = (unsigned long)tfsctrl;
225                        break;
226                case GETMONFUNC_TFSLINK:
227                        *(unsigned long *)arg1 = (unsigned long)tfslink;
228                        break;
229                case GETMONFUNC_TFSTELL:
230                        *(unsigned long *)arg1 = (unsigned long)tfstell;
231                        break;
232#endif
233#if INCLUDE_UNZIP
234                case GETMONFUNC_DECOMPRESS:
235                        *(unsigned long *)arg1 = (unsigned long)decompress;
236                        break;
237#endif
238#if INCLUDE_MALLOC
239                case GETMONFUNC_MALLOC:
240                        *(unsigned long *)arg1 = (unsigned long)malloc;
241                        break;
242                case GETMONFUNC_FREE:
243                        *(unsigned long *)arg1 = (unsigned long)free;
244                        break;
245                case GETMONFUNC_HEAPXTEND:
246                        *(unsigned long *)arg1 = (unsigned long)extendHeap;
247                        break;
248#endif
249#if INCLUDE_PROFILER
250                case GETMONFUNC_PROFILER:
251                        *(unsigned long *)arg1 = (unsigned long)profiler;
252                        break;
253#endif
254#if INCLUDE_BBC
255                case GETMONFUNC_BBC:
256                        *(unsigned long *)arg1 = (unsigned long)bbc;
257                        break;
258#endif
259#if INCLUDE_MEMTRACE
260                case GETMONFUNC_MEMTRACE:
261                        *(unsigned long *)arg1 = (unsigned long)Mtrace;
262                        break;
263#endif
264#if INCLUDE_ETHERNET
265                case GETMONFUNC_SENDENETPKT:
266                        *(unsigned long *)arg1 = (unsigned long)monSendEnetPkt;
267                        break;
268                case GETMONFUNC_RECVENETPKT:
269                        *(unsigned long *)arg1 = (unsigned long)monRecvEnetPkt;
270                        break;
271#endif
272#if INCLUDE_ETHERVERBOSE
273                case GETMONFUNC_PRINTPKT:
274                        *(unsigned long *)arg1 = (unsigned long)AppPrintPkt;
275                        break;
276#endif
277#if INCLUDE_FLASH
278                case GETMONFUNC_FLASHOVRRD:
279                        *(unsigned long *)arg1 = (unsigned long)FlashOpOverride;
280                        break;
281                case GETMONFUNC_FLASHWRITE:
282                        *(unsigned long *)arg1 = (unsigned long)AppFlashWrite;
283                        break;
284                case GETMONFUNC_FLASHERASE:
285                        *(unsigned long *)arg1 = (unsigned long)AppFlashErase;
286                        break;
287                case GETMONFUNC_FLASHINFO:
288                        *(unsigned long *)arg1 = (unsigned long)sectortoaddr;
289                        break;
290#endif
291#if INCLUDE_PORTCMD
292                case GETMONFUNC_PORTCMD:
293                        *(unsigned long *)arg1 = (unsigned long)portCmd;
294                        break;
295#endif
296#ifdef  ALLOW_HANDLER_ASSIGNMENT
297                case GETMONFUNC_ASSIGNHDLR:
298                        *(unsigned long *)arg1 = (unsigned long)assign_handler;
299                        break;
300#endif
301#ifdef NO_MONLIB_I2C_STUBS
302                case GETMONFUNC_I2CWRITE:
303                        *(unsigned long *)arg1 = (unsigned long)i2cWrite;
304                        break;
305                case GETMONFUNC_I2CREAD:
306                        *(unsigned long *)arg1 = (unsigned long)i2cRead;
307                        break;
308                case GETMONFUNC_I2CCONTROL:
309                        *(unsigned long *)arg1 = (unsigned long)i2cCtrl;
310                        break;
311#endif
312#ifdef NO_MONLIB_PCI_STUBS
313                case GETMONFUNC_PCICFGREAD:
314                        *(unsigned long *)arg1 = (unsigned long)pciCfgRead;
315                        break;
316                case GETMONFUNC_PCICFGWRITE:
317                        *(unsigned long *)arg1 = (unsigned long)pciCfgWrite;
318                        break;
319                case GETMONFUNC_PCICONTROL:
320                        *(unsigned long *)arg1 = (unsigned long)pciCtrl;
321                        break;
322#endif
323#if INCLUDE_TIMEOFDAY
324                case GETMONFUNC_TIMEOFDAY:
325                        *(unsigned long *)arg1 = (unsigned long)timeofday;
326                        break;
327#endif
328#if INCLUDE_SHELLVARS
329                case GETMONFUNC_GETARGV:
330                        *(unsigned long *)arg1 = (unsigned long)getargv;
331                        break;
332#endif
333                case GETMONFUNC_ADDCOMMAND:
334                        *(unsigned long *)arg1 = (unsigned long)addcommand;
335                        break;
336                case GETMONFUNC_DOCOMMAND:
337                        *(unsigned long *)arg1 = (unsigned long)docommand;
338                        break;
339                case GETMONFUNC_CRC16:
340                        *(unsigned long *)arg1 = (unsigned long)xcrc16;
341                        break;
342                case GETMONFUNC_CRC32:
343                        *(unsigned long *)arg1 = (unsigned long)crc32;
344                        break;
345                case GETMONFUNC_INTSOFF:
346                        *(unsigned long *)arg1 = (unsigned long)intsoff;
347                        break;
348                case GETMONFUNC_INTSRESTORE:
349                        *(unsigned long *)arg1 = (unsigned long)intsrestore;
350                        break;
351                case GETMONFUNC_APPEXIT:
352                        *(unsigned long *)arg1 = (unsigned long)appexit;
353                        break;
354                case GETMONFUNC_GETLINE:
355                        *(unsigned long *)arg1 = (unsigned long)getline;
356                        break;
357                case GETMONFUNC_VERSION:
358                        *(unsigned long *)arg1 = (unsigned long)monVersion;
359                        break;
360                case GETMONFUNC_WARMSTART:
361                        *(unsigned long *)arg1 = (unsigned long)AppWarmStart;
362                        break;
363                case GETMONFUNC_MONDELAY:
364                        *(unsigned long *)arg1 = (unsigned long)monDelay;
365                        break;
366                case GETMONFUNC_GETENVP:
367                        *(unsigned long *)arg1 = (unsigned long)getenvp;
368                        break;
369                case GETMONFUNC_REALLOC:
370                        *(unsigned long *)arg1 = (unsigned long)realloc;
371                        break;
372                case GETMONFUNC_GETSYM:
373                        *(unsigned long *)arg1 = (unsigned long)getsym;
374                        break;
375                case GETMONFUNC_WATCHDOG:
376                        *(unsigned long *)arg1 = (unsigned long)monWatchDog;
377                        break;
378                case GETMONFUNC_PRINTMEM:
379                        *(unsigned long *)arg1 = (unsigned long)printMem;
380                        break;
381                case GETMONFUNC_TIMER:
382                        *(unsigned long *)arg1 = (unsigned long)monTimer;
383                        break;
384                case CACHEFTYPE_DFLUSH:
385                        dcacheFlush = (int(*)(char *,int))arg1;
386                        break;
387                case CACHEFTYPE_IINVALIDATE:
388                        icacheInvalidate = (int(*)(char *,int))arg1;
389                        break;
390                case CHARFUNC_PUTCHAR:
391                        remoteputchar = (int(*)(int))arg1;
392                        break;
393                case CHARFUNC_GETCHAR:
394                        remotegetchar = (int(*)(void))arg1;
395                        break;
396                case CHARFUNC_GOTACHAR:
397                        remotegotachar = (int(*)(void))arg1;
398                        break;
399                case CHARFUNC_RAWMODEON:
400                        remoterawon = (int(*)(void))arg1;
401                        break;
402                case CHARFUNC_RAWMODEOFF:
403                        remoterawoff = (int(*)(void))arg1;
404                        break;
405                case ASSIGNFUNC_GETUSERLEVEL:
406                        extgetUsrLvl = (int(*)(void))arg1;
407                        break;
408#ifdef WATCHDOG_ENABLED
409                case ASSIGNFUNC_WATCHDOG:
410                        remoteWatchDog = (int(*)(void))arg1;
411                        break;
412#endif
413                default:
414                        printf("moncom unknown command: 0x%x\n",cmd);
415                        retval = -1;
416                        break;
417        }
418        moncom_pcnt++;
419        return(retval);
420}
421
422int
423monErrorStub(void)
424{
425        printf("ERROR: Facility not included in monitor build\n");
426        return(-1);
427}
Note: See TracBrowser for help on using the repository browser.