summaryrefslogtreecommitdiff
path: root/sys-clipper.S
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2011-05-02 08:48:14 -0700
committerRichard Henderson <rth@twiddle.net>2011-05-02 10:16:53 -0700
commit2441ea1234e5b4399954ca64a101794cf6e813b3 (patch)
tree44132ef73b15e4929cad97bde91729fe4142f9f1 /sys-clipper.S
parent28a139998d9c6f123168c0edd5117ab00c0a6288 (diff)
downloadqemu-palcode-2441ea1234e5b4399954ca64a101794cf6e813b3.zip
qemu-palcode-2441ea1234e5b4399954ca64a101794cf6e813b3.tar.gz
qemu-palcode-2441ea1234e5b4399954ca64a101794cf6e813b3.tar.bz2
clipper: Report ISA interrupts properly.
Diffstat (limited to 'sys-clipper.S')
-rw-r--r--sys-clipper.S40
1 files changed, 38 insertions, 2 deletions
diff --git a/sys-clipper.S b/sys-clipper.S
index 5296c91..a5771fa 100644
--- a/sys-clipper.S
+++ b/sys-clipper.S
@@ -28,8 +28,8 @@
*
* INPUT PARAMETERS
*
- * r16 (a0) = whami
- * r26 (ra) = return address
+ * a0 = whami
+ * p7 = return address
*/
.globl Sys_Setup
.ent Sys_Setup
@@ -55,6 +55,42 @@ Sys_Setup:
.end Sys_Setup
/*
+ * Sys_Dev_Vector
+ *
+ * Load the SRM interrupt vector for the system.
+ *
+ * INPUT PARAMETERS
+ *
+ * p7 = return address
+ *
+ * OUTPUT PARAMETERS
+ *
+ * a1 = interrupt vector
+ */
+
+ .globl Sys_Dev_Vector
+ .ent Sys_Dev_Vector
+Sys_Dev_Vector:
+ .frame $sp, 0, p7, 0
+ mfpr a1, ptCpuDIR // Load int mask for this CPU
+ ldq_p a1, 0(a1)
+ beq a1, CallPal_Rti // No interrupts asserted?
+
+ cttz a1, a1 // Find the first asserted interrupt.
+
+ cmpeq a1, 55, a0 // Is this an ISA interrupt?
+ addq a1, 16, a1 // PCI interrupt numbers start at 16
+ beq a0, 1f
+
+ LOAD_PHYS_PCHIP0_IACK a1 // IACK results in the ISA irq
+ ldl_p a1, 0(a1)
+
+1: sll a1, 4, a1
+ lda a1, 0x800(a1)
+ ret $31, (p7), 0
+ .end Sys_Dev_Vector
+
+/*
* Cserve_Ena
*
* Unmask a PCI interrupt