diff --git a/sys/arch/amiga/conf/files.amiga b/sys/arch/amiga/conf/files.amiga index b2ca0126812c..df6ec02f6de0 100644 --- a/sys/arch/amiga/conf/files.amiga +++ b/sys/arch/amiga/conf/files.amiga @@ -1,4 +1,4 @@ -# $NetBSD: files.amiga,v 1.157 2012/05/30 18:01:51 rkujawa Exp $ +# $NetBSD: files.amiga,v 1.158 2012/06/01 09:42:16 rkujawa Exp $ # maxpartitions must be first item in files.${ARCH}.newconf maxpartitions 16 # NOTE THAT AMIGA IS SPECIAL! @@ -59,6 +59,9 @@ file arch/amiga/amiga/amiga_bus_simple_16.c amibus_b16 define amibus_b800 file arch/amiga/amiga/amiga_bus_simple_0x800.c amibus_b800 +define amibus_empb +file arch/amiga/pci/empb_bsm.c amibus_empb + file arch/amiga/amiga/bus.c # zorro expansion bus. @@ -535,7 +538,7 @@ attach mppb at zbus device cv3dpb: pcibus attach cv3dpb at zbus -device empb: pcibus +device empb: pcibus, amibus_empb attach empb at zbus device emmem {} diff --git a/sys/arch/amiga/include/bus.h b/sys/arch/amiga/include/bus.h index 3b53c8027133..90b000dba113 100644 --- a/sys/arch/amiga/include/bus.h +++ b/sys/arch/amiga/include/bus.h @@ -1,4 +1,4 @@ -/* $NetBSD: bus.h,v 1.26 2012/05/07 18:16:38 tsutsui Exp $ */ +/* $NetBSD: bus.h,v 1.27 2012/06/01 09:41:35 rkujawa Exp $ */ /* * Copyright (c) 1996 Leo Weppelman. All rights reserved. @@ -279,6 +279,7 @@ extern const struct amiga_bus_space_methods amiga_bus_stride_2; extern const struct amiga_bus_space_methods amiga_bus_stride_4; extern const struct amiga_bus_space_methods amiga_bus_stride_4swap; extern const struct amiga_bus_space_methods amiga_bus_stride_16; +extern const struct amiga_bus_space_methods empb_bus_swap; /* * XXX diff --git a/sys/arch/amiga/include/pci_machdep.h b/sys/arch/amiga/include/pci_machdep.h index b58905a01aa6..a4f4b82c1d7f 100644 --- a/sys/arch/amiga/include/pci_machdep.h +++ b/sys/arch/amiga/include/pci_machdep.h @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep.h,v 1.5 2012/05/07 18:16:38 tsutsui Exp $ */ +/* $NetBSD: pci_machdep.h,v 1.6 2012/06/01 09:41:35 rkujawa Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -86,6 +86,8 @@ struct amiga_pci_chipset { /* PCI configuration data register */ bus_space_tag_t pci_conf_datat; bus_space_handle_t pci_conf_datah; + + void *cookie; /* used in some implementations */ }; diff --git a/sys/arch/amiga/pci/empb.c b/sys/arch/amiga/pci/empb.c index 63db450ced67..4521c36bad1d 100644 --- a/sys/arch/amiga/pci/empb.c +++ b/sys/arch/amiga/pci/empb.c @@ -1,4 +1,4 @@ -/* $NetBSD: empb.c,v 1.2 2012/05/31 21:29:02 rkujawa Exp $ */ +/* $NetBSD: empb.c,v 1.3 2012/06/01 09:41:35 rkujawa Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -46,14 +46,11 @@ #include #include -#include #include #include +#include #include -#include -#include -#include #include #include "opt_pci.h" @@ -66,27 +63,6 @@ #define WINDOW_LOCK(s) (s) = splhigh() #define WINDOW_UNLOCK(s) splx((s)) -struct empb_softc { - device_t sc_dev; - - struct bus_space_tag setup_area; - bus_space_tag_t setup_area_t; - bus_space_handle_t setup_area_h; - - struct bus_space_tag pci_confio_area; - bus_space_tag_t pci_confio_t; - bus_space_handle_t pci_confio_h; - uint8_t pci_confio_mode; - - struct bus_space_tag pci_mem_win; - uint32_t pci_mem_win_size; - bus_addr_t pci_mem_win_pos; - uint16_t pci_mem_win_mask; - - struct amiga_pci_chipset apc; - -}; - static int empb_match(struct device *, struct cfdata *, void *); static void empb_attach(struct device *, struct device *, void *); @@ -94,7 +70,6 @@ static void empb_callback(device_t self); static void empb_find_mem(struct empb_softc *sc); static void empb_switch_bridge(struct empb_softc *sc, uint8_t mode); -static void empb_switch_window(struct empb_softc *sc, bus_addr_t address); pcireg_t empb_pci_conf_read(pci_chipset_tag_t, pcitag_t, int); void empb_pci_conf_write(pci_chipset_tag_t, pcitag_t, int, pcireg_t); @@ -317,7 +292,7 @@ empb_find_mem(struct empb_softc *sc) /* * Switch memory window position. */ -static void +void empb_switch_window(struct empb_softc *sc, bus_addr_t address) { int s; diff --git a/sys/arch/amiga/pci/empb_bsm.c b/sys/arch/amiga/pci/empb_bsm.c new file mode 100644 index 000000000000..71fee0fde193 --- /dev/null +++ b/sys/arch/amiga/pci/empb_bsm.c @@ -0,0 +1,95 @@ +/* $NetBSD: empb_bsm.c,v 1.1 2012/06/01 09:41:35 rkujawa Exp $ */ + +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Radoslaw Kujawa. + * + * 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. + * + * 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. + */ + +/* + * Special bus space methods handling PCI memory window. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + + + + +const struct amiga_bus_space_methods empb_bus_swap = { + /*.bsm = empb_bsm, + .bsms = empb_bsms, + .bsu = empb_bsu, + .bsa = NULL, + .bsf = NULL, + + .bsr1 = empb_bsr1, + .bsw1 = empb_bsw1, + .bsrm1 = empb_bsrm1, + .bswm1 = empb_bswm1, + .bsrr1 = empb_bsrr1, + .bswr1 = empb_bswr1, + .bssr1 = empb_bssr1, + .bscr1 = empb_bscr1, + + .bsr2 = oabs(bsr2_), // XXX swap? + .bsw2 = oabs(bsw2_), // XXX swap? + .bsrs2 = oabs(bsr2_), + .bsws2 = oabs(bsw2_), + .bsrm2 = oabs(bsrm2_swap_), + .bswm2 = oabs(bswm2_swap_), + .bsrms2 = oabs(bsrm2_), + .bswms2 = oabs(bswm2_), + .bsrr2 = oabs(bsrr2_), // XXX swap? + .bswr2 = oabs(bswr2_), // XXX swap? + .bsrrs2 = oabs(bsrr2_), + .bswrs2 = oabs(bswr2_), + .bssr2 = oabs(bssr2_), // XXX swap? + .bscr2 = oabs(bscr2_), // XXX swap? + + .bsr4 = oabs(bsr4_swap_), + .bsw4 = oabs(bsw4_swap_), + .bsrs4 = oabs(bsr4_), + .bsws4 = oabs(bsw4_), + .bsrm4 = oabs(bsrm4_), // XXX swap? + .bswm4 = oabs(bswm4_), // XXX swap? + .bsrms4 = oabs(bsrm4_), + .bswms4 = oabs(bswm4_), + .bsrr4 = oabs(bsrr4_), // XXX swap? + .bswr4 = oabs(bswr4_), // XXX swap? + .bsrrs4 = oabs(bsrr4_), + .bswrs4 = oabs(bswr4_), + .bssr4 = oabs(bssr4_), // XXX swap? + .bscr4 = oabs(bscr4_) // XXX swap? */ +}; + diff --git a/sys/arch/amiga/pci/empbvar.h b/sys/arch/amiga/pci/empbvar.h new file mode 100644 index 000000000000..e830c999d8fb --- /dev/null +++ b/sys/arch/amiga/pci/empbvar.h @@ -0,0 +1,64 @@ +/* $NetBSD: empbvar.h,v 1.1 2012/06/01 09:41:35 rkujawa Exp $ */ + +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Radoslaw Kujawa. + * + * 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. + * + * 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 + +struct empb_softc { + device_t sc_dev; + + struct bus_space_tag setup_area; + bus_space_tag_t setup_area_t; + bus_space_handle_t setup_area_h; + + struct bus_space_tag pci_confio_area; + bus_space_tag_t pci_confio_t; + bus_space_handle_t pci_confio_h; + uint8_t pci_confio_mode; + + struct bus_space_tag pci_mem_win; + uint32_t pci_mem_win_size; + bus_addr_t pci_mem_win_pos; + uint16_t pci_mem_win_mask; + + struct amiga_pci_chipset apc; + +}; + + +void empb_switch_window(struct empb_softc *sc, bus_addr_t address);