aboutsummaryrefslogtreecommitdiff
path: root/entry.S
diff options
context:
space:
mode:
Diffstat (limited to 'entry.S')
-rw-r--r--entry.S45
1 files changed, 45 insertions, 0 deletions
diff --git a/entry.S b/entry.S
index ecd5fae..31d840b 100644
--- a/entry.S
+++ b/entry.S
@@ -91,3 +91,48 @@ ENTRY(bios_int15)
IRET
ENTRY_END(bios_int15)
+
+ .code32
+ENTRY(pcibios_entry)
+ clc
+ pushfl
+ SAVE_BIOSREGS
+
+ movl %esp, %eax
+ call pcibios_handler
+
+ RESTORE_BIOSREGS
+ popfl
+ lretl
+ENTRY_END(pcibios_entry)
+
+ENTRY(bios32_entry)
+ pushfl
+ testl %ebx, %ebx /* BIOS32 service directory? */
+ jnz 2f
+ cmp $0x49435024, %eax /* "$PCI"? */
+ movb $0x80, %al /* service not present */
+ jne 1f
+ xorl %ebx, %ebx /* fill in base/length/entry */
+ movl $(1 << 20), %ecx
+ movl $pcibios_entry, %edx
+ movb $0x00, %al /* service present */
+1:
+ popfl
+ lretl
+2:
+ movb $0x81, %al /* unimplemented function */
+ popfl
+ lretl
+ENTRY_END(bios32_entry)
+
+ENTRY(pic_base)
+ call 1f
+2:
+ ret
+1:
+ popl %eax
+ pushl %eax
+ subl $2b, %eax
+ ret /* return to 2b */
+ENTRY_END(pic_base)