[openfirmware] r1021 - clients/lib cpu/x86/pc/olpc
svn at openfirmware.info
svn at openfirmware.info
Thu Dec 4 10:18:29 CET 2008
Author: wmb
Date: 2008-12-04 10:18:29 +0100 (Thu, 04 Dec 2008)
New Revision: 1021
Modified:
clients/lib/lib.c
clients/lib/printf.c
cpu/x86/pc/olpc/fsupdate.fth
cpu/x86/pc/olpc/mcastnand.bth
cpu/x86/pc/olpc/nandcastui.fth
cpu/x86/pc/olpc/olpc.bth
cpu/x86/pc/olpc/versions.fth
cpu/x86/pc/olpc/wifichannel.fth
Log:
OLPC - secure NANDblaster support.
Modified: clients/lib/lib.c
===================================================================
--- clients/lib/lib.c 2008-12-04 09:18:23 UTC (rev 1020)
+++ clients/lib/lib.c 2008-12-04 09:18:29 UTC (rev 1021)
@@ -69,7 +69,7 @@
int
ofw_setup()
{
- static char *argv[8];
+ static char *argv[10];
phandle ph;
char *argstr;
int i;
@@ -82,7 +82,7 @@
argv[0] = get_str_prop(ph, "bootpath", ALLOC);
argstr = get_str_prop(ph, "bootargs", ALLOC);
- for (i = 1; i < 8;) {
+ for (i = 1; i < 10;) {
if (*argstr == '\0')
break;
argv[i++] = argstr;
Modified: clients/lib/printf.c
===================================================================
--- clients/lib/printf.c 2008-12-04 09:18:23 UTC (rev 1020)
+++ clients/lib/printf.c 2008-12-04 09:18:29 UTC (rev 1021)
@@ -5,9 +5,10 @@
#include "1275.h"
#include <stdarg.h>
+#include "stdio.h"
int
-atoi(char *s)
+atoi(const char *s)
{
int temp = 0, base = 10;
@@ -175,6 +176,7 @@
va_start(args, fmt);
i = _printf(fmt, args);
va_end(args);
+ fflush(stdout);
return (i);
}
Modified: cpu/x86/pc/olpc/fsupdate.fth
===================================================================
--- cpu/x86/pc/olpc/fsupdate.fth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/fsupdate.fth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -196,10 +196,13 @@
: $update-nand ( devspec$ -- )
load-crypto abort" Can't load the crypto functions"
- null$ cn-buf place null$ pn-buf place ( devspec$ )
- 2dup [char] \ split-string 2drop dn-buf place ( devspec$ )
- boot-read
- loaded do-fs-update
+ null$ cn-buf place ( devspec$ )
+ 2dup ( devspec$ devspec$ )
+ [char] : right-split-string dn-buf place ( devspec$ path+file$ )
+ [char] \ right-split-string ( devspec$ file$ path$ )
+ dup if 1- then pn-buf place ( devspec$ file$ )
+ 2drop ( devspec$ )
+ boot-read loaded do-fs-update ( )
;
: update-nand ( "devspec" -- ) safe-parse-word $update-nand ;
Modified: cpu/x86/pc/olpc/mcastnand.bth
===================================================================
--- cpu/x86/pc/olpc/mcastnand.bth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/mcastnand.bth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -19,7 +19,7 @@
" rm multicast-nand.tar.gz" $sh
[then]
-" (cd multicast-nand; make BPDIR=../../../../../.. mcastnand.bin blaster.bin cloner.bin; cp mcastnand.bin blaster.bin cloner.bin ..)" expand$ $sh
+" (cd multicast-nand; make BPDIR=../../../../../.. nandblaster_rx.bin nandblaster_tx.bin; cp nandblaster_rx.bin nandblaster_tx.bin ..)" expand$ $sh
\ This forces the creation of a .log file, so we don't re-fetch
writing mcastnand.version
Modified: cpu/x86/pc/olpc/nandcastui.fth
===================================================================
--- cpu/x86/pc/olpc/nandcastui.fth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/nandcastui.fth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -11,47 +11,72 @@
" olpc-mesh" $essid
then
;
+: $file-to-mem ( filename$ -- adr len )
+ $read-open
+ ifd @ fsize dup alloc-mem swap ( adr len )
+ 2dup ifd @ fgets ( adr len actual )
+ ifd @ fclose ( adr len actual )
+ over <> abort" Can't read file" cr ( adr len )
+;
+: load-read ( filename$ -- )
+ open-dev dup 0= abort" Can't open file" >r ( r: ih )
+ load-base " load" r@ $call-method !load-size
+ r> close-dev
+;
-: #enand ( channel# -- )
- depth 1 < abort" Usage: channel# enand"
- " rom:mcastnand ether:%d" sprintf boot-load go
+d# 20 value redundancy
+
+: #nb ( channel# -- )
+ depth 1 < abort" Usage: channel# #nb"
+ " rom:nb_rx ether:%d" sprintf boot-load go
;
-: #ether-clone ( channel# -- )
- depth 1 < abort" Usage: channel# ether-clone"
- " rom:cloner ether:%d" sprintf boot-load go
+: #nb-clone ( channel# -- )
+ depth 1 < abort" Usage: channel# #nb-clone"
+ redundancy swap
+ " rom:nb_tx ether:%d nand: %d" sprintf boot-load go
;
-: ether-clone1 ( -- ) 1 #ether-clone ;
-: ether-clone6 ( -- ) 6 #ether-clone ;
-: ether-clone11 ( -- ) d# 11 #ether-clone ;
-: enand1 ( -- ) 1 #enand ;
-: enand6 ( -- ) 6 #enand ;
-: enand11 ( -- ) d# 11 #enand ;
+: #nb-update ( placement-filename$ image-filename$ channel# -- )
+ depth 5 < abort" #nb-update - too few arguments"
+ >r 2>r ( placement-filename$ r: channel# image-filename$ )
+ $file-to-mem ( spec$ r: channel# image-filename$ )
+ swap redundancy 2r> r> ( speclen specadr redundancy image-filename$ channel# )
+ " rom:nb_tx ether:%d %s 131072 %d %d %d" sprintf boot-load go
+;
+: #nb-secure ( zip-filename$ image-filename$ channel# -- )
+ depth 5 < abort" #nb-secure-update - too few arguments"
+ >r 2>r ( placement-filename$ r: channel# image-filename$ )
+ load-read sig$ ?save-string swap ( siglen sigadr r: channel# image-filename$ )
+ img$ ?save-string swap ( siglen sigadr speclen specadr r: channel# image-filename$ )
+ redundancy 2r> r> ( siglen sigadr speclen specadr redundancy image-filename$ channel# )
+ " rom:nb_tx ether:%d %s 131072 %d %d %d %d %d" sprintf boot-load go
+;
+: t1 " u:\os767.plc" " u:\os767.img" d# 11 #nb-update ;
+: t2 " u:\fs.zip" " u:\os767.img" d# 11 #nb-secure ;
+: nb-clone1 ( -- ) 1 #nb-clone ;
+: nb-clone6 ( -- ) 6 #nb-clone ;
+: nb-clone11 ( -- ) d# 11 #nb-clone ;
+: nb1 ( -- ) 1 #nb ;
+: nb6 ( -- ) 6 #nb ;
+: nb11 ( -- ) d# 11 #nb ;
+
: mesh-clone
use-mesh
false to already-go?
- " boot rom:cloner 239.255.1.2" eval
+ redundancy " boot rom:nb_tx udp:239.255.1.2 nand: %d" sprintf eval
;
: meshnand
use-mesh
false to already-go?
- " boot rom:mcastnand 239.255.1.2" eval
+ " boot rom:nb_rx 239.255.1.2" eval
;
-: mcastnand
+: nb_rx
false to already-go?
- " boot rom:mcastnand 239.255.1.2" eval
+ " boot rom:nb_rx 239.255.1.2" eval
;
: ucastnand
false to already-go?
- " boot rom:mcastnand 10.20.0.16,,10.20.0.44" eval
+ " boot rom:nb_rx 10.20.0.16,,10.20.0.44" eval
;
-: nmcastnand \ Boot from network, for testing
- false to already-go?
- " boot http:\\10.20.0.14\mcastnand 239.255.1.2" eval
-;
-: dmcastnand \ Boot from USB disk, for testing
- false to already-go?
- " boot disk:\mcnand 239.255.1.2" eval
-;
Modified: cpu/x86/pc/olpc/olpc.bth
===================================================================
--- cpu/x86/pc/olpc/olpc.bth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/olpc.bth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -74,9 +74,11 @@
" ${BP}/cpu/x86/pc/olpc/build/dsdt.aml" " dsdt" $add-deflated-dropin
\ " ${BP}/cpu/x86/pc/olpc/build/ssdt.aml" " ssdt" $add-deflated-dropin
- " ${BP}/cpu/x86/pc/olpc/build/mcastnand.bin" " mcastnand" $add-deflated-dropin
- " ${BP}/cpu/x86/pc/olpc/build/blaster.bin" " blaster" $add-deflated-dropin
- " ${BP}/cpu/x86/pc/olpc/build/cloner.bin" " cloner" $add-deflated-dropin
+ " ${BP}/cpu/x86/pc/olpc/build/nandblaster_rx.bin" " nb_rx" $add-deflated-dropin
+ " ${BP}/cpu/x86/pc/olpc/build/nandblaster_tx.bin" " nb_tx" $add-deflated-dropin
+\ " ${BP}/cpu/x86/pc/olpc/build/multicast-nand/mcastnand.elf" " mcastnand" $add-deflated-dropin
+\ " ${BP}/cpu/x86/pc/olpc/build/blaster.bin" " blaster" $add-deflated-dropin
+\ " ${BP}/cpu/x86/pc/olpc/build/cloner.bin" " cloner" $add-deflated-dropin
/rom h# 400 - pad-file \ rmstart image must start 0x400 from end
" rmstart.img" $add-file
Modified: cpu/x86/pc/olpc/versions.fth
===================================================================
--- cpu/x86/pc/olpc/versions.fth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/versions.fth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -2,7 +2,7 @@
\ The overall firmware revision
macro: FW_MAJOR E
-macro: FW_MINOR 22b
+macro: FW_MINOR 22h
\ The EC microcode
macro: EC_VERSION e21
@@ -26,5 +26,6 @@
\ With a specific ID, mcastnand.bth will download a tarball without .git stuff.
\ With "test", mcastnand.bth will clone the git head if build/multicast-nand/
\ is not already present, then you can modify the git subtree as needed.
-macro: MCNAND_VERSION 5f202b05147826ad69fcb849b92290681a56c70c
+\ macro: MCNAND_VERSION 5f202b05147826ad69fcb849b92290681a56c70c
\ macro: MCNAND_VERSION test
+macro: MCNAND_VERSION HEAD
Modified: cpu/x86/pc/olpc/wifichannel.fth
===================================================================
--- cpu/x86/pc/olpc/wifichannel.fth 2008-12-04 09:18:23 UTC (rev 1020)
+++ cpu/x86/pc/olpc/wifichannel.fth 2008-12-04 09:18:29 UTC (rev 1021)
@@ -51,41 +51,35 @@
d# 15 constant rssi-limit
-: scan-mesh-channels ( -- chan# max-rssi )
- d# 11 channel-stats 0= if ( total-rssi max-rssi )
- 2drop d# 11 0 exit
- then ( total-rssi max-rssi )
- nip d# 11 ( max-rssi chan# )
+\ Keep the rssi,chan pair with the lowest max-rssi value
+: lowest-rssi ( max-rssiN chanN max-rssiM chanM -- max-rssiP P )
+ 3 pick 2 pick ( max-rssiN chanN max-rssiM chanM max-rssiN max-rssiM )
+ u> if 2nip else 2drop then ( max-rssiP chanP )
+;
- d# 6 channel-stats 0= if ( max-rssi11 chan11 total-rssi max-rssi )
- 4drop 6 0 exit
- then ( max-rssi11 chan11 total-rssi max-rssi )
- nip ( max-rssi11 chan11 max-rssi6 )
- rot over > if ( max-rssi11 chan11 max-rssi6 )
- nip nip 6 ( max-rssi6 chan6 )
- else ( max-rssi11 chan11 max-rssi6 )
- drop ( max-rssi11 chan11 )
- then ( max-rssiN chan# )
+: try-channel ( max-rssiN N chan# -- max-rssiN' N' no-beacons? )
+ >r r@ channel-stats 0= if ( max-rssiN N total-rssi max-rssi r: chan# )
+ \ No beacons - this one is an automatic winner
+ 4drop 0 r> true ( max-rssiN' N' no-beacons? )
+ else ( max-rssiN N total-rssi max-rssi r: chan# )
+ \ Some activity on this channel - keep it if it's the quietest so far
+ nip r> lowest-rssi false ( max-rssiN' N' no-beacons? )
+ then ( max-rssiN' N' no-beacons? )
+;
- d# 1 channel-stats 0= if ( max-rssiN chan# total-rssi1 max-rssi1 )
- 4drop 1 0 exit
- then ( max-rssiN chan# total-rssi1 max-rssi1 )
- nip ( max-rssiN chan# max-rssi1 )
- rot over > if ( max-rssiN chan# max-rssi1 )
- nip nip 1 ( max-rssi1 chan1 )
- else ( max-rssiN chan# max-rssi1 )
- drop ( max-rssiN chan# )
- then ( max-rssiN chan# )
- swap ( chan# max-rssi )
+: scan-mesh-channels ( -- max-rssi chan# )
+ h# ffffffff 0 ( max-rssi0 0 ) \ This high rssi always loses
+ d# 11 try-channel if exit then ( max-rssiN chanN )
+ d# 6 try-channel if exit then ( max-rssiN chanN )
+ d# 1 try-channel drop ( max-rssi chan# )
;
-: quietest-mesh-channel ( -- chan# max-rssi )
+: quietest-mesh-channel ( -- max-rssi chan# )
open-wlan
scan-mesh-channels
wlan-ih close-dev
;
-
: multinand-traffic? ( channel# -- flag )
" mesh-start" wlan-ih $call-method drop
d# 100 0 " set-beacon" wlan-ih $call-method
@@ -116,12 +110,12 @@
;
: enand ( -- )
find-multinand-server abort" No multicast NAND server" ( chan# )
- #enand
+ #nb
;
d# 10 constant rssi-threshold
: ether-clone ( -- )
- quietest-mesh-channel ( chan# rssi )
- rssi-threshold > abort" No quiet channels" ( chan# )
- #ether-clone
+ quietest-mesh-channel ( rssi chan# )
+ swap rssi-threshold > abort" No quiet channels" ( chan# )
+ #nb-clone
;
More information about the openfirmware
mailing list