Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68a696a0 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-tc:
  [EISA] EISA registration with !CONFIG_EISA
  [TC] pmagb-b-fb: Convert to the driver model
  [TC] dec_esp: Driver model for the PMAZ-A
  [TC] mips: pmag-ba-fb: Convert to the driver model
  [TC] defxx: TURBOchannel support
  [TC] TURBOchannel support for the DECstation
  [TC] MIPS: TURBOchannel resources off-by-one fix
  [TC] MIPS: TURBOchannel update to the driver model
parents dcb92f88 f85da084
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3293,6 +3293,11 @@ L: vtun@office.satix.net
W:	http://vtun.sourceforge.net/tun
S:	Maintained

TURBOCHANNEL SUBSYSTEM
P:	Maciej W. Rozycki
M:	macro@linux-mips.org
S:	Maintained

U14-34F SCSI DRIVER
P:	Dario Ballabio
M:	ballabio_dario@emc.com
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ obj-y := ecc-berr.o int-handler.o ioasic-irq.o kn01-berr.o \
		   kn02-irq.o kn02xa-berr.o reset.o setup.o time.o

obj-$(CONFIG_PROM_CONSOLE)	+= promcon.o
obj-$(CONFIG_TC)		+= tc.o
obj-$(CONFIG_CPU_HAS_WB)	+= wbflush.o

EXTRA_AFLAGS := $(CFLAGS)
+3 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ static inline void prom_init_kn02(void)
{
	dec_kn_slot_base = KN02_SLOT_BASE;
	dec_kn_slot_size = KN02_SLOT_SIZE;
	dec_tc_bus = 1;

	dec_rtc_base = (void *)CKSEG1ADDR(dec_kn_slot_base + KN02_RTC);
}
@@ -96,6 +97,7 @@ static inline void prom_init_kn02xa(void)
{
	dec_kn_slot_base = KN02XA_SLOT_BASE;
	dec_kn_slot_size = IOASIC_SLOT_SIZE;
	dec_tc_bus = 1;

	ioasic_base = (void *)CKSEG1ADDR(dec_kn_slot_base + IOASIC_IOCTL);
	dec_rtc_base = (void *)CKSEG1ADDR(dec_kn_slot_base + IOASIC_TOY);
@@ -105,6 +107,7 @@ static inline void prom_init_kn03(void)
{
	dec_kn_slot_base = KN03_SLOT_BASE;
	dec_kn_slot_size = IOASIC_SLOT_SIZE;
	dec_tc_bus = 1;

	ioasic_base = (void *)CKSEG1ADDR(dec_kn_slot_base + IOASIC_IOCTL);
	dec_rtc_base = (void *)CKSEG1ADDR(dec_kn_slot_base + IOASIC_TOY);
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ unsigned long dec_kn_slot_base, dec_kn_slot_size;
EXPORT_SYMBOL(dec_kn_slot_base);
EXPORT_SYMBOL(dec_kn_slot_size);

int dec_tc_bus;

spinlock_t ioasic_ssr_lock;

volatile u32 *ioasic_base;

arch/mips/dec/tc.c

0 → 100644
+95 −0
Original line number Diff line number Diff line
/*
 *	TURBOchannel architecture calls.
 *
 *	Copyright (c) Harald Koerfgen, 1998
 *	Copyright (c) 2001, 2003, 2005, 2006  Maciej W. Rozycki
 *	Copyright (c) 2005  James Simmons
 *
 *	This file is subject to the terms and conditions of the GNU
 *	General Public License.  See the file "COPYING" in the main
 *	directory of this archive for more details.
 */
#include <linux/compiler.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/string.h>
#include <linux/tc.h>
#include <linux/types.h>

#include <asm/addrspace.h>
#include <asm/bootinfo.h>
#include <asm/paccess.h>

#include <asm/dec/interrupts.h>
#include <asm/dec/prom.h>
#include <asm/dec/system.h>

/*
 * Protected read byte from TURBOchannel slot space.
 */
int tc_preadb(u8 *valp, void __iomem *addr)
{
	return get_dbe(*valp, (u8 *)addr);
}

/*
 * Get TURBOchannel bus information as specified by the spec, plus
 * the slot space base address and the number of slots.
 */
int __init tc_bus_get_info(struct tc_bus *tbus)
{
	if (!dec_tc_bus)
		return -ENXIO;

	memcpy(&tbus->info, rex_gettcinfo(), sizeof(tbus->info));
	tbus->slot_base = CPHYSADDR((long)rex_slot_address(0));

	switch (mips_machtype) {
	case MACH_DS5000_200:
		tbus->num_tcslots = 7;
		break;
	case MACH_DS5000_2X0:
	case MACH_DS5900:
		tbus->ext_slot_base = 0x20000000;
		tbus->ext_slot_size = 0x20000000;
		/* fall through */
	case MACH_DS5000_1XX:
		tbus->num_tcslots = 3;
		break;
	case MACH_DS5000_XX:
		tbus->num_tcslots = 2;
	default:
		break;
	}
	return 0;
}

/*
 * Get the IRQ for the specified slot.
 */
void __init tc_device_get_irq(struct tc_dev *tdev)
{
	switch (tdev->slot) {
	case 0:
		tdev->interrupt = dec_interrupt[DEC_IRQ_TC0];
		break;
	case 1:
		tdev->interrupt = dec_interrupt[DEC_IRQ_TC1];
		break;
	case 2:
		tdev->interrupt = dec_interrupt[DEC_IRQ_TC2];
		break;
	/*
	 * Yuck! DS5000/200 onboard devices
	 */
	case 5:
		tdev->interrupt = dec_interrupt[DEC_IRQ_TC5];
		break;
	case 6:
		tdev->interrupt = dec_interrupt[DEC_IRQ_TC6];
		break;
	default:
		tdev->interrupt = -1;
		break;
	}
}
Loading