CHECKPATCH: arch/x86/lib/*
This commit is contained in:
parent
58c7a6751d
commit
b843f31193
|
@ -246,11 +246,9 @@ rm_int1f:
|
||||||
rm_def_int:
|
rm_def_int:
|
||||||
iret
|
iret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All interrupt jumptable entries jump to here
|
* All interrupt jumptable entries jump to here after pushing the
|
||||||
* after pushing the interrupt vector number onto the
|
* interrupt vector number onto the stack.
|
||||||
* stack.
|
|
||||||
*/
|
*/
|
||||||
any_interrupt16:
|
any_interrupt16:
|
||||||
MAKE_BIOS_STACK
|
MAKE_BIOS_STACK
|
||||||
|
@ -272,7 +270,8 @@ gs movw OFFS_VECTOR(%bp), %ax
|
||||||
je Lint_1ah
|
je Lint_1ah
|
||||||
movw $0xffff, %ax
|
movw $0xffff, %ax
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_10h: /* VGA BIOS services */
|
Lint_10h:
|
||||||
|
/* VGA BIOS services */
|
||||||
call bios_10h
|
call bios_10h
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_11h:
|
Lint_11h:
|
||||||
|
@ -281,35 +280,42 @@ Lint_11h:
|
||||||
Lint_12h:
|
Lint_12h:
|
||||||
call bios_12h
|
call bios_12h
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_13h: /* BIOS disk services */
|
Lint_13h:
|
||||||
|
/* BIOS disk services */
|
||||||
call bios_13h
|
call bios_13h
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_15h: /* Misc. BIOS services */
|
Lint_15h:
|
||||||
|
/* Misc. BIOS services */
|
||||||
call bios_15h
|
call bios_15h
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_16h: /* keyboard services */
|
Lint_16h:
|
||||||
|
/* keyboard services */
|
||||||
call bios_16h
|
call bios_16h
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lint_1ah: /* PCI bios */
|
Lint_1ah:
|
||||||
|
/* PCI bios */
|
||||||
call bios_1ah
|
call bios_1ah
|
||||||
jmp Lout
|
jmp Lout
|
||||||
Lout:
|
Lout:
|
||||||
cmpw $0, %ax
|
cmpw $0, %ax
|
||||||
je Lhandeled
|
je Lhandeled
|
||||||
|
|
||||||
/* Insert code for unhandeled INTs here.
|
/*
|
||||||
|
* Insert code for unhandeled INTs here.
|
||||||
*
|
*
|
||||||
* ROLO prints a message to the console
|
* ROLO prints a message to the console we could do that but then
|
||||||
* (we could do that but then we're in 16bit mode
|
* we're in 16bit mode so we'll have to get back into 32bit mode
|
||||||
* so we'll have to get back into 32bit mode
|
* to use the console I/O routines (if we do this we should make
|
||||||
* to use the console I/O routines (if we do this
|
* int 0x10 and int 0x16 work as well)
|
||||||
* we shuls make int 0x10 and int 0x16 work as well))
|
|
||||||
*/
|
*/
|
||||||
Lhandeled:
|
Lhandeled:
|
||||||
RESTORE_CALLERS_STACK
|
RESTORE_CALLERS_STACK
|
||||||
addw $2,%sp /* dump vector number */
|
|
||||||
iret /* return from interrupt */
|
|
||||||
|
|
||||||
|
/* dump vector number */
|
||||||
|
addw $2,%sp
|
||||||
|
|
||||||
|
/* return from interrupt */
|
||||||
|
iret
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************************************************
|
************************************************************
|
||||||
|
@ -327,22 +333,24 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
je Lvid_cfg
|
je Lvid_cfg
|
||||||
movw $0xffff, %ax
|
movw $0xffff, %ax
|
||||||
ret
|
ret
|
||||||
Lcur_pos: /* Read Cursor Position and Size */
|
Lcur_pos:
|
||||||
|
/* Read Cursor Position and Size */
|
||||||
gs movw $0, OFFS_CX(%bp)
|
gs movw $0, OFFS_CX(%bp)
|
||||||
gs movw $0, OFFS_DX(%bp)
|
gs movw $0, OFFS_DX(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
Lvid_state: /* Get Video State */
|
Lvid_state:
|
||||||
gs movw $(80 << 8|0x03), OFFS_AX(%bp) /* 80 columns, 80x25, 16 colors */
|
/* Get Video State - 80 columns, 80x25, 16 colors */
|
||||||
|
gs movw $(80 << 8|0x03), OFFS_AX(%bp)
|
||||||
gs movw $0, OFFS_BX(%bp)
|
gs movw $0, OFFS_BX(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
Lvid_cfg: /* Video Subsystem Configuration (EGA/VGA) */
|
Lvid_cfg:
|
||||||
gs movw $0x10, OFFS_BX(%bp) /* indicate CGA/MDA/HGA */
|
/* Video Subsystem Configuration (EGA/VGA) - indicate CGA/MDA/HGA */
|
||||||
|
gs movw $0x10, OFFS_BX(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************************************************
|
************************************************************
|
||||||
* BIOS interrupt 11h -- Equipment determination
|
* BIOS interrupt 11h -- Equipment determination
|
||||||
|
@ -355,7 +363,6 @@ gs movw %ax, OFFS_AX(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************************************************
|
************************************************************
|
||||||
* BIOS interrupt 12h -- Get Memory Size
|
* BIOS interrupt 12h -- Get Memory Size
|
||||||
|
@ -370,16 +377,18 @@ cs movw ram_in_64kb_chunks, %ax
|
||||||
b12_more_than_640k:
|
b12_more_than_640k:
|
||||||
movw $0x280, %ax
|
movw $0x280, %ax
|
||||||
b12_return:
|
b12_return:
|
||||||
gs movw %ax, OFFS_AX(%bp) /* return number of kilobytes in ax */
|
/* return number of kilobytes in ax */
|
||||||
|
gs movw %ax, OFFS_AX(%bp)
|
||||||
|
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
andw $0xfffe, %ax /* clear carry -- function succeeded */
|
|
||||||
|
/* clear carry -- function succeeded */
|
||||||
|
andw $0xfffe, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
|
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************************************************
|
************************************************************
|
||||||
* BIOS interrupt 13h -- Disk services
|
* BIOS interrupt 13h -- Disk services
|
||||||
|
@ -394,12 +403,13 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
ret
|
ret
|
||||||
Lfunc_15h:
|
Lfunc_15h:
|
||||||
gs movw OFFS_AX(%bp), %ax
|
gs movw OFFS_AX(%bp), %ax
|
||||||
andw $0xff, %ax /* return AH=0->drive not present */
|
|
||||||
|
/* return AH=0->drive not present */
|
||||||
|
andw $0x00ff, %ax
|
||||||
gs movw %ax, OFFS_AX(%bp)
|
gs movw %ax, OFFS_AX(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***********************************************************
|
***********************************************************
|
||||||
* BIOS interrupt 15h -- Miscellaneous services
|
* BIOS interrupt 15h -- Miscellaneous services
|
||||||
|
@ -417,9 +427,12 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
movw $0xffff, %ax
|
movw $0xffff, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Lfunc_c0h: /* Return System Configuration Parameters (PS2 only) */
|
Lfunc_c0h:
|
||||||
|
/* Return System Configuration Parameters (PS2 only) */
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
orw $1, %ax /* return carry -- function not supported */
|
|
||||||
|
/* return carry -- function not supported */
|
||||||
|
orw $1, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
@ -430,38 +443,56 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
cmpw $1, %ax
|
cmpw $1, %ax
|
||||||
je Lfunc_e801h
|
je Lfunc_e801h
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
orw $1, %ax /* return carry -- function not supported */
|
|
||||||
|
/* return carry -- function not supported */
|
||||||
|
orw $1, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Lfunc_e801h: /* Get memory size for >64M Configurations */
|
Lfunc_e801h:
|
||||||
|
/* Get memory size for >64M Configurations */
|
||||||
cs movw ram_in_64kb_chunks, %ax
|
cs movw ram_in_64kb_chunks, %ax
|
||||||
cmpw $0x100, %ax
|
cmpw $0x100, %ax
|
||||||
ja e801_more_than_16mb
|
ja e801_more_than_16mb
|
||||||
shlw $6, %ax /* multiply by 64 */
|
|
||||||
subw $0x400, %ax /* 1st meg does not count */
|
|
||||||
|
|
||||||
gs movw %ax, OFFS_AX(%bp) /* return memory size between 1M and 16M in 1kb chunks in AX and CX */
|
/* multiply by 64 */
|
||||||
|
shlw $6, %ax
|
||||||
|
|
||||||
|
/* 1st meg does not count */
|
||||||
|
subw $0x400, %ax
|
||||||
|
|
||||||
|
/* return memory size between 1M and 16M in 1kb chunks in AX and CX */
|
||||||
|
gs movw %ax, OFFS_AX(%bp)
|
||||||
gs movw %ax, OFFS_CX(%bp)
|
gs movw %ax, OFFS_CX(%bp)
|
||||||
gs movw $0, OFFS_BX(%bp) /* set BX and DX to 0*/
|
|
||||||
|
/* set BX and DX to 0*/
|
||||||
|
gs movw $0, OFFS_BX(%bp)
|
||||||
gs movw $0, OFFS_DX(%bp)
|
gs movw $0, OFFS_DX(%bp)
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
andw $0xfffe, %ax /* clear carry -- function succeeded */
|
|
||||||
|
/* clear carry -- function succeeded */
|
||||||
|
andw $0xfffe, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
e801_more_than_16mb:
|
e801_more_than_16mb:
|
||||||
subw $0x100, %ax /* subtract 16MB */
|
/* subtract 16MB */
|
||||||
|
subw $0x100, %ax
|
||||||
|
|
||||||
gs movw $0x3c00, OFFS_AX(%bp) /* return 0x3c00 (16MB-1MB) in AX and CX */
|
/* return 0x3c00 (16MB-1MB) in AX and CX */
|
||||||
|
gs movw $0x3c00, OFFS_AX(%bp)
|
||||||
gs movw $0x3c00, OFFS_CX(%bp)
|
gs movw $0x3c00, OFFS_CX(%bp)
|
||||||
gs movw %ax, OFFS_BX(%bp) /* set BX and DX to number of 64kb chunks above 16MB */
|
|
||||||
|
/* set BX and DX to number of 64kb chunks above 16MB */
|
||||||
|
gs movw %ax, OFFS_BX(%bp)
|
||||||
gs movw %ax, OFFS_DX(%bp)
|
gs movw %ax, OFFS_DX(%bp)
|
||||||
|
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
andw $0xfffe, %ax /* clear carry -- function succeeded */
|
|
||||||
|
/* clear carry -- function succeeded */
|
||||||
|
andw $0xfffe, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
@ -473,18 +504,22 @@ cs movw ram_in_64kb_chunks, %ax
|
||||||
movw $0x100, %ax
|
movw $0x100, %ax
|
||||||
b88_not_more_than16:
|
b88_not_more_than16:
|
||||||
shlw $6, %ax
|
shlw $6, %ax
|
||||||
subw $0x400, %ax /* 1st meg does not count */
|
|
||||||
|
|
||||||
gs movw %ax, OFFS_AX(%bp) /* return number of kilobytes between 16MB and 16MB in ax */
|
/* 1st meg does not count */
|
||||||
|
subw $0x400, %ax
|
||||||
|
|
||||||
|
/* return number of kilobytes between 16MB and 16MB in ax */
|
||||||
|
gs movw %ax, OFFS_AX(%bp)
|
||||||
|
|
||||||
gs movw OFFS_FLAGS(%bp), %ax
|
gs movw OFFS_FLAGS(%bp), %ax
|
||||||
andw $0xfffe, %ax /* clear carry -- function succeeded */
|
|
||||||
|
/* clear carry -- function succeeded */
|
||||||
|
andw $0xfffe, %ax
|
||||||
gs movw %ax, OFFS_FLAGS(%bp)
|
gs movw %ax, OFFS_FLAGS(%bp)
|
||||||
|
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************************************************
|
************************************************************
|
||||||
* BIOS interrupt 16h -- keyboard services
|
* BIOS interrupt 16h -- keyboard services
|
||||||
|
@ -498,7 +533,8 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
movw $0xffff, %ax
|
movw $0xffff, %ax
|
||||||
ret
|
ret
|
||||||
Lfunc_03h:
|
Lfunc_03h:
|
||||||
xorw %ax, %ax /* do nothing -- function not supported */
|
/* do nothing -- function not supported */
|
||||||
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -514,7 +550,9 @@ gs movw OFFS_AX(%bp), %ax
|
||||||
ret
|
ret
|
||||||
Lfunc_b1h:
|
Lfunc_b1h:
|
||||||
call realmode_pci_bios
|
call realmode_pci_bios
|
||||||
xorw %ax, %ax /* do nothing -- function not supported */
|
|
||||||
|
/* do nothing -- function not supported */
|
||||||
|
xorw %ax, %ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
.section .realmode, "ax"
|
.section .realmode, "ax"
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
/* 16bit protected mode code here */
|
/* 16bit protected mode code here */
|
||||||
.globl realmode_enter
|
.globl realmode_enter
|
||||||
realmode_enter:
|
realmode_enter:
|
||||||
|
@ -69,12 +70,16 @@ o32 pushf
|
||||||
movw %ax, %gs
|
movw %ax, %gs
|
||||||
|
|
||||||
lidt realmode_idt_ptr
|
lidt realmode_idt_ptr
|
||||||
movl %cr0, %eax /* Go back into real mode by */
|
/* Go back into real mode by clearing PE to 0 */
|
||||||
andl $0x7ffffffe, %eax /* clearing PE to 0 */
|
movl %cr0, %eax
|
||||||
|
andl $0x7ffffffe, %eax
|
||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
ljmp $0x0,$do_realmode /* switch to real mode */
|
|
||||||
|
|
||||||
do_realmode: /* realmode code from here */
|
/* switch to real mode */
|
||||||
|
ljmp $0x0,$do_realmode
|
||||||
|
|
||||||
|
do_realmode:
|
||||||
|
/* realmode code from here */
|
||||||
movw %cs,%ax
|
movw %cs,%ax
|
||||||
movw %ax,%ds
|
movw %ax,%ds
|
||||||
movw %ax,%es
|
movw %ax,%es
|
||||||
|
@ -82,7 +87,6 @@ do_realmode: /* realmode code from here */
|
||||||
movw %ax,%gs
|
movw %ax,%gs
|
||||||
|
|
||||||
/* create a temporary stack */
|
/* create a temporary stack */
|
||||||
|
|
||||||
movw $0xc0, %ax
|
movw $0xc0, %ax
|
||||||
movw %ax, %ss
|
movw %ax, %ss
|
||||||
movw $0x200, %ax
|
movw $0x200, %ax
|
||||||
|
@ -114,14 +118,16 @@ o32 popf
|
||||||
popw %ss
|
popw %ss
|
||||||
movl %eax, %esp
|
movl %eax, %esp
|
||||||
cs movl temp_eax, %eax
|
cs movl temp_eax, %eax
|
||||||
wbinvd /* self-modifying code,
|
|
||||||
* better flush the cache */
|
/* self-modifying code, better flush the cache */
|
||||||
|
wbinvd
|
||||||
|
|
||||||
.byte 0x9a /* lcall */
|
.byte 0x9a /* lcall */
|
||||||
temp_ip:
|
temp_ip:
|
||||||
.word 0 /* new ip */
|
.word 0 /* new ip */
|
||||||
temp_cs:
|
temp_cs:
|
||||||
.word 0 /* new cs */
|
.word 0 /* new cs */
|
||||||
|
|
||||||
realmode_ret:
|
realmode_ret:
|
||||||
/* save eax, esp and ss */
|
/* save eax, esp and ss */
|
||||||
cs movl %eax, saved_eax
|
cs movl %eax, saved_eax
|
||||||
|
@ -130,10 +136,11 @@ cs movl %eax, saved_esp
|
||||||
movw %ss, %ax
|
movw %ss, %ax
|
||||||
cs movw %ax, saved_ss
|
cs movw %ax, saved_ss
|
||||||
|
|
||||||
/* restore the stack, note that we set sp to 0x244;
|
/*
|
||||||
|
* restore the stack, note that we set sp to 0x244;
|
||||||
* pt_regs is 0x44 bytes long and we push the structure
|
* pt_regs is 0x44 bytes long and we push the structure
|
||||||
* backwards on to the stack, bottom first */
|
* backwards on to the stack, bottom first
|
||||||
|
*/
|
||||||
movw $0xc0, %ax
|
movw $0xc0, %ax
|
||||||
movw %ax, %ss
|
movw %ax, %ss
|
||||||
movw $0x244, %ax
|
movw $0x244, %ax
|
||||||
|
@ -169,12 +176,15 @@ cs movw temp_ip, %ax
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
|
|
||||||
o32 cs lidt saved_idt
|
o32 cs lidt saved_idt
|
||||||
o32 cs lgdt saved_gdt /* Set GDTR */
|
o32 cs lgdt saved_gdt
|
||||||
|
|
||||||
movl %cr0, %eax /* Go back into protected mode */
|
/* Go back into protected mode reset PE to 1 */
|
||||||
orl $1,%eax /* reset PE to 1 */
|
movl %cr0, %eax
|
||||||
|
orl $1,%eax
|
||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
jmp next_line /* flush prefetch queue */
|
|
||||||
|
/* flush prefetch queue */
|
||||||
|
jmp next_line
|
||||||
next_line:
|
next_line:
|
||||||
movw $return_ptr, %ax
|
movw $return_ptr, %ax
|
||||||
movw %ax,%bp
|
movw %ax,%bp
|
||||||
|
@ -182,12 +192,13 @@ o32 cs ljmp *(%bp)
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
protected_mode:
|
protected_mode:
|
||||||
movl $0x18,%eax /* reload GDT[3] */
|
/* Reload segment registers */
|
||||||
movw %ax,%fs /* reset FS */
|
movl $0x18, %eax
|
||||||
movw %ax,%ds /* reset DS */
|
movw %ax, %fs
|
||||||
movw %ax,%gs /* reset GS */
|
movw %ax, %ds
|
||||||
movw %ax,%es /* reset ES */
|
movw %ax, %gs
|
||||||
movw %ax,%ss /* reset SS */
|
movw %ax, %es
|
||||||
|
movw %ax, %ss
|
||||||
movl saved_protected_mode_esp, %eax
|
movl saved_protected_mode_esp, %eax
|
||||||
movl %eax, %esp
|
movl %eax, %esp
|
||||||
popf
|
popf
|
||||||
|
|
Loading…
Reference in New Issue