From 63885cd02029505c39b66e217c2fb879ccea9337 Mon Sep 17 00:00:00 2001 From: thorpej Date: Wed, 31 Jan 2001 18:33:24 +0000 Subject: [PATCH] G2 bus support. Low level stuff by Marcus, bus_space stuff by me. --- sys/arch/dreamcast/dev/g2/g2bus.c | 99 +++++++++++++ sys/arch/dreamcast/dev/g2/g2bus_bus_mem.c | 170 ++++++++++++++++++++++ sys/arch/dreamcast/dev/g2/g2busvar.h | 68 +++++++++ 3 files changed, 337 insertions(+) create mode 100644 sys/arch/dreamcast/dev/g2/g2bus.c create mode 100644 sys/arch/dreamcast/dev/g2/g2bus_bus_mem.c create mode 100644 sys/arch/dreamcast/dev/g2/g2busvar.h diff --git a/sys/arch/dreamcast/dev/g2/g2bus.c b/sys/arch/dreamcast/dev/g2/g2bus.c new file mode 100644 index 000000000000..2e04a876bef7 --- /dev/null +++ b/sys/arch/dreamcast/dev/g2/g2bus.c @@ -0,0 +1,99 @@ +/* $NetBSD: g2bus.c,v 1.1 2001/01/31 18:33:24 thorpej Exp $ */ + +/*- + * Copyright (c) 2001 Marcus Comstedt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Marcus Comstedt. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +int g2busmatch(struct device *, struct cfdata *, void *); +void g2busattach(struct device *, struct device *, void *); +int g2busprint(void *, const char *); + +struct cfattach g2bus_ca = { + sizeof(struct g2bus_softc), g2busmatch, g2busattach +}; + +int g2bussearch(struct device *, struct cfdata *, void *); + +int +g2busmatch(struct device *parent, struct cfdata *cf, void *aux) +{ + struct shb_attach_args *sa = aux; + + if (strcmp("g2bus", cf->cf_driver->cd_name)) + return (0); + + sa->ia_iosize = 0 /* */; + return (1); +} + +void +g2busattach(struct device *parent, struct device *self, void *aux) +{ + struct g2bus_softc *sc = (void *) self; + struct g2bus_attach_args ga; + + printf("\n"); + + TAILQ_INIT(&sc->sc_subdevs); + + g2bus_bus_mem_init(sc); + + ga.ga_memt = &sc->sc_memt; + + config_search(g2bussearch, self, &ga); +} + +int +g2busprint(void *aux, const char *pnp) +{ + + return (UNCONF); +} + +int +g2bussearch(struct device *parent, struct cfdata *cf, void *aux) +{ + + if ((*cf->cf_attach->ca_match)(parent, cf, aux) > 0) + config_attach(parent, cf, aux, g2busprint); + + return (0); +} diff --git a/sys/arch/dreamcast/dev/g2/g2bus_bus_mem.c b/sys/arch/dreamcast/dev/g2/g2bus_bus_mem.c new file mode 100644 index 000000000000..13a895707614 --- /dev/null +++ b/sys/arch/dreamcast/dev/g2/g2bus_bus_mem.c @@ -0,0 +1,170 @@ +/* $NetBSD: g2bus_bus_mem.c,v 1.1 2001/01/31 18:33:24 thorpej Exp $ */ + +/*- + * Copyright (c) 2001 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Bus space implementation for the SEGA G2 bus. + * + * NOTE: We only implement a small subset of what the bus_space(9) + * API specifies. Right now, the GAPS PCI bridge is only used for + * the Dreamcast Broadband Adatper, so we only provide what the + * pci(4) and rtk(4) drivers need. + */ + +#include /* RCS ID & Copyright macro defns */ + +#include +#include +#include + +#include +#include + +#include + +#include + +int g2bus_bus_mem_map(void *, bus_addr_t, bus_size_t, int, + bus_space_handle_t *); +void g2bus_bus_mem_unmap(void *, bus_space_handle_t, bus_size_t); + +u_int8_t g2bus_bus_mem_read_1(void *, bus_space_handle_t, bus_size_t); +u_int16_t g2bus_bus_mem_read_2(void *, bus_space_handle_t, bus_size_t); +u_int32_t g2bus_bus_mem_read_4(void *, bus_space_handle_t, bus_size_t); + +void g2bus_bus_mem_write_1(void *, bus_space_handle_t, bus_size_t, + u_int8_t); +void g2bus_bus_mem_write_2(void *, bus_space_handle_t, bus_size_t, + u_int16_t); +void g2bus_bus_mem_write_4(void *, bus_space_handle_t, bus_size_t, + u_int32_t); + +void +g2bus_bus_mem_init(struct g2bus_softc *sc) +{ + bus_space_tag_t t = &sc->sc_memt; + + memset(t, 0, sizeof(*t)); + + t->dbs_map = g2bus_bus_mem_map; + t->dbs_unmap = g2bus_bus_mem_unmap; + + t->dbs_r_1 = g2bus_bus_mem_read_1; + t->dbs_r_2 = g2bus_bus_mem_read_2; + t->dbs_r_4 = g2bus_bus_mem_read_4; + + t->dbs_w_1 = g2bus_bus_mem_write_1; + t->dbs_w_2 = g2bus_bus_mem_write_2; + t->dbs_w_4 = g2bus_bus_mem_write_4; +} + +int +g2bus_bus_mem_map(void *v, bus_addr_t addr, bus_size_t size, int flags, + bus_space_handle_t *shp) +{ + + KASSERT((addr & SH3_PHYS_MASK) == addr); + *shp = SH3_PHYS_TO_P2SEG(addr); + + return (0); +} + +void +g2bus_bus_mem_unmap(void *v, bus_space_handle_t sh, bus_size_t size) +{ + + KASSERT(sh >= SH3_P2SEG_BASE && sh <= SH3_P2SEG_END); + /* Nothing to do. */ +} + +/* + * XXX NEED TO ADD THE LOCKING STUFF THAT MARCUS MENTIONED! + */ + +u_int8_t +g2bus_bus_mem_read_1(void *v, bus_space_handle_t sh, bus_size_t off) +{ + u_int8_t rv; + + rv = *(u_int8_t *)(sh + off); + + return (rv); +} + +u_int16_t +g2bus_bus_mem_read_2(void *v, bus_space_handle_t sh, bus_size_t off) +{ + u_int16_t rv; + + rv = *(u_int16_t *)(sh + off); + + return (rv); +} + +u_int32_t +g2bus_bus_mem_read_4(void *v, bus_space_handle_t sh, bus_size_t off) +{ + u_int32_t rv; + + rv = *(u_int32_t *)(sh + off); + + return (rv); +} + +void +g2bus_bus_mem_write_1(void *v, bus_space_handle_t sh, bus_size_t off, + u_int8_t val) +{ + + *(u_int8_t *)(sh + off) = val; +} + +void +g2bus_bus_mem_write_2(void *v, bus_space_handle_t sh, bus_size_t off, + u_int16_t val) +{ + + *(u_int16_t *)(sh + off) = val; +} + +void +g2bus_bus_mem_write_4(void *v, bus_space_handle_t sh, bus_size_t off, + u_int32_t val) +{ + + *(u_int32_t *)(sh + off) = val; +} diff --git a/sys/arch/dreamcast/dev/g2/g2busvar.h b/sys/arch/dreamcast/dev/g2/g2busvar.h new file mode 100644 index 000000000000..612d79dcd9e3 --- /dev/null +++ b/sys/arch/dreamcast/dev/g2/g2busvar.h @@ -0,0 +1,68 @@ +/* $NetBSD: g2busvar.h,v 1.1 2001/01/31 18:33:24 thorpej Exp $ */ + +/*- + * Copyright (c) 2001 Marcus Comstedt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Marcus Comstedt. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DREAMCAST_G2BUSVAR_H_ +#define _DREAMCAST_G2BUSVAR_H_ + +#include + +/* + * G2 driver attach arguments + */ +struct g2bus_attach_args { + bus_space_tag_t ga_memt; +}; + +/* + * Per-device G2 variables + */ +struct g2busdev { + struct device *gd_dev; /* back pointer to generic */ + TAILQ_ENTRY(g2busdev) + gd_bchain; /* bus chain */ +}; + +/* + * G2 master bus + */ +struct g2bus_softc { + struct device sc_dev; /* base device */ + struct dreamcast_bus_space sc_memt; + TAILQ_HEAD(, g2busdev) + sc_subdevs; /* list of all children */ +}; + +void g2bus_bus_mem_init(struct g2bus_softc *); + +#endif /* _DREAMCAST_SHBVAR_H_ */