1*9f72ec66Stsutsui /* $NetBSD: spc.c,v 1.11 2023/04/23 06:57:59 tsutsui Exp $ */
295d00ea7Snisimura
395d00ea7Snisimura /*-
495d00ea7Snisimura * Copyright (c) 2000 The NetBSD Foundation, Inc.
595d00ea7Snisimura * All rights reserved.
695d00ea7Snisimura *
795d00ea7Snisimura * This code is derived from software contributed to The NetBSD Foundation
895d00ea7Snisimura * by Tohru Nishimura.
995d00ea7Snisimura *
1095d00ea7Snisimura * Redistribution and use in source and binary forms, with or without
1195d00ea7Snisimura * modification, are permitted provided that the following conditions
1295d00ea7Snisimura * are met:
1395d00ea7Snisimura * 1. Redistributions of source code must retain the above copyright
1495d00ea7Snisimura * notice, this list of conditions and the following disclaimer.
1595d00ea7Snisimura * 2. Redistributions in binary form must reproduce the above copyright
1695d00ea7Snisimura * notice, this list of conditions and the following disclaimer in the
1795d00ea7Snisimura * documentation and/or other materials provided with the distribution.
1895d00ea7Snisimura *
1995d00ea7Snisimura * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2095d00ea7Snisimura * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2195d00ea7Snisimura * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2295d00ea7Snisimura * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2395d00ea7Snisimura * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2495d00ea7Snisimura * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2595d00ea7Snisimura * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2695d00ea7Snisimura * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2795d00ea7Snisimura * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2895d00ea7Snisimura * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2995d00ea7Snisimura * POSSIBILITY OF SUCH DAMAGE.
3095d00ea7Snisimura */
3195d00ea7Snisimura
3295d00ea7Snisimura #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
3395d00ea7Snisimura
34*9f72ec66Stsutsui __KERNEL_RCSID(0, "$NetBSD: spc.c,v 1.11 2023/04/23 06:57:59 tsutsui Exp $");
3595d00ea7Snisimura
3695d00ea7Snisimura #include <sys/param.h>
3795d00ea7Snisimura #include <sys/systm.h>
3895d00ea7Snisimura #include <sys/device.h>
3995d00ea7Snisimura
4095d00ea7Snisimura #include <machine/bus.h>
4195d00ea7Snisimura #include <machine/cpu.h>
4295d00ea7Snisimura #include <machine/autoconf.h>
43*9f72ec66Stsutsui #include <machine/board.h>
4495d00ea7Snisimura
4595d00ea7Snisimura #include <dev/scsipi/scsi_all.h>
4695d00ea7Snisimura #include <dev/scsipi/scsipi_all.h>
4795d00ea7Snisimura #include <dev/scsipi/scsi_message.h>
4895d00ea7Snisimura #include <dev/scsipi/scsiconf.h>
4995d00ea7Snisimura
5095d00ea7Snisimura #include <dev/ic/mb89352reg.h>
5195d00ea7Snisimura #include <dev/ic/mb89352var.h>
5295d00ea7Snisimura
5395d00ea7Snisimura #include <luna68k/luna68k/isr.h>
5495d00ea7Snisimura
5573f476d4Stsutsui #include "ioconf.h"
5695d00ea7Snisimura
5773f476d4Stsutsui static int spc_mainbus_match(device_t, cfdata_t, void *);
5873f476d4Stsutsui static void spc_mainbus_attach(device_t, device_t, void *);
5973f476d4Stsutsui
6073f476d4Stsutsui CFATTACH_DECL_NEW(spc, sizeof(struct spc_softc),
613b48b7c6Stsutsui spc_mainbus_match, spc_mainbus_attach, NULL, NULL);
6295d00ea7Snisimura
6395d00ea7Snisimura static int
spc_mainbus_match(device_t parent,cfdata_t cf,void * aux)6473f476d4Stsutsui spc_mainbus_match(device_t parent, cfdata_t cf, void *aux)
6595d00ea7Snisimura {
6695d00ea7Snisimura struct mainbus_attach_args *ma = aux;
6795d00ea7Snisimura
6895d00ea7Snisimura if (strcmp(ma->ma_name, spc_cd.cd_name))
6995d00ea7Snisimura return 0;
70*9f72ec66Stsutsui
71*9f72ec66Stsutsui /*
72*9f72ec66Stsutsui * LUNA-I doesn't have the secondary SCSI.
73*9f72ec66Stsutsui * However we cannot check it by badaddr() at the address range
74*9f72ec66Stsutsui * of the secondary SCSI on LUNA-II because the address bus lines
75*9f72ec66Stsutsui * are not fully decoded on LUNA-I and the primary SCSI registers
76*9f72ec66Stsutsui * are also accessible at the seconadary address range.
77*9f72ec66Stsutsui */
78*9f72ec66Stsutsui if (machtype == LUNA_I && ma->ma_addr != SCSI_ADDR)
7995d00ea7Snisimura return 0;
80*9f72ec66Stsutsui
8195d00ea7Snisimura return 1;
8295d00ea7Snisimura }
8395d00ea7Snisimura
8495d00ea7Snisimura static void
spc_mainbus_attach(device_t parent,device_t self,void * aux)8573f476d4Stsutsui spc_mainbus_attach(device_t parent, device_t self, void *aux)
8695d00ea7Snisimura {
8773f476d4Stsutsui struct spc_softc *sc = device_private(self);
8895d00ea7Snisimura struct mainbus_attach_args *ma = aux;
8995d00ea7Snisimura
9073f476d4Stsutsui sc->sc_dev = self;
9173f476d4Stsutsui aprint_normal("\n");
9295d00ea7Snisimura
9395d00ea7Snisimura sc->sc_iot = /* XXX */ 0;
9495d00ea7Snisimura sc->sc_ioh = ma->ma_addr;
9595d00ea7Snisimura sc->sc_initiator = 7;
9695d00ea7Snisimura
976615ddefStsutsui isrlink_autovec(spc_intr, (void *)sc, ma->ma_ilvl, ISRPRI_BIO);
9895d00ea7Snisimura
996615ddefStsutsui spc_attach(sc);
10095d00ea7Snisimura }
101