]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/cygmon/v2_0/misc/bsp/common/sysinfo.c
Initial revision
[karo-tx-redboot.git] / packages / cygmon / v2_0 / misc / bsp / common / sysinfo.c
1 //==========================================================================
2 //
3 //      sysinfo.c
4 //
5 //      Interface for getting system information.
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 //
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
42 //
43 // Author(s):    
44 // Contributors: gthomas
45 // Date:         1999-10-20
46 // Purpose:      Interface for getting system information.
47 // Description:  
48 //               
49 //
50 //####DESCRIPTIONEND####
51 //
52 //=========================================================================
53
54
55 #include <stdlib.h>
56 #include <bsp/bsp.h>
57 #include "bsp_if.h"
58
59
60 /*
61  * In order to construct the _bsp_memory_list, some board specific code
62  * may have to size RAM regions. To do this easily and reliably, the code
63  * needs to run from ROM before .bss and .data sections are initialized.
64  * This leads to the problem of where to store the results of the memory
65  * sizing tests. In this case, the _bsp_init_stack routine which sizes
66  * memory and sets up the stack will place the board-specific information
67  * on the stack and return with the stack pointer pointing to a pointer to
68  * the information. That is, addr_of_info = *(void **)sp. The architecture
69  * specific code will then copy that pointer to the _bsp_ram_info_ptr variable
70  * after initializing the .data and .bss sections.
71  */
72 void *_bsp_ram_info_ptr;
73
74 /*
75  *  Name of CPU and board. Should be overridden by arch/board specific
76  *  code.
77  */
78 struct bsp_platform_info _bsp_platform_info = {
79     "Unknown",  /* cpu name */
80     "Unknown",  /* board name */
81     ""          /* extra info */
82 };
83
84
85 /*
86  *  Information about possible data cache. Should be overridden by
87  *  by arch/board specific code.
88  */
89 struct bsp_cachesize_info _bsp_dcache_info = {
90     0, 0, 0
91 };
92
93
94 /*
95  *  Information about possible instruction cache. Should be overridden by
96  *  by arch/board specific code.
97  */
98 struct bsp_cachesize_info _bsp_icache_info = {
99     0, 0, 0
100 };
101
102
103 /*
104  *  Information about possible secondary cache. Should be overridden by
105  *  by arch/board specific code.
106  */
107 struct bsp_cachesize_info _bsp_scache_info = {
108     0, 0, 0
109 };
110
111
112
113 int
114 _bsp_sysinfo(enum bsp_info_id id, va_list ap)
115 {
116     int  index, rval = 0;
117     void *p;
118
119     switch (id) {
120       case BSP_INFO_PLATFORM:
121         p = va_arg(ap, void *);
122         *(struct bsp_platform_info *)p = _bsp_platform_info;
123         break;
124
125       case BSP_INFO_DCACHE:
126         p = va_arg(ap, void *);
127         *(struct bsp_cachesize_info *)p = _bsp_dcache_info;
128         break;
129
130       case BSP_INFO_ICACHE:
131         p = va_arg(ap, void *);
132         *(struct bsp_cachesize_info *)p = _bsp_icache_info;
133         break;
134
135       case BSP_INFO_SCACHE:
136         p = va_arg(ap, void *);
137         *(struct bsp_cachesize_info *)p = _bsp_scache_info;
138         break;
139
140       case BSP_INFO_MEMORY:
141         index = va_arg(ap, int);
142         p = va_arg(ap, void *);
143
144         if (index >= 0 && index < _bsp_num_mem_regions)
145             *(struct bsp_mem_info *)p = _bsp_memory_list[index];
146         else
147             rval = -1;
148         break;
149
150       case BSP_INFO_COMM:
151         index = va_arg(ap, int);
152         p = va_arg(ap, void *);
153
154         if (index >= 0 && index < _bsp_num_comms)
155             *(struct bsp_comm_info *)p = _bsp_comm_list[index].info;
156         else if (index == _bsp_num_comms && _bsp_net_channel != NULL)
157             *(struct bsp_comm_info *)p = _bsp_net_channel->info;
158         else
159             rval = -1;
160         break;
161
162       default:
163         rval =  -1;
164     }
165
166     return rval;
167 }
168
169
170