1 /******************************************************************************
2 * Copyright (c) 2004, 2008 IBM Corporation
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
10 * IBM Corporation - initial implementation
11 *****************************************************************************/
15 unsigned int offset = TOS.u;
16 TOS.u=nvram_read_byte(offset);
20 unsigned int offset = TOS.u;
21 TOS.u=nvram_read_word(offset);
25 unsigned int offset = TOS.u;
26 TOS.u=nvram_read_dword(offset);
30 unsigned int offset = TOS.u;
31 TOS.u=nvram_read_qword(offset);
35 nvram_write_byte(TOS.u, NOS.u);
40 nvram_write_word(TOS.u, NOS.u);
45 nvram_write_dword(TOS.u, NOS.u);
50 nvram_write_qword(TOS.u, NOS.u);
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;
62 TOS.u = partition.len;
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;
75 partition = get_partition_fs(TOS.a, namelen);
77 if(partition.len && partition.len != -1) {
78 TOS.u = partition.addr;
80 TOS.u = partition.len;
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;
98 name = (char *)TOS.u; POP;
101 partition = new_nvram_partition_fs(type, name, namelen, len);
104 PUSH; TOS.u = -1; // TRUE
106 PUSH; TOS.u = partition.addr;
107 PUSH; TOS.u = partition.len;
108 PUSH; TOS.u = 0; // FALSE
112 /* inrease-nvram-partition ( part.offs part.len new-len -- FALSE | TRUE ) */
113 PRIM(increase_X2d_nvram_X2d_partition)
115 partition_t partition;
118 partition.addr = TOS.u; POP;
119 partition.len = TOS.u; POP;
122 ret=increase_nvram_partition_size(partition, len);
133 PRIM(internal_X2d_reset_X2d_nvram)
141 PRIM(nvram_X2d_debug)
145 // ( part.start part.len name.addr name.len -- var.addr var.len TRUE | false )
146 PRIM(internal_X2d_get_X2d_env)
152 namelen = TOS.u; POP;
154 part.len = TOS.u; POP;
155 part.addr = TOS.u; POP;
157 val = nvram_get_env(part, name, namelen);
160 PUSH; TOS.u = strlen(val);
161 PUSH; TOS.u = -1; // TRUE
163 PUSH; TOS.u = 0; // FALSE
167 // ( part.start part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
168 PRIM(internal_X2d_add_X2d_env)
176 namelen = TOS.u; POP;
178 part.len = TOS.u; POP;
179 part.addr = TOS.u; POP;
181 ret = nvram_add_env(part, name, namelen, val, vallen);
183 PUSH; TOS.u = -1; // TRUE
185 PUSH; TOS.u = 0; // FALSE
189 // ( part.addr part.len name.addr name.len -- FALSE|TRUE)
190 PRIM(internal_X2d_del_X2d_env)
196 namelen = TOS.u; POP;
198 part.len = TOS.u; POP;
199 part.addr = TOS.u; POP;
201 ret = nvram_del_env(part, name, namelen);
203 PUSH; TOS.u = -1; // TRUE
205 PUSH; TOS.u = 0; // FALSE
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)
213 int namelen, valuelen;
217 valuelen = TOS.u; POP;
219 namelen = TOS.u; POP;
221 part.len = TOS.u; POP;
222 part.addr = TOS.u; POP;
224 ret = nvram_set_env(part, name, namelen, value, valuelen);
226 PUSH; TOS.u = -1; // TRUE
228 PUSH; TOS.u = 0; // FALSE
232 // ( part.addr part.len -- FALSE|TRUE)
233 PRIM(erase_X2d_nvram_X2d_partition)
237 part.len = TOS.u; POP;
238 part.addr = TOS.u; POP;
240 ret=clear_nvram_partition(part);
242 PUSH; TOS.u = -1; // TRUE
244 PUSH; TOS.u = 0; // FALSE
249 // ( part.addr part.len -- FALSE|TRUE)
250 PRIM(delete_X2d_nvram_X2d_partition)
254 part.len = TOS.u; POP;
255 part.addr = TOS.u; POP;
257 ret=delete_nvram_partition(part);
259 PUSH; TOS.u = -1; // TRUE
261 PUSH; TOS.u = 0; // FALSE
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;
273 nvram_init(fetch_token, store_token, nvram_size, nvram_addr);