More work on PCI memory accesses on empb(4).
This commit is contained in:
parent
2ff5436688
commit
68cabd119e
@ -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 {}
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
};
|
||||
|
||||
|
||||
|
@ -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 <machine/bus.h>
|
||||
#include <machine/cpu.h>
|
||||
|
||||
#include <m68k/bus_dma.h>
|
||||
#include <amiga/dev/zbusvar.h>
|
||||
#include <amiga/pci/empbreg.h>
|
||||
#include <amiga/pci/empbvar.h>
|
||||
#include <amiga/pci/emmemvar.h>
|
||||
|
||||
#include <dev/pci/pcivar.h>
|
||||
#include <dev/pci/pcireg.h>
|
||||
#include <dev/pci/pcidevs.h>
|
||||
#include <dev/pci/pciconf.h>
|
||||
|
||||
#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;
|
||||
|
95
sys/arch/amiga/pci/empb_bsm.c
Normal file
95
sys/arch/amiga/pci/empb_bsm.c
Normal file
@ -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 <sys/bus.h>
|
||||
#include <sys/null.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/systm.h>
|
||||
|
||||
#include <amiga/pci/empbreg.h>
|
||||
#include <amiga/pci/empbvar.h>
|
||||
#include <amiga/pci/emmemvar.h>
|
||||
|
||||
|
||||
|
||||
|
||||
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? */
|
||||
};
|
||||
|
64
sys/arch/amiga/pci/empbvar.h
Normal file
64
sys/arch/amiga/pci/empbvar.h
Normal file
@ -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 <sys/types.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/bus.h>
|
||||
|
||||
#include <dev/pci/pcivar.h>
|
||||
#include <dev/pci/pcireg.h>
|
||||
#include <dev/pci/pcidevs.h>
|
||||
|
||||
#include <machine/pci_machdep.h>
|
||||
|
||||
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);
|
Loading…
Reference in New Issue
Block a user