Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory common-lisp.net:/tmp/cvs-serv24313
Modified Files: pci.lisp Log Message: Added pci-device-address-maps.
Date: Sun Aug 14 14:15:05 2005 Author: ffjeld
Index: movitz/losp/x86-pc/pci.lisp diff -u movitz/losp/x86-pc/pci.lisp:1.10 movitz/losp/x86-pc/pci.lisp:1.11 --- movitz/losp/x86-pc/pci.lisp:1.10 Fri Aug 12 08:34:35 2005 +++ movitz/losp/x86-pc/pci.lisp Sun Aug 14 14:15:04 2005 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld frodef@acm.org ;;;; Created at: Sun Dec 14 22:33:42 2003 ;;;; -;;;; $Id: pci.lisp,v 1.10 2005/08/12 06:34:35 ffjeld Exp $ +;;;; $Id: pci.lisp,v 1.11 2005/08/14 12:15:04 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -281,6 +281,30 @@ (setf (pci-bios-config-space bus device function register #xb10b 8) value))
+ +(defmacro pci-config (register) + (cdr (or (assoc register + '((:interrupt-line . #x3c) + (:interrupt-pin . #x3d) + (:base-addr . #x10) + (:memspace . #x00) + (:iospace . #x01) + (:type . #x06) + (:memspace64 . #x01))) + (error "Unknown pci-config register: ~S" register)))) + +(defun pci-device-address-maps (bus device function) + (loop for i upfrom (pci-config :base-addr) by 4 repeat 6 + as base = (pci-bios-config-space-dword bus device function i) + unless (= 0 base) collect + (cond + ((logbitp 0 base) + (cons :io (logand base -4))) + ((= 1 (ldb (byte 2 1) base)) + (cons :mem64 (logand base -16))) + (t + (cons :mem32 (logand base -16)))))) + (defun scan-pci-bus (bus) (loop for device from 0 to 31 do (multiple-value-bind (vendor-id return-code) @@ -298,5 +322,6 @@ (ldb (byte 8 0) class-rev) status) (format *query-io* " Class:~{ ~@[~A~]~}" - (multiple-value-list (pci-class (ldb (byte 24 8) class-rev)))))))) - (values)) \ No newline at end of file + (multiple-value-list (pci-class (ldb (byte 24 8) class-rev)))) + (format *query-io* "~S" (pci-device-address-maps bus device 0)))))) + (values))