* [PATCH] remove vapic.S from pcbios
@ 2009-10-26 12:48 Gleb Natapov
0 siblings, 0 replies; only message in thread
From: Gleb Natapov @ 2009-10-26 12:48 UTC (permalink / raw)
To: avi; +Cc: kvm
Compiled as option rom now.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
diff --git a/Makefile b/Makefile
index 434d64e..bcd3ee2 100644
--- a/Makefile
+++ b/Makefile
@@ -105,8 +105,8 @@ rombios32.bin: rombios32.out rombios.h
objcopy -O binary $< $@
./biossums -pad $@
-rombios32.out: rombios32start.o rombios32.o vapic.o rombios32.ld
- ld -o $@ -T rombios32.ld rombios32start.o vapic.o rombios32.o
+rombios32.out: rombios32start.o rombios32.o rombios32.ld
+ ld -o $@ -T rombios32.ld rombios32start.o rombios32.o
rombios32.o: rombios32.c acpi-dsdt.hex acpi-ssdt.hex
$(GCC) -m32 -O2 -Wall -c -o $@ $<
@@ -126,9 +126,6 @@ acpi-ssdt.hex: acpi-ssdt.dsl
rombios32start.o: rombios32start.S
$(GCC) -m32 -c -o $@ $<
-vapic.o: vapic.S
- $(GCC) -m32 -c -o $@ $<
-
BIOS-bochs-latest: rombios16.bin rombios32.bin
cat rombios32.bin rombios16.bin > $@
diff --git a/rombios32.ld b/rombios32.ld
index 1fc99c3..ca31f54 100644
--- a/rombios32.ld
+++ b/rombios32.ld
@@ -6,10 +6,6 @@ SECTIONS
. = 0x000e0000;
.text : { *(.text) }
.rodata : { *(.rodata*) }
- . = ALIGN(64);
- fixup_start = .;
- .fixup : { *(.fixup) }
- fixup_end = .;
. = ALIGN(4096);
_end = . ;
.data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;}
diff --git a/vapic.S b/vapic.S
deleted file mode 100644
index cf2a474..0000000
--- a/vapic.S
+++ /dev/null
@@ -1,294 +0,0 @@
- .text
- .code32
- .align 4096
-
-vapic_size = 2*4096
-
-.macro fixup delta=-4
-777:
- .pushsection .fixup, "a"
- .long 777b + \delta - vapic_base
- .popsection
-.endm
-
-.macro reenable_vtpr
- out %al, $0x7e
-.endm
-
-vapic_base:
- .ascii "kvm aPiC"
-
- /* relocation data */
- .long vapic_base ; fixup
- .long fixup_start ; fixup
- .long fixup_end ; fixup
-
- .long vapic ; fixup
- .long vapic_size
-vcpu_shift:
- .long 0
-real_tpr:
- .long 0
- .long up_set_tpr ; fixup
- .long up_set_tpr_eax ; fixup
- .long up_get_tpr_eax ; fixup
- .long up_get_tpr_ecx ; fixup
- .long up_get_tpr_edx ; fixup
- .long up_get_tpr_ebx ; fixup
- .long 0 /* esp. won't work. */
- .long up_get_tpr_ebp ; fixup
- .long up_get_tpr_esi ; fixup
- .long up_get_tpr_edi ; fixup
- .long up_get_tpr_stack ; fixup
- .long mp_set_tpr ; fixup
- .long mp_set_tpr_eax ; fixup
- .long mp_get_tpr_eax ; fixup
- .long mp_get_tpr_ecx ; fixup
- .long mp_get_tpr_edx ; fixup
- .long mp_get_tpr_ebx ; fixup
- .long 0 /* esp. won't work. */
- .long mp_get_tpr_ebp ; fixup
- .long mp_get_tpr_esi ; fixup
- .long mp_get_tpr_edi ; fixup
- .long mp_get_tpr_stack ; fixup
-
-.macro kvm_hypercall
- .byte 0x0f, 0x01, 0xc1
-.endm
-
-kvm_hypercall_vapic_poll_irq = 1
-
-pcr_cpu = 0x51
-
-.align 64
-
-mp_get_tpr_eax:
- pushf
- cli
- reenable_vtpr
- push %ecx
-
- fs/movzbl pcr_cpu, %eax
-
- mov vcpu_shift, %ecx ; fixup
- shl %cl, %eax
- testb $1, vapic+4(%eax) ; fixup delta=-5
- jz mp_get_tpr_bad
- movzbl vapic(%eax), %eax ; fixup
-
-mp_get_tpr_out:
- pop %ecx
- popf
- ret
-
-mp_get_tpr_bad:
- mov real_tpr, %eax ; fixup
- mov (%eax), %eax
- jmp mp_get_tpr_out
-
-mp_get_tpr_ebx:
- mov %eax, %ebx
- call mp_get_tpr_eax
- xchg %eax, %ebx
- ret
-
-mp_get_tpr_ecx:
- mov %eax, %ecx
- call mp_get_tpr_eax
- xchg %eax, %ecx
- ret
-
-mp_get_tpr_edx:
- mov %eax, %edx
- call mp_get_tpr_eax
- xchg %eax, %edx
- ret
-
-mp_get_tpr_esi:
- mov %eax, %esi
- call mp_get_tpr_eax
- xchg %eax, %esi
- ret
-
-mp_get_tpr_edi:
- mov %eax, %edi
- call mp_get_tpr_edi
- xchg %eax, %edi
- ret
-
-mp_get_tpr_ebp:
- mov %eax, %ebp
- call mp_get_tpr_eax
- xchg %eax, %ebp
- ret
-
-mp_get_tpr_stack:
- call mp_get_tpr_eax
- xchg %eax, 4(%esp)
- ret
-
-mp_set_tpr_eax:
- push %eax
- call mp_set_tpr
- ret
-
-mp_set_tpr:
- pushf
- push %eax
- push %ecx
- push %edx
- push %ebx
- cli
- reenable_vtpr
-
-mp_set_tpr_failed:
- fs/movzbl pcr_cpu, %edx
-
- mov vcpu_shift, %ecx ; fixup
- shl %cl, %edx
-
- testb $1, vapic+4(%edx) ; fixup delta=-5
- jz mp_set_tpr_bad
-
- mov vapic(%edx), %eax ; fixup
-
- mov %eax, %ebx
- mov 24(%esp), %bl
-
- /* %ebx = new vapic (%bl = tpr, %bh = isr, %b3 = irr) */
-
- lock cmpxchg %ebx, vapic(%edx) ; fixup
- jnz mp_set_tpr_failed
-
- /* compute ppr */
- cmp %bh, %bl
- jae mp_tpr_is_bigger
-mp_isr_is_bigger:
- mov %bh, %bl
-mp_tpr_is_bigger:
- /* %bl = ppr */
- mov %bl, %ch /* ch = ppr */
- rol $8, %ebx
- /* now: %bl = irr, %bh = ppr */
- cmp %bh, %bl
- ja mp_set_tpr_poll_irq
-
-mp_set_tpr_out:
- pop %ebx
- pop %edx
- pop %ecx
- pop %eax
- popf
- ret $4
-
-mp_set_tpr_poll_irq:
- mov $kvm_hypercall_vapic_poll_irq, %eax
- kvm_hypercall
- jmp mp_set_tpr_out
-
-mp_set_tpr_bad:
- mov 24(%esp), %ecx
- mov real_tpr, %eax ; fixup
- mov %ecx, (%eax)
- jmp mp_set_tpr_out
-
-up_get_tpr_eax:
- reenable_vtpr
- movzbl vapic, %eax ; fixup
- ret
-
-up_get_tpr_ebx:
- reenable_vtpr
- movzbl vapic, %ebx ; fixup
- ret
-
-up_get_tpr_ecx:
- reenable_vtpr
- movzbl vapic, %ecx ; fixup
- ret
-
-up_get_tpr_edx:
- reenable_vtpr
- movzbl vapic, %edx ; fixup
- ret
-
-up_get_tpr_esi:
- reenable_vtpr
- movzbl vapic, %esi ; fixup
- ret
-
-up_get_tpr_edi:
- reenable_vtpr
- movzbl vapic, %edi ; fixup
- ret
-
-up_get_tpr_ebp:
- reenable_vtpr
- movzbl vapic, %ebp ; fixup
- ret
-
-up_get_tpr_stack:
- reenable_vtpr
- movzbl vapic, %eax ; fixup
- xchg %eax, 4(%esp)
- ret
-
-up_set_tpr_eax:
- push %eax
- call up_set_tpr
- ret
-
-up_set_tpr:
- pushf
- push %eax
- push %ecx
- push %ebx
- reenable_vtpr
-
-up_set_tpr_failed:
- mov vapic, %eax ; fixup
-
- mov %eax, %ebx
- mov 20(%esp), %bl
-
- /* %ebx = new vapic (%bl = tpr, %bh = isr, %b3 = irr) */
-
- lock cmpxchg %ebx, vapic ; fixup
- jnz up_set_tpr_failed
-
- /* compute ppr */
- cmp %bh, %bl
- jae up_tpr_is_bigger
-up_isr_is_bigger:
- mov %bh, %bl
-up_tpr_is_bigger:
- /* %bl = ppr */
- mov %bl, %ch /* ch = ppr */
- rol $8, %ebx
- /* now: %bl = irr, %bh = ppr */
- cmp %bh, %bl
- ja up_set_tpr_poll_irq
-
-up_set_tpr_out:
- pop %ebx
- pop %ecx
- pop %eax
- popf
- ret $4
-
-up_set_tpr_poll_irq:
- mov $kvm_hypercall_vapic_poll_irq, %eax
- kvm_hypercall
- jmp up_set_tpr_out
-
-.align 4096
-/*
- * vapic format:
- * per-vcpu records of size 2^vcpu shift.
- * byte 0: tpr (r/w)
- * byte 1: highest in-service interrupt (isr) (r/o); bits 3:0 are zero
- * byte 2: zero (r/o)
- * byte 3: highest pending interrupt (irr) (r/o)
- */
-vapic:
-. = . + vapic_size
--
Gleb.
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-10-26 12:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-26 12:48 [PATCH] remove vapic.S from pcbios Gleb Natapov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.