~ubuntu-branches/ubuntu/wily/slof/wily

« back to all changes in this revision

Viewing changes to board-js2x/slof/rtas.fs

  • Committer: Package Import Robot
  • Author(s): Aurelien Jarno
  • Date: 2012-09-16 23:05:23 UTC
  • Revision ID: package-import@ubuntu.com-20120916230523-r2ynulqmp2tyu2e5
Tags: upstream-20120217+dfsg
Import upstream version 20120217+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
;