IoApic.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /** @file
  2. I/O APIC Register Definitions from 82093AA I/O Advanced Programmable Interrupt
  3. Controller (IOAPIC), 1996.
  4. Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #ifndef __IO_APIC_H__
  8. #define __IO_APIC_H__
  9. ///
  10. /// I/O APIC Register Offsets
  11. ///
  12. #define IOAPIC_INDEX_OFFSET 0x00
  13. #define IOAPIC_DATA_OFFSET 0x10
  14. ///
  15. /// I/O APIC Indirect Register Indexes
  16. ///
  17. #define IO_APIC_IDENTIFICATION_REGISTER_INDEX 0x00
  18. #define IO_APIC_VERSION_REGISTER_INDEX 0x01
  19. #define IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX 0x10
  20. ///
  21. /// I/O APIC Interrupt Deliver Modes
  22. ///
  23. #define IO_APIC_DELIVERY_MODE_FIXED 0
  24. #define IO_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1
  25. #define IO_APIC_DELIVERY_MODE_SMI 2
  26. #define IO_APIC_DELIVERY_MODE_NMI 4
  27. #define IO_APIC_DELIVERY_MODE_INIT 5
  28. #define IO_APIC_DELIVERY_MODE_EXTINT 7
  29. #pragma pack(1)
  30. typedef union {
  31. struct {
  32. UINT32 Reserved0:24;
  33. UINT32 Identification:4;
  34. UINT32 Reserved1:4;
  35. } Bits;
  36. UINT32 Uint32;
  37. } IO_APIC_IDENTIFICATION_REGISTER;
  38. typedef union {
  39. struct {
  40. UINT32 Version:8;
  41. UINT32 Reserved0:8;
  42. UINT32 MaximumRedirectionEntry:8;
  43. UINT32 Reserved1:8;
  44. } Bits;
  45. UINT32 Uint32;
  46. } IO_APIC_VERSION_REGISTER;
  47. typedef union {
  48. struct {
  49. UINT32 Vector: 8;
  50. UINT32 DeliveryMode: 3;
  51. UINT32 DestinationMode: 1;
  52. UINT32 DeliveryStatus: 1;
  53. UINT32 Polarity: 1;
  54. UINT32 RemoteIRR: 1;
  55. UINT32 TriggerMode: 1;
  56. UINT32 Mask: 1;
  57. UINT32 Reserved0: 15;
  58. UINT32 Reserved1: 24;
  59. UINT32 DestinationID: 8;
  60. } Bits;
  61. struct {
  62. UINT32 Low;
  63. UINT32 High;
  64. } Uint32;
  65. UINT64 Uint64;
  66. } IO_APIC_REDIRECTION_TABLE_ENTRY;
  67. #pragma pack()
  68. #endif