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
*****************************************************************************/
14
#define STRING_INIT(str) \
16
char * str##_address; \
19
#define STRING_FROM_STACK(str) \
20
str##_length = TOS.u; POP; \
21
str##_address = TOS.a; POP; \
22
memcpy(str, str##_address, str##_length); \
23
memset(str + str##_length, 0, 255 - str##_length);
26
unsigned int offset = TOS.u;
27
TOS.u=nvram_read_byte(offset);
31
unsigned int offset = TOS.u;
32
TOS.u=nvram_read_word(offset);
36
unsigned int offset = TOS.u;
37
TOS.u=nvram_read_dword(offset);
41
unsigned int offset = TOS.u;
42
TOS.u=nvram_read_qword(offset);
46
nvram_write_byte(TOS.u, NOS.u);
51
nvram_write_word(TOS.u, NOS.u);
56
nvram_write_dword(TOS.u, NOS.u);
61
nvram_write_qword(TOS.u, NOS.u);
65
/* get-nvram-partition ( type -- addr len FAILED? ) */
66
PRIM(get_X2d_nvram_X2d_partition)
67
partition_t partition;
68
unsigned int ptype = TOS.u;
69
partition = get_partition(ptype, NULL);
70
if(partition.len && partition.len != -1) {
71
TOS.u = partition.addr;
73
TOS.u = partition.len;
81
/* get-named-nvram-partition ( name.addr name.len -- addr len FAILED? ) */
82
PRIM(get_X2d_named_X2d_nvram_X2d_partition)
84
partition_t partition;
86
STRING_FROM_STACK(name)
87
partition = get_partition(-1, name);
89
if(partition.len && partition.len != -1) {
91
TOS.u = partition.addr;
93
TOS.u = partition.len;
104
/* new-nvram-partition ( type name.addr name.len len -- part.offs part.len FALSE | TRUE) */
105
PRIM(new_X2d_nvram_X2d_partition)
106
int type, len, i, slen;
107
char name[12], *addr;
108
partition_t partition;
112
addr = (char *)TOS.u; POP;
115
for (i=0; i<12; i++) {
122
partition=new_nvram_partition(type, name, len);
125
PUSH; TOS.u = -1; // TRUE
127
PUSH; TOS.u = partition.addr;
128
PUSH; TOS.u = partition.len;
129
PUSH; TOS.u = 0; // FALSE
133
/* inrease-nvram-partition ( part.offs part.len new-len -- FALSE | TRUE ) */
134
PRIM(increase_X2d_nvram_X2d_partition)
136
partition_t partition;
139
partition.addr = TOS.u; POP;
140
partition.len = TOS.u; POP;
143
ret=increase_nvram_partition_size(partition, len);
154
PRIM(internal_X2d_reset_X2d_nvram)
162
PRIM(nvram_X2d_debug)
166
// ( part.start part.len name.addr name.len -- var.addr var.len TRUE | false )
167
PRIM(internal_X2d_get_X2d_env)
172
STRING_FROM_STACK(name)
173
part.len = TOS.u; POP;
174
part.addr = TOS.u; POP;
176
val=get_env(part, name);
179
PUSH; TOS.u = strlen(val);
180
PUSH; TOS.u = -1; // TRUE
182
PUSH; TOS.u = 0; // FALSE
186
// ( part.start part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
187
PRIM(internal_X2d_add_X2d_env)
193
STRING_FROM_STACK(value)
194
STRING_FROM_STACK(name)
195
part.len = TOS.u; POP;
196
part.addr = TOS.u; POP;
198
ret=add_env(part, name, value);
200
PUSH; TOS.u = -1; // TRUE
202
PUSH; TOS.u = 0; // FALSE
206
// ( part.addr part.len name.addr name.len -- FALSE|TRUE)
207
PRIM(internal_X2d_del_X2d_env)
212
STRING_FROM_STACK(name);
213
part.len = TOS.u; POP;
214
part.addr = TOS.u; POP;
216
ret=del_env(part, name);
218
PUSH; TOS.u = -1; // TRUE
220
PUSH; TOS.u = 0; // FALSE
225
// internal-set-env ( part.addr part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
226
PRIM(internal_X2d_set_X2d_env)
232
STRING_FROM_STACK(value)
233
STRING_FROM_STACK(name)
234
part.len = TOS.u; POP;
235
part.addr = TOS.u; POP;
237
ret=set_env(part, name, value);
239
PUSH; TOS.u = -1; // TRUE
241
PUSH; TOS.u = 0; // FALSE
245
// ( part.addr part.len -- FALSE|TRUE)
246
PRIM(erase_X2d_nvram_X2d_partition)
250
part.len = TOS.u; POP;
251
part.addr = TOS.u; POP;
253
ret=clear_nvram_partition(part);
255
PUSH; TOS.u = -1; // TRUE
257
PUSH; TOS.u = 0; // FALSE
262
// ( part.addr part.len -- FALSE|TRUE)
263
PRIM(delete_X2d_nvram_X2d_partition)
267
part.len = TOS.u; POP;
268
part.addr = TOS.u; POP;
270
ret=delete_nvram_partition(part);
272
PUSH; TOS.u = -1; // TRUE
274
PUSH; TOS.u = 0; // FALSE