Module Name: src
Committed By: pooka
Date: Mon Jun 15 15:38:52 UTC 2015
Modified Files:
src/sys/rump/dev/lib/libpci: Makefile pci_at_mainbus.c pci_user.h
rumpdev_bus_dma.c rumpdev_bus_space.c
Log Message:
Add a "userfeature" definition for iospace. I/O space is supported if
that flag is given and calling the init routine succeeds (and we're on
x86, which we probably need to be on anyway for this PCI component to
currently be supported).
Also, some adjustments to make things between flags consistent, namely
deprecate the Makefile variable RUMP_PCI_IOSPACE and don't require
userfeature.h to map 1:1 to the interfaces.
Includes contributions from Robert Millan.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/dev/lib/libpci/Makefile \
src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
cvs rdiff -u -r1.4 -r1.5 src/sys/rump/dev/lib/libpci/pci_user.h \
src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c \
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.5 src/sys/rump/dev/lib/libpci/Makefile:1.6
--- src/sys/rump/dev/lib/libpci/Makefile:1.5 Wed Jun 3 13:41:56 2015
+++ src/sys/rump/dev/lib/libpci/Makefile Mon Jun 15 15:38:52 2015
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.5 2015/06/03 13:41:56 pooka Exp $
+# $NetBSD: Makefile,v 1.6 2015/06/15 15:38:52 pooka Exp $
#
RUMPTOP= ${TOPRUMP}
@@ -26,7 +26,7 @@ CPPFLAGS+= -I${.CURDIR}/opt -I${RUMPTOP}
CPPFLAGS+= -I${RUMPTOP}/librump/rumpvfs
.if ${RUMP_PCI_IOSPACE:Uno} == "yes"
-CPPFLAGS+=-DRUMP_PCI_IOSPACE
+.error RUMP_PCI_IOSPACE defined in Makefile. Use userfeatures.h instead.
.endif
.PATH: ${RUMPCOMP_USER_PATH.rumpdev_pci}
Index: src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
diff -u src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.5 src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.6
--- src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.5 Fri Aug 22 14:28:58 2014
+++ src/sys/rump/dev/lib/libpci/pci_at_mainbus.c Mon Jun 15 15:38:52 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_at_mainbus.c,v 1.5 2014/08/22 14:28:58 pooka Exp $ */
+/* $NetBSD: pci_at_mainbus.c,v 1.6 2015/06/15 15:38:52 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.5 2014/08/22 14:28:58 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_at_mainbus.c,v 1.6 2015/06/15 15:38:52 pooka Exp $");
#include <sys/param.h>
#include <sys/conf.h>
@@ -43,6 +43,8 @@ __KERNEL_RCSID(0, "$NetBSD: pci_at_mainb
#include "rump_private.h"
#include "rump_vfs_private.h"
+#include "pci_user.h"
+
RUMP_COMPONENT(RUMP_COMPONENT_DEV)
{
extern const struct cdevsw pci_cdevsw;
@@ -80,8 +82,17 @@ 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;;
-#ifdef RUMP_PCI_IOSPACE
- pba.pba_flags |= PCI_FLAGS_IO_OKAY;
+
+#ifdef RUMPCOMP_USERFEATURE_PCI_IOSPACE
+ int error;
+
+ error = rumpcomp_pci_iospace_init();
+ if (!error) {
+ pba.pba_flags |= PCI_FLAGS_IO_OKAY;
+ } else {
+ aprint_error("pci: I/O space init error %d, I/O space not "
+ "available\n", error);
+ }
#endif
mainbus = device_find_by_driver_unit("mainbus", 0);
Index: src/sys/rump/dev/lib/libpci/pci_user.h
diff -u src/sys/rump/dev/lib/libpci/pci_user.h:1.4 src/sys/rump/dev/lib/libpci/pci_user.h:1.5
--- src/sys/rump/dev/lib/libpci/pci_user.h:1.4 Wed Jun 3 13:55:42 2015
+++ src/sys/rump/dev/lib/libpci/pci_user.h Mon Jun 15 15:38:52 2015
@@ -1,3 +1,14 @@
+/*
+ * Possible userfeature macro flags:
+ *
+ * RUMPCOMP_USERFEATURE_PCI_DMAFREE:
+ * Support free'ing DMA memory. If not, panic() when free() is called.
+ *
+ * RUMPCOMP_USERFEATURE_PCI_IOSPACE
+ * Support for PCI I/O space. If yes, rumpcomp_pci_iospace_init()
+ * must be provided.
+ */
+
#include "rumpcomp_userfeatures_pci.h"
void *rumpcomp_pci_map(unsigned long, unsigned long);
@@ -9,8 +20,8 @@ void *rumpcomp_pci_irq_establish(unsigne
/* XXX: needs work: support boundary-restricted allocations */
int rumpcomp_pci_dmalloc(size_t, size_t, unsigned long *, unsigned long *);
-#ifdef rumpcomp_pci_free
-void rumpcomp_pci_free(unsigned long, size_t);
+#ifdef RUMPCOMP_USERFEATURE_PCI_DMAFREE
+void rumpcomp_pci_dmafree(unsigned long, size_t);
#endif
struct rumpcomp_pci_dmaseg {
@@ -22,3 +33,7 @@ int rumpcomp_pci_dmamem_map(struct rumpc
void **);
unsigned long rumpcomp_pci_virt_to_mach(void *);
+
+#ifdef RUMPCOMP_USERFEATURE_PCI_IOSPACE
+int rumpcomp_pci_iospace_init(void);
+#endif
Index: src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c
diff -u src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.4 src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.5
--- src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.4 Wed Jun 3 13:55:42 2015
+++ src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c Mon Jun 15 15:38:52 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpdev_bus_dma.c,v 1.4 2015/06/03 13:55:42 pooka Exp $ */
+/* $NetBSD: rumpdev_bus_dma.c,v 1.5 2015/06/15 15:38:52 pooka Exp $ */
/*-
* Copyright (c) 2013 Antti Kantee
@@ -446,11 +446,11 @@ bus_dmamap_sync(bus_dma_tag_t t, bus_dma
void
bus_dmamem_free(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs)
{
-#ifdef rumpcomp_pci_free
+#ifdef RUMPCOMP_USERFEATURE_PCI_DMAFREE
vaddr_t vacookie = segs[0]._ds_vacookie;
bus_size_t sizecookie = segs[0]._ds_sizecookie;
- rumpcomp_pci_free(vacookie, sizecookie);
+ rumpcomp_pci_dmafree(vacookie, sizecookie);
#else
panic("bus_dmamem_free not implemented");
#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.4 src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c:1.5
--- src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c:1.4 Sun May 17 13:45:37 2015
+++ src/sys/rump/dev/lib/libpci/rumpdev_bus_space.c Mon Jun 15 15:38:52 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpdev_bus_space.c,v 1.4 2015/05/17 13:45:37 pooka Exp $ */
+/* $NetBSD: rumpdev_bus_space.c,v 1.5 2015/06/15 15:38:52 pooka Exp $ */
/*-
* Copyright (c) 2013 Antti Kantee. All Rights Reserved.
@@ -34,7 +34,8 @@
#include "pci_user.h"
-#if defined(RUMP_PCI_IOSPACE) && (defined(__i386__) || defined(__x86_64__))
+#if defined(RUMPCOMP_USERFEATURE_PCI_IOSPACE) \
+ && (defined(__i386__) || defined(__x86_64__))
#define IOSPACE_SUPPORTED
#endif