mirror of
https://github.com/openbios/openfirmware.git
synced 2025-05-09 00:21:49 +08:00
Added old AMD Ethernet driver to tree for use with VMWare and VirtualBox.
git-svn-id: svn://coreboot.org/openfirmware@954 1552c027-8020-0410-b4b5-a757f869b4ce
This commit is contained in:
parent
81e04c9c56
commit
c3624d8662
225
dev/amd7990/lance32.fth
Normal file
225
dev/amd7990/lance32.fth
Normal file
@ -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
|
||||
;
|
228
dev/amd7990/lancecom.fth
Normal file
228
dev/amd7990/lancecom.fth
Normal file
@ -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
|
166
dev/amd7990/lancetst.fth
Normal file
166
dev/amd7990/lancetst.fth
Normal file
@ -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
|
80
dev/amd7990/lancevar.fth
Normal file
80
dev/amd7990/lancevar.fth
Normal file
@ -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
|
93
dev/amd7990/regbits.fth
Normal file
93
dev/amd7990/regbits.fth
Normal file
@ -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
|
105
dev/amd7990/timedrec.fth
Normal file
105
dev/amd7990/timedrec.fth
Normal file
@ -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
|
231
dev/amd7990/vmlance.fth
Normal file
231
dev/amd7990/vmlance.fth
Normal file
@ -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
|
||||
;
|
92
dev/amd79970/79c970.fth
Normal file
92
dev/amd79970/79c970.fth
Normal file
@ -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
|
39
dev/amd79970/amd79970.bth
Normal file
39
dev/amd79970/amd79970.bth
Normal file
@ -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
|
40
dev/amd79970/amd7997m.bth
Normal file
40
dev/amd79970/amd7997m.bth
Normal file
@ -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
|
30
dev/amd79970/loadfcod.fth
Normal file
30
dev/amd79970/loadfcod.fth
Normal file
@ -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
|
59
dev/amd79970/loadpkg.fth
Normal file
59
dev/amd79970/loadpkg.fth
Normal file
@ -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
|
70
dev/amd79970/map.fth
Normal file
70
dev/amd79970/map.fth
Normal file
@ -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
|
131
dev/amd79970/methods.fth
Normal file
131
dev/amd79970/methods.fth
Normal file
@ -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
|
44
dev/amd79970/setup.fth
Normal file
44
dev/amd79970/setup.fth
Normal file
@ -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
|
70
dev/amd79970/vmlance.bth
Normal file
70
dev/amd79970/vmlance.bth
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user