\ *****************************************************************************
\ * Copyright (c) 2004, 2008 IBM Corporation
\ * All rights reserved.
\ * This program and the accompanying materials
\ * are made available under the terms of the BSD License
\ * which accompanies this distribution, and is available at
\ * http://www.opensource.org/licenses/bsd-license.php
\ *
\ * Contributors:
\ *     IBM Corporation - initial implementation
\ ****************************************************************************/

#include <rtas/rtas-init.fs>
#include <rtas/rtas-cpu.fs>
#include <rtas/rtas-reboot.fs>
#include <rtas/rtas-flash.fs>
#include <rtas/rtas-vpd.fs>

\ for update-flash
: (get-flashside)  ( -- flashside )  rtas-get-flashside  ;

' (get-flashside) to get-flashside

\ remember the current flashside
get-flashside to flashside? 

\ for update-flash
: (set-flashside)  ( flashside -- status )
   dup rtas-set-flashside =  IF  0  ELSE  -1  THEN
;

' (set-flashside) to set-flashside

: rtas-ibm-read-pci-config  ( size puid bus devfn off -- x )
   [ s" ibm,read-pci-config" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   4 rtas-cb rtas>nargs l!
   2 rtas-cb rtas>nret l!
   swap 8 lshift or swap 10 lshift or rtas-cb rtas>args0 l!
   dup 20 rshift rtas-cb rtas>args1 l!
   ffffffff and rtas-cb rtas>args2 l!
   rtas-cb rtas>args3 l!
   enter-rtas
   rtas-cb rtas>args5 l@
;

: rtas-fetch-cpus  ( mask -- status )
   [ s" rtas-fetch-slaves" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   1 rtas-cb rtas>nargs l!
   1 rtas-cb rtas>nret l!
   rtas-cb rtas>args0 l!
   0 rtas-cb rtas>args1 l!
   enter-rtas
   rtas-cb rtas>args1 l@
;

: rtas-stop-bootwatchdog  ( -- status )
   [ s" rtas-stop-bootwatchdog" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   0 rtas-cb rtas>nargs l!
   1 rtas-cb rtas>nret l!
   enter-rtas
   rtas-cb rtas>args0 l@
;

: rtas-set-bootwatchdog  ( seconds -- )
   [ s" rtas-set-bootwatchdog" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   1 rtas-cb rtas>nargs l!
   0 rtas-cb rtas>nret l!
   rtas-cb rtas>args0 l!
   enter-rtas
;

' rtas-set-bootwatchdog to set-watchdog

: rtas-dump-flash  ( offset cnt -- )
   [ s" rtas-dump-flash" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   2 rtas-cb rtas>nargs l!
   0 rtas-cb rtas>nret l!
   rtas-cb rtas>args0 l!
   rtas-cb rtas>args1 l!
   enter-rtas
;

create blist 50 allot
blist 50 erase

: build-blocklist_old
   \ set version
   1 blist c!
   \ set length of block list
   50 blist 7 + c!
   \ no more block list
   0000000000000000 blist 8 + !
   \ first block
   get-load-base 0 + blist 10 + !
   80000 blist 18 + !
   get-load-base 80000 + blist 20 + !
   80000 blist 28 + !
   get-load-base 100000 + blist 30 + !
   80000 blist 38 + !
   get-load-base 180000 + blist 40 + !
   8006C blist 48 + !
;

80000 constant _block_size

: build-blocklist
   \ set length of block list
   \ length of flashfs at load-base is at offset 30... get it...
   get-load-base 30 + @
   \ calculate the number of blocks we need
   _block_size / 1 +
   \ total number of blocks is 2 (for header and block_list extension + (number of blocks for flashfs * 2 (1 for address 1 for length))
   2 * 2 + 8 * blist !
   \ set version ( in first byte only )
   1 blist c!
   \ no more block list
   0000000000000000 blist 8 + !
   \ length of flashfs at load-base is at offset 30... get it...
   get-load-base 30 + @
   \ i define one block to be 64K, so calculate the number of blocks we need and loop over them
   _block_size / 1 + 0 do
      get-load-base _block_size i * +  \ which position of load-base to store
      blist 10 +             \ at what offset of blist ( 0x8 + for header 0x8 + for extension )
      i 10 * +               \ for each loop we have done 0x10 +
      !                      \ store it
      get-load-base 30 + @
      _block_size i * -      \ remaining length
      dup _block_size > 
      IF                     \ is the remaining length > block size
	drop _block_size     \ then store the block size as length
      ELSE
			     \ do nothing (store remaining length)
      THEN
      blist 10 +          \ store the length at
      i 10 * +            \ correct blist offset 
      8 +                 \ + 8 (we have stored address, now the length)
      !                   \ store it
   loop
;



: build-blocklist-v0_old
   \ set version
   0 blist c!
   48 blist 7 + c!
   \ first block
   get-load-base 0 + blist 8 + !
   80000 blist 10 + !
   get-load-base 80000 + blist 18 + !
   80000 blist 20 + !
   get-load-base 100000 + blist 28 + !
   80000 blist 30 + !
   get-load-base 180000 + blist 38 + !
   8006C blist 40 + !
;

: build-blocklist-v0
   \ set length of block list
   \ length of flashfs at load-base is at offset 30... get it...
   get-load-base 30 + @
   \ calculate the number of blocks we need
   _block_size / 1 +
   \ total number of blocks is 1 (for header + (number of blocks for flashfs * 2 (1 for address 1 for length))
   2 * 1 + 8 * blist !
   \ length of flashfs at load-base is at offset 30... get it...
   get-load-base 30 + @
   \ i define one block to be 64K, so calculate the number of blocks we need and loop over them
   _block_size / 1 + 0 do
      get-load-base _block_size i * +  \ which position of load-base to store
      blist 8 +             \ at what offset of blist ( 0x8 + for header)
      i 10 * +               \ for each loop we have done 0x10 +
      !                      \ store it
      get-load-base 30 + @
      _block_size i * -      \ remaining length
      dup _block_size > 
      IF                     \ is the remaining length > block size
	drop _block_size     \ then store the block size as length
      ELSE
			     \ do nothing (store remaining length)
      THEN
      blist 8 +          \ store the length at
      i 10 * +            \ correct blist offset 
      8 +                 \ + 8 (we have stored address, now the length)
      !                   \ store it
   loop
;


: yy
   build-blocklist
   blist rtas-ibm-update-flash-64-and-reboot
;

: yy0
   build-blocklist-v0
   blist rtas-ibm-update-flash-64-and-reboot
;

: rtas-ibm-update-flash-64  ( block-list -- status )
   [ s" ibm,update-flash-64" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   2 rtas-cb rtas>nargs l!
   1 rtas-cb rtas>nret l!
   rtas-cb rtas>args0 l!
   \ special unofficial parameter: if this is set to 1, the rtas function will not check
   \ whether we are on the perm side... this is needed for "update-flash -c" to work...
   1 rtas-cb rtas>args1 l!
   enter-rtas
   rtas-cb rtas>args2 l@
;

\ for update-flash
: flash-write  ( image-address -- status)
   load-base-override >r to load-base-override build-blocklist-v0
   blist rtas-ibm-update-flash-64
   r> to load-base-override 0=  IF  true  ELSE  false  THEN
;

: commit  1 rtas-ibm-manage-flash-image ;
: reject  0 rtas-ibm-manage-flash-image ;

: rtas-ibm-validate-flash-image  ( image-to-commit -- status )
   [ s" ibm,validate-flash-image" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   2 rtas-cb rtas>nargs l!
   2 rtas-cb rtas>nret l!
   rtas-cb rtas>args0 l!
   enter-rtas
   rtas-cb rtas>args1 l@
;

: rtas-get-blade-descr ( address size -- len status )
   [ s" rtas-get-blade-descr" rtas-get-token ] LITERAL rtas-cb rtas>token l!
   2 rtas-cb rtas>nargs l!
   2 rtas-cb rtas>nret l!
   rtas-cb rtas>args1 l!
   rtas-cb rtas>args0 l!
   enter-rtas
   rtas-cb rtas>args2 l@
   rtas-cb rtas>args3 l@
;
