Module Name:    src
Committed By:   pooka
Date:           Fri Aug 22 14:28:58 UTC 2014

Modified Files:
        src/sys/rump/dev/lib/libpci: Makefile pci_at_mainbus.c
            rumpdev_bus_space.c

Log Message:
Add a compile-time selector for I/O space operations.  Needs more work
some day, but allows virtio drivers to work today.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/rump/dev/lib/libpci/Makefile
cvs rdiff -u -r1.4 -r1.5 src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
cvs rdiff -u -r1.2 -r1.3 src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/dev/lib/libpci/Makefile
diff -u src/sys/rump/dev/lib/libpci/Makefile:1.3 src/sys/rump/dev/lib/libpci/Makefile:1.4
--- src/sys/rump/dev/lib/libpci/Makefile:1.3	Mon Apr 14 23:53:42 2014
+++ src/sys/rump/dev/lib/libpci/Makefile	Fri Aug 22 14:28:58 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.3 2014/04/14 23:53:42 pooka Exp $
+#	$NetBSD: Makefile,v 1.4 2014/08/22 14:28:58 pooka Exp $
 #
 
 RUMPTOP= ${TOPRUMP}
@@ -23,6 +23,10 @@ SRCS+=	pci_at_mainbus.c
 CPPFLAGS+= -I${.CURDIR}/opt -I${RUMPTOP}/librump/rumpkern
 CPPFLAGS+= -I${RUMPTOP}/librump/rumpvfs
 
+.if ${RUMP_PCI_IOSPACE:Uno} == "yes"
+CPPFLAGS+=-DRUMP_PCI_IOSPACE
+.endif
+
 .if defined(RUMP_PCI_USER)
 RUMPCOMP_USER_SRCS=	${RUMP_PCI_USER}
 RUMPCOMP_INCS_DIR:=	${.PARSEDIR}

Index: src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
diff -u src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.4 src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.5
--- src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.4	Thu Jul 31 15:55:08 2014
+++ src/sys/rump/dev/lib/libpci/pci_at_mainbus.c	Fri Aug 22 14:28:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci_at_mainbus.c,v 1.4 2014/07/31 15:55:08 pooka Exp $	*/
+/*	$NetBSD: pci_at_mainbus.c,v 1.5 2014/08/22 14:28:58 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_at_mainbus.c,v 1.4 2014/07/31 15:55:08 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_at_mainbus.c,v 1.5 2014/08/22 14:28:58 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -80,7 +80,7 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV_AFTERM
 #endif
 	pba.pba_flags = PCI_FLAGS_MEM_OKAY |
 	    PCI_FLAGS_MRL_OKAY | PCI_FLAGS_MRM_OKAY | PCI_FLAGS_MWI_OKAY;;
-#if 0
+#ifdef RUMP_PCI_IOSPACE
 	pba.pba_flags |= PCI_FLAGS_IO_OKAY;
 #endif
 

Index: src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c
diff -u src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c:1.2 src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c:1.3
--- src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c:1.2	Sun Apr 13 15:43:26 2014
+++ src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c	Fri Aug 22 14:28:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpdev_bus_space.c,v 1.2 2014/04/13 15:43:26 pooka Exp $	*/
+/*	$NetBSD: rumpdev_bus_space.c,v 1.3 2014/08/22 14:28:58 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2013 Antti Kantee.  All Rights Reserved.
@@ -34,6 +34,10 @@
 
 #include "pci_user.h"
 
+#if defined(RUMP_PCI_IOSPACE) && (defined(__i386__) || defined(__x86_64__))
+#define IOSPACE_SUPPORTED
+#endif
+
 int
 bus_space_map(bus_space_tag_t bst, bus_addr_t address, bus_size_t size,
 	int flags, bus_space_handle_t *handlep)
@@ -48,8 +52,12 @@ bus_space_map(bus_space_tag_t bst, bus_a
 	 * make a hypercall to request it.
 	 */
 	if (bst == 0) {
+#ifdef IOSPACE_SUPPORTED
 		*handlep = address;
 		rv = 0;
+#else
+		rv = ENOTSUP;
+#endif
 	} else {
 		*handlep = (bus_space_handle_t)rumpcomp_pci_map(address, size);
 		rv = *handlep ? 0 : EINVAL;
@@ -65,7 +73,12 @@ bus_space_read_1(bus_space_tag_t bst, bu
 	uint8_t rv;
 
 	if (bst == 0) {
-		panic("8bit IO space not supported");
+#ifdef IOSPACE_SUPPORTED
+		unsigned short addr = bsh + offset;
+		__asm__ __volatile__("inb %1, %0" : "=a"(rv) : "d"(addr)); 
+#else
+		panic("IO space not supported");
+#endif
 	} else {
 		rv = *(volatile uint8_t *)(bsh + offset);
 	}
@@ -80,7 +93,12 @@ bus_space_read_2(bus_space_tag_t bst, bu
 	uint16_t rv;
 
 	if (bst == 0) {
-		panic("16bit IO space not supported");
+#ifdef IOSPACE_SUPPORTED
+		unsigned short addr = bsh + offset;
+		__asm__ __volatile__("in %1, %0" : "=a"(rv) : "d"(addr)); 
+#else
+		panic("IO space not supported");
+#endif
 	} else {
 		rv = *(volatile uint16_t *)(bsh + offset);
 	}
@@ -95,11 +113,11 @@ bus_space_read_4(bus_space_tag_t bst, bu
 	uint32_t rv;
 
 	if (bst == 0) {
-#if 1
-		panic("IO space not supported in this build");
-#else
+#ifdef IOSPACE_SUPPORTED
 		unsigned short addr = bsh + offset;
 		__asm__ __volatile__("inl %1, %0" : "=a"(rv) : "d"(addr)); 
+#else
+		panic("IO space not supported");
 #endif
 	} else {
 		rv = *(volatile uint32_t *)(bsh + offset);
@@ -114,8 +132,11 @@ bus_space_write_1(bus_space_tag_t bst, b
 {
 
 	if (bst == 0) {
-#if 1
-		panic("IO space not supported in this build");
+#ifdef IOSPACE_SUPPORTED
+		unsigned short addr = bsh + offset;
+		__asm__ __volatile__("outb %0, %1" :: "a"(v), "d"(addr));
+#else
+		panic("IO space not supported");
 #endif
 	} else {
 		*(volatile uint8_t *)(bsh + offset) = v;
@@ -128,8 +149,11 @@ bus_space_write_2(bus_space_tag_t bst, b
 {
 
 	if (bst == 0) {
-#if 1
-		panic("IO space not supported in this build");
+#ifdef IOSPACE_SUPPORTED
+		unsigned short addr = bsh + offset;
+		__asm__ __volatile__("out %0, %1" :: "a"(v), "d"(addr));
+#else
+		panic("IO space not supported");
 #endif
 	} else {
 		*(volatile uint16_t *)(bsh + offset) = v;
@@ -142,11 +166,11 @@ bus_space_write_4(bus_space_tag_t bst, b
 {
 
 	if (bst == 0) {
-#if 1
-		panic("IO space not supported in this build");
-#else
+#ifdef IOSPACE_SUPPORTED
 		unsigned short addr = bsh + offset;
 		__asm__ __volatile__("outl %0, %1" :: "a"(v), "d"(addr));
+#else
+		panic("IO space not supported");
 #endif
 	} else {
 		*(volatile uint32_t *)(bsh + offset) = v;

Reply via email to