Module Name:    src
Committed By:   msaitoh
Date:           Fri May 23 18:32:13 UTC 2014

Modified Files:
        src/sys/dev/pci: pci_subr.c pcireg.h

Log Message:
- Add some register definitions (subclass, power management, etc.)
- Print some information (subclass, power management)
- Use macro.


To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/pci/pci_subr.c
cvs rdiff -u -r1.88 -r1.89 src/sys/dev/pci/pcireg.h

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

Modified files:

Index: src/sys/dev/pci/pci_subr.c
diff -u src/sys/dev/pci/pci_subr.c:1.113 src/sys/dev/pci/pci_subr.c:1.114
--- src/sys/dev/pci/pci_subr.c:1.113	Fri May 23 17:54:08 2014
+++ src/sys/dev/pci/pci_subr.c	Fri May 23 18:32:13 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci_subr.c,v 1.113 2014/05/23 17:54:08 msaitoh Exp $	*/
+/*	$NetBSD: pci_subr.c,v 1.114 2014/05/23 18:32:13 msaitoh 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.113 2014/05/23 17:54:08 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.114 2014/05/23 18:32:13 msaitoh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pci.h"
@@ -208,6 +208,7 @@ static const struct pci_class pci_subcla
 	{ "IPMI",		PCI_SUBCLASS_SERIALBUS_IPMI,	NULL,	},
 	{ "SERCOS",		PCI_SUBCLASS_SERIALBUS_SERCOS,	NULL,	},
 	{ "CANbus",		PCI_SUBCLASS_SERIALBUS_CANBUS,	NULL,	},
+	{ "miscellaneous",	PCI_SUBCLASS_SERIALBUS_MISC,	NULL,	},
 	{ NULL,			0,				NULL,	},
 };
 
@@ -225,6 +226,7 @@ static const struct pci_class pci_subcla
 
 static const struct pci_class pci_subclass_i2o[] = {
 	{ "standard",		PCI_SUBCLASS_I2O_STANDARD,	NULL,	},
+	{ "miscellaneous",	PCI_SUBCLASS_I2O_MISC,		NULL,	},
 	{ NULL,			0,				NULL,	},
 };
 
@@ -233,6 +235,7 @@ static const struct pci_class pci_subcla
 	{ "audio",		PCI_SUBCLASS_SATCOM_AUDIO, 	NULL,	},
 	{ "voice",		PCI_SUBCLASS_SATCOM_VOICE, 	NULL,	},
 	{ "data",		PCI_SUBCLASS_SATCOM_DATA,	NULL,	},
+	{ "miscellaneous",	PCI_SUBCLASS_SATCOM_MISC,	NULL,	},
 	{ NULL,			0,				NULL,	},
 };
 
@@ -1402,30 +1405,38 @@ static void
 pci_conf_print_pcipm_cap(const pcireg_t *regs, int capoff)
 {
 	uint16_t caps, pmcsr;
+	pcireg_t reg;
 
-	caps = regs[o2i(capoff)] >> 16;
-	pmcsr = regs[o2i(capoff + 0x04)] & 0xffff;
+	caps = regs[o2i(capoff)] >> PCI_PMCR_SHIFT;
+	reg = regs[o2i(capoff + PCI_PMCSR)];
+	pmcsr = reg & 0xffff;
 
 	printf("\n  PCI Power Management Capabilities Register\n");
 
 	printf("    Capabilities register: 0x%04x\n", caps);
 	printf("      Version: %s\n",
-	    pci_conf_print_pcipm_cap_pmrev(caps & 0x3));
+	    pci_conf_print_pcipm_cap_pmrev(caps & PCI_PMCR_VERSION_MASK));
 	onoff("PME# clock", caps, PCI_PMCR_PME_CLOCK);
-	onoff("Device specific initialization", caps, 0x20);
+	onoff("Device specific initialization", caps, PCI_PMCR_DSI);
 	printf("      3.3V auxiliary current: %s\n",
 	    pci_conf_print_pcipm_cap_aux(caps));
-	onoff("D1 power management state support", (caps >> 9), 1);
-	onoff("D2 power management state support", (caps >> 10), 1);
+	onoff("D1 power management state support", caps, PCI_PMCR_D1SUPP);
+	onoff("D2 power management state support", caps, PCI_PMCR_D2SUPP);
 	printf("      PME# support: 0x%02x\n", caps >> 11);
 
 	printf("    Control/status register: 0x%04x\n", pmcsr);
-	printf("      Power state: D%d\n", pmcsr & 3);
+	printf("      Power state: D%d\n", pmcsr & PCI_PMCSR_STATE_MASK);
 	onoff("PCI Express reserved", (pmcsr >> 2), 1);
 	onoff("No soft reset", (pmcsr >> 3), 1);
-	printf("      PME# assertion %sabled\n",
-	    (pmcsr >> 8) & 1 ? "en" : "dis");
-	printf("      PME# status: %s\n", (pmcsr >> 15) ? "on" : "off");
+	printf("      PME# assertion: %sabled\n",
+	    (pmcsr & PCI_PMCSR_PME_EN) ? "en" : "dis");
+	onoff("PME# status", pmcsr, PCI_PMCSR_PME_STS);
+	printf("    Bridge Support Extensions register: 0x%02x\n",
+	    (reg >> 16) & 0xff);
+	onoff("B2/B3 support", reg, PCI_PMCSR_B2B3_SUPPORT);
+	onoff("Bus Power/Clock Control Enable", reg, PCI_PMCSR_BPCC_EN);
+	printf("    Data register: 0x%02x\n", (reg >> 24) & 0xff);
+	
 }
 
 static void
@@ -1632,13 +1643,13 @@ pci_conf_print_type1(
 
 	rval = regs[o2i(PCI_BRIDGE_BUS_REG)];
 	printf("    Primary bus number: 0x%02x\n",
-	    (rval >> 0) & 0xff);
+	    PCI_BRIDGE_BUS_PRIMARY(rval));
 	printf("    Secondary bus number: 0x%02x\n",
-	    (rval >> 8) & 0xff);
+	    PCI_BRIDGE_BUS_SECONDARY(rval));
 	printf("    Subordinate bus number: 0x%02x\n",
-	    (rval >> 16) & 0xff);
+	    PCI_BRIDGE_BUS_SUBORDINATE(rval));
 	printf("    Secondary bus latency timer: 0x%02x\n",
-	    (rval >> 24) & 0xff);
+	    PCI_BRIDGE_BUS_SEC_LATTIMER(rval));
 
 	rval = regs[o2i(PCI_BRIDGE_STATIO_REG)];
 	pci_conf_print_ssr(__SHIFTOUT(rval, __BITS(31, 16)));

Index: src/sys/dev/pci/pcireg.h
diff -u src/sys/dev/pci/pcireg.h:1.88 src/sys/dev/pci/pcireg.h:1.89
--- src/sys/dev/pci/pcireg.h:1.88	Fri May 23 17:54:08 2014
+++ src/sys/dev/pci/pcireg.h	Fri May 23 18:32:13 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: pcireg.h,v 1.88 2014/05/23 17:54:08 msaitoh Exp $	*/
+/*	$NetBSD: pcireg.h,v 1.89 2014/05/23 18:32:13 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996, 1999, 2000
@@ -274,6 +274,7 @@ typedef u_int8_t pci_revision_t;
 #define	PCI_SUBCLASS_SERIALBUS_IPMI		0x07
 #define	PCI_SUBCLASS_SERIALBUS_SERCOS		0x08
 #define	PCI_SUBCLASS_SERIALBUS_CANBUS		0x09
+#define	PCI_SUBCLASS_SERIALBUS_MISC		0x80
 
 /* 0x0d wireless subclasses */
 #define	PCI_SUBCLASS_WIRELESS_IRDA		0x00
