|
|
1.1 ! root 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: #define STRING_INIT(str) \ ! 15: char str[255]; \ ! 16: char * str##_address; \ ! 17: int str##_length; ! 18: ! 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); ! 24: ! 25: PRIM(nvram_X2d_c_X40) ! 26: unsigned int offset = TOS.u; ! 27: TOS.u=nvram_read_byte(offset); ! 28: MIRP ! 29: ! 30: PRIM(nvram_X2d_w_X40) ! 31: unsigned int offset = TOS.u; ! 32: TOS.u=nvram_read_word(offset); ! 33: MIRP ! 34: ! 35: PRIM(nvram_X2d_l_X40) ! 36: unsigned int offset = TOS.u; ! 37: TOS.u=nvram_read_dword(offset); ! 38: MIRP ! 39: ! 40: PRIM(nvram_X2d_x_X40) ! 41: unsigned int offset = TOS.u; ! 42: TOS.u=nvram_read_qword(offset); ! 43: MIRP ! 44: ! 45: PRIM(nvram_X2d_c_X21) ! 46: nvram_write_byte(TOS.u, NOS.u); ! 47: POP; POP; ! 48: MIRP ! 49: ! 50: PRIM(nvram_X2d_w_X21) ! 51: nvram_write_word(TOS.u, NOS.u); ! 52: POP; POP; ! 53: MIRP ! 54: ! 55: PRIM(nvram_X2d_l_X21) ! 56: nvram_write_dword(TOS.u, NOS.u); ! 57: POP; POP; ! 58: MIRP ! 59: ! 60: PRIM(nvram_X2d_x_X21) ! 61: nvram_write_qword(TOS.u, NOS.u); ! 62: POP; POP; ! 63: MIRP ! 64: ! 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; ! 72: PUSH; ! 73: TOS.u = partition.len; ! 74: PUSH; ! 75: TOS.u = 0; // FALSE ! 76: } else { ! 77: TOS.u = -1; // TRUE ! 78: } ! 79: MIRP ! 80: ! 81: /* get-named-nvram-partition ( name.addr name.len -- addr len FAILED? ) */ ! 82: PRIM(get_X2d_named_X2d_nvram_X2d_partition) ! 83: STRING_INIT(name) ! 84: partition_t partition; ! 85: ! 86: STRING_FROM_STACK(name) ! 87: partition = get_partition(-1, name); ! 88: ! 89: if(partition.len && partition.len != -1) { ! 90: PUSH; ! 91: TOS.u = partition.addr; ! 92: PUSH; ! 93: TOS.u = partition.len; ! 94: PUSH; ! 95: TOS.u = 0; // FALSE ! 96: } else { ! 97: PUSH; ! 98: TOS.u = -1; // TRUE ! 99: } ! 100: MIRP ! 101: ! 102: ! 103: ! 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; ! 109: ! 110: len = TOS.u; POP; ! 111: slen = TOS.u; POP; ! 112: addr = (char *)TOS.u; POP; ! 113: type = TOS.u; POP; ! 114: ! 115: for (i=0; i<12; i++) { ! 116: if(slen>i) ! 117: name[i]=addr[i]; ! 118: else ! 119: name[i]=0; ! 120: } ! 121: ! 122: partition=new_nvram_partition(type, name, len); ! 123: ! 124: if(!partition.len) { ! 125: PUSH; TOS.u = -1; // TRUE ! 126: } else { ! 127: PUSH; TOS.u = partition.addr; ! 128: PUSH; TOS.u = partition.len; ! 129: PUSH; TOS.u = 0; // FALSE ! 130: } ! 131: MIRP ! 132: ! 133: /* inrease-nvram-partition ( part.offs part.len new-len -- FALSE | TRUE ) */ ! 134: PRIM(increase_X2d_nvram_X2d_partition) ! 135: int len, ret; ! 136: partition_t partition; ! 137: ! 138: // FIXME ! 139: partition.addr = TOS.u; POP; ! 140: partition.len = TOS.u; POP; ! 141: len = TOS.u; POP; ! 142: ! 143: ret=increase_nvram_partition_size(partition, len); ! 144: ! 145: PUSH; ! 146: ! 147: if(!ret) ! 148: TOS.u=-1; // TRUE ! 149: else ! 150: TOS.u=0; // FALSE ! 151: ! 152: MIRP ! 153: ! 154: PRIM(internal_X2d_reset_X2d_nvram) ! 155: reset_nvram(); ! 156: MIRP ! 157: ! 158: PRIM(wipe_X2d_nvram) ! 159: wipe_nvram(); ! 160: MIRP ! 161: ! 162: PRIM(nvram_X2d_debug) ! 163: nvram_debug(); ! 164: MIRP ! 165: ! 166: // ( part.start part.len name.addr name.len -- var.addr var.len TRUE | false ) ! 167: PRIM(internal_X2d_get_X2d_env) ! 168: STRING_INIT(name) ! 169: partition_t part; ! 170: char *val; ! 171: ! 172: STRING_FROM_STACK(name) ! 173: part.len = TOS.u; POP; ! 174: part.addr = TOS.u; POP; ! 175: ! 176: val=get_env(part, name); ! 177: if(val) { ! 178: PUSH; TOS.a = val; ! 179: PUSH; TOS.u = strlen(val); ! 180: PUSH; TOS.u = -1; // TRUE ! 181: } else { ! 182: PUSH; TOS.u = 0; // FALSE ! 183: } ! 184: MIRP ! 185: ! 186: // ( part.start part.len name.addr name.len val.addr val.len -- FALSE|TRUE) ! 187: PRIM(internal_X2d_add_X2d_env) ! 188: STRING_INIT(name) ! 189: STRING_INIT(value) ! 190: partition_t part; ! 191: int ret; ! 192: ! 193: STRING_FROM_STACK(value) ! 194: STRING_FROM_STACK(name) ! 195: part.len = TOS.u; POP; ! 196: part.addr = TOS.u; POP; ! 197: ! 198: ret=add_env(part, name, value); ! 199: if(ret) { ! 200: PUSH; TOS.u = -1; // TRUE ! 201: } else { ! 202: PUSH; TOS.u = 0; // FALSE ! 203: } ! 204: MIRP ! 205: ! 206: // ( part.addr part.len name.addr name.len -- FALSE|TRUE) ! 207: PRIM(internal_X2d_del_X2d_env) ! 208: STRING_INIT(name) ! 209: partition_t part; ! 210: int ret; ! 211: ! 212: STRING_FROM_STACK(name); ! 213: part.len = TOS.u; POP; ! 214: part.addr = TOS.u; POP; ! 215: ! 216: ret=del_env(part, name); ! 217: if(ret) { ! 218: PUSH; TOS.u = -1; // TRUE ! 219: } else { ! 220: PUSH; TOS.u = 0; // FALSE ! 221: } ! 222: ! 223: MIRP ! 224: ! 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) ! 227: STRING_INIT(name) ! 228: STRING_INIT(value) ! 229: partition_t part; ! 230: int ret; ! 231: ! 232: STRING_FROM_STACK(value) ! 233: STRING_FROM_STACK(name) ! 234: part.len = TOS.u; POP; ! 235: part.addr = TOS.u; POP; ! 236: ! 237: ret=set_env(part, name, value); ! 238: if(ret) { ! 239: PUSH; TOS.u = -1; // TRUE ! 240: } else { ! 241: PUSH; TOS.u = 0; // FALSE ! 242: } ! 243: MIRP ! 244: ! 245: // ( part.addr part.len -- FALSE|TRUE) ! 246: PRIM(erase_X2d_nvram_X2d_partition) ! 247: partition_t part; ! 248: int ret; ! 249: ! 250: part.len = TOS.u; POP; ! 251: part.addr = TOS.u; POP; ! 252: ! 253: ret=clear_nvram_partition(part); ! 254: if(ret) { ! 255: PUSH; TOS.u = -1; // TRUE ! 256: } else { ! 257: PUSH; TOS.u = 0; // FALSE ! 258: } ! 259: ! 260: MIRP ! 261: ! 262: // ( part.addr part.len -- FALSE|TRUE) ! 263: PRIM(delete_X2d_nvram_X2d_partition) ! 264: partition_t part; ! 265: int ret; ! 266: ! 267: part.len = TOS.u; POP; ! 268: part.addr = TOS.u; POP; ! 269: ! 270: ret=delete_nvram_partition(part); ! 271: if(ret) { ! 272: PUSH; TOS.u = -1; // TRUE ! 273: } else { ! 274: PUSH; TOS.u = 0; // FALSE ! 275: } ! 276: ! 277: MIRP ! 278: ! 279:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.