[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