[openfirmware] r954 - in dev: . amd7990 amd79970

svn at openfirmware.info svn at openfirmware.info
Tue Sep 30 23:06:51 CEST 2008


Author: wmb
Date: 2008-09-30 23:06:51 +0200 (Tue, 30 Sep 2008)
New Revision: 954

Added:
   dev/amd7990/
   dev/amd7990/lance32.fth
   dev/amd7990/lancecom.fth
   dev/amd7990/lancetst.fth
   dev/amd7990/lancevar.fth
   dev/amd7990/regbits.fth
   dev/amd7990/timedrec.fth
   dev/amd7990/vmlance.fth
   dev/amd79970/
   dev/amd79970/79c970.fth
   dev/amd79970/amd79970.bth
   dev/amd79970/amd7997m.bth
   dev/amd79970/build/
   dev/amd79970/loadfcod.fth
   dev/amd79970/loadpkg.fth
   dev/amd79970/map.fth
   dev/amd79970/methods.fth
   dev/amd79970/setup.fth
   dev/amd79970/vmlance.bth
Log:
Added old AMD Ethernet driver to tree for use with VMWare and VirtualBox.



Added: dev/amd7990/lance32.fth
===================================================================
--- dev/amd7990/lance32.fth	                        (rev 0)
+++ dev/amd7990/lance32.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,225 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: lance32.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Definitions for the 32-bit LANCE interface
+copyright: Copyright 1995 Sun Microsystems, Inc.  All Rights Reserved
+
+\ Register access
+
+\ The chips that support 32-bit descriptor addresses usually
+\ have two modes for accessing the control registers.  In the
+\ "normal" word I/O mode, the registers are accessed with 16-bit
+\ bus cycles and appear at adjacent 16-bit locations (0x10, 0x12, ...)
+\ In double-word I/O mode, they are accessed with 32-bit bus
+\ cycles and appear at adjacent 32-bit locations (0x10, 0x14, ...)
+\ In either case, they contain only 16 bits of useful data, so
+\ there is no real advantage to using 32-bit accesses.
+\ The chip determines the mode from the first access cycle, and
+\ "locks" into that mode.  The only way to change the mode thereafter
+\ is to issue a hardware reset to it; a software reset won't do it.
+\ We use 16-bit mode as the default, for the benefit of client programs
+\ that use older driver code.
+
+[ifdef] 32-bit-cycles
+: >reg  ( offset -- adr )  la swap la+ h# 10 +  ;
+: reg@  ( offset --  data )  >reg  rl@  ;
+: reg!  ( data offset --  )  >reg  rl!  ;
+[else]
+: >reg  ( offset -- adr )  la swap wa+ h# 10 +  ;
+: reg@  ( offset --  data )  >reg  rw@  ;
+: reg!  ( data offset --  )  >reg  rw!  ;
+[then]
+
+: rdp!  ( val -- )  0 reg!  ;
+: rdp@  ( -- val )  0 reg@  ;
+
+: rap!  ( val -- )  1 reg!  ;
+: rap@  ( -- val )  1 reg@  ;
+
+: reset  ( -- )  2 reg@ drop  ;
+
+: bdp!  ( val -- )  3 reg!  ;
+: bdp@  ( -- val )  3 reg@  ;
+
+\ Control and Status Register
+: csr!  ( value reg# -- )  rap!  rdp!  ;
+: csr@  ( reg# -- value )  rap!  rdp@  ;
+
+\ Bus Control Register
+: bcr!  ( value reg# -- )  rap!  bdp!  ;
+: bcr@  ( reg# -- value )  rap!  bdp@  ;
+
+
+\ In addition to the 16/32-bit register access, some AMD Ethernet
+\ chips allow you to choose 16-bit and 32-bit versions of the
+\ descriptor data structures.  Unlike the register access, there
+\ is a compelling reason to use the 32-bit data structures, for
+\ they contain 32-bit DMA pointers.  The 16-bit data structures
+\ use 24-bit DMA pointers, thus restricting DMA to the lower 16 MBytes.
+
+\ Message descriptor access
+
+struct ( message-descriptor )
+4 field >addr
+2 field >bytecnt
+1 field >reserved1
+1 field >laflags
+0 field >tmd2
+2 field >mcnt
+0 field >xerrors
+1 field >rpc
+1 field >rcc
+4 field >reserved2
+( total-length )  constant /md
+
+/md value /rmd
+/md value /tmd
+
+\ Little-endian reads and writes
+: lew@  ( addr -- w )  dup c@ swap 1+ c@ bwjoin  ;
+: lew!  ( addr w -- )  >r wbsplit r@ 1+ c! r> c!  ;
+
+: lel@  ( addr -- l )  dup lew@ swap 2+ lew@ wljoin  ;
+: lel!  ( addr l -- )  >r lwsplit r@ 2+ lew! r> lew!  ;
+
+: dump-regs  ( -- )
+   hex la . cr
+   h# 80 0  do  i decimal 3 u.r  hex i csr@ 9 u.r  cr loop
+;
+
+\ Get virtual address of buffer from message descriptor
+: addr@  ( rmd/tmd-vaddr -- buff-vaddr )  >addr lel@  devaddr>  ;
+
+\ gets length of incoming message - receive only
+: length@  ( rmdaddr -- messagelength )  >mcnt lew@  ;
+
+\ gets transmit errors - transmit only
+: xerrors@  ( tmdaddr -- errorsflag )
+   >xerrors lew@ dup rtry and 0= if    \ mask TDR unless RTRY set
+      h# fc00 and
+   then
+;
+
+\ Store buffer address into message descriptor
+\ The message descriptor must have a DMA address in it because
+\ the chip reads it.
+: addr!  ( buff-vaddr  rmd/tmd-vaddr -- )  swap >devaddr swap  >addr lel!  ;
+
+\ Set length of message to be sent - transmit only
+: length!  ( length rmd/tmd-addr -- )  swap negate swap  >bytecnt lew!  ;
+
+\ Clear transmit error flags
+: clear-errors  ( tmd-addr -- )  0 swap  >xerrors lew!  ; 
+
+
+\ Initialization
+
+0 constant /ib	\ We use direct CSR access for initialization - no IB needed
+
+: set-this-addr  ( addr -- )
+   \ Load physical address in CSR12/13/14
+   d# 12  swap 6 bounds  do     ( csr# )
+      i c@  i 1+ c@  bwjoin  over csr!  1+  ( csr#' )
+   2 +loop   drop
+;
+
+\ Initialize the Lance chip
+: lance-init  ( -- flag )
+   0 rdp!		\ Write to RDP to set the access mode
+   				\ We are just hoping that there are no
+				\ side effects of this write.
+
+   \ The stop bit must be set before accesses to the following CSRs
+   stopb 0 csr!
+
+\ Disable transmitter and receiver
+\ mode @ 3 or 15 csr!
+   this-en-addr set-this-addr	\ Physical Ethernet Address (CSR12/13/14)
+   0 8 csr! 0 9 csr! 0 10 csr!	\ Logical Address Filter (CSR8/9/10/11)
+   0 11 csr! 
+   rmd0 >devaddr lwsplit 25 csr! 24 csr! \ Receive Ring Base Address (CSR24/25)
+   #rmds negate h# ffff and    	\ Receive Ring Length (CSR76)
+   76 csr!
+   tmd0 >devaddr lwsplit 31 csr! 30 csr! \ Transmit Ring Base Address (CSR30/31)
+   1 negate h# ffff and 78 csr!	\ Transmit Ring Length (CSR78)
+   0 47 csr!			\ Polling Interval (CSR47)
+
+\ h# 1115 4 csr!		\ Disable polling
+
+   \ This value would be "2" for auto-selection
+   0 2 bcr!			\ Force selection of 10BASE-T vs. AUI
+
+   tp?  if			\ Set TMAULOOP for 10BASE-T external loopback
+      mode @  lpbk and  if
+         mode @  intl and  0=  if  h# 4000  2 bcr!  then
+      then
+   then
+
+\   h# 4002 2 bcr!		\ Miscellaneous configuration
+
+   h# 2180 18 bcr!	\ Turn off bursting
+\  h# 0161 18 bcr!		\ Burst size and bus control
+
+   h# 0002 20 bcr!		\ Software style = PCnet-PCI, SSIZE = 1
+
+   \ Set the mode register after all the others because otherwise
+   \ VMware's emulated 79c970 screws up.  Apparently it enables
+   \ transmit and receive as soon as you write the mode register,
+   \ instead of waiting for the STRT bit to be set.  If you write
+   \ the mode register before establishing the descriptor addresses,
+   \ it tries to access bogus descriptors.
+   mode @   tp?  if  h# 80 or  then  15 csr!  \ Mode (CSR15)
+
+   \ The start bit must now be set.  **DO NOT SET INIT BIT OR ABOVE REGISTERS
+   \ WILL BE OVERWRITTEN**
+
+   strt  0 csr!
+   true
+;
+
+\ Restore the chip to its default modes for the benefit of client programs
+: lance-uninit  ( -- )		\ Call from close, after setting STOP
+   reset		\ Issue software reset
+   h#  200  d# 20 bcr!	\ Restore default "PCnet-ISA" programing interface
+   h#  200  d# 58 csr!	\ Restore default "PCnet-ISA" programing interface
+   h# 9060  d# 18 bcr!	\ Re-enable burst modes
+         2      2 bcr!	\ Re-enable auto-selection of media
+;

Added: dev/amd7990/lancecom.fth
===================================================================
--- dev/amd7990/lancecom.fth	                        (rev 0)
+++ dev/amd7990/lancecom.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,228 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: lancecom.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Code common to all LANCE versions
+copyright: Copyright 1995 Sun Microsystems, Inc.  All Rights Reserved
+
+d# 1514 encode-int  " max-frame-size" property
+
+headers
+
+\ buffer# to address calculations
+: rmd#>rmdaddr  ( n -- addr )  /rmd * rmd0 +  ;
+: rbuf#>rbufaddr  ( n -- addr )  /rbuf * rbuf0 +  ;
+
+1 #rmdsfactor lshift   to #rmds
+#rmds /rmd *           to /rmds
+
+\ patch routine to change buffer count
+: set-factor  ( rmdsfactor -- )  \ 1=2bufs, 2=4bufs, 3=8bufs, etc.
+   8 min            \ max buffers is 256
+   to #rmdsfactor
+   1 #rmdsfactor lshift to #rmds
+   #rmds /rmd * to /rmds
+;
+
+: status@  ( rmd/tmd-addr -- statusflag )  >laflags c@  ;
+
+\ Masks out OWN, ENP and STP bits; they aren't errors
+: rerrors@  ( rmd/tmd-addr -- errorsflag )  status@ ready invert and  ;
+
+
+\ *** Lance message descriptor ring value storage ***
+
+\ Put a buffer back in the chip's ready list
+: give-buffer  ( rmd/tmd-addr -- )  >laflags  ready  swap c!  synchronize  ;
+
+\ *** Initialization routines ***
+
+: set-address  ( en-addr len -- )  drop  this-en-addr 6 cmove  ;
+
+\ Initialize a single message descriptor
+: rmd-init  ( rbufaddr rmdaddr -- ) 
+   /rbuf over length!             \ Buffer length
+   addr!                          \ Buffer address
+;
+
+\ Set up the data structures necessary to receive a packet
+instance variable nextrmd
+: rinit  ( -- )
+   rmd0 nextrmd !
+   #rmds 0  do   i rbuf#>rbufaddr  i rmd#>rmdaddr  rmd-init loop
+   #rmds 0  do  i rmd#>rmdaddr give-buffer  loop   
+;
+
+\ *** Receive packet routines ***
+
+: .err-text  ( err-code -- err-code )
+   enp over and  if
+      fram over and  if  ." Framing error "  then
+      crc  over and  if  ." CRC error "      then
+   else
+      oflo over and  if  ." FIFO overflow "  then
+   then
+   buff over and  if  ." No buffers "     then
+;
+
+instance defer .error
+: (.error  ( buf-handle buffer length -- buf-handle buffer length )
+   2 pick rerrors@  if
+      2 pick status@ dup mser and  if  .err-text  then   drop
+      drop 0
+   then
+;
+
+: receive-ready? ( -- packet-waiting? )
+   synchronize
+   nextrmd @ status@  own and  0=  
+;
+
+: receive  ( -- buf-handle buffer len )		\ len non-zero if packet ok
+   nextrmd @  dup addr@  over ( nlover )  ( rmd bufferaddr rmd )
+   length@ .error
+;
+
+: to-next-rmd  ( -- )
+   /rmd nextrmd +!
+   nextrmd @  rmd0 -  /rmds >=  if   rmd0 nextrmd !   then
+;
+
+: return-buffer ( buf-handle -- )  give-buffer to-next-rmd  ;
+
+
+\  *** start of transmit routines ***
+
+instance variable nexttmd    \ tmd0 nexttmd !, never changes presently
+
+\ Wait until transmission completed
+: send-wait  ( -- )  begin  0 csr@ tint and  until  tint 0 csr!  ;
+
+\ *** Transmit initialization routines ***
+
+\ transmit buffer initialize routine
+: tinit ( -- )
+   tmd0 nexttmd !
+   tbuf0  nexttmd @  addr!
+   nexttmd @   clear-errors
+;
+
+\ Set up CPU page maps
+: map-lance-buffers  ( -- )
+   #rmdsfactor set-factor
+   #rmds /rbuf *                ( rbuf-size )
+
+   \ Figure out how much total DMA space we're going to need
+
+   /ib +  /tmd +  /rmds +  /tbuf +     ( total-dma-size )
+   to lance-dma-size
+
+   \ Allocate and map that space
+   lance-dma-size lance-allocate-dma  ( dma-area-adr )
+   dup to dma-base
+
+   \ Set the addresses of the various DMA regions used by the chip
+   dup  to ib         /ib +  ( next-address )
+   dup  to tmd0      /tmd +  ( next-address )
+   dup  to rmd0     /rmds +  ( next-address )
+   dup  to tbuf0    /tbuf +  ( next-address ) \ Enough for max packet
+        to rbuf0             ( )
+;
+
+: unmap-lance-buffers  ( -- )
+   dma-base lance-dma-size  lance-free-dma
+   0 to dma-base
+;
+
+\ Initializes the chip, allocating the necessary memory, and enabling the
+\ transmitter and receiver.
+: net-on  ( -- flag )		\ true if net-on succeeds
+   mac-address set-address 
+   tinit rinit
+   lance-init
+;
+
+: net-off  ( -- )  stopb 0 csr!  ;
+
+\ *** Main transmit routines ***
+
+\ Ignores the size argument, and uses the standard buffer.
+: get-buffer  ( dummysize -- buffer )  drop  nexttmd @ addr@  ;
+
+\ Display time domain reflectometry information
+: .tdr  ( xerrors -- )  h# 3ff and  ." TDR: (decimal) " .d  ;
+
+: .terr-text  ( tmd -- )
+   xerrors@  >r
+   xbuf r@ and  if  ." Buffer Error  "               then
+   uflo r@ and  if  ." Underflow  "                  then
+   lcol r@ and  if  ." Late Collision  "    r@ .tdr  then
+   lcar r@ and  if  ." Lost Carrier  (transceiver cable problem?)  "   then
+   rtry r@ and  if  ." Too Many Retries  "  r@ .tdr  then
+   r> drop cr
+;
+
+\ print summary of any HARD errors
+: (.transmit-error  ( tmd len -- tmd len )
+   over  status@ mser and  if  over .terr-text  then
+;
+instance defer .transmit-error
+
+\ This send routine does not enforce the minimum packet length.  It is
+\ used by the loopback test routines.  Loopback only works with packets
+\ whose length is <= 32 bytes.
+:  short-send  ( buffer length -- error? )
+   tuck nexttmd @   length!  ( length buffer )
+   drop          		\ discard buffer address, assumes using nexttmd
+   nexttmd @  give-buffer	\ Give tmd to chip
+   tdmd 0 csr!			\ Force chip to look at it right away
+   send-wait             	\ wait for completion
+   nexttmd @  swap  ( tmd length )
+   .transmit-error  ( tmd length )
+   drop  xerrors@ dup  if  nexttmd @ clear-errors  then   ( error? )
+;
+
+\ transmit packet routine
+: net-send  ( buffer length -- error? )
+   d# 64 max       		\ force minimum length to be 64
+   short-send  ( error? )
+;
+
+headers

Added: dev/amd7990/lancetst.fth
===================================================================
--- dev/amd7990/lancetst.fth	                        (rev 0)
+++ dev/amd7990/lancetst.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,166 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: lancetst.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: LANCE selftest
+copyright: Copyright 1990 Sun Microsystems, Inc.  All Rights Reserved
+
+hex
+headers
+instance variable lance-verbose?
+instance variable ext-lbt?	ext-lbt? off
+
+create loopback-prototype
+   ff c, 00 c,					    \ Ones and zeroes
+   01 c, 02 c, 04 c, 08 c, 10 c, 20 c, 40 c, 80 c,  \ Walking ones
+   fe c, fd c, fb c, f7 c, ef c, 0df c, 0bf c, 7f c,  \ Walking zeroes
+
+: loopback-buffer  ( -- adr len )
+   /loopback get-buffer  ( adr )
+   mac-address drop    over              6 cmove   \ Set source address
+   mac-address drop    over 6 +          6 cmove   \ Set destination address
+   loopback-prototype  over d# 12 +  d# 20 cmove   \ Set buffer contents
+   /loopback
+;
+
+: pdump  ( adr -- )
+   base @ >r  hex
+   dup      d# 10  bounds  do  i c@  3 u.r  loop  cr
+   d# 10 +  d# 10  bounds  do  i c@  3 u.r  loop  cr
+   r> base !
+;
+
+: .loopback  ( -- )
+   mode @  intl and  if  ." Internal "  else  ." External "  then
+   ." loopback test -- "
+;
+
+: ?.loopback  ( -- )
+   lance-verbose? @  0=  if  .loopback  then  ;
+
+: switch-off  ( -- false )
+   lance-verbose? off  false
+;
+
+: bad-rx-data  ( buf-handle data-address -- false )
+   ?.loopback
+   ." Received packet contained incorrect data.  Expected: " cr
+   loopback-prototype pdump
+   ." Observed:" cr
+   d# 12 + pdump
+   switch-off
+;
+
+: check-data  ( buf-handle data-address length -- flag )
+						\ flag is true if data ok
+   drop  ( buf-handle data-address )
+   dup d# 12 +  loopback-prototype  d# 20 comp
+   if  bad-rx-data
+   else  drop   ( buf-handle )
+     return-buffer
+     lance-verbose? @  if  ." succeeded." cr  then
+     mode off   true
+   then
+;
+
+: check-len&data  ( buf-handle data-address length -- flag )
+						\ flag is true if data, len ok
+   \ The CRC is appended to the packet, thus it is 4 bytes longer than
+   \ the packet we sent.
+   dup /loopback 4 + <>  if
+      ?.loopback
+      ." Wrong packet length; expected " /loopback 4 + 2 .r 
+      ." , observed " .d cr
+      switch-off
+   else
+      check-data
+   then
+;
+
+: loopback-test  ( internal/external -- flag )	\ flag is true if test passed
+   lpbk or  mode !
+   lance-verbose? @  if  ."  " .loopback  then
+   net-on  if
+      loopback-buffer short-send  if
+	 ?.loopback  ." send failed." cr
+	 switch-off
+      else
+	 d# 2000 timed-receive  if
+	    ?.loopback
+	    ." Did not receive expected loopback packet." cr
+	    switch-off
+	 else         (  buf-handle data-address length )
+	    check-len&data
+	 then
+      then
+   else
+      switch-off
+   then
+   net-off  mode off
+;
+
+: net-init  ( -- flag )			\ flag is true if net-init succeeds
+   mode @		\ Save requested mode because loopback changes it
+   intl loopback-test  if	\ mode_saved ; passed int. loopback test
+      ext-lbt? @  if  0 loopback-test  else  true  then  ( saved-mode flag )
+      swap mode !  if  net-on  else  false  then
+   else
+      mode !  false
+   then
+;
+
+: wait-for-packet  ( -- )
+   begin  key?	receive-ready?  or  until
+;
+
+: watch-test  ( -- )
+   ." Looking for Ethernet packets." cr
+   ." '.' is a good packet.  'X' is a bad packet."  cr
+   ." Type any key to stop."  cr
+   begin
+      wait-for-packet
+      receive-ready?  if
+         receive  if  ." ."  else  ." X"  then
+         drop  return-buffer
+      then
+      key? dup  if  key drop  then
+   until
+;
+headers

Added: dev/amd7990/lancevar.fth
===================================================================
--- dev/amd7990/lancevar.fth	                        (rev 0)
+++ dev/amd7990/lancevar.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,80 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: lancevar.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Variables for AMD7990 Ethernet driver
+copyright: Copyright 1994 Firmworks  All Rights Reserved
+
+headers
+
+6 buffer: macbuf
+
+\ Virtual addresses within the DMA buffer area.
+\ The actual addresses will be assigned later
+
+0 instance value dma-base
+0 instance value ib     \ initialization block
+0 instance value tmd0   \ transmit message descriptor#0
+0 instance value rmd0   \ receive message descriptor#0
+0 instance value tbuf0  \ transmit buffer#0
+0 instance value rbuf0  \ receive buffer#0
+
+0 instance value #rmds
+0 instance value /rmds
+
+0 instance value lance-dma-size	\ Amount of memory mapped
+0 instance value dma-offset	\ virtual-address minus dma-address
+: >devaddr  ( virt -- devaddr )  dma-offset -  ;
+: devaddr>  ( devaddr -- virt )  dma-offset +  ;
+
+instance variable mode		\ Chip mode - loopback, etc
+
+6 instance buffer: this-en-addr	\ Station address
+
+\ *** buffer sizes and counts ***
+
+d# 1600 constant /rbuf  \ receive buffer size
+
+d# 1700 value /tbuf     \ transmit buffer size
+
+true value tp?		\ True to use twisted pair (10BASE-T)
+
+\ I/O base address of the lance.  The actual address will be assigned later.
+0 value la

Added: dev/amd7990/regbits.fth
===================================================================
--- dev/amd7990/regbits.fth	                        (rev 0)
+++ dev/amd7990/regbits.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,93 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: regbits.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Generic LANCE register bits
+copyright: Copyright 1995 Sun Microsystems, Inc.  All Rights Reserved
+
+\ Common code
+
+hex
+headers
+
+\ Control/Status Register Bits	(CSR0)
+  01 constant initb     02 constant strt
+  04 constant stopb     08 constant tdmd
+  10 constant txon      20 constant rxon
+  40 constant inea      80 constant intrp
+ 100 constant idon     200 constant tint
+ 400 constant rint     800 constant merr
+1000 constant miss    2000 constant cerr
+4000 constant babl    8000 constant err
+
+\ CSR3 bits
+  01 constant bcon   02 constant acon   04 constant bswp
+
+\ Mode Register Bits	(CSR15)
+  01 constant drx       02 constant dtx
+  04 constant lpbk      08 constant dxmtfcs
+  10 constant fcoll     20 constant drty
+  40 constant intl    8000 constant prom
+
+\ Message Descriptor Bits ( use a byte access with these bits )
+   1 constant enp        2 constant stp
+  10 constant ltint	\ '971 extension: Interrupt after loopback transmit
+  40 constant mser      80 constant own
+
+\ Receive Message Descriptor Bits ( use a byte access )
+   4 constant buff       8 constant crc
+  10 constant oflo      20 constant fram
+
+\ Transmit Message Descriptor Bits (use a byte access )
+   4 constant def        8 constant one-err
+  10 constant more-errs
+def one-err or more-errs or   constant retries
+
+\ Value to write to message descriptor to enable it for use
+enp stp or own or ltint or   constant ready
+
+\ TMD3 Bits
+ 400 constant rtry
+ 800 constant lcar
+1000 constant lcol
+4000 constant uflo
+8000 constant xbuf
+
+decimal

Added: dev/amd7990/timedrec.fth
===================================================================
--- dev/amd7990/timedrec.fth	                        (rev 0)
+++ dev/amd7990/timedrec.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,105 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: timedrec.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Network reception with timeout
+copyright: Copyright 1990 Sun Microsystems, Inc.  All Rights Reserved
+
+\ Defines:
+\ timed-receive ( timeout-msecs -- [ buffer-handle data-address length ] err?)
+\ set-timeout  ( timeout-msecs -- )
+\ receive-unicast  ( -- [ buffer-handle data-address length ] err? )
+\
+\ defer handle-broadcast-packet     ' noop to handle-broadcast-packet
+\   ( buff-handle data-addr len flag -- buff-handle data-addr len flag )
+\
+
+\ Uses this interface to the lower level receiver functions:
+
+\ receive-ready? ( -- flag )   \ true if a packet has arrived
+\ receive        ( -- buf-handle buffer length )
+\ return-buffer  ( buf-handle -- ) \ give receive buffer back to chip
+\ .error ( buffer-handle data-address length -- handle address length )
+\   
+
+decimal
+
+instance variable alarmtime
+
+: set-timeout  ( interval -- )  get-msecs  +  alarmtime !  ;
+: timeout?  ( -- flag )  get-msecs  alarmtime @ >=  ;
+
+instance defer handle-broadcast-packet
+ ( buff-handle data-addr len flag -- buff-handle data-addr len flag )
+
+: multicast? ( handle data-address length -- handle data-address length flag )
+   \ Check for multicast/broadcast packets
+   over                        ( ... data-address )
+   c@ h# 80 and dup  if        \ Look at the multicast bit
+       ( handle data-address length multicast? )
+       handle-broadcast-packet
+   then
+;
+
+: receive-good-packet  ( -- [ buffer-handle data-address length ]  | 0 )
+   begin
+      begin
+         timeout?  if  false exit  then
+         receive-ready?
+      until
+      receive dup 0=
+   while
+      .error  2drop return-buffer
+   repeat
+;
+: receive-unicast-packet  ( -- [ buffer-handle data-address length ] | 0 )
+   begin
+      receive-good-packet  dup 0=  if  exit  then
+      multicast?
+   while
+      2drop return-buffer
+   repeat
+;
+\ Receive a packet, filtering out broadcast packets and timing
+\ out if no packet comes in within a certain time.
+: timed-receive ( timeout-msecs -- [ buffer-handle data-address length ] err?)
+   set-timeout  receive-unicast-packet ?dup 0=
+;
+headers 

Added: dev/amd7990/vmlance.fth
===================================================================
--- dev/amd7990/vmlance.fth	                        (rev 0)
+++ dev/amd7990/vmlance.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,231 @@
+\ ========== Copyright Header Begin ==========================================
+\ 
+\ Hypervisor Software File: vmlance.fth
+\ 
+\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
+\ 
+\  - Do no alter or remove copyright notices
+\ 
+\  - Redistribution and use of this software in source and binary forms, with 
+\    or without modification, are permitted provided that the following 
+\    conditions are met: 
+\ 
+\  - Redistribution of source code must retain the above copyright notice, 
+\    this list of conditions and the following disclaimer.
+\ 
+\  - Redistribution in binary form must reproduce the above copyright notice,
+\    this list of conditions and the following disclaimer in the
+\    documentation and/or other materials provided with the distribution. 
+\ 
+\    Neither the name of Sun Microsystems, Inc. or the names of contributors 
+\ may be used to endorse or promote products derived from this software 
+\ without specific prior written permission. 
+\ 
+\     This software is provided "AS IS," without a warranty of any kind. 
+\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
+\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
+\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
+\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
+\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
+\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
+\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
+\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
+\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
+\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
+\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+\ 
+\ You acknowledge that this software is not designed, licensed or
+\ intended for use in the design, construction, operation or maintenance of
+\ any nuclear facility. 
+\ 
+\ ========== Copyright Header End ============================================
+purpose: Definitions for the VMware PCNET - sort of - virtual ethernet
+copyright: Copyright 1995 Sun Microsystems, Inc.  All Rights Reserved
+
+\ Register access
+
+\ The chips that support 32-bit descriptor addresses usually
+\ have two modes for accessing the control registers.  In the
+\ "normal" word I/O mode, the registers are accessed with 16-bit
+\ bus cycles and appear at adjacent 16-bit locations (0x10, 0x12, ...)
+\ In double-word I/O mode, they are accessed with 32-bit bus
+\ cycles and appear at adjacent 32-bit locations (0x10, 0x14, ...)
+\ In either case, they contain only 16 bits of useful data, so
+\ there is no real advantage to using 32-bit accesses.
+\ The chip determines the mode from the first access cycle, and
+\ "locks" into that mode.  The only way to change the mode thereafter
+\ is to issue a hardware reset to it; a software reset won't do it.
+\ We use 16-bit mode as the default, for the benefit of client programs
+\ that use older driver code.
+
+[ifdef] 32-bit-cycles
+: >reg  ( offset -- adr )  la swap la+ h# 10 +  ;
+: reg@  ( offset --  data )  >reg  rl@  ;
+: reg!  ( data offset --  )  >reg  rl!  ;
+[else]
+: >reg  ( offset -- adr )  la swap wa+ h# 10 +  ;
+: reg@  ( offset --  data )  >reg  rw@  ;
+: reg!  ( data offset --  )  >reg  rw!  ;
+[then]
+
+: rdp!  ( val -- )  0 reg!  ;
+: rdp@  ( -- val )  0 reg@  ;
+
+: rap!  ( val -- )  1 reg!  ;
+: rap@  ( -- val )  1 reg@  ;
+
+: reset  ( -- )  2 reg@ drop  ;
+
+: bdp!  ( val -- )  3 reg!  ;
+: bdp@  ( -- val )  3 reg@  ;
+
+\ Control and Status Register
+: csr!  ( value reg# -- )  rap!  rdp!  ;
+: csr@  ( reg# -- value )  rap!  rdp@  ;
+
+\ Bus Control Register
+: bcr!  ( value reg# -- )  rap!  bdp!  ;
+: bcr@  ( reg# -- value )  rap!  bdp@  ;
+
+
+\ In addition to the 16/32-bit register access, some AMD Ethernet
+\ chips allow you to choose 16-bit and 32-bit versions of the
+\ descriptor data structures.  Unlike the register access, there
+\ is a compelling reason to use the 32-bit data structures, for
+\ they contain 32-bit DMA pointers.  The 16-bit data structures
+\ use 24-bit DMA pointers, thus restricting DMA to the lower 16 MBytes.
+
+\ Message descriptor access
+
+struct ( message-descriptor )
+4 field >addr
+2 field >bytecnt
+1 field >reserved1
+1 field >laflags
+0 field >tmd2
+2 field >mcnt
+0 field >xerrors
+1 field >rpc
+1 field >rcc
+4 field >reserved2
+( total-length )  constant /md
+
+/md value /rmd
+/md value /tmd
+
+\ Little-endian reads and writes
+: lew@  ( addr -- w )  dup c@ swap 1+ c@ bwjoin  ;
+: lew!  ( addr w -- )  >r wbsplit r@ 1+ c! r> c!  ;
+
+: lel@  ( addr -- l )  dup lew@ swap 2+ lew@ wljoin  ;
+: lel!  ( addr l -- )  >r lwsplit r@ 2+ lew! r> lew!  ;
+
+: dump-regs  ( -- )
+   hex la . cr
+   h# 80 0  do  i decimal 3 u.r  hex i csr@ 9 u.r  cr loop
+;
+
+\ Get virtual address of buffer from message descriptor
+: addr@  ( rmd/tmd-vaddr -- buff-vaddr )  >addr lel@  devaddr>  ;
+
+\ gets length of incoming message - receive only
+: length@  ( rmdaddr -- messagelength )  >mcnt lew@  ;
+
+\ gets transmit errors - transmit only
+: xerrors@  ( tmdaddr -- errorsflag )
+   >xerrors lew@ dup rtry and 0= if    \ mask TDR unless RTRY set
+      h# fc00 and
+   then
+;
+
+\ Store buffer address into message descriptor
+\ The message descriptor must have a DMA address in it because
+\ the chip reads it.
+: addr!  ( buff-vaddr  rmd/tmd-vaddr -- )  swap >devaddr swap  >addr lel!  ;
+
+\ Set length of message to be sent - transmit only
+: length!  ( length rmd/tmd-addr -- )  swap negate swap  >bytecnt lew!  ;
+
+\ Clear transmit error flags
+: clear-errors  ( tmd-addr -- )  0 swap  >xerrors lew!  ; 
+
+
+\ Initialization
+
+\ Initialization
+
+h# 40 constant /ib
+
+\ Tool for storing and incrementing
+: ,,  ( addr val -- addr' )  over lew! wa1+  ;
+
+: mac-addr,,  ( ibaddr buf -- ibaddr' )
+   3 /w*  bounds  do  i lew@  ( wbflip )  ,,  /w +loop
+;
+
+: init-setup  ( -- )
+   ib				( addr )
+   mode @  ,,			\ Mode
+   h# 0  #rmdsfactor 4 lshift or  ,,  \ TLEN(2^0 = 1) and RLEN
+
+   this-en-addr mac-addr,, 0 ,,	\ Physical Ethernet Address
+   0 ,, 0 ,, 0 ,, 0 ,,  	\ Logical Address Filter
+   rmd0 >devaddr lwsplit	\ Receive Descriptor Ring Pointer
+   >r ,, r> ,,               	\ Put in low word and high word
+   tmd0 >devaddr lwsplit	\ Transmit Descriptor Ring Pointer
+   >r ,, r> ,,               	\ Put in low word
+   drop
+
+   stopb 0 csr!
+   2 d# 58 csr!    \ 32-bit descriptor mode
+
+   ib >devaddr lwsplit 2 csr!  1 csr!
+;
+
+: wait-init  ( -- flag )	\ true if init succeeds
+   initb 0 csr!		\ rap is now 0, so we can use rdp@ and rdp! below.
+   false
+   300 0  do  rdp@ idon and  if  drop true leave  then  loop  ( okay? )
+   dup  if
+\      idon rdp!		\ XXX may cause a problem
+   else
+      ." Ethernet chip initialization failed"
+   then
+;
+
+\ Initialize the Lance chip
+: lance-init  ( -- flag )		\ true if init succeeds
+   0 rdp!		\ Write to RDP to set the access mode
+   				\ We are just hoping that there are no
+				\ side effects of this write.
+
+   init-setup  wait-init  dup if		( flag )
+      h# 100 0 csr!  \ Ack the init done int	( flag )
+      strt   0 csr!  \ go 			( flag )
+   then						( flag )
+;
+
+: dr  ( n -- )  dup decimal 3 u.r hex ." : " csr@ 5 u.r 3 spaces ;
+base @ decimal
+\ 6 7 
+: dumpregs  ( -- )
+   0 csr@ 2 and if  stopb 0 csr!  then
+   0 dr 1 dr 2 dr 3 dr  cr
+   4 dr 5 dr 8 dr 8 dr  cr
+   9 dr 10 dr 11 dr 12 dr cr
+  13 dr 14 dr 15 dr cr
+  24 dr 25 dr  30 dr 31 dr cr
+  58 dr 76 dr 77 dr cr
+  80 dr 82 dr 88 dr 89 dr cr
+  112 dr 124 dr cr
+;
+base !
+
+\ Restore the chip to its default modes for the benefit of client programs
+: lance-uninit  ( -- )		\ Call from close, after setting STOP
+   reset		\ Issue software reset
+   h#  200  d# 20 bcr!	\ Restore default "PCnet-ISA" programing interface
+   h#  200  d# 58 csr!	\ Restore default "PCnet-ISA" programing interface
+   h# 9060  d# 18 bcr!	\ Re-enable burst modes
+         2      2 bcr!	\ Re-enable auto-selection of media
+;

Added: dev/amd79970/79c970.fth
===================================================================
--- dev/amd79970/79c970.fth	                        (rev 0)
+++ dev/amd79970/79c970.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,92 @@
+purpose: Driver for AMD 79C970 Ethernet controller
+\ See license at end of file
+
+headers
+hex
+: map-chips    ( -- ) 
+   0 0 0100.0010 my-space +  h# 20  " map-in" $call-parent   to la
+   \ Enable card response
+   h# c100  my-space 6 +  " config-w!" $call-parent
+   my-space 4 + dup  " config-w@" $call-parent  5 or
+   swap  " config-w!" $call-parent
+;
+: unmap-chips  ( -- )
+   la h# 20  " map-out" $call-parent  0 to la
+   \ Disable card response
+   my-space 4 + dup  " config-w@" $call-parent  5 invert and
+   swap  " config-w!" $call-parent
+;
+
+0 instance value dma-region
+0 instance value dma-region-size
+
+0 instance value dma-virt
+0 instance value dma-phys
+0 instance value dma-size
+
+: 3drop  ( n n n -- )  2drop drop  ;
+defer dma-sync  ' 3drop to dma-sync
+
+: synchronize  ( -- )  dma-virt dma-phys dma-size  dma-sync  ;
+
+: lance-allocate-dma  ( size -- vadr )
+   to dma-size
+
+   \ In 32-bit mode, the DMA message descriptors must be 16-byte aligned,
+   \ so we allocate extra space and round up the beginning address
+   dma-size h# 10 + to dma-region-size
+   
+   " dma-sync" my-parent ihandle>phandle find-method  if
+      to dma-sync
+   then
+
+   dma-size " dma-alloc" $call-parent  to dma-region
+
+   dma-region h# f +  h# f invert and  to dma-virt
+
+   dma-virt dma-size false " dma-map-in" $call-parent  to dma-phys
+   dma-virt dma-phys -  to dma-offset
+
+   dma-virt
+;
+
+decimal
+
+: lance-free-dma  ( adr size -- )
+   2drop
+   dma-virt dma-phys dma-size  " dma-map-out" $call-parent
+
+   dma-region dma-region-size " dma-free" $call-parent
+;
+
+\ *** Initialization routines ***
+
+: extra-init   ( -- )  ;
+
+64 constant /loopback
+
+headers
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1995 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

Added: dev/amd79970/amd79970.bth
===================================================================
--- dev/amd79970/amd79970.bth	                        (rev 0)
+++ dev/amd79970/amd79970.bth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,39 @@
+purpose: Load file for AMD 79970 Ethernet FCode driver
+\ See license at end of file
+
+command: &tokenize &this
+build-now
+
+silent on
+
+begin-tokenizing amd79970.fc
+
+FCode-version2
+fload ${BP}/dev/amd79970/loadpkg.fth
+end0
+
+end-tokenizing
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/amd7997m.bth
===================================================================
--- dev/amd79970/amd7997m.bth	                        (rev 0)
+++ dev/amd79970/amd7997m.bth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,40 @@
+purpose: Load file for AMD 79970 Ethernet FCode driver using AUI
+\ See license at end of file
+
+command: &tokenize &this
+build-now
+
+silent on
+
+begin-tokenizing amd7997m.fc
+
+FCode-version2
+fload ${BP}/dev/amd79970/loadpkg.fth
+false to tp?				\ Use AUI interface
+end0
+
+end-tokenizing
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/loadfcod.fth
===================================================================
--- dev/amd79970/loadfcod.fth	                        (rev 0)
+++ dev/amd79970/loadfcod.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,30 @@
+purpose: Load file for AMD 79970 Ethernet FCode driver
+\ See license at end of file
+
+FCode-version2
+fload ${BP}/dev/amd79970/loadpkg.fth
+end0
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/loadpkg.fth
===================================================================
--- dev/amd79970/loadpkg.fth	                        (rev 0)
+++ dev/amd79970/loadpkg.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,59 @@
+purpose: Load file for driver for AMD 79970 PCI Ethernet chip
+\ See license at end of file
+
+5 value #rmdsfactor   \ #rmds = 2 ** #rmdsfactor
+
+fload ${BP}/dev/amd79970/setup.fth
+fload ${BP}/dev/amd7990/lancevar.fth
+fload ${BP}/dev/amd79970/79c970.fth 
+fload ${BP}/dev/amd7990/regbits.fth
+fload ${BP}/dev/amd7990/lance32.fth
+fload ${BP}/dev/amd7990/lancecom.fth
+ 
+fload ${BP}/dev/amd7990/timedrec.fth
+fload ${BP}/dev/amd7990/lancetst.fth
+fload ${BP}/dev/amd79970/methods.fth
+
+: close  ( -- )
+   obp-tftp ?dup if close-package then
+   net-off
+
+   la h# 14 + rw@ drop                   \ Reset
+   h# 200 d# 20 bcr!  h# 200 d# 58 csr!  \ Force some modes
+   h# 9060 h# 12 bcr! 	2 2 bcr! 	 \ and some more
+
+   unmap-lance-buffers
+   unmap-chips
+;
+
+map-chips
+get-mac-address						( b0 ... b5 )
+6 alloc-mem 						( b0 ... b5 adr )
+dup 5 bounds swap  do  swap i c! -1  +loop		( adr )
+dup 6 encode-bytes  " local-mac-address" property	( adr )
+6 free-mem
+unmap-chips
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/map.fth
===================================================================
--- dev/amd79970/map.fth	                        (rev 0)
+++ dev/amd79970/map.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,70 @@
+purpose: Map registers, allocate and map DMA space
+\ See license at end of file
+
+\ Possibly-unaligned addresses.  We allocate a bit extra and return a
+\ 16-byte-aligned address within the allocated piece.
+0 value real-vaddr
+0 value real-size
+
+: lance-allocate-dma  ( size -- vadr )
+   h# 10 + to real-size                   ( )
+
+   real-size " dma-alloc" my-parent $call-method  to real-vaddr
+
+   real-vaddr real-size false  " dma-map-in" $call-parent   ( real-paddr )
+
+   real-vaddr swap -  to dma-offset
+
+   real-vaddr  h# f +  h# f invert and    ( vadr )
+;
+
+: lance-free-dma  ( adr size -- )
+   2drop  real-vaddr real-size " dma-free" my-parent $call-method
+;
+
+\ Dma-sync could be dummy routine if parent device doesn't support.
+: dma-sync  ( virt-addr dev-addr size -- )
+   " dma-sync" my-parent ['] $call-method catch if
+      2drop 2drop 2drop
+   then				     ( nbytes eb )
+;
+
+\ Set PCI configuration registers
+: my-config-w!  ( w-value offset -- )  my-space + " config-w!" $call-parent  ;
+
+: map-chips    ( -- )
+   0 0 my-space  h# 100.0010 +  h# 20  " map-in" $call-parent   to la
+
+   \ Status field: Clear PERR, SERR and DATAPERR = c100
+   \ Command field: Set BMEN and IOEN = 0005
+   h# c100 6 my-config-w!  0005 4 my-config-w!
+;
+
+: unmap-chips  ( -- )
+   la h# 20 " map-out" my-parent $call-method
+   0 to la
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/methods.fth
===================================================================
--- dev/amd79970/methods.fth	                        (rev 0)
+++ dev/amd79970/methods.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,131 @@
+purpose: Standard interface methods for the LANCE driver
+\ See license at end of file
+
+headers
+
+instance variable le-nbytes
+instance variable le-buf
+
+0 instance value obp-tftp
+: init-obp-tftp  ( -- okay? )
+   " obp-tftp" find-package if		( phandle )
+      my-args rot open-package		( ihandle )
+   else 0
+   then
+   dup to obp-tftp			( ihandle | 0 )
+   dup 0=  if
+      ." Can't open OBP standard TFTP package"  cr
+   then
+;
+
+: le-xmit  ( bufaddr nbytes -- #sent )
+   tuck get-buffer                   ( nbytes bufaddr ether-buffer )
+   tuck  3 pick  cmove               ( nbytes ether-buffer )
+   dup  dup >devaddr  3 pick         ( nbytes eb eb eb_p nbytes )
+   dma-sync                          ( nbytes eb )
+   over net-send  if  drop 0  then   ( #sent )
+;
+
+: le-poll  ( bufaddr nbytes -- #received )
+   le-nbytes ! le-buf !
+
+   receive-ready?  0=  if  0 exit  then		\ Bail out if no packet ready
+   receive ?dup if		( buffer-handle ether-buffer length )
+      over  dup >devaddr  2 pick
+      dma-sync			( buffer-handle ether-buffer length )
+      dup >r                    ( buffer-handle ether-buffer length )
+      le-nbytes @  min          ( buffer-handle ether-buffer length' )
+      le-buf @  swap  cmove     ( handle )
+      return-buffer  r>
+   else
+      drop return-buffer 0
+   then
+;
+
+: (set-vectors  ( -- )
+   rmd0 nextrmd !   tmd0 nexttmd !  
+   ['] (.error  to .error
+   ['] (.transmit-error to .transmit-error
+   ['] noop to handle-broadcast-packet
+;
+instance defer set-vectors  ' (set-vectors to set-vectors
+
+external
+
+\ Access the address ROM area in 16-bit mode to establish the I/O width
+: get-mac-address  ( -- b0 b1 b2 b3 b4 b5 )
+   la rw@ wbsplit  la 2 + rw@ wbsplit  la 4 + rw@ wbsplit
+;
+
+headers
+
+external
+: watch-net ( -- )
+   map-chips
+   map-lance-buffers
+   set-vectors
+   prom mode !
+   lance-verbose? off
+   ext-lbt? off
+   net-init  if  watch-test net-off  then
+   unmap-lance-buffers
+   unmap-chips
+;
+
+: read  ( buf len -- -2 | actual-len )
+   le-poll  ?dup  0=  if  -2  then
+;
+: write  ( buf len -- actual-len )  le-xmit  ;
+
+: load  ( adr -- len ) " load" obp-tftp $call-method  ;
+: close  ( -- )
+   obp-tftp ?dup if close-package then
+   net-off
+   [ifdef] lance-uninit  lance-uninit  [then]
+   unmap-lance-buffers
+   unmap-chips
+;
+: open  ( -- okay? )
+   map-chips
+   set-vectors
+   \ routine to allocate memory and fire up device
+   mode off  lance-verbose? off
+   map-lance-buffers
+   net-init 0=  if  unmap-lance-buffers unmap-chips  false exit  then
+
+   mac-address drop macbuf 6 cmove	\ Update macbuf.
+   macbuf 6 encode-bytes  " mac-address" property  \ FIXME should be later.
+
+   init-obp-tftp 0=  if  close  false exit  then
+   true
+;
+: reset  ( -- flag )
+   tmd0 if unmap-lance-buffers then
+   la if net-off unmap-chips then
+   true
+;
+headers
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/setup.fth
===================================================================
--- dev/amd79970/setup.fth	                        (rev 0)
+++ dev/amd79970/setup.fth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,44 @@
+purpose: Properties for AMD 79970 PCI Ethernet chip
+\ See license at end of file
+
+" ethernet" device-name
+" AMD,79c970" model
+" AMD,79c970" encode-string " compatible" property
+" network" device-type
+
+my-address my-space               encode-phys
+    0 encode-int encode+  h# 0 encode-int encode+
+
+my-address my-space h# 100.0010 + encode-phys encode+
+    0 encode-int encode+  h#  20 encode-int encode+
+
+my-address my-space h# 200.0014 + encode-phys encode+
+    0 encode-int encode+  h#  20 encode-int encode+
+
+my-address my-space h# 200.0030 + encode-phys encode+
+    0 encode-int encode+  h#  10000 encode-int encode+
+" reg" property
+
+\ LICENSE_BEGIN
+\ Copyright (c) 1994 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

Added: dev/amd79970/vmlance.bth
===================================================================
--- dev/amd79970/vmlance.bth	                        (rev 0)
+++ dev/amd79970/vmlance.bth	2008-09-30 21:06:51 UTC (rev 954)
@@ -0,0 +1,70 @@
+purpose: Load file for VMware emulated LANCE chip
+\ See license at end of file
+
+command: &tokenize &this
+build-now
+
+silent on
+
+begin-tokenizing vmlance.fc
+
+FCode-version2
+5 value #rmdsfactor   \ #rmds = 2 ** #rmdsfactor
+
+fload ${BP}/dev/amd79970/setup.fth
+fload ${BP}/dev/amd7990/lancevar.fth
+fload ${BP}/dev/amd79970/79c970.fth 
+fload ${BP}/dev/amd7990/regbits.fth
+fload ${BP}/dev/amd7990/vmlance.fth
+fload ${BP}/dev/amd7990/lancecom.fth
+ 
+fload ${BP}/dev/amd7990/timedrec.fth
+fload ${BP}/dev/amd7990/lancetst.fth
+fload ${BP}/dev/amd79970/methods.fth
+
+: close  ( -- )
+   obp-tftp ?dup if close-package then
+   net-off
+
+   la h# 14 + rw@ drop                   \ Reset
+   h# 200 d# 20 bcr!  h# 200 d# 58 csr!  \ Force some modes
+   h# 9060 h# 12 bcr! 	2 2 bcr! 	 \ and some more
+
+   unmap-lance-buffers
+   unmap-chips
+;
+
+map-chips
+get-mac-address						( b0 ... b5 )
+6 alloc-mem 						( b0 ... b5 adr )
+dup 5 bounds swap  do  swap i c! -1  +loop		( adr )
+dup 6 encode-bytes  " local-mac-address" property	( adr )
+6 free-mem
+unmap-chips
+end0
+
+end-tokenizing
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2002 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