[movitz-cvs] CVS update: movitz/losp/x86-pc/ne2k.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Sun Feb 1 22:10:19 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp/x86-pc
In directory common-lisp.net:/tmp/cvs-serv11834
Modified Files:
ne2k.lisp
Log Message:
Changed to using %io-port-read/write-succession.
Date: Sun Feb 1 17:10:18 2004
Author: ffjeld
Index: movitz/losp/x86-pc/ne2k.lisp
diff -u movitz/losp/x86-pc/ne2k.lisp:1.4 movitz/losp/x86-pc/ne2k.lisp:1.5
--- movitz/losp/x86-pc/ne2k.lisp:1.4 Mon Jan 19 06:23:52 2004
+++ movitz/losp/x86-pc/ne2k.lisp Sun Feb 1 17:10:17 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Tue Sep 17 15:16:00 2002
;;;;
-;;;; $Id: ne2k.lisp,v 1.4 2004/01/19 11:23:52 ffjeld Exp $
+;;;; $Id: ne2k.lisp,v 1.5 2004/02/01 22:10:17 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -66,7 +66,7 @@
(defun ne-x000-probe (&optional (io-base #x300))
"Probe for the presence of a NE2000 compatible card at IO-address io-base."
(with-dp8390 (dp8390 io-base)
- (let ((test-vector (copy-seq #(#xab #xba #x00 #xff #x55 #x99 #x01 #x23 #x45 #xde #xad #xbe #xef #x23))))
+ (let ((test-vector #(#xabba #x00ff #x5599 #x0123 #x45de #xadbe #xef23)))
(declare (dynamic-extent test-vector))
;; NE1000 has RAM buffer located at 8192
;; NE2000 has RAM buffer located at 16384
@@ -75,17 +75,15 @@
(dp8390 ($page0-write dcr)) ($data-config fifo-threshold-8-bytes
loopback-off
dma-16-bit))
- (with-dp8390-dma (dp8390 remote-write (length test-vector) 16384)
- (io-port-write-sequence test-vector (+ io-base #x10) :unsigned-byte8 :16-bits))
+ (with-dp8390-dma (dp8390 remote-write (* 2 (length test-vector)) 16384)
+ (loop with asic = (+ io-base #x10)
+ for x across test-vector
+ do (setf (io-port asic :unsigned-byte16) x)))
(let ((mismatch nil))
- (with-dp8390-dma (dp8390 remote-read (length test-vector) 16384)
- (dotimes (i (truncate (length test-vector) 2))
- (let ((nic-byte (io-port (+ io-base #x10) :unsigned-byte16)))
- (unless (and (= (aref test-vector (* 2 i))
- (ldb (byte 8 0) nic-byte))
- (= (aref test-vector (1+ (* 2 i)))
- (ldb (byte 8 8) nic-byte)))
- (setf mismatch t)))))
+ (with-dp8390-dma (dp8390 remote-read (* 2 (length test-vector)) 16384)
+ (loop for x across test-vector
+ do (unless (= x (io-port (+ io-base #x10) :unsigned-byte16))
+ (setf mismatch t))))
(unless mismatch
'ne2000)))))
@@ -102,8 +100,10 @@
(let ((mac (make-array 6 :element-type 'muerte::u8)))
(with-dp8390 (dp8390 io-base)
(with-dp8390-dma (dp8390 remote-read 12 0)
- (io-port-read-sequence mac (asic-io-base ne2000)
- :unsigned-byte16 :16-bits)))
+ (dotimes (i 6)
+ (setf (aref mac i)
+ (ldb (byte 8 0)
+ (io-port (asic-io-base ne2000) :unsigned-byte16))))))
(setf (mac-address ne2000) mac))
ne2000))
@@ -117,6 +117,7 @@
(let ((asic-io (asic-io-base device))
(bnry (cached-bnry device))
(packet (or packet (make-array +max-ethernet-frame-size+ :element-type 'muerte::u8))))
+ (check-type packet 'vector-u8)
(with-dp8390 (dp8390 (io-base device))
(multiple-value-bind (packet-status next-bnry packet-length)
(with-dp8390-dma (dp8390 remote-read 4 (* 256 bnry))
@@ -140,7 +141,7 @@
((< (+ bnry (ash (1- packet-length) -8))
(ring-stop device))
(with-dp8390-dma (dp8390 remote-read packet-length (+ (* 256 bnry) 4))
- (io-port-read-sequence packet asic-io :unsigned-byte8 :16-bits :start start)
+ (%io-port-read-succession asic-io packet 2 start rx-end :16-bit)
(when (oddp rx-end)
(setf (aref packet (1- rx-end))
(ldb (byte 8 0) (io-port asic-io :unsigned-byte16)))))
@@ -148,13 +149,11 @@
(cached-bnry device) next-bnry))
(t (let ((split-point (+ -4 (ash (- (ring-stop device) bnry) 8))))
(with-dp8390-dma (dp8390 remote-read split-point)
- (io-port-read-sequence packet asic-io :unsigned-byte8 :16-bits
- :start start :end (+ start split-point)))
+ (%io-port-read-succession asic-io packet 2 start (+ start split-point) :16-bit))
(with-dp8390-dma (dp8390 remote-read
(- rx-end start split-point)
(* 256 (ring-start device)))
- (io-port-read-sequence packet asic-io :unsigned-byte8 :16-bits
- :start (+ start split-point))
+ (%io-port-read-succession asic-io packet 2 (+ start split-point) rx-end :16-bit)
(when (oddp rx-end)
(setf (aref packet (1- rx-end))
(ldb (byte 8 0)
More information about the Movitz-cvs
mailing list