Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/hpcmips Enable USB support for MC-R700.
details: https://anonhg.NetBSD.org/src/rev/5b48101639c4
branches: trunk
changeset: 526428:5b48101639c4
user: takemura <takemura%NetBSD.org@localhost>
date: Fri May 03 11:37:48 2002 +0000
description:
Enable USB support for MC-R700.
diffstat:
sys/arch/hpcmips/conf/GENERIC | 12 +++++-
sys/arch/hpcmips/vr/vrc4172pci.c | 70 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 78 insertions(+), 4 deletions(-)
diffs (164 lines):
diff -r 5843e41736c1 -r 5b48101639c4 sys/arch/hpcmips/conf/GENERIC
--- a/sys/arch/hpcmips/conf/GENERIC Fri May 03 10:31:14 2002 +0000
+++ b/sys/arch/hpcmips/conf/GENERIC Fri May 03 11:37:48 2002 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.120 2002/04/27 12:36:47 shin Exp $
+# $NetBSD: GENERIC,v 1.121 2002/05/03 11:37:48 takemura Exp $
#
# GENERIC machine description file
#
@@ -24,7 +24,7 @@
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.120 $"
+#ident "GENERIC-$Revision: 1.121 $"
maxusers 16
@@ -365,6 +365,14 @@
hpcioman8 at vrc4172gpio0 platform FUJITSU_INTERTOP_IT310
hpcin* at hpcioman8 evtype PCIINTR id PCIINTR_00_00_01 port 7 level 0 connect 1
+#
+# MC-R700
+#
+options VRC4172PCI_MCR700_SUPPORT
+vrc4172pci0 at vr4102ip? addr 0x0aff0cf8 size 0x8 platform NEC_MCR_700
+hpcioman9 at vrgiu? platform NEC_MCR_700
+hpcin* at hpcioman9 evtype PCIINTR id PCIINTR_00_00_01 port 13 level 0 connect 1
+
# IO module manager (virtual bridge) DO NOT DELETE
txioman* at txsim?
# iochip 0 TX39 internal IO
diff -r 5843e41736c1 -r 5b48101639c4 sys/arch/hpcmips/vr/vrc4172pci.c
--- a/sys/arch/hpcmips/vr/vrc4172pci.c Fri May 03 10:31:14 2002 +0000
+++ b/sys/arch/hpcmips/vr/vrc4172pci.c Fri May 03 11:37:48 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vrc4172pci.c,v 1.2 2002/04/14 08:00:00 takemura Exp $ */
+/* $NetBSD: vrc4172pci.c,v 1.3 2002/05/03 11:37:49 takemura Exp $ */
/*-
* Copyright (c) 2002 TAKEMURA Shin
@@ -49,11 +49,12 @@
#include <hpcmips/vr/vrc4172pcireg.h>
#include "pci.h"
+#include "opt_vrc4172pci.h"
#ifdef DEBUG
#define DPRINTF(args) printf args
#else
-#define DPRINTF(args)
+#define DPRINTF(args) while (0) {}
#endif
struct vrc4172pci_softc {
@@ -63,6 +64,13 @@
bus_space_handle_t sc_ioh;
struct hpcmips_pci_chipset sc_pc;
+#ifdef VRC4172PCI_MCR700_SUPPORT
+ pcireg_t sc_fake_baseaddr;
+ hpcio_chip_t sc_iochip;
+#if 0
+ hpcio_intr_handle_t sc_ih;
+#endif
+#endif /* VRC4172PCI_MCR700_SUPPORT */
};
static int vrc4172pci_match(struct device *, struct cfdata *, void *);
@@ -88,6 +96,11 @@
static void *vrc4172pci_intr_establish(pci_chipset_tag_t,
pci_intr_handle_t, int, int (*)(void *), void *);
static void vrc4172pci_intr_disestablish(pci_chipset_tag_t, void *);
+#ifdef VRC4172PCI_MCR700_SUPPORT
+#if 0
+static int vrc4172pci_mcr700_intr(void *arg);
+#endif
+#endif
struct cfattach vrc4172pci_ca = {
sizeof(struct vrc4172pci_softc), vrc4172pci_match, vrc4172pci_attach
@@ -137,6 +150,20 @@
}
printf("\n");
+#ifdef VRC4172PCI_MCR700_SUPPORT
+ if (platid_match(&platid, &platid_mask_MACH_NEC_MCR_700)) {
+ /* power USB controller on MC-R700 */
+ sc->sc_iochip = va->va_gpio_chips[VRIP_IOCHIP_VRGIU];
+ hpcio_portwrite(sc->sc_iochip, 45, 1);
+ sc->sc_fake_baseaddr = 0x0afe0000;
+#if 0
+ sc->sc_ih = hpcio_intr_establish(sc->sc_iochip, 1,
+ HPCIO_INTR_EDGE|HPCIO_INTR_HOLD,
+ vrc4172pci_mcr700_intr, sc);
+#endif
+ }
+#endif /* VRC4172PCI_MCR700_SUPPORT */
+
pc->pc_dev = &sc->sc_dev;
pc->pc_attach_hook = vrc4172pci_attach_hook;
pc->pc_bus_maxdevs = vrc4172pci_bus_maxdevs;
@@ -246,10 +273,23 @@
struct vrc4172pci_softc *sc = (struct vrc4172pci_softc *)pc->pc_dev;
u_int32_t val;
+#ifdef VRC4172PCI_MCR700_SUPPORT
+ if (sc->sc_fake_baseaddr != 0 &&
+ tag == vrc4172pci_make_tag(pc, 0, 0, 1) &&
+ reg == PCI_MAPREG_START) {
+ val = sc->sc_fake_baseaddr;
+ goto out;
+ }
+#endif /* VRC4172PCI_MCR700_SUPPORT */
+
tag |= VRC4172PCI_CONFADDR_CONFIGEN;
vrc4172pci_write(sc, VRC4172PCI_CONFAREG, tag | reg);
val = vrc4172pci_read(sc, VRC4172PCI_CONFDREG);
+
+#ifdef VRC4172PCI_MCR700_SUPPORT
+ out:
+#endif
DPRINTF(("%s: conf_read: tag = 0x%08x, reg = 0x%x, val = 0x%08x\n",
sc->sc_dev.dv_xname, (u_int32_t)tag, reg, val));
@@ -264,6 +304,16 @@
DPRINTF(("%s: conf_write: tag = 0x%08x, reg = 0x%x, val = 0x%08x\n",
sc->sc_dev.dv_xname, (u_int32_t)tag, reg, (u_int32_t)data));
+
+#ifdef VRC4172PCI_MCR700_SUPPORT
+ if (sc->sc_fake_baseaddr != 0 &&
+ tag == vrc4172pci_make_tag(pc, 0, 0, 1) &&
+ reg == PCI_MAPREG_START) {
+ sc->sc_fake_baseaddr = (data & 0xfffff000);
+ return;
+ }
+#endif /* VRC4172PCI_MCR700_SUPPORT */
+
tag |= VRC4172PCI_CONFADDR_CONFIGEN;
vrc4172pci_write(sc, VRC4172PCI_CONFAREG, tag | reg);
@@ -326,3 +376,19 @@
DPRINTF(("vrc4172pci_intr_disestablish: %p\n", cookie));
config_unhook(cookie);
}
+
+#ifdef VRC4172PCI_MCR700_SUPPORT
+#if 0
+int
+vrc4172pci_mcr700_intr(void *arg)
+{
+ struct vrc4172pci_softc *sc = arg;
+
+ hpcio_intr_clear(sc->sc_iochip, sc->sc_ih);
+ printf("USB port %s\n", hpcio_portread(sc->sc_iochip, 1) ? "ON" : "OFF");
+ hpcio_portwrite(sc->sc_iochip, 45, hpcio_portread(sc->sc_iochip, 1));
+
+ return (0);
+}
+#endif
+#endif /* VRC4172PCI_MCR700_SUPPORT */
Home |
Main Index |
Thread Index |
Old Index