⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int-handler.s

📁 上传linux-jx2410的源代码
💻 S
字号:
/* $Id: int-handler.S,v 1.1.1.1 2004/02/04 12:55:40 laputa Exp $ * * 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) 1995, 1996, 1997, 1998 by Ralf Baechle and Andreas Busse * * Jazz family specific interrupt stuff * * To do: On Jazz machines we remap some non-ISA interrupts to ISA *        interrupts.  These interrupts should use their own vectors. *        Squeeze the last cycles out of the handlers.  Only a dead *        cycle is a good cycle. */#include <asm/asm.h>#include <asm/mipsregs.h>#include <asm/jazz.h>#include <asm/regdef.h>#include <asm/stackframe.h>/* * jazz_handle_int: Interrupt handler for the ACER Pica-61 boards */		.set	noreorder		NESTED(jazz_handle_int, PT_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		beqz	t0,3f		sll	t0,16			# delay slot		/*		 * Find irq with highest priority		 * FIXME: This is slow - use binary search		 */		la	t1,ll_vectors1:		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(jazz_handle_int)ll_sw0:		li	s1,~IE_SW0		mfc0	t0,CP0_CAUSE		and	t0,s1		mtc0	t0,CP0_CAUSE		PANIC("Unimplemented sw0 handler")ll_sw1:		li	s1,~IE_SW1		mfc0	t0,CP0_CAUSE		and	t0,s1		mtc0	t0,CP0_CAUSE		PANIC("Unimplemented sw1 handler")ll_local_dma:	li	s1,~IE_IRQ0		PANIC("Unimplemented local_dma handler")ll_local_dev:	lbu	t0,JAZZ_IO_IRQ_SOURCE#if PTRSIZE == 8	/* True 64 bit kernel */		dsll	t0,1#endif		.set	reorder		LONG_L	t0,local_vector(t0)		jr	t0		.set	noreorder/* * The braindead PICA hardware gives us no way to distinguish if we really * received interrupt 7 from the (E)ISA bus or if we just received an * interrupt with no findable cause.  This sometimes happens with braindead * cards.  Oh well - for all the Jazz boxes slots are more or less just * whistles and bells and we're aware of the problem. */ll_isa_irq:	lw	a0,JAZZ_EISA_IRQ_ACK		jal	i8259_do_irq		 move	a1,sp		j	ret_from_irq		nop/* * Hmm...  This is not just a plain PC clone so the question is * which devices on Jazz machines can generate an (E)ISA NMI? * (Writing to nonexistent memory?) */ll_isa_nmi:	li	s1,~IE_IRQ3		PANIC("Unimplemented isa_nmi handler")/* * Timer IRQ - remapped to be more similar to an IBM compatible. * * The timer interrupt is handled specially to ensure that the jiffies * variable is updated at all times.  Specifically, the timer interrupt is * just like the complete handlers except that it is invoked with interrupts * disabled and should never re-enable them.  If other interrupts were * allowed to be processed while the timer interrupt is active, then the * other interrupts would have to avoid using the jiffies variable for delay * and interval timing operations to avoid hanging the system. */ll_timer:	lw	zero,JAZZ_TIMER_REGISTER # timer irq cleared on read		li	s1,~IE_IRQ4		li	a0, JAZZ_TIMER_IRQ		jal	do_IRQ		 move	a1,sp		mfc0	t0,CP0_STATUS		# disable interrupts again		ori	t0,1		xori	t0,1		mtc0	t0,CP0_STATUS		j	ret_from_irq		 nop/* * CPU count/compare IRQ (unused) */ll_count:	j	return		 mtc0	zero,CP0_COMPARE#if 0/* * Call the handler for the interrupt * (Currently unused) */call_real:	/*		 * temporarily disable interrupt		 */		mfc0	t2,CP0_STATUS		and	t2,s1		mtc0	t2,CP0_STATUS		nor	s1,zero,s1		jal	do_IRQ		/*		 * reenable interrupt		 */		mfc0	t2,CP0_STATUS		or	t2,s1		mtc0	t2,CP0_STATUS		j	ret_from_irq#endif		.data		PTR	ll_sw0			# SW0		PTR	ll_sw1			# SW1		PTR	ll_local_dma		# Local DMA		PTR	ll_local_dev		# Local devices		PTR	ll_isa_irq		# ISA IRQ		PTR	ll_isa_nmi		# ISA NMI		PTR	ll_timer		# Timerll_vectors:	PTR	ll_count		# Count/Compare IRQ		/*		 * Interrupt handlers for local devices.		 */		.text		.set	reorderloc_no_irq:	PANIC("Unimplemented loc_no_irq handler")/* * Parallel port IRQ */loc_parallel:	li	s1,~JAZZ_IE_PARALLEL		li	a0,JAZZ_PARALLEL_IRQ		b	loc_call/* * Floppy IRQ */loc_floppy:	li	s1,~JAZZ_IE_FLOPPY		li	a0,JAZZ_FLOPPY_IRQ		b	loc_call/* * Sound IRQ */loc_sound:	PANIC("Unimplemented loc_sound handler")loc_video:	PANIC("Unimplemented loc_video handler")/* * Ethernet interrupt handler */loc_ethernet: 	li	s1,~JAZZ_IE_ETHERNET		li	a0,JAZZ_ETHERNET_IRQ		b	loc_call/* * SCSI interrupt handler */loc_scsi:	li	s1,~JAZZ_IE_SCSI		li	a0,JAZZ_SCSI_IRQ		b	loc_call/* * Keyboard interrupt handler */loc_keyboard:	li	s1,~JAZZ_IE_KEYBOARD		li	a0,JAZZ_KEYBOARD_IRQ		b	loc_call/* * Mouse interrupt handler */loc_mouse:	li	s1,~JAZZ_IE_MOUSE		li	a0,JAZZ_MOUSE_IRQ		b	loc_call/* * Serial port 1 IRQ */loc_serial1:	li	s1,~JAZZ_IE_SERIAL1		li	a0,JAZZ_SERIAL1_IRQ		b	loc_call/* * Serial port 2 IRQ */loc_serial2:	li	s1,~JAZZ_IE_SERIAL2		li	a0,JAZZ_SERIAL2_IRQ		b	loc_call/* * Call the interrupt handler for an interrupt generated by a * local device. */loc_call:	/*		 * Temporarily disable interrupt source		 */		lhu	t2,JAZZ_IO_IRQ_ENABLE		and	t2,s1		sh	t2,JAZZ_IO_IRQ_ENABLE 		nor	s1,zero,s1		jal	do_IRQ  		/* 		 * Reenable interrupt 		 */		lhu	t2,JAZZ_IO_IRQ_ENABLE 		or	t2,s1		sh	t2,JAZZ_IO_IRQ_ENABLE  		j	ret_from_irq/* * "Jump extender" to reach spurious_interrupt */3:		j	spurious_interrupt/* * Vectors for interrupts generated by local devices */		.datalocal_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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -