Module Name: src
Committed By: matt
Date: Thu Jan 21 06:59:12 UTC 2010
Modified Files:
src/sys/arch/mips/conf [matt-nb5-mips64]: files.sibyte
src/sys/arch/mips/sibyte/pci [matt-nb5-mips64]: sbbrz_pci.c
src/sys/arch/sbmips/include [matt-nb5-mips64]: pci_machdep.h
Log Message:
Add rest of pci framework functions.
Disable pciide compat intr establish for sbmips
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.124.1 src/sys/arch/mips/conf/files.sibyte
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/mips/sibyte/pci/sbbrz_pci.c
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/sbmips/include/pci_machdep.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/arch/mips/conf/files.sibyte
diff -u src/sys/arch/mips/conf/files.sibyte:1.5 src/sys/arch/mips/conf/files.sibyte:1.5.124.1
--- src/sys/arch/mips/conf/files.sibyte:1.5 Sat Oct 25 15:05:00 2003
+++ src/sys/arch/mips/conf/files.sibyte Thu Jan 21 06:59:11 2010
@@ -22,9 +22,11 @@
attach sbbrz at zbbus
file arch/mips/sibyte/pci/sbbrz.c sbbrz
file arch/mips/sibyte/pci/sbbrz_pci.c sbbrz
+file arch/mips/sibyte/pci/sbbrz_bus_io.c sbbrz
+file arch/mips/sibyte/pci/sbbrz_bus_mem.c sbbrz
# Instantiated SB-1250 PCI Host bridge
-device sbpcihb
+device sbpcihb: pcibus
attach sbpcihb at pci
file arch/mips/sibyte/pci/sbpcihb.c sbpcihb
Index: src/sys/arch/mips/sibyte/pci/sbbrz_pci.c
diff -u src/sys/arch/mips/sibyte/pci/sbbrz_pci.c:1.1.2.1 src/sys/arch/mips/sibyte/pci/sbbrz_pci.c:1.1.2.2
--- src/sys/arch/mips/sibyte/pci/sbbrz_pci.c:1.1.2.1 Thu Jan 21 04:22:33 2010
+++ src/sys/arch/mips/sibyte/pci/sbbrz_pci.c Thu Jan 21 06:59:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sbbrz_pci.c,v 1.1.2.1 2010/01/21 04:22:33 matt Exp $ */
+/* $NetBSD: sbbrz_pci.c,v 1.1.2.2 2010/01/21 06:59:12 matt Exp $ */
/*
* Copyright 2000, 2001
@@ -64,7 +64,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: sbbrz_pci.c,v 1.1.2.1 2010/01/21 04:22:33 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbbrz_pci.c,v 1.1.2.2 2010/01/21 06:59:12 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -78,37 +78,64 @@
#include <machine/locore.h>
#include <mips/sibyte/include/sb1250_regs.h>
#include <mips/sibyte/include/sb1250_scd.h>
+#include <mips/sibyte/include/sb1250_int.h>
#include <mips/sibyte/pci/sbbrzvar.h>
-void sbbrz_attach_hook(device_t, device_t,
+void sbbrz_pci_attach_hook(device_t, device_t,
struct pcibus_attach_args *);
-static int sbbrz_bus_maxdevs(void *, int);
-static pcitag_t sbbrz_make_tag(void *, int, int, int);
-static void sbbrz_decompose_tag(void *, pcitag_t, int *, int *, int *);
-static pcireg_t sbbrz_conf_read(void *, pcitag_t, int);
-static void sbbrz_conf_write(void *, pcitag_t, int, pcireg_t);
+static int sbbrz_pci_bus_maxdevs(void *, int);
+static pcitag_t sbbrz_pci_make_tag(void *, int, int, int);
+static void sbbrz_pci_decompose_tag(void *, pcitag_t, int *, int *, int *);
+
+static pcireg_t sbbrz_pci_conf_read(void *, pcitag_t, int);
+static void sbbrz_pci_conf_write(void *, pcitag_t, int, pcireg_t);
+#ifdef PCI_NETBSD_CONFIGURE
+static void sbbrz_pci_conf_interrupt(void *, int, int, int, int, int *);
+#endif
+
+static int sbbrz_pci_intr_map(struct pci_attach_args *,
+ pci_intr_handle_t *);
+static const char *
+ sbbrz_pci_intr_string(void *, pci_intr_handle_t);
+static const struct evcnt *
+ sbbrz_pci_intr_evcnt(void *, pci_intr_handle_t);
+static void * sbbrz_pci_intr_establish(void *, pci_intr_handle_t,
+ int, int (*)(void *), void *);
+static void sbbrz_pci_intr_disestablish(void *, void *);
+
void
sbbrz_pci_init(pci_chipset_tag_t pc, void *v)
{
pc->pc_conf_v = v;
- pc->pc_attach_hook = sbbrz_attach_hook;
- pc->pc_bus_maxdevs = sbbrz_bus_maxdevs;
- pc->pc_make_tag = sbbrz_make_tag;
- pc->pc_decompose_tag = sbbrz_decompose_tag;
- pc->pc_conf_read = sbbrz_conf_read;
- pc->pc_conf_write = sbbrz_conf_write;
+ pc->pc_attach_hook = sbbrz_pci_attach_hook;
+ pc->pc_bus_maxdevs = sbbrz_pci_bus_maxdevs;
+ pc->pc_make_tag = sbbrz_pci_make_tag;
+ pc->pc_decompose_tag = sbbrz_pci_decompose_tag;
+ pc->pc_conf_read = sbbrz_pci_conf_read;
+ pc->pc_conf_write = sbbrz_pci_conf_write;
+ pc->pc_intr_map = sbbrz_pci_intr_map;
+ pc->pc_intr_string = sbbrz_pci_intr_string;
+ pc->pc_intr_evcnt = sbbrz_pci_intr_evcnt;
+ pc->pc_intr_establish = sbbrz_pci_intr_establish;
+ pc->pc_intr_disestablish = sbbrz_pci_intr_disestablish;
+#ifdef PCI_NETBSD_CONFIGURE
+ pc->pc_conf_interrupt = sbbrz_pci_conf_interrupt;
+#endif
+#ifdef __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH
+ pc->pc_pciide_compat_intr_establish = sbbrz_pciide_compat_intr_establish;
+#endif
}
void
-sbbrz_attach_hook(device_t parent, device_t self,
+sbbrz_pci_attach_hook(device_t parent, device_t self,
struct pcibus_attach_args *pba)
{
}
int
-sbbrz_bus_maxdevs(void *cpv, int busno)
+sbbrz_pci_bus_maxdevs(void *cpv, int busno)
{
uint64_t regval;
int host;
@@ -125,14 +152,14 @@
}
pcitag_t
-sbbrz_make_tag(void *cpv, int b, int d, int f)
+sbbrz_pci_make_tag(void *cpv, int b, int d, int f)
{
return (b << 16) | (d << 11) | (f << 8);
}
void
-sbbrz_decompose_tag(void *cpv, pcitag_t tag,
+sbbrz_pci_decompose_tag(void *cpv, pcitag_t tag,
int *bp, int *dp, int *fp)
{
@@ -145,7 +172,7 @@
}
pcireg_t
-sbbrz_conf_read(void *cpv, pcitag_t tag, int offset)
+sbbrz_pci_conf_read(void *cpv, pcitag_t tag, int offset)
{
uint64_t addr;
pcitag_t tmptag;
@@ -180,7 +207,7 @@
}
void
-sbbrz_conf_write(void *cpv, pcitag_t tag, int offset, pcireg_t data)
+sbbrz_pci_conf_write(void *cpv, pcitag_t tag, int offset, pcireg_t data)
{
uint64_t addr;
@@ -195,3 +222,50 @@
return mips3_sw_a64(addr, data);
}
+
+int
+sbbrz_pci_intr_map(struct pci_attach_args *pa, pci_intr_handle_t *ihp)
+{
+ int bus, device, func;
+ sbbrz_pci_decompose_tag(NULL, pa->pa_intrtag, &bus, &device, &func);
+ *ihp = 0;
+ if (pa->pa_intrpin == PCI_INTERRUPT_PIN_NONE)
+ return EINVAL;
+ if (bus == 0) {
+ *ihp = K_INT_PCI_INTA
+ + ((device + pa->pa_intrpin - PCI_INTERRUPT_PIN_A) % 4);
+ return 0;
+ }
+ return EOPNOTSUPP;
+}
+
+const char *
+sbbrz_pci_intr_string(void *v, pci_intr_handle_t ih)
+{
+ switch (ih) {
+ default: return NULL;
+ case K_INT_PCI_INTA: return "pci inta";
+ case K_INT_PCI_INTB: return "pci intb";
+ case K_INT_PCI_INTC: return "pci intc";
+ case K_INT_PCI_INTD: return "pci intd";
+ }
+}
+
+const struct evcnt *
+sbbrz_pci_intr_evcnt(void *v, pci_intr_handle_t ih)
+{
+ return NULL;
+}
+
+void *
+sbbrz_pci_intr_establish(void *v, pci_intr_handle_t ih, int level,
+ int (*handler)(void *), void *arg)
+{
+ return cpu_intr_establish(ih, level,
+ (void (*)(void *, uint32_t, vaddr_t))handler, arg);
+}
+
+void
+sbbrz_pci_intr_disestablish(void *v, void *ih)
+{
+}
Index: src/sys/arch/sbmips/include/pci_machdep.h
diff -u src/sys/arch/sbmips/include/pci_machdep.h:1.1.2.1 src/sys/arch/sbmips/include/pci_machdep.h:1.1.2.2
--- src/sys/arch/sbmips/include/pci_machdep.h:1.1.2.1 Thu Jan 21 04:09:05 2010
+++ src/sys/arch/sbmips/include/pci_machdep.h Thu Jan 21 06:59:12 2010
@@ -1,6 +1,3 @@
-/* $NetBSD: pci_machdep.h,v 1.1.2.1 2010/01/21 04:09:05 matt Exp $ */
-
-/* Before including <mips/pci_machdep.h> */
-#define __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH
+/* $NetBSD: pci_machdep.h,v 1.1.2.2 2010/01/21 06:59:12 matt Exp $ */
#include <mips/pci_machdep.h>