|
|
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: ! 13: #include <rtas/rtas-init.fs> ! 14: #include <rtas/rtas-cpu.fs> ! 15: #include <rtas/rtas-reboot.fs> ! 16: #include <rtas/rtas-flash.fs> ! 17: #include <rtas/rtas-vpd.fs> ! 18: ! 19: \ for update-flash ! 20: : (get-flashside) ( -- flashside ) rtas-get-flashside ; ! 21: ! 22: ' (get-flashside) to get-flashside ! 23: ! 24: \ remember the current flashside ! 25: get-flashside to flashside? ! 26: ! 27: \ for update-flash ! 28: : (set-flashside) ( flashside -- status ) ! 29: dup rtas-set-flashside = IF 0 ELSE -1 THEN ! 30: ; ! 31: ! 32: ' (set-flashside) to set-flashside ! 33: ! 34: : rtas-ibm-read-pci-config ( size puid bus devfn off -- x ) ! 35: [ s" ibm,read-pci-config" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 36: 4 rtas-cb rtas>nargs l! ! 37: 2 rtas-cb rtas>nret l! ! 38: swap 8 lshift or swap 10 lshift or rtas-cb rtas>args0 l! ! 39: dup 20 rshift rtas-cb rtas>args1 l! ! 40: ffffffff and rtas-cb rtas>args2 l! ! 41: rtas-cb rtas>args3 l! ! 42: enter-rtas ! 43: rtas-cb rtas>args5 l@ ! 44: ; ! 45: ! 46: : rtas-fetch-cpus ( mask -- status ) ! 47: [ s" rtas-fetch-slaves" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 48: 1 rtas-cb rtas>nargs l! ! 49: 1 rtas-cb rtas>nret l! ! 50: rtas-cb rtas>args0 l! ! 51: 0 rtas-cb rtas>args1 l! ! 52: enter-rtas ! 53: rtas-cb rtas>args1 l@ ! 54: ; ! 55: ! 56: : rtas-stop-bootwatchdog ( -- status ) ! 57: [ s" rtas-stop-bootwatchdog" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 58: 0 rtas-cb rtas>nargs l! ! 59: 1 rtas-cb rtas>nret l! ! 60: enter-rtas ! 61: rtas-cb rtas>args0 l@ ! 62: ; ! 63: ! 64: : rtas-set-bootwatchdog ( seconds -- ) ! 65: [ s" rtas-set-bootwatchdog" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 66: 1 rtas-cb rtas>nargs l! ! 67: 0 rtas-cb rtas>nret l! ! 68: rtas-cb rtas>args0 l! ! 69: enter-rtas ! 70: ; ! 71: ! 72: ' rtas-set-bootwatchdog to set-watchdog ! 73: ! 74: : rtas-dump-flash ( offset cnt -- ) ! 75: [ s" rtas-dump-flash" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 76: 2 rtas-cb rtas>nargs l! ! 77: 0 rtas-cb rtas>nret l! ! 78: rtas-cb rtas>args0 l! ! 79: rtas-cb rtas>args1 l! ! 80: enter-rtas ! 81: ; ! 82: ! 83: \ load-base wird in slof/fs/base.fs gesetzt... nicht überschreiben ! 84: \ 2000000 CONSTANT load-base ! 85: create blist 50 allot ! 86: blist 50 erase ! 87: ! 88: : build-blocklist_old ! 89: \ set version ! 90: 1 blist c! ! 91: \ set length of block list ! 92: 50 blist 7 + c! ! 93: \ no more block list ! 94: 0000000000000000 blist 8 + ! ! 95: \ first block ! 96: load-base 0 + blist 10 + ! ! 97: 80000 blist 18 + ! ! 98: load-base 80000 + blist 20 + ! ! 99: 80000 blist 28 + ! ! 100: load-base 100000 + blist 30 + ! ! 101: 80000 blist 38 + ! ! 102: load-base 180000 + blist 40 + ! ! 103: 8006C blist 48 + ! ! 104: ; ! 105: ! 106: 80000 constant _block_size ! 107: ! 108: : build-blocklist ! 109: \ set length of block list ! 110: \ length of flashfs at load-base is at offset 30... get it... ! 111: load-base 30 + @ ! 112: \ calculate the number of blocks we need ! 113: _block_size / 1 + ! 114: \ total number of blocks is 2 (for header and block_list extension + (number of blocks for flashfs * 2 (1 for address 1 for length)) ! 115: 2 * 2 + 8 * blist ! ! 116: \ set version ( in first byte only ) ! 117: 1 blist c! ! 118: \ no more block list ! 119: 0000000000000000 blist 8 + ! ! 120: \ length of flashfs at load-base is at offset 30... get it... ! 121: load-base 30 + @ ! 122: \ i define one block to be 64K, so calculate the number of blocks we need and loop over them ! 123: _block_size / 1 + 0 do ! 124: load-base _block_size i * + \ which position of load-base to store ! 125: blist 10 + \ at what offset of blist ( 0x8 + for header 0x8 + for extension ) ! 126: i 10 * + \ for each loop we have done 0x10 + ! 127: ! \ store it ! 128: load-base 30 + @ ! 129: _block_size i * - \ remaining length ! 130: dup _block_size > ! 131: IF \ is the remaining length > block size ! 132: drop _block_size \ then store the block size as length ! 133: ELSE ! 134: \ do nothing (store remaining length) ! 135: THEN ! 136: blist 10 + \ store the length at ! 137: i 10 * + \ correct blist offset ! 138: 8 + \ + 8 (we have stored address, now the length) ! 139: ! \ store it ! 140: loop ! 141: ; ! 142: ! 143: ! 144: ! 145: : build-blocklist-v0_old ! 146: \ set version ! 147: 0 blist c! ! 148: 48 blist 7 + c! ! 149: \ first block ! 150: load-base 0 + blist 8 + ! ! 151: 80000 blist 10 + ! ! 152: load-base 80000 + blist 18 + ! ! 153: 80000 blist 20 + ! ! 154: load-base 100000 + blist 28 + ! ! 155: 80000 blist 30 + ! ! 156: load-base 180000 + blist 38 + ! ! 157: 8006C blist 40 + ! ! 158: ; ! 159: ! 160: : build-blocklist-v0 ! 161: \ set length of block list ! 162: \ length of flashfs at load-base is at offset 30... get it... ! 163: load-base 30 + @ ! 164: \ calculate the number of blocks we need ! 165: _block_size / 1 + ! 166: \ total number of blocks is 1 (for header + (number of blocks for flashfs * 2 (1 for address 1 for length)) ! 167: 2 * 1 + 8 * blist ! ! 168: \ length of flashfs at load-base is at offset 30... get it... ! 169: load-base 30 + @ ! 170: \ i define one block to be 64K, so calculate the number of blocks we need and loop over them ! 171: _block_size / 1 + 0 do ! 172: load-base _block_size i * + \ which position of load-base to store ! 173: blist 8 + \ at what offset of blist ( 0x8 + for header) ! 174: i 10 * + \ for each loop we have done 0x10 + ! 175: ! \ store it ! 176: load-base 30 + @ ! 177: _block_size i * - \ remaining length ! 178: dup _block_size > ! 179: IF \ is the remaining length > block size ! 180: drop _block_size \ then store the block size as length ! 181: ELSE ! 182: \ do nothing (store remaining length) ! 183: THEN ! 184: blist 8 + \ store the length at ! 185: i 10 * + \ correct blist offset ! 186: 8 + \ + 8 (we have stored address, now the length) ! 187: ! \ store it ! 188: loop ! 189: ; ! 190: ! 191: ! 192: : yy ! 193: build-blocklist ! 194: blist rtas-ibm-update-flash-64-and-reboot ! 195: ; ! 196: ! 197: : yy0 ! 198: build-blocklist-v0 ! 199: blist rtas-ibm-update-flash-64-and-reboot ! 200: ; ! 201: ! 202: : rtas-ibm-update-flash-64 ( block-list -- status ) ! 203: [ s" ibm,update-flash-64" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 204: 2 rtas-cb rtas>nargs l! ! 205: 1 rtas-cb rtas>nret l! ! 206: rtas-cb rtas>args0 l! ! 207: \ special unofficial parameter: if this is set to 1, the rtas function will not check, wether ! 208: \ we are on the perm side... this is needed for "update-flash -c" to work... ! 209: 1 rtas-cb rtas>args1 l! ! 210: enter-rtas ! 211: rtas-cb rtas>args2 l@ ! 212: ; ! 213: ! 214: \ for update-flash ! 215: : flash-write ( image-address -- status) ! 216: load-base >r to load-base build-blocklist-v0 ! 217: blist rtas-ibm-update-flash-64 ! 218: r> to load-base 0= IF true ELSE false THEN ! 219: ; ! 220: ! 221: : commit 1 rtas-ibm-manage-flash-image ; ! 222: : reject 0 rtas-ibm-manage-flash-image ; ! 223: ! 224: : rtas-ibm-validate-flash-image ( image-to-commit -- status ) ! 225: [ s" ibm,validate-flash-image" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 226: 2 rtas-cb rtas>nargs l! ! 227: 2 rtas-cb rtas>nret l! ! 228: rtas-cb rtas>args0 l! ! 229: enter-rtas ! 230: rtas-cb rtas>args1 l@ ! 231: ; ! 232: ! 233: : rtas-get-blade-descr ( address size -- len status ) ! 234: [ s" rtas-get-blade-descr" rtas-get-token ] LITERAL rtas-cb rtas>token l! ! 235: 2 rtas-cb rtas>nargs l! ! 236: 2 rtas-cb rtas>nret l! ! 237: rtas-cb rtas>args1 l! ! 238: rtas-cb rtas>args0 l! ! 239: enter-rtas ! 240: rtas-cb rtas>args2 l@ ! 241: rtas-cb rtas>args3 l@ ! 242: ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.