@@ -287,6 +288,7 @@ typedef u_int8_t pci_revision_t;
 
 /* 0x0e I2O (Intelligent I/O) subclasses */
 #define	PCI_SUBCLASS_I2O_STANDARD		0x00
+#define	PCI_SUBCLASS_I2O_MISC			0x80
 
 /* 0x0f satellite communication subclasses */
 /*	PCI_SUBCLASS_SATCOM_???			0x00	/ * XXX ??? */
@@ -294,6 +296,7 @@ typedef u_int8_t pci_revision_t;
 #define	PCI_SUBCLASS_SATCOM_AUDIO		0x02
 #define	PCI_SUBCLASS_SATCOM_VOICE		0x03
 #define	PCI_SUBCLASS_SATCOM_DATA		0x04
+#define	PCI_SUBCLASS_SATCOM_MISC		0x80
 
 /* 0x10 encryption/decryption subclasses */
 #define	PCI_SUBCLASS_CRYPTO_NETCOMP		0x00
@@ -479,18 +482,45 @@ typedef u_int8_t pci_revision_t;
 /* Power Management Capability Register */
 #define PCI_PMCR_SHIFT		16
 #define PCI_PMCR		0x02
+#define PCI_PMCR_VERSION_MASK	0x0007
+#define PCI_PMCR_VERSION_10	0x0001
+#define PCI_PMCR_VERSION_11	0x0002
+#define PCI_PMCR_VERSION_12	0x0003
 #define PCI_PMCR_PME_CLOCK	0x0008
