Module Name: src Committed By: matt Date: Wed Aug 17 18:52:01 UTC 2011
Modified Files: src/sys/arch/powerpc/booke/pci: pq3pci.c src/sys/arch/powerpc/ibm4xx/dev: ibm405gp.c src/sys/arch/powerpc/include: pci_machdep.h src/sys/arch/powerpc/marvell: pci_machdep.c src/sys/arch/powerpc/pci: pci_machdep_common.c Log Message: First pass of the new PCI MSI/MSI ABI definitions. (return EOPNOTSUPP for now). To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/booke/pci/pq3pci.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/powerpc/include/pci_machdep.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/powerpc/marvell/pci_machdep.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/powerpc/pci/pci_machdep_common.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/arch/powerpc/booke/pci/pq3pci.c diff -u src/sys/arch/powerpc/booke/pci/pq3pci.c:1.9 src/sys/arch/powerpc/booke/pci/pq3pci.c:1.10 --- src/sys/arch/powerpc/booke/pci/pq3pci.c:1.9 Wed Aug 17 00:59:47 2011 +++ src/sys/arch/powerpc/booke/pci/pq3pci.c Wed Aug 17 18:52:00 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pq3pci.c,v 1.9 2011/08/17 00:59:47 dyoung Exp $ */ +/* $NetBSD: pq3pci.c,v 1.10 2011/08/17 18:52:00 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -44,7 +44,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pq3pci.c,v 1.9 2011/08/17 00:59:47 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pq3pci.c,v 1.10 2011/08/17 18:52:00 matt Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -1468,6 +1468,22 @@ pc->pc_intr_establish = pq3pci_intr_establish; pc->pc_intr_disestablish = pq3pci_intr_disestablish; pc->pc_conf_interrupt = pq3pci_conf_interrupt; + + pc->pc_msi_v = sc; + genppc_pci_chipset_msi_init(pc); +#if 0 + pc->pc_msi_request = pq3pci_msi_request; + pc->pc_msi_available = pq3pci_msi_available; + pc->pc_msi_type = pq3pci_msi_type; + pc->pc_msi_string = pq3pci_msi_string; + pc->pc_msi_evcnt = genppc_pci_msi_evcnt; + pc->pc_msi_establish = pq3pci_msi_establish; + pc->pc_msix_establish = pq3pci_msix_establish; + pc->pc_msi_disestablish = pq3pci_msi_disestablish; + pc->pc_msi_release = pq3pci_msi_release; + pc->pc_msi_free = pq3pci_msi_free; +#endif + pc->pc_decompose_tag = pq3pci_decompose_tag; pc->pc_conf_hook = pq3pci_conf_hook; Index: src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c diff -u src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c:1.6 src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c:1.7 --- src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c:1.6 Wed Jun 22 18:06:34 2011 +++ src/sys/arch/powerpc/ibm4xx/dev/ibm405gp.c Wed Aug 17 18:52:01 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ibm405gp.c,v 1.6 2011/06/22 18:06:34 matt Exp $ */ +/* $NetBSD: ibm405gp.c,v 1.7 2011/08/17 18:52:01 matt Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ibm405gp.c,v 1.6 2011/06/22 18:06:34 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ibm405gp.c,v 1.7 2011/08/17 18:52:01 matt Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -77,6 +77,9 @@ .pc_intr_disestablish = genppc_pci_intr_disestablish, .pc_intr_setattr = ibm4xx_pci_intr_setattr, + .pc_msi_v = &genppc_ibm4xx_chipset, + GENPPC_PCI_MSI_INITIALIZER, + .pc_conf_interrupt = ibm4xx_pci_conf_interrupt, .pc_decompose_tag = ibm4xx_pci_decompose_tag, .pc_conf_hook = ibm4xx_pci_conf_hook, Index: src/sys/arch/powerpc/include/pci_machdep.h diff -u src/sys/arch/powerpc/include/pci_machdep.h:1.11 src/sys/arch/powerpc/include/pci_machdep.h:1.12 --- src/sys/arch/powerpc/include/pci_machdep.h:1.11 Wed Jun 22 18:06:34 2011 +++ src/sys/arch/powerpc/include/pci_machdep.h Wed Aug 17 18:52:00 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep.h,v 1.11 2011/06/22 18:06:34 matt Exp $ */ +/* $NetBSD: pci_machdep.h,v 1.12 2011/08/17 18:52:00 matt Exp $ */ /*- * Copyright (c) 2002,2007 The NetBSD Foundation, Inc. @@ -44,6 +44,7 @@ * Types provided to machine-independent PCI code */ typedef struct genppc_pci_chipset *pci_chipset_tag_t; +typedef void *pci_msi_handle_t; typedef int pcitag_t; typedef int pci_intr_handle_t; @@ -87,6 +88,21 @@ int pci_intr_setattr(pci_chipset_tag_t, pci_intr_handle_t *, int, uint64_t); +int pci_msi_request(const struct pci_attach_args *, + pci_msi_handle_t *, size_t, int, int); +int pci_msi_type(pci_chipset_tag_t, pci_msi_handle_t); +size_t pci_msi_available(pci_chipset_tag_t, pci_msi_handle_t); +const char * pci_msi_string(pci_chipset_tag_t, pci_msi_handle_t, size_t); +const struct evcnt * + pci_msi_evcnt(pci_chipset_tag_t, pci_msi_handle_t, size_t); +void * pci_msi_establish(pci_chipset_tag_t, pci_msi_handle_t, size_t, + int, int (*)(void *), void *); +void * pci_msix_establish(pci_chipset_tag_t, pci_msi_handle_t, size_t, + size_t, int, int (*)(void *), void *); +void pci_msi_disestablish(pci_chipset_tag_t, void *); +void pci_msi_free(pci_chipset_tag_t, pci_msi_handle_t, size_t); +void pci_msi_release(pci_chipset_tag_t, pci_msi_handle_t); + void pci_conf_interrupt(pci_chipset_tag_t, int, int, int, int, int *); int pci_conf_hook(pci_chipset_tag_t, int, int, int, pcireg_t); @@ -123,6 +139,22 @@ int (*pc_intr_setattr)(void *, pci_intr_handle_t *, int, uint64_t); + void *pc_msi_v; + int (*pc_msi_request)(const struct pci_attach_args *, + pci_msi_handle_t *, size_t, int, int); + int (*pc_msi_type)(void *, pci_msi_handle_t); + size_t (*pc_msi_available)(void *, pci_msi_handle_t); + const char * (*pc_msi_string)(void *, pci_msi_handle_t, size_t); + const struct evcnt * + (*pc_msi_evcnt)(void *, pci_msi_handle_t, size_t); + void * (*pc_msi_establish)(void *, pci_msi_handle_t, size_t, + int, int (*)(void *), void *); + void * (*pc_msix_establish)(void *, pci_msi_handle_t, size_t, + size_t, int, int (*)(void *), void *); + void (*pc_msi_disestablish)(void *, void *); + void (*pc_msi_free)(void *, pci_msi_handle_t, size_t); + void (*pc_msi_release)(void *, pci_msi_handle_t); + void (*pc_conf_interrupt)(void *, int, int, int, int, int *); void (*pc_decompose_tag)(void *, pcitag_t, int *, int *, int *); @@ -239,6 +271,72 @@ return (*pc->pc_conf_hook)(pc->pc_conf_v, bus, device, function, id); } +__pci_inline int +pci_msi_request(const struct pci_attach_args *pa, pci_msi_handle_t *msihp, + size_t nmsi, int ipl, int capid) +{ + return (*pci_attach_args_pc(pa)->pc_msi_request)(pa, msihp, nmsi, + ipl, capid); +} + +__pci_inline int +pci_msi_type(pci_chipset_tag_t pc, pci_msi_handle_t msih) +{ + return (*pc->pc_msi_type)(pc->pc_msi_v, msih); +} + +__pci_inline size_t +pci_msi_available(pci_chipset_tag_t pc, pci_msi_handle_t msih) +{ + return (*pc->pc_msi_available)(pc->pc_msi_v, msih); +} + +__pci_inline const char * +pci_msi_string(pci_chipset_tag_t pc, pci_msi_handle_t msih, size_t msirq) +{ + return (*pc->pc_msi_string)(pc->pc_msi_v, msih, msirq); +} + +__pci_inline const struct evcnt * +pci_msi_evcnt(pci_chipset_tag_t pc, pci_msi_handle_t msih, size_t msirq) +{ + return (*pc->pc_msi_evcnt)(pc->pc_msi_v, msih, msirq); +} + +__pci_inline void * +pci_msi_establish(pci_chipset_tag_t pc, pci_msi_handle_t msih, size_t msirq, + int ipl, int (*func)(void *), void *arg) +{ + return (*pc->pc_msi_establish)(pc->pc_msi_v, msih, msirq, ipl, + func, arg); +} + +__pci_inline void * +pci_msix_establish(pci_chipset_tag_t pc, pci_msi_handle_t msih, size_t vec, + size_t msirq, int ipl, int (*func)(void *), void *arg) +{ + return (*pc->pc_msix_establish)(pc->pc_msi_v, msih, vec, msirq, ipl, + func, arg); +} + +__pci_inline void +pci_msi_disestablish(pci_chipset_tag_t pc, void *ih) +{ + (*pc->pc_msi_disestablish)(pc->pc_msi_v, ih); +} + +__pci_inline void +pci_msi_free(pci_chipset_tag_t pc, pci_msi_handle_t msih, size_t msirq) +{ + (*pc->pc_msi_free)(pc->pc_msi_v, msih, msirq); +} + +__pci_inline void +pci_msi_release(pci_chipset_tag_t pc, pci_msi_handle_t msih) +{ + (*pc->pc_msi_release)(pc->pc_msi_v, msih); +} + #undef __pci_inline /* @@ -246,16 +344,45 @@ */ int genppc_pci_bus_maxdevs(void *, int); + +int genppc_pci_intr_map(const struct pci_attach_args *, + pci_intr_handle_t *); const char *genppc_pci_intr_string(void *, pci_intr_handle_t); const struct evcnt *genppc_pci_intr_evcnt(void *, pci_intr_handle_t); void *genppc_pci_intr_establish(void *, pci_intr_handle_t, int, int (*)(void *), void *); void genppc_pci_intr_disestablish(void *, void *); int genppc_pci_intr_setattr(void *, pci_intr_handle_t *, int, uint64_t); + +int genppc_pci_msi_request(const struct pci_attach_args *, pci_msi_handle_t *, + size_t, int, int); +int genppc_pci_msi_type(void *, pci_msi_handle_t); +size_t genppc_pci_msi_available(void *, pci_msi_handle_t); +const struct evcnt *genppc_pci_msi_evcnt(void *, pci_msi_handle_t, size_t); +const char *genppc_pci_msi_string(void *, pci_msi_handle_t, size_t); +void *genppc_pci_msi_establish(void *, pci_msi_handle_t, size_t, + int, int (*)(void *), void *); +void *genppc_pci_msix_establish(void *, pci_msi_handle_t, size_t, + size_t, int, int (*)(void *), void *); +void genppc_pci_msi_disestablish(void *, void *); +void genppc_pci_msi_free(void *, pci_msi_handle_t, size_t); +void genppc_pci_msi_release(void *, pci_msi_handle_t); +void genppc_pci_chipset_msi_init(pci_chipset_tag_t); + +#define GENPPC_PCI_MSI_INITIALIZER \ + .pc_msi_request = genppc_pci_msi_request, \ + .pc_msi_type = genppc_pci_msi_type, \ + .pc_msi_available = genppc_pci_msi_available, \ + .pc_msi_evcnt = genppc_pci_msi_evcnt, \ + .pc_msi_string = genppc_pci_msi_string, \ + .pc_msi_establish = genppc_pci_msi_establish, \ + .pc_msix_establish = genppc_pci_msix_establish, \ + .pc_msi_disestablish = genppc_pci_msi_disestablish, \ + .pc_msi_free = genppc_pci_msi_free, \ + .pc_msi_release = genppc_pci_msi_release + void genppc_pci_conf_interrupt(void *, int, int, int, int, int *); int genppc_pci_conf_hook(void *, int, int, int, pcireg_t); -int genppc_pci_intr_map(const struct pci_attach_args *, - pci_intr_handle_t *); /* generic indirect PCI functions */ void genppc_pci_indirect_attach_hook(device_t, device_t, Index: src/sys/arch/powerpc/marvell/pci_machdep.c diff -u src/sys/arch/powerpc/marvell/pci_machdep.c:1.3 src/sys/arch/powerpc/marvell/pci_machdep.c:1.4 --- src/sys/arch/powerpc/marvell/pci_machdep.c:1.3 Wed Jun 22 18:06:34 2011 +++ src/sys/arch/powerpc/marvell/pci_machdep.c Wed Aug 17 18:52:01 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep.c,v 1.3 2011/06/22 18:06:34 matt Exp $ */ +/* $NetBSD: pci_machdep.c,v 1.4 2011/08/17 18:52:01 matt Exp $ */ /* * Copyright (c) 2009 KIYOHARA Takashi * All rights reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.3 2011/06/22 18:06:34 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.4 2011/08/17 18:52:01 matt Exp $"); #include "gtpci.h" #include "pci.h" @@ -68,6 +68,9 @@ .pc_intr_disestablish = genppc_pci_intr_disestablish, .pc_intr_setattr = genppc_pci_intr_setattr, + .pc_msi_v = &genppc_gtpci0_chipset, + GENPPC_PCI_MSI_INITIALIZER, + .pc_conf_interrupt = gtpci_md_conf_interrupt, .pc_decompose_tag = gtpci_decompose_tag, .pc_conf_hook = gtpci_md_conf_hook, @@ -89,6 +92,9 @@ .pc_intr_setattr = genppc_pci_intr_setattr, .pc_intr_map = genppc_pci_intr_map, + .pc_msi_v = &genppc_gtpci1_chipset, + GENPPC_PCI_MSI_INITIALIZER, + .pc_conf_interrupt = gtpci_md_conf_interrupt, .pc_decompose_tag = gtpci_decompose_tag, .pc_conf_hook = gtpci_md_conf_hook, Index: src/sys/arch/powerpc/pci/pci_machdep_common.c diff -u src/sys/arch/powerpc/pci/pci_machdep_common.c:1.13 src/sys/arch/powerpc/pci/pci_machdep_common.c:1.14 --- src/sys/arch/powerpc/pci/pci_machdep_common.c:1.13 Wed Jun 22 18:06:34 2011 +++ src/sys/arch/powerpc/pci/pci_machdep_common.c Wed Aug 17 18:52:01 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep_common.c,v 1.13 2011/06/22 18:06:34 matt Exp $ */ +/* $NetBSD: pci_machdep_common.c,v 1.14 2011/08/17 18:52:01 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_machdep_common.c,v 1.13 2011/06/22 18:06:34 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_machdep_common.c,v 1.14 2011/08/17 18:52:01 matt Exp $"); #define _POWERPC_BUS_DMA_PRIVATE @@ -214,6 +214,84 @@ return 1; } +int +genppc_pci_msi_request(const struct pci_attach_args *pa, + pci_msi_handle_t *msihp, size_t nmsirq, int ipl, int capid) +{ + return EOPNOTSUPP; +} + +int +genppc_pci_msi_type(void *v, pci_msi_handle_t msih) +{ + panic("%s", __func__); +} + +size_t +genppc_pci_msi_available(void *v, pci_msi_handle_t msih) +{ + panic("%s", __func__); +} + +const char * +genppc_pci_msi_string(void *v, pci_msi_handle_t msih, size_t msirq) +{ + panic("%s", __func__); +} + +const struct evcnt * +genppc_pci_msi_evcnt(void *v, pci_msi_handle_t msih, size_t msirq) +{ + panic("%s", __func__); +} + +void * +genppc_pci_msi_establish(void *v, pci_msi_handle_t msih, size_t msirq, + int ipl, int (*func)(void *), void *arg) +{ + panic("%s", __func__); +} + +void * +genppc_pci_msix_establish(void *v, pci_msi_handle_t msih, size_t vec, + size_t msirq, int ipl, int (*func)(void *), void *arg) +{ + panic("%s", __func__); +} + +void +genppc_pci_msi_disestablish(void *v, void *ih) +{ + panic("%s", __func__); +} + +void +genppc_pci_msi_free(void *v, pci_msi_handle_t msih, size_t msirq) +{ + panic("%s", __func__); +} + +void +genppc_pci_msi_release(void *v, pci_msi_handle_t msih) +{ + panic("%s", __func__); +} + +void +genppc_pci_chipset_msi_init(pci_chipset_tag_t pc) +{ + pc->pc_msi_request = genppc_pci_msi_request; + pc->pc_msi_type = genppc_pci_msi_type; + pc->pc_msi_available = genppc_pci_msi_available; + pc->pc_msi_evcnt = genppc_pci_msi_evcnt; + pc->pc_msi_string = genppc_pci_msi_string; + pc->pc_msi_establish = genppc_pci_msi_establish; + pc->pc_msix_establish = genppc_pci_msix_establish; + pc->pc_msi_disestablish = genppc_pci_msi_disestablish; + pc->pc_msi_free = genppc_pci_msi_free; + pc->pc_msi_release = genppc_pci_msi_release; +} + #ifdef __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH #include <machine/isa_machdep.h> #include "isa.h"