Module Name:    src
Committed By:   dyoung
Date:           Wed Aug 17 14:56:55 UTC 2011

Modified Files:
        src/sys/arch/x86/pci: pci_intr_machdep.c

Log Message:
In pci_msi_establish(), replace several anonymous constants with IOAPIC_
symbols.  No change in the generated assembly.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/x86/pci/pci_intr_machdep.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/x86/pci/pci_intr_machdep.c
diff -u src/sys/arch/x86/pci/pci_intr_machdep.c:1.21 src/sys/arch/x86/pci/pci_intr_machdep.c:1.22
--- src/sys/arch/x86/pci/pci_intr_machdep.c:1.21	Wed Aug 17 00:59:47 2011
+++ src/sys/arch/x86/pci/pci_intr_machdep.c	Wed Aug 17 14:56:55 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci_intr_machdep.c,v 1.21 2011/08/17 00:59:47 dyoung Exp $	*/
+/*	$NetBSD: pci_intr_machdep.c,v 1.22 2011/08/17 14:56:55 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.21 2011/08/17 00:59:47 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_intr_machdep.c,v 1.22 2011/08/17 14:56:55 dyoung Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -93,6 +93,7 @@
 #include "opt_acpi.h"
 
 #if NIOAPIC > 0 || NACPICA > 0
+#include <machine/i82093reg.h>
 #include <machine/i82093var.h>
 #include <machine/mpconfig.h>
 #include <machine/mpbiosvar.h>
@@ -393,17 +394,28 @@
 	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);
+		       IOAPIC_MSIADDR_BASE |
+		       __SHIFTIN(ci->ci_cpuid, IOAPIC_MSIADDR_DSTID_MASK));
 	if (reg & PCI_MSI_CTL_64BIT_ADDR) {
 		pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MADDR64_HI,
 		    0);
+		/* XXX according to the manual, ASSERT is unnecessary if
+		 * EDGE
+		 */
 		pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MDATA64,
-			       is->is_idtvec | 0x4000);
-	} else
+		    __SHIFTIN(is->is_idtvec, IOAPIC_MSIDATA_VECTOR_MASK) |
+		    IOAPIC_MSIDATA_TRGMODE_EDGE | IOAPIC_MSIDATA_LEVEL_ASSERT |
+		    IOAPIC_MSIDATA_DM_FIXED);
+	} else {
+		/* XXX according to the manual, ASSERT is unnecessary if
+		 * EDGE
+		 */
 		pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_MDATA,
-			       is->is_idtvec | 0x4000);
+		    __SHIFTIN(is->is_idtvec, IOAPIC_MSIDATA_VECTOR_MASK) |
+		    IOAPIC_MSIDATA_TRGMODE_EDGE | IOAPIC_MSIDATA_LEVEL_ASSERT |
+		    IOAPIC_MSIDATA_DM_FIXED);
+	}
 	pci_conf_write(pa->pa_pc, pa->pa_tag, co + PCI_MSI_CTL,
 	    PCI_MSI_CTL_MSI_ENABLE);
 	return msih;

Reply via email to