aboutsummaryrefslogtreecommitdiff
path: root/i386/i386at/interrupt.S
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2023-01-29 23:45:38 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-01-29 23:49:04 +0100
commitfc0d49a3eda8b89497d1f2908b29b5476019a818 (patch)
tree51a607c61cbbc1d9b9c582c3a0afcf9dfdfb4e63 /i386/i386at/interrupt.S
parent6ebd651d6f6244315a84b8355d801d118869f722 (diff)
downloadgnumach-fc0d49a3eda8b89497d1f2908b29b5476019a818.tar.gz
gnumach-fc0d49a3eda8b89497d1f2908b29b5476019a818.tar.bz2
gnumach-fc0d49a3eda8b89497d1f2908b29b5476019a818.zip
i386: Add AP variants of descriptor tables
Diffstat (limited to 'i386/i386at/interrupt.S')
-rw-r--r--i386/i386at/interrupt.S9
1 files changed, 9 insertions, 0 deletions
diff --git a/i386/i386at/interrupt.S b/i386/i386at/interrupt.S
index 16e0df10..9f1883ac 100644
--- a/i386/i386at/interrupt.S
+++ b/i386/i386at/interrupt.S
@@ -58,6 +58,9 @@ ENTRY(interrupt)
movl %eax,12(%esp) /* address of interrupted registers as 4th arg */
movl S_IRQ,%eax /* copy irq number */
+ cmpl $CALL_SINGLE_FUNCTION_BASE,%eax /* was this a SMP call single function request? */
+ je _call_single
+
shll $2,%eax /* irq * 4 */
movl EXT(iunit)(%eax),%edx /* get device unit number */
movl %edx,(%esp) /* unit number as 1st arg */
@@ -117,4 +120,10 @@ _isa_eoi:
addl $24,%esp /* pop local variables */
_no_eoi:
ret
+
+_call_single:
+ call EXT(pmap_update_interrupt) /* TODO: Allow other functions */
+ call EXT(lapic_eoi) /* lapic EOI */
+ addl $24,%esp
+ ret
END(interrupt)