Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Redefine PCI_MSI_* and PCI_PCIE_* constants in terms of ...
details: https://anonhg.NetBSD.org/src/rev/3c1832117c4b
branches: trunk
changeset: 768447:3c1832117c4b
user: dyoung <dyoung%NetBSD.org@localhost>
date: Wed Aug 17 00:59:47 2011 +0000
description:
Redefine PCI_MSI_* and PCI_PCIE_* constants in terms of bits(3).
Use named constants and more conventional variable names in
pci_msi_establish() and pci_msi_disestablish(). Fix a couple of bugs:
pci_msi_establish() returned a pointer to the struct intrhand instead of
to the struct msi_hdl as it was intended to, and pci_msi_disestablish()
did not free(9) the msi_hdl.
diffstat:
sys/arch/powerpc/booke/pci/pq3pci.c | 8 +-
sys/arch/x86/pci/pci_intr_machdep.c | 45 ++++++-----
sys/dev/pci/pci_subr.c | 8 +-
sys/dev/pci/pcireg.h | 131 ++++++++++++++++++++---------------
sys/dev/pci/ppb.c | 13 +-
5 files changed, 114 insertions(+), 91 deletions(-)
diffs (truncated from 341 to 300 lines):
diff -r 441995f57a7e -r 3c1832117c4b sys/arch/powerpc/booke/pci/pq3pci.c
--- a/sys/arch/powerpc/booke/pci/pq3pci.c Wed Aug 17 00:45:55 2011 +0000
+++ b/sys/arch/powerpc/booke/pci/pq3pci.c Wed Aug 17 00:59:47 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pq3pci.c,v 1.8 2011/06/22 18:06:34 matt Exp $ */
+/* $NetBSD: pq3pci.c,v 1.9 2011/08/17 00:59:47 dyoung 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.8 2011/06/22 18:06:34 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pq3pci.c,v 1.9 2011/08/17 00:59:47 dyoung Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -1179,8 +1179,8 @@
break;
msictl = pci_conf_read(pa->pa_pc, pa->pa_tag, msioff);
msictl &= ~PCI_MSI_CTL_MSI_ENABLE;
- msictl &= ~(PCI_MSI_CTL_MME_MASK << PCI_MSI_CTL_MME_SHIFT);
- int rmsi = (msictl >> PCI_MSI_CTL_MMC_SHIFT) & PCI_MSI_CTL_MMC_MASK;
+ msictl &= ~PCI_MSI_CTL_MME_MASK;
+ int rmsi = __SHIFTOUT(msictl, PCI_MSI_CTL_MMC_MASK);
pci_conf_write(pa->pa_pc, pa->pa_tag, msioff, msictl);
pci_intr_handle_t handle = pq3pci_msi_alloc(IPL_VM, rmsi);
struct pq3pci_msihand * const msih = pq3pci_msi_lookup(handle);
diff -r 441995f57a7e -r 3c1832117c4b sys/arch/x86/pci/pci_intr_machdep.c
--- a/sys/arch/x86/pci/pci_intr_machdep.c Wed Aug 17 00:45:55 2011 +0000
+++ b/sys/arch/x86/pci/pci_intr_machdep.c Wed Aug 17 00:59:47 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_intr_machdep.c,v 1.20 2011/08/01 11:08:03 drochner Exp $ */
+/* $NetBSD: pci_intr_machdep.c,v 1.21 2011/08/17 00:59:47 dyoung Exp $ */
/*-
* Copyright (c) 1997, 1998, 2009 The NetBSD Foundation, Inc.
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_intr_machdep.c,v 1.20 2011/08/01 11:08:03 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_intr_machdep.c,v 1.21 2011/08/17 00:59:47 dyoung Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -371,18 +371,17 @@
int (*func)(void *), void *arg)
{
int co;
- void *ih;
+ struct intrhand *ih;
struct msi_hdl *msih;
struct cpu_info *ci;
- struct intrsource *s;
- u_int32_t cr;
+ struct intrsource *is;
+ pcireg_t reg;
if (!pci_get_capability(pa->pa_pc, pa->pa_tag, PCI_CAP_MSI, &co, 0))
return NULL;
- ih = intr_establish(-1, &msi_pic, -1, IST_EDGE, level,
- func, arg, 0);
- if (!ih)
+ ih = intr_establish(-1, &msi_pic, -1, IST_EDGE, level, func, arg, 0);
+ if (ih == NULL)
return NULL;
msih = malloc(sizeof(*msih), M_DEVBUF, M_WAITOK);
@@ -391,20 +390,23 @@
msih->tag = pa->pa_tag;
msih->co = co;
- ci = msih->ih->ih_cpu;
- s = ci->ci_isources[msih->ih->ih_slot];
- cr = pci_conf_read(pa->pa_pc, pa->pa_tag, co);
- pci_conf_write(pa->pa_pc, pa->pa_tag, co + 4,
+ ci = ih->ih_cpu;
+ is = ci->ci_isources[ih->ih_slot];
+ reg = pci_conf_read(pa->pa_pc, pa->pa_tag, co + PCI_MSI_CTL);
+ /* 0xfee00000 == IOAPIC_??? */
+ pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MADDR64_LO,
0xfee00000 | ci->ci_cpuid << 12);
- if (cr & 0x800000) {
- pci_conf_write(pa->pa_pc, pa->pa_tag, co + 8, 0);
- pci_conf_write(pa->pa_pc, pa->pa_tag, co + 12,
- s->is_idtvec | 0x4000);
+ if (reg & PCI_MSI_CTL_64BIT_ADDR) {
+ pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MADDR64_HI,
+ 0);
+ pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MDATA64,
+ is->is_idtvec | 0x4000);
} else
- pci_conf_write(pa->pa_pc, pa->pa_tag, co + 8,
- s->is_idtvec | 0x4000);
- pci_conf_write(pa->pa_pc, pa->pa_tag, co, 0x10000);
- return ih;
+ pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MDATA,
+ is->is_idtvec | 0x4000);
+ pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_CTL,
+ PCI_MSI_CTL_MSI_ENABLE);
+ return msih;
}
void
@@ -412,7 +414,8 @@
{
struct msi_hdl *msih = ih;
- pci_conf_write(msih->pc, msih->tag, msih->co, 0);
+ pci_conf_write(msih->pc, msih->tag, msih->co + PCI_MSI_CTL, 0);
intr_disestablish(msih->ih);
+ free(msih, M_DEVBUF);
}
#endif
diff -r 441995f57a7e -r 3c1832117c4b sys/dev/pci/pci_subr.c
--- a/sys/dev/pci/pci_subr.c Wed Aug 17 00:45:55 2011 +0000
+++ b/sys/dev/pci/pci_subr.c Wed Aug 17 00:59:47 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_subr.c,v 1.87 2011/06/06 18:27:12 msaitoh Exp $ */
+/* $NetBSD: pci_subr.c,v 1.88 2011/08/17 00:59:47 dyoung Exp $ */
/*
* Copyright (c) 1997 Zubin D. Dittia. All rights reserved.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.87 2011/06/06 18:27:12 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.88 2011/08/17 00:59:47 dyoung Exp $");
#ifdef _KERNEL_OPT
#include "opt_pci.h"
@@ -965,8 +965,8 @@
regs += o2i(capoff);
ctl = *regs++;
- mmc = (ctl >> PCI_MSI_CTL_MMC_SHIFT) & PCI_MSI_CTL_MMC_MASK;
- mme = (ctl >> PCI_MSI_CTL_MME_SHIFT) & PCI_MSI_CTL_MME_MASK;
+ mmc = __SHIFTOUT(ctl, PCI_MSI_CTL_MMC_MASK);
+ mme = __SHIFTOUT(ctl, PCI_MSI_CTL_MME_MASK);
printf("\n PCI Message Signaled Interrupt\n");
diff -r 441995f57a7e -r 3c1832117c4b sys/dev/pci/pcireg.h
--- a/sys/dev/pci/pcireg.h Wed Aug 17 00:45:55 2011 +0000
+++ b/sys/dev/pci/pcireg.h Wed Aug 17 00:59:47 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pcireg.h,v 1.72 2011/06/06 18:27:12 msaitoh Exp $ */
+/* $NetBSD: pcireg.h,v 1.73 2011/08/17 00:59:47 dyoung Exp $ */
/*
* Copyright (c) 1995, 1996, 1999, 2000
@@ -479,15 +479,28 @@
#define PCI_VPD_DATAREG(ofs) ((ofs) + 4)
#define PCI_VPD_OPFLAG 0x80000000
-#define PCI_MSI_CTL_PERVEC_MASK 0x01000000
-#define PCI_MSI_CTL_64BIT_ADDR 0x00800000
-#define PCI_MSI_CTL_MME_MASK 0x7
-#define PCI_MSI_CTL_MME_SHIFT 20
-#define PCI_MSI_CTL_MME(ofs) (((ofs) & PCI_MSI_CTL_MME_MASK) << PCI_MSI_CTL_MME_SHIFT)
-#define PCI_MSI_CTL_MMC_MASK 0x7
-#define PCI_MSI_CTL_MMC_SHIFT 17
-#define PCI_MSI_CTL_MMC(ofs) (((ofs) >> PCI_MSI_CTL_MME_SHIFT) & PCI_MSI_CTL_MME_MASK)
-#define PCI_MSI_CTL_MSI_ENABLE 0x00010000
+#define PCI_MSI_CTL 0x0 /* Message Control Register offset */
+#define PCI_MSI_MADDR 0x4 /* Message Address Register (least
+ * significant bits) offset
+ */
+#define PCI_MSI_MADDR64_LO 0x4 /* 64-bit Message Address Register
+ * (least significant bits) offset
+ */
+#define PCI_MSI_MADDR64_HI 0x8 /* 64-bit Message Address Register
+ * (most significant bits) offset
+ */
+#define PCI_MSI_MDATA 0x8 /* Message Data Register offset */
+#define PCI_MSI_MDATA64 0xC /* 64-bit Message Data Register
+ * offset
+ */
+
+#define PCI_MSI_CTL_MASK __BITS(31, 16)
+#define PCI_MSI_CTL_PERVEC_MASK __SHIFTIN(__BIT(8), PCI_MSI_CTL_MASK)
+#define PCI_MSI_CTL_64BIT_ADDR __SHIFTIN(__BIT(7), PCI_MSI_CTL_MASK)
+#define PCI_MSI_CTL_MME_MASK __SHIFTIN(__BITS(6, 4), PCI_MSI_CTL_MASK)
+#define PCI_MSI_CTL_MMC_MASK __SHIFTIN(__BITS(3, 1), PCI_MSI_CTL_MASK)
+#define PCI_MSI_CTL_MSI_ENABLE __SHIFTIN(__BIT(0), PCI_MSI_CTL_MASK)
+
/*
* MSI Message Address is at offset 4.
* MSI Message Upper Address (if 64bit) is at offset 8.
@@ -614,54 +627,60 @@
/*
* PCI Express; access via capability pointer.
*/
-#define PCI_PCIE_XCAP 0x00
-#define PCI_PCIE_XCAP_VER_MASK 0x000f0000
-#define PCI_PCIE_XCAP_VER_1_0 0x00010000
-#define PCI_PCIE_XCAP_VER_2_0 0x00020000
-#define PCI_PCIE_XCAP_TYPE_MASK 0x00f00000
-#define PCI_PCIE_XCAP_TYPE_PCIE_DEV 0x00000000
-#define PCI_PCIE_XCAP_TYPE_PCI_DEV 0x00100000
-#define PCI_PCIE_XCAP_TYPE_ROOT 0x00400000
-#define PCI_PCIE_XCAP_TYPE_UP 0x00500000
-#define PCI_PCIE_XCAP_TYPE_DOWN 0x00600000
-#define PCI_PCIE_XCAP_TYPE_PCIE2PCI 0x00700000
-#define PCI_PCIE_XCAP_TYPE_PCI2PCIE 0x00800000
-#define PCI_PCIE_XCAP_SI 0x01000000
-#define PCI_PCIE_DCAP 0x04
-#define PCI_PCIE_DCSR 0x08
-#define PCI_PCIE_DCSR_MAX_READ_REQ 0x7000
-#define PCI_PCIE_DCSR_ENA_NO_SNOOP 0x00000800
-#define PCI_PCIE_DCSR_CED 0x00010000
-#define PCI_PCIE_DCSR_NFED 0x00020000
-#define PCI_PCIE_DCSR_FED 0x00040000
-#define PCI_PCIE_DCSR_URD 0x00080000
+#define PCI_PCIE_XCAP 0x00 /* Capability List & Capabilities
+ * Register
+ */
+#define PCI_PCIE_XCAP_MASK __BITS(31, 16)
+/* Capability Version */
+#define PCI_PCIE_XCAP_VER_MASK __SHIFTIN(__BITS(3, 0), PCI_PCIE_XCAP_MASK)
+#define PCI_PCIE_XCAP_VER_1_0 __SHIFTIN(1, PCI_PCIE_XCAP_VER_MASK)
+#define PCI_PCIE_XCAP_VER_2_0 __SHIFTIN(2, PCI_PCIE_XCAP_VER_MASK)
+#define PCI_PCIE_XCAP_TYPE_MASK __SHIFTIN(__BITS(7, 4), PCI_PCIE_XCAP_MASK)
+#define PCI_PCIE_XCAP_TYPE_PCIE_DEV __SHIFTIN(0x0, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_PCI_DEV __SHIFTIN(0x1, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_ROOT __SHIFTIN(0x4, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_UP __SHIFTIN(0x5, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_DOWN __SHIFTIN(0x6, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_PCIE2PCI __SHIFTIN(0x7, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_TYPE_PCI2PCIE __SHIFTIN(0x8, PCI_PCIE_XCAP_TYPE_MASK)
+#define PCI_PCIE_XCAP_SI __SHIFTIN(__BIT(8), PCI_PCIE_XCAP_MASK) /* Slot Implemented */
+#define PCI_PCIE_DCAP 0x04 /* Device Capabilities Register */
+#define PCI_PCIE_DCSR 0x08 /* Device Control & Status Register */
+#define PCI_PCIE_DCSR_MAX_READ_REQ __BITS(14, 12)
+#define PCI_PCIE_DCSR_ENA_NO_SNOOP __BIT(11)
+#define PCI_PCIE_DCSR_CED __BIT(0 + 16)
+#define PCI_PCIE_DCSR_NFED __BIT(1 + 16)
+#define PCI_PCIE_DCSR_FED __BIT(2 + 16)
+#define PCI_PCIE_DCSR_URD __BIT(3 + 16)
#define PCI_PCIE_LCAP 0x0c
-#define PCI_PCIE_LCSR 0x10
-#define PCI_PCIE_LCSR_ASPM_L0S 0x00000001
-#define PCI_PCIE_LCSR_ASPM_L1 0x00000002
-#define PCI_PCIE_SLCAP 0x14
-#define PCI_PCIE_SLCAP_ABP 0x00000001
-#define PCI_PCIE_SLCAP_PCP 0x00000002
-#define PCI_PCIE_SLCAP_MSP 0x00000004
-#define PCI_PCIE_SLCAP_AIP 0x00000008
-#define PCI_PCIE_SLCAP_PIP 0x00000010
-#define PCI_PCIE_SLCAP_HPS 0x00000020
-#define PCI_PCIE_SLCAP_HPC 0x00000040
+#define PCI_PCIE_LCSR 0x10 /* Link Control & Status Register */
+#define PCI_PCIE_LCSR_ASPM_L0S __BIT(0)
+#define PCI_PCIE_LCSR_ASPM_L1 __BIT(1)
+#define PCI_PCIE_SLCAP 0x14 /* Slot Capabilities Register */
+#define PCI_PCIE_SLCAP_ABP __BIT(0) /* Attention Button Present */
+#define PCI_PCIE_SLCAP_PCP __BIT(1) /* Power Controller Present */
+#define PCI_PCIE_SLCAP_MSP __BIT(2) /* MRL Sensor Present */
+#define PCI_PCIE_SLCAP_AIP __BIT(3) /* Attention Indicator
+ * Present
+ */
+#define PCI_PCIE_SLCAP_PIP __BIT(4) /* Power Indicator Present */
+#define PCI_PCIE_SLCAP_HPS __BIT(5) /* Hot-Plug Surprise */
+#define PCI_PCIE_SLCAP_HPC __BIT(6) /* Hot-Plug Capable */
#define PCI_PCIE_SLCSR 0x18
-#define PCI_PCIE_SLCSR_ABE 0x00000001
-#define PCI_PCIE_SLCSR_PFE 0x00000002
-#define PCI_PCIE_SLCSR_MSE 0x00000004
-#define PCI_PCIE_SLCSR_PDE 0x00000008
-#define PCI_PCIE_SLCSR_CCE 0x00000010
-#define PCI_PCIE_SLCSR_HPE 0x00000020
-#define PCI_PCIE_SLCSR_ABP 0x00010000
-#define PCI_PCIE_SLCSR_PFD 0x00020000
-#define PCI_PCIE_SLCSR_MSC 0x00040000
-#define PCI_PCIE_SLCSR_PDC 0x00080000
-#define PCI_PCIE_SLCSR_CC 0x00100000
-#define PCI_PCIE_SLCSR_MS 0x00200000
-#define PCI_PCIE_SLCSR_PDS 0x00400000
-#define PCI_PCIE_SLCSR_LACS 0x01000000
+#define PCI_PCIE_SLCSR_ABE __BIT(0)
+#define PCI_PCIE_SLCSR_PFE __BIT(1)
+#define PCI_PCIE_SLCSR_MSE __BIT(2)
+#define PCI_PCIE_SLCSR_PDE __BIT(3)
+#define PCI_PCIE_SLCSR_CCE __BIT(4)
+#define PCI_PCIE_SLCSR_HPE __BIT(5)
+#define PCI_PCIE_SLCSR_ABP __BIT(0 + 16)
+#define PCI_PCIE_SLCSR_PFD __BIT(1 + 16)
+#define PCI_PCIE_SLCSR_MSC __BIT(2 + 16)
+#define PCI_PCIE_SLCSR_PDC __BIT(3 + 16)
+#define PCI_PCIE_SLCSR_CC __BIT(4 + 16)
+#define PCI_PCIE_SLCSR_MS __BIT(5 + 16)
+#define PCI_PCIE_SLCSR_PDS __BIT(6 + 16)
+#define PCI_PCIE_SLCSR_LACS __BIT(8 + 16)
#define PCI_PCIE_RCR 0x1c
#define PCI_PCIE_RSR 0x20
#define PCI_PCIE_DCAP2 0x24
Home |
Main Index |
Thread Index |
Old Index