Home | History | Annotate | Download | only in Register
      1 /** @file
      2   I/O APIC Register Definitions from 82093AA I/O Advanced Programmable Interrupt
      3   Controller (IOAPIC), 1996.
      4 
      5   Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __IO_APIC_H__
     17 #define __IO_APIC_H__
     18 
     19 ///
     20 /// I/O APIC Register Offsets
     21 ///
     22 #define IOAPIC_INDEX_OFFSET  0x00
     23 #define IOAPIC_DATA_OFFSET   0x10
     24 
     25 ///
     26 /// I/O APIC Indirect Register Indexes
     27 ///
     28 #define IO_APIC_IDENTIFICATION_REGISTER_INDEX  0x00
     29 #define IO_APIC_VERSION_REGISTER_INDEX         0x01
     30 #define IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX  0x10
     31 
     32 ///
     33 /// I/O APIC Interrupt Deliver Modes
     34 ///
     35 #define IO_APIC_DELIVERY_MODE_FIXED            0
     36 #define IO_APIC_DELIVERY_MODE_LOWEST_PRIORITY  1
     37 #define IO_APIC_DELIVERY_MODE_SMI              2
     38 #define IO_APIC_DELIVERY_MODE_NMI              4
     39 #define IO_APIC_DELIVERY_MODE_INIT             5
     40 #define IO_APIC_DELIVERY_MODE_EXTINT           7
     41 
     42 #pragma pack(1)
     43 
     44 typedef union {
     45   struct {
     46     UINT32  Reserved0:24;
     47     UINT32  Identification:4;
     48     UINT32  Reserved1:4;
     49   } Bits;
     50   UINT32  Uint32;
     51 } IO_APIC_IDENTIFICATION_REGISTER;
     52 
     53 typedef union {
     54   struct {
     55     UINT32  Version:8;
     56     UINT32  Reserved0:8;
     57     UINT32  MaximumRedirectionEntry:8;
     58     UINT32  Reserved1:8;
     59   } Bits;
     60   UINT32  Uint32;
     61 } IO_APIC_VERSION_REGISTER;
     62 
     63 typedef union {
     64   struct {
     65     UINT32  Vector:          8;
     66     UINT32  DeliveryMode:    3;
     67     UINT32  DestinationMode: 1;
     68     UINT32  DeliveryStatus:  1;
     69     UINT32  Polarity:        1;
     70     UINT32  RemoteIRR:       1;
     71     UINT32  TriggerMode:     1;
     72     UINT32  Mask:            1;
     73     UINT32  Reserved0:       15;
     74     UINT32  Reserved1:       24;
     75     UINT32  DestinationID:   8;
     76   } Bits;
     77   struct {
     78     UINT32  Low;
     79     UINT32  High;
     80   } Uint32;
     81   UINT64  Uint64;
     82 } IO_APIC_REDIRECTION_TABLE_ENTRY;
     83 
     84 #pragma pack()
     85 
     86 #endif
     87