diff options
Diffstat (limited to 'arch/mips/dec')
-rw-r--r-- | arch/mips/dec/Makefile | 24 | ||||
-rw-r--r-- | arch/mips/dec/boot.S | 92 | ||||
-rw-r--r-- | arch/mips/dec/decstation.S | 364 | ||||
-rw-r--r-- | arch/mips/dec/decstation.c | 200 | ||||
-rw-r--r-- | arch/mips/dec/hw-access.c | 26 | ||||
-rw-r--r-- | arch/mips/dec/int-handler.S | 246 | ||||
-rw-r--r-- | arch/mips/dec/ld.script | 47 | ||||
-rw-r--r-- | arch/mips/dec/reset.c | 28 | ||||
-rw-r--r-- | arch/mips/dec/setup.c | 50 |
9 files changed, 0 insertions, 1077 deletions
diff --git a/arch/mips/dec/Makefile b/arch/mips/dec/Makefile deleted file mode 100644 index ccfba0694..000000000 --- a/arch/mips/dec/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# -# Makefile for the DECstation family specific parts of the kernel -# -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# - -.S.s: - $(CPP) $(CFLAGS) $< -o $*.s -.S.o: - $(CC) $(CFLAGS) -c $< -o $*.o - -all: dec.o -O_TARGET := dec.o -O_OBJS := boot.o int-handler.o decstation.o hw-access.o reset.o setup.o - -boot.o: boot.S - -int-handler.o: int-handler.S - -clean: - -include $(TOPDIR)/Rules.make diff --git a/arch/mips/dec/boot.S b/arch/mips/dec/boot.S deleted file mode 100644 index 587c43623..000000000 --- a/arch/mips/dec/boot.S +++ /dev/null @@ -1,92 +0,0 @@ -/* - * arch/mips/dec/boot.S - * - * Copyright (C) 1995, 1996 Paul M. Antoine - * - * Written by Ralf Baechle and Andreas Busse, modified for DECStation - * support by Paul Antoine. - * - * NOTE: There are references to R4X00 code in here, because there is an - * upgrade module for Personal DECStations with such a CPU! - */ -#include <asm/asm.h> -#include <asm/regdef.h> -#include <asm/fpregdef.h> -#include <asm/mipsconfig.h> -#include <asm/mipsregs.h> -#include <asm/stackframe.h> -#include <asm/bootinfo.h> - -/* - * dec_entry: Called by the boot PROM loader to do DECStation setup, prior - * to calling dec_setup() to fill in the boot_info structure. - * - * This code should also go in the boot loader for loading off - * floppy and HD... in addition to the tags code in dec_setup(). - * - * FIXME: arrange for this code only to be linked in when building a - * kernel image to be booted via tftp from the boot prom?? - */ - .text - .globl dec_entry -dec_entry: - /* Save the address of the REX call vector for later - * use in printing debug messages. - */ - sw a3,pmax_rex_base - sw a2,rex_prom_magic - la a0,dec_signon - jal pmax_printf - nop - - /* Now set up the bootinfo with things that - * should be loaded by the boot loader, except that - * for the moment we're booting using tftp. - */ - jal dec_setup - nop -/* - * Now we need to move exception vector handler routines that appear - * in head.S down to the right addresses, 'cos the DECStation loads - * kernels at 0x80030000... <sigh> - */ - -/* - * First move the TLB refill code down to offset 0x000, at addr 0x80000000 - */ - la t0,except_vec0 # begining of exception code - la t1,except_vec1 # end of exception code - la t2,0x80000000 # where the code should live - lw t3,(t0) # get first word -1: sw t3,(t2) # put it where it should go - addiu t0,4 # increment both pointers - addiu t2,4 - lw t3,(t0) # will be in the delay slot - bne t0,t1,1b -/* - * Now move the General Exception code down to offset 0x080 at 0x80000000 - */ - la t0,except_vec3 # begining of general exception code - la t1,end_except # end of general exception code - la t2,0x80000080 # where the code should live - lw t3,(t0) # get first word -1: sw t3,(t2) - addiu t0,4 - addiu t2,4 - lw t3,(t0) - bne t0,t1,1b - - la a0,dec_launch # say where we are going - jal pmax_printf - nop - - la t0,mach_mem_upper # get upper memory bound - lw a0,(t0) - j kernel_entry - nop - - .data - .align 2 -dec_signon: .ascii "\n\nLinux/MIPS DECStation Boot\n"; - .asciiz "Copyright (C) Paul M. Antoine 1995, 1996 and others, 1994, 1995, 1996\n\n"; -dec_launch: .asciiz "Setup complete, launching kernel...\n"; diff --git a/arch/mips/dec/decstation.S b/arch/mips/dec/decstation.S deleted file mode 100644 index ebc618a4c..000000000 --- a/arch/mips/dec/decstation.S +++ /dev/null @@ -1,364 +0,0 @@ -/* - * arch/mips/kernel/decstation.S - * - * Copyright (C) 1995, 1996 Paul M. Antoine - * - * Written by Ralf Baechle and Andreas Busse, modified for DECStation - * support by Paul Antoine. - * - * NOTE: There are references to R4X00 code in here, because I believe - * that there is an upgrade module for Personal DECStations with - * such CPU's! - * - * FIXME: still plenty to do in this file, as much of the code towards - * the end hasn't been modified to suit the DECStation's interrupts. - * (Paul, you need to fix this file to comply with NAPS. Won't be - * too hard - Ralf) - * - * $Id: decstation.S,v 1.3 1997/09/20 19:20:06 root Exp $ - */ -#include <asm/asm.h> -#include <asm/mipsconfig.h> -#include <asm/mipsregs.h> -#include <asm/regdef.h> -#include <asm/decstation.h> -#include <asm/stackframe.h> -#include <asm/bootinfo.h> - -/* - * dec_entry: Called at boot in head.S to do DECStation setup, and to - * fill in the boot_info structure. - */ - .text - .globl dec_entry -dec_entry: - /* Save the address of the REX call vector for later - * use in printing debug messages. - */ - sw a3,pmax_rex_base - la a0,dec_signon - jal pmax_printf - nop - /* Now set up the bootinfo structure with things that - * should be loaded by the boot loader, except that - * for the moment we're booting using tftp. - */ - la t0,boot_info - li t1,0x40 # 64 TLB entries -/* - * FIXME: Ideally, all DEC workstations should be supported, so here we - * should put some clevernesses to determine machine type and CPU - * type. Needs a hierarchy of DEC machine types. Perhaps Machine - * AND Model fields in bootinfo structure? - */ - sw t1,OFFSET_BOOTINFO_TLB_ENTRIES(t0) - li t1,MACH_DECSTATION # Machine type - sw t1,(t0) - li t1,CPU_R3000A # CPU type - sw t1,OFFSET_BOOTINFO_CPUTYPE(t0) -/* - * FIXME: the following should find the memory size from the boot PROM - */ - li t1,0x80000000 # Lower memory bound - sw t1,OFFSET_BOOTINFO_MEMLOWER(t0) - li t1,0x88000000 # Upper memory bound (8MB) - sw t1,OFFSET_BOOTINFO_MEMUPPER(t0) -/* - * FIXME: the following should determine the cache size a la the method - * used in MACH. For now we just guess - PMA. - */ - li t1,0x100000 # 64K icache - sw t1,OFFSET_BOOTINFO_ICACHE_SIZE(t0) - li t1,0x100000 # 64K dcache - sw t1,OFFSET_BOOTINFO_DCACHE_SIZE(t0) - -/* - * FIXME: template for other bootinfo fields that probably need filling in... - * - li t1,0x80000000 - sw t1,OFFSET_BOOTINFO_(t0) -*/ - -/* - * Now we need to move exception vector handler routines that appear - * in head.S down to the right addresses, 'cos the DECStation loads - * kernels at 0x80030000... <sigh> - */ - -/* - * First move the TLB refill code down to offset 0x000, at addr 0x80000000 - */ - la t0,except_vec0 # begining of TLB exception code - la t1,except_vec1 # end of TLB exception code - la t2,0x80000000 # where the code should live - lw t3,(t0) # get first word -1: sw t3,(t2) # put it where it should go - addiu t0,4 # increment both pointers - addiu t2,4 - lw t3,(t0) # will be in the delay slot - bne t0,t1,1b - -/* - * Now move the General Exception code down to offset 0x080 at 0x80000000 - */ - la t0,except_vec3 # begining of general exception code - la t1,kernel_entry # end of general exception code - la t2,0x80000080 # where the code should live - lw t3,(t0) # get first word -1: sw t3,(t2) - addiu t0,4 - addiu t2,4 - lw t3,(t0) - bne t0,t1,1b - -/* - * FIXME: Don't forget to set the gp regster... why do I need this? - */ - la gp,_gp - la a0,dec_launch # say where we are going - jal pmax_printf - nop - j kernel_entry - nop - - .data - .align 2 -dec_signon: .ascii "\n\nLinux/MIPS DECStation Boot\n"; - .asciiz "Copyright (C) Paul M. Antoine 1995, 1996 and others, 1994, 1995, 1996\n\n"; -dec_launch: .asciiz "Launching kernel...\n"; - .text - .set noreorder -/* - * decstation_handle_int: Interrupt handler for Personal DECStation 5000/2x - * - * FIXME: this is *extremely* experimental, though it is probably o.k. for - * most DECStation models. - */ - NESTED(decstation_handle_int, FR_SIZE, ra) - .set noat - SAVE_ALL - REG_S sp,FR_ORIG_REG2(sp) - CLI - .set at - - /* - * Get pending interrupts - */ - mfc0 t0,CP0_CAUSE # get pending interrupts - mfc0 t1,CP0_STATUS # get enabled interrupts - and t0,t1 # isolate allowed ones - andi t0,0xff00 # isolate pending bits -/* - * FIXME: The following branch was: - * beqz t0,spurious_interrupt - * - * ...but the wonders of ecoff cause the gas assembler (ver 2.5.1 ) - * to complain: - * - * "Can not represent relocation in this object file format"... - * - * hence this hack to branch foward a bit, and then jump <sigh> - * Perhaps a later version of gas will cope? - Paul - * (No, this is impossible in COFF as well as in ELF. - Ralf) - */ - beqz t0,3f; - sll t0,16 # delay slot - - /* - * Find irq with highest priority - * FIXME: This is slow - */ - la t1,ll_vectors -1: bltz t0,2f # found pending irq - sll t0,1 - b 1b - subu t1,PTRSIZE # delay slot - - /* - * Do the low-level stuff - */ - .set reorder -2: LOAD_L t0,(t1) - jr t0 - .set noreorder - END(decstation_handle_int) - -/* - * FIXME: The hack mentioned above. - */ -3: j spurious_interrupt - nop - -/* - * FIXME: the rest of this is pretty suspect, as it's straight from - * jazz.S... and I really haven't altered it at all - Paul - */ - -/* - * Used for keyboard driver's fake_keyboard_interrupt() - * (Paul, even for i386 this is no longer being used -- Ralf) - */ -ll_sw0: li s1,~IE_SW0 - mfc0 t0,CP0_CAUSE - and t0,s1 - mtc0 t0,CP0_CAUSE - PRINT("sw0 received...\n") - li t1,1 - b call_real - li t3,PTRSIZE # delay slot, re-map to irq level 1 - -ll_sw1: li s1,~IE_SW1 - PANIC("Unimplemented sw1 handler") - -loc_no_irq: PANIC("Unimplemented loc_no_irq handler") -loc_sound: PANIC("Unimplemented loc_sound handler") -loc_video: PANIC("Unimplemented loc_video handler") -loc_scsi: PANIC("Unimplemented loc_scsi handler") - -/* - * Ethernet interrupt, remapped to level 15 - * NOTE: Due to a bug somewhere in the kernel I was not able - * to figure out, the PRINT() is necessary. Without this, - * I get a "gfp called nonatomically from interrupt 00000000". - * Only god knows why... Tell me if you find the reason! - * (You were fouled by the caches and this is the wrong file for this - * comment - Ralf) - * Andy, 6/16/95 - */ -loc_ethernet: PANIC("Unimplemented loc_ethernet") - -/* - * Keyboard interrupt, remapped to level 1 - */ -loc_keyboard: PANIC("Unimplemented loc_keyboard") - -loc_mouse: PANIC("Unimplemented loc_mouse handler") - -/* - * Serial port 1 IRQ, remapped to level 3 - */ -loc_serial1: PANIC("Unimplemented loc_serial handler") - -/* - * Serial port 2 IRQ, remapped to level 4 - */ -loc_serial2: PANIC("Unimplemented loc_serial handler") - -/* - * Parallel port IRQ, remapped to level 5 - */ -loc_parallel: PANIC("Unimplemented loc_parallel handler") - -/* - * Floppy IRQ, remapped to level 6 - */ -loc_floppy: PANIC("Unimplemented loc_floppy handler") - -/* - * Now call the real handler - */ -loc_call: /* - * Temporarily disable interrupt source - */ -/* lhu t2,JAZZ_IO_IRQ_ENABLE -*/ - and t2,s1 # delay slot -/* sh t2,JAZZ_IO_IRQ_ENABLE */ - nor s1,zero,s1 - jal do_IRQ # call IRQ handler - move a1,sp - - /* - * Reenable interrupt - */ -/* lhu t2,JAZZ_IO_IRQ_ENABLE */ - or t2,s1 -/* sh t2,JAZZ_IO_IRQ_ENABLE */ - - j ret_from_irq - nop # delay slot - -ll_tc3: PANIC("Unimplemented tc3 interrupt handler") - -ll_fpu: PANIC("Unimplemented fpu interrupt handler") - -ll_io_error: PANIC("Unimplemented I/O write timeout interrupt handler") - -ll_rtc: PANIC("Unimplemented RTC interrupt handler") - -/* - * Timer IRQ - * We remap the timer irq to be more similar to a IBM compatible - */ -ll_timer: PANIC("Timer interrupt!"); -/* - * CPU count/compare IRQ (unused) - */ -ll_reset: li a0,0 - jal pmax_halt - li a1,0 # delay slot - -/* - * Now call the real handler - */ -call_real: /* - * temporarily disable interrupt - */ - mfc0 t2,CP0_STATUS - and t2,s1 - mtc0 t2,CP0_STATUS - nor s1,zero,s1 - jal do_IRQ - move a1,sp - - /* - * reenable interrupt - */ - mfc0 t2,CP0_STATUS - or t2,s1 - mtc0 t2,CP0_STATUS - - j ret_from_irq - nop # delay slot - -/* - * Just for debugging... load a0 with address of the point inside the - * framebuffer at which you want to draw a line of 16x32 pixels. - * Maxine's framebuffer starts at 0xaa000000. - */ - .set reorder - LEAF(drawline) - li t1,0xffffffff # set all pixels on - li t2,0x10 # we will write 16 words -1: sw t1,(a0) # write the first word - addiu a0,a0,4 # move our framebuffer pointer - addiu t2,t2,-1 # one less to do - bnez t2,1b # finished? - jr ra - END(drawline) - -/* - * FIXME: I have begun to alter this table to reflect Personal DECStation - * (i.e. Maxine) interrupts... Paul. - */ - .data - PTR ll_sw0 # SW0 - PTR ll_sw1 # SW1 - PTR ll_timer # Periodic interrupt - PTR ll_rtc # RTC periodic interrupt - PTR ll_io_error # Timeout on I/O writes - PTR ll_tc3 # TC slot 3, motherboard - PTR ll_reset # Halt keycode (CTRL+ALT+ENTER) -ll_vectors: PTR ll_fpu # FPU - -local_vector: PTR loc_no_irq - PTR loc_parallel - PTR loc_floppy - PTR loc_sound - PTR loc_video - PTR loc_ethernet - PTR loc_scsi - PTR loc_keyboard - PTR loc_mouse - PTR loc_serial1 - PTR loc_serial2 diff --git a/arch/mips/dec/decstation.c b/arch/mips/dec/decstation.c deleted file mode 100644 index ae64c32f5..000000000 --- a/arch/mips/dec/decstation.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * arch/mips/dec/decstation.c - * - * Copyright (C) 1996 Paul M. Antoine - * - * Written by Paul Antoine. - * - * FIXME: still plenty to do in this file, as we don't yet fully fill - * the boot info structure with DEC-specific tags. Also still - * too specific to the Person Decstattion 5000/2x!! - */ - -#include <asm/dec/decstation.h> -#include <asm/dec/maxine.h> /* FIXME: what about other decstations? */ -#include <asm/bootinfo.h> - -/* - * dec_setup: Called at boot from dec_entry() in boot.S to do - * DECStation-specific setup, and to fill in the kernel argument - * tags. - * - * FIXME: I'm not sure all DEC workstations are correctly supported. This - * code may not need to be here when booting off floppy or HD?? - */ - -unsigned long mach_mem_upper = 0; -unsigned long mach_mem_lower = 0; -unsigned long mips_dcache_size = 0; -unsigned long mips_icache_size = 0; -unsigned long rex_prom_magic; /* from boot.S */ -unsigned long dec_get_memory_size(void); - -void dec_setup(void) -{ - unsigned long int mem_mask = 0; - unsigned long tag_data_dummy, dec_sysid; - unsigned char dec_cpunum, dec_systype, dec_firmrev, dec_etc; - extern const char *linux_banner; - - pmax_printf("%s\n", linux_banner); - /* First we need the memory upper bound before we can add tag entries... */ - mach_mem_lower = 0x80000000L; - mach_mem_upper = mach_mem_lower + dec_get_memory_size(); - - /* First tag is always memory upper limit, right Stoned?? */ - (void)bi_TagAdd(tag_memupper, ULONGSIZE, &mach_mem_upper); - - /* We're obviously one of the DEC machines */ - tag_data_dummy = MACH_GROUP_DEC; - (void)bi_TagAdd(tag_machgroup, ULONGSIZE, &tag_data_dummy); - - /* Now let's try to figure out what type of DECStation we are */ - pmax_printf("System id is: "); - if ((dec_sysid = pmax_getsysid()) != 0) - pmax_printf("%x\n", dec_sysid); - else - pmax_printf("unknown\n"); - - dec_cpunum = (dec_sysid & 0xff000000) >> 24; - dec_systype = (dec_sysid & 0xff0000) >> 16; - dec_firmrev = (dec_sysid & 0xff00) >> 8; - dec_etc = dec_sysid & 0xff; - - /* - * FIXME: for now use the PROM to determine the CPU type - should - * probably just get the CPU to tell us. - */ - pmax_printf("System has an "); - switch(dec_cpunum) - { - case 0x82: - { - pmax_printf("R3000 CPU\n"); - tag_data_dummy = CPU_R3000A; - break; - } - case 0x84: - { - pmax_printf("R4000 CPU\n"); - /* FIXME: assume a plain R4000PC for now */ - tag_data_dummy = CPU_R4000PC; - break; - } - default: - { - pmax_printf("unknown CPU, code is %x\n", dec_cpunum); - /* FIXME: assume an R2000 for now */ - tag_data_dummy = CPU_R2000; - break; - } - } - /* Add the CPU type */ - (void)bi_TagAdd(tag_cputype, ULONGSIZE, &tag_data_dummy); - - pmax_printf("System has firmware type: "); - if (dec_firmrev == 2) - pmax_printf("TCF0\n"); - else - pmax_printf("TCF1\n"); - - pmax_printf("This DECStation is a: "); - switch(dec_systype) { - case 1: /* DS2100/3100 Pmax */ - pmax_printf("DS2100/3100\n"); - tag_data_dummy = MACH_DECSTATION; - break; - case 2: /* DS5000 3max */ - pmax_printf("DS5000\n"); - tag_data_dummy = MACH_DECSTATION; - break; - case 3: /* DS5000/100 3min */ - pmax_printf("DS5000/1x0\n"); - tag_data_dummy = MACH_DECSTATION; - break; - case 7: /* Personal DS5000/2x */ - pmax_printf("Personal DS5000/2x\n"); - tag_data_dummy = MACH_DECSTATION; - break; - default: - pmax_printf("unknown, id is: %x\n", dec_systype); - tag_data_dummy = MACH_UNKNOWN; - break; - } - - /* Add the machine type */ - (void)bi_TagAdd(tag_machtype, ULONGSIZE, &tag_data_dummy); - - /* Add the number of tlb entries */ - tag_data_dummy = 64; - (void)bi_TagAdd(tag_tlb_entries, ULONGSIZE, &tag_data_dummy); - - /* - * Add the instruction cache size - * FIXME: should determine this somehow - */ - tag_data_dummy = 0x100000; /* set it to 64K for now */ - (void)bi_TagAdd(tag_icache_size, ULONGSIZE, &tag_data_dummy); - mips_icache_size = tag_data_dummy; - - /* - * Add the data cache size - * FIXME: should determine this somehow - */ - tag_data_dummy = 0x100000; /* set it to 64K for now */ - (void)bi_TagAdd(tag_dcache_size, ULONGSIZE, &tag_data_dummy); - mips_dcache_size = tag_data_dummy; - - /* FIXME: should determine vram_base properly */ - tag_data_dummy = 0xa8000000; - (void)bi_TagAdd(tag_vram_base, ULONGSIZE, &tag_data_dummy); - - /* FIXME: dummy drive info tag */ - tag_data_dummy = 0; - (void)bi_TagAdd(tag_drive_info, ULONGSIZE, &tag_data_dummy); - - /* FIXME: do we need a dummy tag at the end? */ - tag_data_dummy = 0; - (void)bi_TagAdd(tag_dummy, 0, &tag_data_dummy); - - pmax_printf("Added tags\n"); -} /* dec_setup */ - -unsigned long dec_get_memory_size() -{ - int i, bitmap_size; - unsigned long mem_size = 0; - struct pmax_bitmap { - int pagesize; - unsigned char bitmap[64*1024*1024 - 4]; - } *bm; - - /* some free 64k */ - bm = (struct pmax_bitmap *)0x8002f000; - bitmap_size = pmax_getbitmap(bm); - - pmax_printf("Page size is: %x\n", bm->pagesize); - pmax_printf("Bitmap size is: %d bytes\n", bitmap_size); - - for (i = 0; i < bitmap_size; i++) - { - /* FIXME: very simplistically only add full sets of pages */ - if (bm->bitmap[i] == 0xff) - mem_size += (8 * bm->pagesize); - } - pmax_printf("Main memory size is: %d KB\n", (mem_size / 1024)); - return(mem_size); -} /* dec_get_memory_size */ - -unsigned char maxine_rtc_read_data(unsigned long addr) -{ - char *rtc = (char *)(PMAX_RTC_BASE); - return(rtc[addr * 4]); -} /* maxine_rtc_read_data */ - -void maxine_rtc_write_data(unsigned char data, unsigned long addr) -{ - char *rtc = (char *)(PMAX_RTC_BASE); - rtc[addr * 4] = data; -} /* maxine_rtc_read_data */ - diff --git a/arch/mips/dec/hw-access.c b/arch/mips/dec/hw-access.c deleted file mode 100644 index 31a8aabef..000000000 --- a/arch/mips/dec/hw-access.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * DECstation specific hardware access code. - * - * 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. - * - * Copyright (C) 1996 by Paul Antoine - */ -#include <linux/linkage.h> -#include <linux/types.h> -#include <asm/mc146818rtc.h> -#include <asm/vector.h> - -asmlinkage void decstation_handle_int(void); -extern unsigned char maxine_rtc_read_data(unsigned long); -extern void maxine_rtc_write_data(unsigned char, unsigned long); - -/* - * FIXME: Don't have any of the goo required to access fd etc. - */ -struct feature decstation_feature = { - 0,0,0,0,0,0,0,0,0,0,0,0,0, - maxine_rtc_read_data, - maxine_rtc_write_data -}; diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S deleted file mode 100644 index 87348b5b1..000000000 --- a/arch/mips/dec/int-handler.S +++ /dev/null @@ -1,246 +0,0 @@ -/* - * arch/mips/dec/int-handler.S - * - * Copyright (C) 1995, 1996 Paul M. Antoine - * - * Written by Ralf Baechle and Andreas Busse, modified for DECStation - * support by Paul Antoine. - * - * NOTE: There are references to R4X00 code in here, because there is an - * upgrade module for Personal DECStations with such a CPU! - * - * FIXME: still plenty to do in this file, as much of the code hasn't been - * modified to suit the DECStation's interrupts. - * - * $Id: int-handler.S,v 1.3 1997/09/20 19:20:07 root Exp $ - */ -#include <asm/asm.h> -#include <asm/regdef.h> -#include <asm/fpregdef.h> -#include <asm/mipsconfig.h> -#include <asm/mipsregs.h> -#include <asm/stackframe.h> -#include <asm/bootinfo.h> - - .text - .set noreorder -/* - * decstation_handle_int: Interrupt handler for Personal DECStation 5000/2x - * - * FIXME: this is *extremely* experimental, though it is probably o.k. for - * most DECStation models. - */ - NESTED(decstation_handle_int, FR_SIZE, ra) - .set noat - SAVE_ALL - CLI - .set at - - /* - * Get pending interrupts - */ - mfc0 t0,CP0_CAUSE # get pending interrupts - mfc0 t1,CP0_STATUS # get enabled interrupts - and t0,t1 # isolate allowed ones - andi t0,0xff00 # isolate pending bits -/* - * FIXME: The following branch was: - * beqz t0,spurious_interrupt - * - * ...but the wonders of ecoff cause the gas assembler (ver 2.5.1 ) - * to complain: - * - * "Can not represent relocation in this object file format"... - * - * hence this hack to branch foward a bit, and then jump <sigh> - * Perhaps a later version of gas will cope? - Paul - */ - beqz t0,3f; - sll t0,16 # delay slot - - /* - * Find irq with highest priority - * FIXME: This is slow - */ - la t1,ll_vectors -1: bltz t0,2f # found pending irq - sll t0,1 - b 1b - subu t1,PTRSIZE # delay slot - - /* - * Do the low-level stuff - */ -2: lw t0,(t1) - jr t0 - nop # delay slot - END(decstation_handle_int) - -/* - * FIXME: The hack mentioned above. - */ -3: j spurious_interrupt - nop - -/* - * FIXME: the rest of this is pretty suspect, as it's straight from - * jazz.S... and I really haven't altered it at all - Paul - */ - -/* - * Used for keyboard driver's fake_keyboard_interrupt() - * (Paul, even for i386 this is no longer being used -- Ralf) - */ -ll_sw0: li s1,~IE_SW0 - mfc0 t0,CP0_CAUSE - and t0,s1 - mtc0 t0,CP0_CAUSE - PRINT("sw0 received...\n") - li t1,1 - b call_real - nop - -ll_sw1: li s1,~IE_SW1 - PANIC("Unimplemented sw1 handler") - -loc_no_irq: PANIC("Unimplemented loc_no_irq handler") -loc_sound: PANIC("Unimplemented loc_sound handler") -loc_video: PANIC("Unimplemented loc_video handler") -loc_scsi: PANIC("Unimplemented loc_scsi handler") - -loc_ethernet: PANIC("Unimplemented loc_ethernet") - -/* - * Keyboard interrupt, remapped to level 1 - */ -loc_keyboard: PANIC("Unimplemented loc_keyboard") - -loc_mouse: PANIC("Unimplemented loc_mouse handler") - -/* - * Serial port 1 IRQ, remapped to level 3 - */ -loc_serial1: PANIC("Unimplemented loc_serial handler") - -/* - * Serial port 2 IRQ, remapped to level 4 - */ -loc_serial2: PANIC("Unimplemented loc_serial handler") - -/* - * Parallel port IRQ, remapped to level 5 - */ -loc_parallel: PANIC("Unimplemented loc_parallel handler") - -/* - * Floppy IRQ, remapped to level 6 - */ -loc_floppy: PANIC("Unimplemented loc_floppy handler") - -/* - * Now call the real handler - */ -loc_call: /* - * Temporarily disable interrupt source - */ -/* lhu t2,JAZZ_IO_IRQ_ENABLE -*/ - and t2,s1 -/* sh t2,JAZZ_IO_IRQ_ENABLE */ - jal do_IRQ # call IRQ handler - nor s1,zero,s1 - - /* - * Reenable interrupt - */ -/* lhu t2,JAZZ_IO_IRQ_ENABLE */ - or t2,s1 -/* sh t2,JAZZ_IO_IRQ_ENABLE */ - - j ret_from_irq - nop # delay slot - -ll_tc3: PANIC("Unimplemented tc3 interrupt handler") - -ll_fpu: PANIC("Unimplemented fpu interrupt handler") - -ll_io_error: PANIC("Unimplemented I/O write timeout interrupt handler") - -ll_rtc: PANIC("Unimplemented RTC interrupt handler") - -/* - * Timer IRQ - * We remap the timer irq to be more similar to a IBM compatible - */ -ll_timer: PANIC("Timer interrupt!"); -/* - * CPU count/compare IRQ (unused) - */ -ll_reset: li a0,0 - jal pmax_halt - li a1,0 # delay slot - -/* - * Now call the real handler - */ -call_real: /* - * temporarily disable interrupt - */ - mfc0 t2,CP0_STATUS - and t2,s1 - - mtc0 t2,CP0_STATUS - jal do_IRQ - nor s1,zero,s1 - - /* - * reenable interrupt - */ - mfc0 t2,CP0_STATUS - or t2,s1 - mtc0 t2,CP0_STATUS - - j ret_from_irq - nop # delay slot - -/* - * Just for debugging... load a0 with address of the point inside the - * framebuffer at which you want to draw a line of 16x32 pixels. - * Maxine's framebuffer starts at 0xaa000000. - */ - .set reorder - LEAF(drawline) - li t1,0xffffffff # set all pixels on - li t2,0x10 # we will write 16 words -1: sw t1,(a0) # write the first word - addiu a0,a0,4 # move our framebuffer pointer - addiu t2,t2,-1 # one less to do - bnez t2,1b # finished? - jr ra - END(drawline) - -/* - * FIXME: I have begun to alter this table to reflect Personal DECStation - * (i.e. Maxine) interrupts... Paul. - */ - .data - PTR ll_sw0 # SW0 - PTR ll_sw1 # SW1 - PTR ll_timer # Periodic interrupt - PTR ll_rtc # RTC periodic interrupt - PTR ll_io_error # Timeout on I/O writes - PTR ll_tc3 # TC slot 3, motherboard - PTR ll_reset # Halt keycode (CTRL+ALT+ENTER) -ll_vectors: PTR ll_fpu # FPU - -local_vector: PTR loc_no_irq - PTR loc_parallel - PTR loc_floppy - PTR loc_sound - PTR loc_video - PTR loc_ethernet - PTR loc_scsi - PTR loc_keyboard - PTR loc_mouse - PTR loc_serial1 - PTR loc_serial2 diff --git a/arch/mips/dec/ld.script b/arch/mips/dec/ld.script deleted file mode 100644 index f0cf33fc4..000000000 --- a/arch/mips/dec/ld.script +++ /dev/null @@ -1,47 +0,0 @@ -OUTPUT_FORMAT("ecoff-littlemips") -OUTPUT_ARCH(mips) -ENTRY(dec_entry) -SECTIONS -{ - /* This is probably a little simplistic, and is based on work by - * Chris Fraser of Softway Pty Ltd as used in his port of Vsta to - * the DECStation - Paul M. Antoine 21/1/96. - */ - . = 0x80030000; - .text : - { - *(.text) - . = ALIGN(0x10); - _etext = .; - __etext = .; - } - .lit8 : { - *(.lit8) - } - .lit4 : { - *(.lit4) - } - . = ALIGN(0x1000); - .data : - { - *(.data .rdata .rodata) - _edata = .; - __edata = .; - } - __bss_start = ALIGN(16) + 0x8000; - .sbss : - { - *(.sbss) - *(.scommon) - } - .bss : - { - *(.bss) - *(COMMON) - _end = ALIGN(4) ; - __end = ALIGN(4) ; - } - .reginfo : { - *(.reginfo) - } -} diff --git a/arch/mips/dec/reset.c b/arch/mips/dec/reset.c deleted file mode 100644 index 4d61d4048..000000000 --- a/arch/mips/dec/reset.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * linux/arch/mips/dec/process.c - * - * Reset a DECstation. - */ -#include <linux/kernel.h> -#include <asm/reboot.h> - -void dec_machine_restart(char *command) -{ - printk("Implement dec_machine_restart().\n"); - printk("Press reset to continue.\n"); - while(1); -} - -void dec_machine_halt(void) -{ - printk("Implement dec_machine_halt().\n"); - printk("Press reset to continue.\n"); - while(1); -} - -void dec_machine_power_off(void) -{ - printk("Implement dec_machine_power_off().\n"); - printk("Press reset to continue.\n"); - while(1); -} diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c deleted file mode 100644 index b748371dc..000000000 --- a/arch/mips/dec/setup.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Setup pointers to hardware dependand routines. - * - * 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. - * - * Copyright (C) 1996 by Ralf Baechle - */ -#include <asm/ptrace.h> -#include <linux/sched.h> -#include <linux/interrupt.h> -#include <linux/timex.h> -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/reboot.h> -#include <asm/vector.h> - -extern struct feature decstation_feature; - -static void -dec_irq_setup(void) -{ - /* FIXME: should set up the clock as per above? */ - pmax_printf("Please write the IRQ setup code for the DECStation!\n"); -} - -void (*board_time_init)(struct irqaction *irq); - -static void dec_time_init(struct irqaction *irq) -{ - pmax_printf("Please write the time init code for the DECStation!\n"); -} - -extern void dec_machine_restart(char *command); -extern void dec_machine_halt(void); -extern void dec_machine_power_off(void). - -void -decstation_setup(void) -{ - irq_setup = dec_irq_setup; - board_time_init = dec_time_init; - /* FIXME: Setup fd_cacheflush */ - feature = &decstation_feature; /* FIXME: Will go away */ - - _machine_restart = dec_machine_restart; - _machine_halt = dec_machine_halt; - _machine_power_off = dec_machine_power_off; -} |