These changes are the raw update to qemu-2.6.
[kvmfornfv.git] / qemu / roms / SLOF / lib / libnvram / libnvram.code
1 /******************************************************************************
2  * Copyright (c) 2004, 2008 IBM Corporation
3  * All rights reserved.
4  * This program and the accompanying materials
5  * are made available under the terms of the BSD License
6  * which accompanies this distribution, and is available at
7  * http://www.opensource.org/licenses/bsd-license.php
8  *
9  * Contributors:
10  *     IBM Corporation - initial implementation
11  *****************************************************************************/
12 #include <nvram.h>
13
14 PRIM(nvram_X2d_c_X40)
15         unsigned int offset = TOS.u;
16         TOS.u=nvram_read_byte(offset);
17 MIRP
18
19 PRIM(nvram_X2d_w_X40)
20         unsigned int offset = TOS.u;
21         TOS.u=nvram_read_word(offset);
22 MIRP
23
24 PRIM(nvram_X2d_l_X40)
25         unsigned int offset = TOS.u;
26         TOS.u=nvram_read_dword(offset);
27 MIRP
28
29 PRIM(nvram_X2d_x_X40)
30         unsigned int offset = TOS.u;
31         TOS.u=nvram_read_qword(offset);
32 MIRP
33
34 PRIM(nvram_X2d_c_X21)
35         nvram_write_byte(TOS.u, NOS.u);
36         POP; POP;
37 MIRP
38
39 PRIM(nvram_X2d_w_X21)
40         nvram_write_word(TOS.u, NOS.u);
41         POP; POP;
42 MIRP
43
44 PRIM(nvram_X2d_l_X21)
45         nvram_write_dword(TOS.u, NOS.u);
46         POP; POP;
47 MIRP
48
49 PRIM(nvram_X2d_x_X21)
50         nvram_write_qword(TOS.u, NOS.u);
51         POP; POP;
52 MIRP
53
54 /* get-nvram-partition ( type -- addr len FAILED? ) */
55 PRIM(get_X2d_nvram_X2d_partition)
56         partition_t partition;
57         unsigned int ptype = TOS.u;
58         partition = get_partition(ptype, NULL);
59         if(partition.len && partition.len != -1) {
60                 TOS.u = partition.addr;
61                 PUSH;
62                 TOS.u = partition.len;
63                 PUSH;
64                 TOS.u = 0; // FALSE
65         } else {
66                 TOS.u = -1; // TRUE
67         }
68 MIRP
69
70 /* get-named-nvram-partition ( name.addr name.len -- addr len FAILED? ) */
71 PRIM(get_X2d_named_X2d_nvram_X2d_partition)
72         partition_t partition;
73         int namelen = TOS.n; POP;
74
75         partition = get_partition_fs(TOS.a, namelen);
76
77         if(partition.len && partition.len != -1) {
78                 TOS.u = partition.addr;
79                 PUSH;
80                 TOS.u = partition.len;
81                 PUSH;
82                 TOS.u = 0; // FALSE
83         } else {
84                 TOS.u = -1; // TRUE
85         }
86 MIRP
87
88
89
90 /* new-nvram-partition ( type name.addr name.len len -- part.offs part.len FALSE | TRUE) */
91 PRIM(new_X2d_nvram_X2d_partition)
92         int type, len, namelen;
93         partition_t partition;
94         char *name;
95
96         len = TOS.u; POP;
97         namelen = TOS.u; POP;
98         name = (char *)TOS.u; POP;
99         type = TOS.u; POP;
100
101         partition = new_nvram_partition_fs(type, name, namelen, len);
102
103         if(!partition.len) {
104                 PUSH; TOS.u = -1; // TRUE
105         } else {
106                 PUSH; TOS.u = partition.addr;
107                 PUSH; TOS.u = partition.len;
108                 PUSH; TOS.u = 0; // FALSE
109         }
110 MIRP
111
112 /* inrease-nvram-partition ( part.offs part.len new-len -- FALSE | TRUE ) */
113 PRIM(increase_X2d_nvram_X2d_partition)
114         int len, ret;
115         partition_t partition;
116
117         // FIXME
118         partition.addr = TOS.u; POP;
119         partition.len  = TOS.u; POP;
120         len = TOS.u; POP;
121
122         ret=increase_nvram_partition_size(partition, len);
123
124         PUSH;
125
126         if(!ret) 
127                 TOS.u=-1; // TRUE
128         else
129                 TOS.u=0; // FALSE
130
131 MIRP
132
133 PRIM(internal_X2d_reset_X2d_nvram)
134         reset_nvram();
135 MIRP
136
137 PRIM(wipe_X2d_nvram)
138         wipe_nvram();
139 MIRP
140
141 PRIM(nvram_X2d_debug)
142         nvram_debug();
143 MIRP
144
145 // ( part.start part.len name.addr name.len -- var.addr var.len TRUE | false )
146 PRIM(internal_X2d_get_X2d_env)
147         char *name;
148         int namelen;
149         partition_t part;
150         char *val;
151
152         namelen = TOS.u; POP;
153         name = TOS.a; POP;
154         part.len = TOS.u; POP;
155         part.addr = TOS.u; POP;
156
157         val = nvram_get_env(part, name, namelen);
158         if(val) {
159                 PUSH; TOS.a = val;
160                 PUSH; TOS.u = strlen(val);
161                 PUSH; TOS.u = -1; // TRUE
162         } else {
163                 PUSH; TOS.u = 0; // FALSE
164         }
165 MIRP
166
167 // ( part.start part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
168 PRIM(internal_X2d_add_X2d_env)
169         char *name, *val;
170         int namelen, vallen;
171         partition_t part;
172         int ret;
173
174         vallen = TOS.u; POP;
175         val = TOS.a; POP;
176         namelen = TOS.u; POP;
177         name = TOS.a; POP;
178         part.len = TOS.u; POP;
179         part.addr = TOS.u; POP;
180
181         ret = nvram_add_env(part, name, namelen, val, vallen);
182         if(ret) {
183                 PUSH; TOS.u = -1; // TRUE
184         } else {
185                 PUSH; TOS.u = 0; // FALSE
186         }
187 MIRP
188
189 // ( part.addr part.len name.addr name.len -- FALSE|TRUE)
190 PRIM(internal_X2d_del_X2d_env)
191         char *name;
192         int namelen;
193         partition_t part;
194         int ret;
195
196         namelen = TOS.u; POP;
197         name = TOS.a; POP;
198         part.len = TOS.u; POP;
199         part.addr = TOS.u; POP;
200
201         ret = nvram_del_env(part, name, namelen);
202         if(ret) {
203                 PUSH; TOS.u = -1; // TRUE
204         } else {
205                 PUSH; TOS.u = 0; // FALSE
206         }
207
208 MIRP
209
210 // internal-set-env ( part.addr part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
211 PRIM(internal_X2d_set_X2d_env)
212         char *name, *value;
213         int namelen, valuelen;
214         partition_t part;
215         int ret;
216
217         valuelen = TOS.u; POP;
218         value = TOS.a; POP;
219         namelen = TOS.u; POP;
220         name = TOS.a; POP;
221         part.len = TOS.u; POP;
222         part.addr = TOS.u; POP;
223
224         ret = nvram_set_env(part, name, namelen, value, valuelen);
225         if(ret) {
226                 PUSH; TOS.u = -1; // TRUE
227         } else {
228                 PUSH; TOS.u = 0; // FALSE
229         }
230 MIRP
231
232 // ( part.addr part.len -- FALSE|TRUE)
233 PRIM(erase_X2d_nvram_X2d_partition)
234         partition_t part;
235         int ret;
236
237         part.len = TOS.u; POP;
238         part.addr = TOS.u; POP;
239
240         ret=clear_nvram_partition(part);
241         if(ret) {
242                 PUSH; TOS.u = -1; // TRUE
243         } else {
244                 PUSH; TOS.u = 0; // FALSE
245         }
246
247 MIRP
248
249 // ( part.addr part.len -- FALSE|TRUE)
250 PRIM(delete_X2d_nvram_X2d_partition)
251         partition_t part;
252         int ret;
253
254         part.len = TOS.u; POP;
255         part.addr = TOS.u; POP;
256
257         ret=delete_nvram_partition(part);
258         if(ret) {
259                 PUSH; TOS.u = -1; // TRUE
260         } else {
261                 PUSH; TOS.u = 0; // FALSE
262         }
263
264 MIRP
265
266 // ( fetch_token store_token size nvram-addr -- )
267 PRIM(internal_X2d_nvram_X2d_init)
268         void *nvram_addr = TOS.a; POP;
269         uint32_t nvram_size = TOS.u; POP;
270         uint32_t store_token = TOS.u; POP;
271         long fetch_token = TOS.u; POP;
272
273         nvram_init(fetch_token, store_token, nvram_size, nvram_addr);
274 MIRP