[openfirmware] r1002 - cpu/x86/pc/neptune
svn at openfirmware.info
svn at openfirmware.info
Tue Nov 11 23:53:41 CET 2008
Author: wmb
Date: 2008-11-11 23:53:41 +0100 (Tue, 11 Nov 2008)
New Revision: 1002
Added:
cpu/x86/pc/neptune/mfgdata.fth
Modified:
cpu/x86/pc/neptune/addrs.fth
cpu/x86/pc/neptune/devices.fth
cpu/x86/pc/neptune/fw.bth
Log:
Neptune - added a manufacturing data area to FLASH.
Modified: cpu/x86/pc/neptune/addrs.fth
===================================================================
--- cpu/x86/pc/neptune/addrs.fth 2008-11-11 20:40:53 UTC (rev 1001)
+++ cpu/x86/pc/neptune/addrs.fth 2008-11-11 22:53:41 UTC (rev 1002)
@@ -5,6 +5,7 @@
h# 10.0000 constant /rom \ Size of boot ROM
h# 0.0000 constant config-vars-offset
+h# 0.1000 constant mfg-data-offset
h# 8.0000 constant dropin-offset
rom-pa dropin-offset + constant dropin-base
h# 8.0000 constant dropin-size
Modified: cpu/x86/pc/neptune/devices.fth
===================================================================
--- cpu/x86/pc/neptune/devices.fth 2008-11-11 20:40:53 UTC (rev 1001)
+++ cpu/x86/pc/neptune/devices.fth 2008-11-11 22:53:41 UTC (rev 1002)
@@ -238,6 +238,8 @@
;
[then]
+fload ${BP}/cpu/x86/pc/neptune/mfgdata.fth
+
\ Create the alias unless it already exists
: $?devalias ( alias$ value$ -- )
2over not-alias? if $devalias exit then ( alias$ value$ alias$ )
Modified: cpu/x86/pc/neptune/fw.bth
===================================================================
--- cpu/x86/pc/neptune/fw.bth 2008-11-11 20:40:53 UTC (rev 1001)
+++ cpu/x86/pc/neptune/fw.bth 2008-11-11 22:53:41 UTC (rev 1002)
@@ -239,29 +239,6 @@
devalias net /ethernet
-8 buffer: mac-address-buf
-: random-mac-address ( -- adr len )
- mac-address-buf @ 0= if
- \ Get a pseudo-random number
-
- \ Seed it with the real time clock and the timestamp counter
- time&date xor xor xor xor xor ( seed )
- tsc@ xor xor ( seed' )
-
- \ Scramble it a bit with a linear congruence
- d# 1103515245 * d# 12345 + h# 7FFFFFFF and ( rn1 )
- dup mac-address-buf ! ( rn1 )
- d# 1103515245 * d# 12345 + h# 7FFFFFFF and ( rn2 )
- mac-address-buf 3 + ! ( )
-
- \ Turn off the multicast bit and turn on the locally-assigned bit
- mac-address-buf c@ h# fe and 2 or mac-address-buf c!
- then
-
- mac-address-buf 6
-;
-' random-mac-address to system-mac-address
-
\ false to stand-init-debug?
true to stand-init-debug?
Added: cpu/x86/pc/neptune/mfgdata.fth
===================================================================
--- cpu/x86/pc/neptune/mfgdata.fth (rev 0)
+++ cpu/x86/pc/neptune/mfgdata.fth 2008-11-11 22:53:41 UTC (rev 1002)
@@ -0,0 +1,153 @@
+purpose: Save manufacturing data in a separate FLASH sector
+\ See license at end of file
+
+\ Create a node below the top-level FLASH node to access the portion
+\ containing the manufacturing data.
+0 0 mfg-data-offset <# u#s u#> " flash" begin-package
+ " mfgdata" device-name
+
+ h# 1000 constant /device \ 4K - SST49LF080A sector size
+ fload ${BP}/dev/subrange.fth
+end-package
+
+false value using-mfg-data?
+
+0 value saved-nvram-node
+0 value saved-config-mem
+0 value saved-config-size
+
+0 value mfg-config-mem
+0 value mfg-config-size
+0 value mfg-data-node
+
+: unselect-mfg-data ( -- )
+ using-mfg-data? if
+ saved-nvram-node to nvram-node 0 to saved-nvram-node
+ saved-config-mem to config-mem 0 to saved-config-mem
+ saved-config-size to config-size 0 to saved-config-size
+ false to using-mfg-data?
+ then
+;
+: dangerous-select-mfg-data ( -- )
+ using-mfg-data? if exit then
+
+ mfg-data-node 0= if
+ " /mfgdata" open-dev to mfg-data-node
+ mfg-data-node 0= abort" Can't open /mfgdata"
+ " size" mfg-data-node $call-method d>s to mfg-config-size
+ mfg-config-size alloc-mem to mfg-config-mem
+ then
+
+ nvram-node to saved-nvram-node
+ config-mem to saved-config-mem
+ config-size to saved-config-size
+
+ mfg-data-node to nvram-node
+ mfg-config-mem to config-mem
+ mfg-config-size to config-size
+
+ true to using-mfg-data?
+;
+
+stand-init: Manufacturing data
+ dangerous-select-mfg-data
+ read-nvram \ Read the manufacturing data into memory
+ read-ge-area \ Incorporate it into the config variables
+ unselect-mfg-data
+;
+
+: 2u#: u# u# [char] : hold drop ;
+: encode-enaddr ( adr len -- adr' len' ) \ binary to ASCII
+ 6 <> if " " exit then
+ 6 bounds do i c@ loop ( b0 b1 b2 b3 b4 b5 b6 )
+ push-hex
+ <# 2u#: 2u#: 2u#: 2u#: 2u#: u# u# u#>
+ pop-base
+;
+
+: decode-ether-byte ( $ dst-adr -- $' dst-adr' )
+ >r ( $ r: dst-adr )
+ [char] : left-parse-string ( $' head$ r: dst-adr )
+ $number if 0 then ( $ n r: dst-adr )
+ 0 max h# ff min ( $ n' r: dst-adr )
+ r@ c! ( $ r" dst-adr )
+ r> 1+ ( $ dst-adr' )
+;
+
+6 buffer: temp-mac-address
+: decode-enaddr ( adr len -- adr' len' ) \ ASCII to binary
+ push-hex
+ temp-mac-address 6 0 do decode-ether-byte loop drop
+ pop-base
+ temp-mac-address 6
+;
+
+6 actions
+action: ( apf -- adr len ) cv-bytes@ ;
+action: ( adr len apf -- ) cv-bytes! ;
+action: ( apf -- adr ) cv-adr drop ;
+action: ( adr len apf -- adr len ) drop encode-enaddr ;
+action: ( adr len apf -- adr len ) drop decode-enaddr ;
+action: ( apf -- adr len ) la1+ dup la1+ swap @ ;
+
+\ e.g. keymap
+: config-mac-address ( "name" default-value-adr len maxlen -- )
+ config-create use-actions drop ( adr len )
+ dup ,
+ dup taligned here swap note-string allot ( adr len here )
+ swap move
+;
+
+" " 6 config-mac-address mfg-mac-address
+
+' mfg-mac-address to system-mac-address
+
+0 [if]
+8 buffer: mac-address-buf
+: random-mac-address ( -- adr len )
+ mac-address-buf @ 0= if
+ \ Get a pseudo-random number
+
+ \ Seed it with the real time clock and the timestamp counter
+ time&date xor xor xor xor xor ( seed )
+ tsc@ xor xor ( seed' )
+
+ \ Scramble it a bit with a linear congruence
+ d# 1103515245 * d# 12345 + h# 7FFFFFFF and ( rn1 )
+ dup mac-address-buf ! ( rn1 )
+ d# 1103515245 * d# 12345 + h# 7FFFFFFF and ( rn2 )
+ mac-address-buf 3 + ! ( )
+
+ \ Turn off the multicast bit and turn on the locally-assigned bit
+ mac-address-buf c@ h# fe and 2 or mac-address-buf c!
+ then
+
+ mac-address-buf 6
+;
+' random-mac-address to system-mac-address
+[then]
+
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2008 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END
More information about the openfirmware
mailing list