+#define PCI_PMCR_DSI		0x0020
+#define PCI_PMCR_AUXCUR_MASK	0x01c0
+#define PCI_PMCR_AUXCUR_0	0x0000
+#define PCI_PMCR_AUXCUR_55	0x0040
+#define PCI_PMCR_AUXCUR_100	0x0080
+#define PCI_PMCR_AUXCUR_160	0x00c0
+#define PCI_PMCR_AUXCUR_220	0x0100
+#define PCI_PMCR_AUXCUR_270	0x0140
+#define PCI_PMCR_AUXCUR_320	0x0180
+#define PCI_PMCR_AUXCUR_375	0x01c0
 #define PCI_PMCR_D1SUPP		0x0200
 #define PCI_PMCR_D2SUPP		0x0400
-/* Power Management Control Status Register */
+#define PCI_PMCR_PME_D0		0x0800
+#define PCI_PMCR_PME_D1		0x1000
+#define PCI_PMCR_PME_D2		0x2000
+#define PCI_PMCR_PME_D3HOT	0x4000
+#define PCI_PMCR_PME_D3COLD	0x8000
+/*
+ * Power Management Control Status Register, Bridge Support Extensions Register
+ * and Data Register.
+ */
 #define PCI_PMCSR		0x04
-#define	PCI_PMCSR_PME_EN	0x100
-#define PCI_PMCSR_STATE_MASK	0x03
-#define PCI_PMCSR_STATE_D0      0x00
-#define PCI_PMCSR_STATE_D1      0x01
-#define PCI_PMCSR_STATE_D2      0x02
-#define PCI_PMCSR_STATE_D3      0x03
-#define PCI_PMCSR_PME_STS       0x8000
+#define PCI_PMCSR_STATE_MASK	0x00000003
+#define PCI_PMCSR_STATE_D0	0x00000000
+#define PCI_PMCSR_STATE_D1	0x00000001
+#define PCI_PMCSR_STATE_D2	0x00000002
+#define PCI_PMCSR_STATE_D3	0x00000003
+#define	PCI_PMCSR_PME_EN	0x00000100
+#define PCI_PMCSR_DATASEL_MASK	0x00001e00
+#define PCI_PMCSR_DATASCL_MASK	0x00006000
+#define PCI_PMCSR_PME_STS	0x00008000
+#define PCI_PMCSR_B2B3_SUPPORT	0x00400000
+#define PCI_PMCSR_BPCC_EN	0x00800000
+
 
 /*
  * Capability ID: 0x02
@@ -935,9 +965,20 @@ typedef u_int8_t pci_intr_line_t;
 
 /* Header Type 1 (Bridge) configuration registers */
 #define PCI_BRIDGE_BUS_REG		0x18
+#define   PCI_BRIDGE_BUS_EACH_MASK		0xff
 #define   PCI_BRIDGE_BUS_PRIMARY_SHIFT		0
 #define   PCI_BRIDGE_BUS_SECONDARY_SHIFT	8
 #define   PCI_BRIDGE_BUS_SUBORDINATE_SHIFT	16
+#define   PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT	24
+#define   PCI_BRIDGE_BUS_PRIMARY(reg) \
+	(((reg) >> PCI_BRIDGE_BUS_PRIMARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK)
+#define   PCI_BRIDGE_BUS_SECONDARY(reg) \
+	(((reg) >> PCI_BRIDGE_BUS_SECONDARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK)
+#define   PCI_BRIDGE_BUS_SUBORDINATE(reg) \
+	(((reg) >> PCI_BRIDGE_BUS_SUBORDINATE_SHIFT) &PCI_BRIDGE_BUS_EACH_MASK)
+#define   PCI_BRIDGE_BUS_SEC_LATTIMER(reg) \
+	(((reg) >> PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT)&PCI_BRIDGE_BUS_EACH_MASK)
+
 
 #define PCI_BRIDGE_STATIO_REG		0x1C
 #define	  PCI_BRIDGE_STATIO_IOBASE_SHIFT	0

Reply via email to