Compiled as option rom now.

Signed-off-by: Gleb Natapov <[email protected]>
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.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to