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