EasyManua.ls Logo

Intel MultiProcessor - A-1. Programming Local APIC for Virtual Wire Mode

Intel MultiProcessor
97 pages
Print Icon
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
System BIOS Programming Guidelines
Version 1.4 A-3
;-----------------------------------------------------------------------;
; InitLocalAPIC( ) ;
;-----------------------------------------------------------------------;
; ;
; Initialize the local APIC to virtual wire mode. ;
; ;
;-----------------------------------------------------------------------;
SVR equ 0FEE000F0H
LVT1 equ 0FEE00350H
LVT2 equ 0FEE00360H
APIC_ENABLED equ 000000100H
public InitLocalAPIC
InitLocalAPIC proc near
push ds ; save regs used for APIC init
push es
push esi
mov al,080h ; ensure NMI disabled
out 070h,al
in al,021h ; read primary imr
push ax ; save settings
mov al,0ffh ; mask all off
out 021h,al
in al,0a1h ; read secondary imr
push ax ; save settings
mov al,0ffh ; mask all off
out 0a1h,al
extrn pmode_on : near
call pmode_on ; switch into real big mode
;
; The APIC spurious interrupt must point to a vector whose lower
; nibble is 0F, that is 0xF, where x is 0 - F. Here we use Int 00FH,
; which handles spurious interrupts and supplies the necessary IRET.
; This vector is assumed to have already been initialized in memory.
;
; Enable the APIC via SVR and set the spurious interrupt to use Int 00F
;
mov esi,SVR
mov eax,[esi] ; read SVR
and eax,0FFFFFF0FH ; clear spurious vector (use vector
00FH)
or eax,APIC_ENABLED ; bit 8 = 1
mov [esi],eax ; write SVR
;
; Program LVT1 as ExtInt, which delivers the signal to the INTR signal of all
; processors' cores listed in the destination as an interrupt that originated
; in an externally-connected interrupt controller.
;
Example A-1. Programming Local APIC for Virtual Wire Mode

Table of Contents

Related product manuals