Home | History | Annotate | Line # | Download | only in dev
if_bah_zbus.c revision 1.11.20.1
      1  1.11.20.1  uebayasi /*	$NetBSD: if_bah_zbus.c,v 1.11.20.1 2010/08/17 06:43:56 uebayasi Exp $ */
      2        1.1        is 
      3        1.3        is /*-
      4        1.4        is  * Copyright (c) 1994, 1995, 1998 The NetBSD Foundation, Inc.
      5        1.1        is  * All rights reserved.
      6        1.1        is  *
      7        1.3        is  * This code is derived from software contributed to The NetBSD Foundation
      8        1.3        is  * by Ignatios Souvatzis.
      9        1.3        is  *
     10        1.1        is  * Redistribution and use in source and binary forms, with or without
     11        1.1        is  * modification, are permitted provided that the following conditions
     12        1.1        is  * are met:
     13        1.1        is  * 1. Redistributions of source code must retain the above copyright
     14        1.1        is  *    notice, this list of conditions and the following disclaimer.
     15        1.1        is  * 2. Redistributions in binary form must reproduce the above copyright
     16        1.1        is  *    notice, this list of conditions and the following disclaimer in the
     17        1.1        is  *    documentation and/or other materials provided with the distribution.
     18        1.1        is  *
     19        1.3        is  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20        1.3        is  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21        1.3        is  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22        1.3        is  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23        1.3        is  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24        1.3        is  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25        1.3        is  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26        1.3        is  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27        1.3        is  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28        1.3        is  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29        1.3        is  * POSSIBILITY OF SUCH DAMAGE.
     30        1.1        is  */
     31        1.8   aymeric 
     32  1.11.20.1  uebayasi #include "opt_m68k_arch.h"
     33  1.11.20.1  uebayasi 
     34        1.8   aymeric #include <sys/cdefs.h>
     35  1.11.20.1  uebayasi __KERNEL_RCSID(0, "$NetBSD: if_bah_zbus.c,v 1.11.20.1 2010/08/17 06:43:56 uebayasi Exp $");
     36        1.1        is 
     37        1.1        is /*
     38        1.1        is  * Driver frontend for the Commodore Busines Machines and the
     39        1.1        is  * Ameristar ARCnet card.
     40        1.1        is  */
     41        1.1        is 
     42        1.1        is #include <sys/types.h>
     43        1.1        is #include <sys/param.h>
     44        1.1        is 
     45        1.1        is #include <sys/conf.h>
     46        1.1        is #include <sys/device.h>
     47        1.1        is #include <sys/mbuf.h>
     48        1.1        is #include <sys/socket.h>
     49        1.1        is #include <sys/systm.h>
     50        1.1        is #include <sys/kernel.h>
     51        1.1        is 
     52        1.1        is #include <machine/bus.h>
     53        1.1        is #include <machine/cpu.h>
     54        1.1        is #include <machine/intr.h>
     55        1.1        is 
     56        1.1        is #include <net/if.h>
     57        1.1        is #include <net/route.h>
     58        1.1        is 
     59        1.1        is #include <net/if_arc.h>
     60        1.1        is 
     61        1.1        is #include <amiga/amiga/device.h>
     62        1.1        is #include <amiga/dev/zbusvar.h>
     63        1.1        is 
     64        1.1        is #include <dev/ic/smc90cx6var.h>
     65        1.1        is 
     66        1.1        is /*
     67        1.1        is  * A2060 software status per interface
     68        1.1        is  */
     69        1.1        is struct bah_zbus_softc {
     70        1.1        is 	struct	bah_softc	sc_bah;
     71        1.1        is 	struct	bus_space_tag	sc_bst;
     72        1.1        is 	struct	isr		sc_isr;
     73        1.1        is };
     74        1.1        is 
     75        1.7   aymeric int	bah_zbus_match(struct device *, struct cfdata *, void *);
     76        1.7   aymeric void	bah_zbus_attach(struct device *, struct device *, void *);
     77        1.7   aymeric void	bah_zbus_reset(struct bah_softc *, int);
     78        1.1        is 
     79       1.10   thorpej CFATTACH_DECL(bah_zbus, sizeof(struct bah_zbus_softc),
     80       1.10   thorpej     bah_zbus_match, bah_zbus_attach, NULL, NULL);
     81        1.1        is 
     82        1.1        is int
     83        1.7   aymeric bah_zbus_match(struct device *parent, struct cfdata *cfp, void *aux)
     84        1.1        is {
     85        1.1        is 	struct zbus_args *zap = aux;
     86        1.1        is 
     87        1.1        is 	if ((zap->manid == 514 || zap->manid == 1053) && zap->prodid == 9)
     88        1.1        is 		return (1);
     89        1.1        is 
     90        1.1        is 	return (0);
     91        1.1        is }
     92        1.1        is 
     93        1.1        is void
     94        1.7   aymeric bah_zbus_attach(struct device *parent, struct device *self, void *aux)
     95        1.1        is {
     96        1.1        is 	struct bah_zbus_softc *bsc = (void *)self;
     97        1.1        is 	struct bah_softc *sc = &bsc->sc_bah;
     98        1.1        is 	struct zbus_args *zap = aux;
     99        1.1        is 
    100        1.1        is #if (defined(BAH_DEBUG) && (BAH_DEBUG > 2))
    101        1.1        is 	printf("\n%s: attach(0x%x, 0x%x, 0x%x)\n",
    102        1.1        is 	    sc->sc_dev.dv_xname, parent, self, aux);
    103        1.1        is #endif
    104        1.1        is 	bsc->sc_bst.base = (bus_addr_t)zap->va;
    105        1.6   aymeric 	bsc->sc_bst.absm = &amiga_bus_stride_2;
    106        1.1        is 
    107        1.1        is 	sc->sc_bst_r = &bsc->sc_bst;
    108        1.1        is 	sc->sc_regs = bsc->sc_bst.base + 0x4000;
    109        1.1        is 
    110        1.1        is 	sc->sc_bst_m = &bsc->sc_bst;
    111        1.1        is 	sc->sc_mem = bsc->sc_bst.base + 0x8000;
    112        1.1        is 
    113        1.1        is 	sc->sc_reset = bah_zbus_reset;
    114        1.1        is 
    115        1.1        is 	bah_attach_subr(sc);
    116        1.1        is 
    117        1.1        is 	bsc->sc_isr.isr_intr = bahintr;
    118        1.1        is 	bsc->sc_isr.isr_arg = sc;
    119        1.1        is 	bsc->sc_isr.isr_ipl = 2;
    120        1.1        is 	add_isr(&bsc->sc_isr);
    121        1.1        is }
    122        1.1        is 
    123        1.1        is void
    124        1.7   aymeric bah_zbus_reset(struct bah_softc *sc, int onoff)
    125        1.1        is {
    126        1.1        is 	struct bah_zbus_softc *bsc;
    127        1.1        is 	volatile u_int8_t *p;
    128        1.1        is 
    129        1.1        is 	bsc = (struct bah_zbus_softc *)sc;
    130        1.1        is 
    131        1.1        is 	p = (volatile u_int8_t *)bsc->sc_bst.base;
    132        1.1        is 
    133        1.1        is 	p[0x0000] = 0;	/* A2060 reset flipflop */
    134        1.1        is 	p[0xc000] = 0;	/* A560 reset flipflop */
    135        1.1        is 
    136        1.1        is 	if (!onoff)
    137        1.1        is 		return;
    138        1.1        is 
    139        1.2        is #ifdef M68060
    140        1.2        is 	/* make sure we flush the store buffer before the delay */
    141        1.2        is 	(void)p[0x8000];
    142        1.2        is #endif
    143        1.1        is 	DELAY(200);
    144        1.1        is 
    145        1.1        is 	p[0x0000] = 0xff;
    146        1.1        is 	p[0xc000] = 0xff;
    147        1.1        is 
    148        1.1        is 	return;
    149        1.1        is }
    150