xref: /netbsd-src/sys/arch/luna68k/dev/spc.c (revision 9f72ec66fd77ee8716962724360ffd3f8be40603)
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