acpitable.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  acpitable.c - IA32-specific ACPI boot-time initialization (Revision: 1)
  3.  *
  4.  *  Copyright (C) 1999 Andrew Henroid
  5.  *  Copyright (C) 2001 Richard Schaal
  6.  *  Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
  7.  *  Copyright (C) 2001 Jun Nakajima <jun.nakajima@intel.com>
  8.  *  Copyright (C) 2001 Arjan van de Ven <arjanv@redhat.com>
  9.  *
  10.  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11.  *
  12.  *  This program is free software; you can redistribute it and/or modify
  13.  *  it under the terms of the GNU General Public License as published by
  14.  *  the Free Software Foundation; either version 2 of the License, or
  15.  *  (at your option) any later version.
  16.  *
  17.  *  This program is distributed in the hope that it will be useful,
  18.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  *  GNU General Public License for more details.
  21.  *
  22.  *  You should have received a copy of the GNU General Public License
  23.  *  along with this program; if not, write to the Free Software
  24.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  25.  *
  26.  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27.  *
  28.  * $Id: acpitable.h,v 1.3 2001/11/03 22:41:34 fenrus Exp $
  29.  */
  30. /*
  31.  * The following codes are cut&pasted from drivers/acpi. Part of the code
  32.  * there can be not updated or delivered yet.
  33.  * To avoid conflicts when CONFIG_ACPI is defined, the following codes are
  34.  * modified so that they are self-contained in this file.
  35.  * -- jun
  36.  */
  37.  
  38. #ifndef _HEADER_ACPITABLE_H_
  39. #define _HEADER_ACPITABLE_H_
  40. #define dprintk printk
  41. typedef unsigned int ACPI_TBLPTR;
  42. typedef struct { /* ACPI common table header */
  43. char signature[4]; /* identifies type of table */
  44. u32 length; /* length of table,
  45.    in bytes, * including header */
  46. u8 revision; /* specification minor version # */
  47. u8 checksum; /* to make sum of entire table == 0 */
  48. char oem_id[6]; /* OEM identification */
  49. char oem_table_id[8]; /* OEM table identification */
  50. u32 oem_revision; /* OEM revision number */
  51. char asl_compiler_id[4]; /* ASL compiler vendor ID */
  52. u32 asl_compiler_revision; /* ASL compiler revision number */
  53. } acpi_table_header __attribute__ ((packed));;
  54. enum {
  55. ACPI_APIC = 0,
  56. ACPI_BOOT,
  57. ACPI_DBGP,
  58. ACPI_DSDT,
  59. ACPI_ECDT,
  60. ACPI_ETDT,
  61. ACPI_FACP,
  62. ACPI_FACS,
  63. ACPI_OEMX,
  64. ACPI_PSDT,
  65. ACPI_SBST,
  66. ACPI_SLIT,
  67. ACPI_SPCR,
  68. ACPI_SRAT,
  69. ACPI_SSDT,
  70. ACPI_SPMI,
  71. ACPI_XSDT,
  72. ACPI_TABLE_COUNT
  73. };
  74. static char *acpi_table_signatures[ACPI_TABLE_COUNT] = {
  75. "APIC",
  76. "BOOT",
  77. "DBGP",
  78. "DSDT",
  79. "ECDT",
  80. "ETDT",
  81. "FACP",
  82. "FACS",
  83. "OEM",
  84. "PSDT",
  85. "SBST",
  86. "SLIT",
  87. "SPCR",
  88. "SRAT",
  89. "SSDT",
  90. "SPMI",
  91. "XSDT"
  92. };
  93. struct acpi_table_madt {
  94. acpi_table_header header;
  95. u32 lapic_address;
  96. struct {
  97. u32 pcat_compat:1;
  98. u32 reserved:31;
  99. } flags __attribute__ ((packed));
  100. } __attribute__ ((packed));;
  101. enum {
  102. ACPI_MADT_LAPIC = 0,
  103. ACPI_MADT_IOAPIC,
  104. ACPI_MADT_INT_SRC_OVR,
  105. ACPI_MADT_NMI_SRC,
  106. ACPI_MADT_LAPIC_NMI,
  107. ACPI_MADT_LAPIC_ADDR_OVR,
  108. ACPI_MADT_IOSAPIC,
  109. ACPI_MADT_LSAPIC,
  110. ACPI_MADT_PLAT_INT_SRC,
  111. ACPI_MADT_ENTRY_COUNT
  112. };
  113. #define RSDP_SIG "RSD PTR "
  114. #define RSDT_SIG  "RSDT"
  115. #define ACPI_DEBUG_PRINT(pl)
  116. #define ACPI_MEMORY_MODE                0x01
  117. #define ACPI_LOGICAL_ADDRESSING         0x00
  118. #define ACPI_PHYSICAL_ADDRESSING        0x01
  119. #define LO_RSDP_WINDOW_BASE          0 /* Physical Address */
  120. #define HI_RSDP_WINDOW_BASE          0xE0000 /* Physical Address */
  121. #define LO_RSDP_WINDOW_SIZE          0x400
  122. #define HI_RSDP_WINDOW_SIZE          0x20000
  123. #define RSDP_SCAN_STEP 16
  124. #define RSDP_CHECKSUM_LENGTH 20
  125. typedef int (*acpi_table_handler) (acpi_table_header * header, unsigned long);
  126. struct acpi_table_rsdp {
  127. char signature[8];
  128. u8 checksum;
  129. char oem_id[6];
  130. u8 revision;
  131. u32 rsdt_address;
  132. } __attribute__ ((packed));
  133. struct acpi_table_rsdt {
  134. acpi_table_header header;
  135. u32 entry[ACPI_TABLE_COUNT];
  136. } __attribute__ ((packed));
  137. typedef struct {
  138. u8 type;
  139. u8 length;
  140. } acpi_madt_entry_header __attribute__ ((packed));
  141. typedef struct {
  142. u16 polarity:2;
  143. u16 trigger:2;
  144. u16 reserved:12;
  145. } acpi_madt_int_flags __attribute__ ((packed));
  146. struct acpi_table_lapic {
  147. acpi_madt_entry_header header;
  148. u8 acpi_id;
  149. u8 id;
  150. struct {
  151. u32 enabled:1;
  152. u32 reserved:31;
  153. } flags __attribute__ ((packed));
  154. } __attribute__ ((packed));
  155. struct acpi_table_ioapic {
  156. acpi_madt_entry_header header;
  157. u8 id;
  158. u8 reserved;
  159. u32 address;
  160. u32 global_irq_base;
  161. } __attribute__ ((packed));
  162. struct acpi_table_int_src_ovr {
  163. acpi_madt_entry_header header;
  164. u8 bus;
  165. u8 bus_irq;
  166. u32 global_irq;
  167. acpi_madt_int_flags flags;
  168. } __attribute__ ((packed));
  169. struct acpi_table_nmi_src {
  170. acpi_madt_entry_header header;
  171. acpi_madt_int_flags flags;
  172. u32 global_irq;
  173. } __attribute__ ((packed));
  174. struct acpi_table_lapic_nmi {
  175. acpi_madt_entry_header header;
  176. u8 acpi_id;
  177. acpi_madt_int_flags flags;
  178. u8 lint;
  179. } __attribute__ ((packed));
  180. struct acpi_table_lapic_addr_ovr {
  181. acpi_madt_entry_header header;
  182. u8 reserved[2];
  183. u64 address;
  184. } __attribute__ ((packed));
  185. struct acpi_table_iosapic {
  186. acpi_madt_entry_header header;
  187. u8 id;
  188. u8 reserved;
  189. u32 global_irq_base;
  190. u64 address;
  191. } __attribute__ ((packed));
  192. struct acpi_table_lsapic {
  193. acpi_madt_entry_header header;
  194. u8 acpi_id;
  195. u8 id;
  196. u8 eid;
  197. u8 reserved[3];
  198. struct {
  199. u32 enabled:1;
  200. u32 reserved:31;
  201. } flags;
  202. } __attribute__ ((packed));
  203. struct acpi_table_plat_int_src {
  204. acpi_madt_entry_header header;
  205. acpi_madt_int_flags flags;
  206. u8 type;
  207. u8 id;
  208. u8 eid;
  209. u8 iosapic_vector;
  210. u32 global_irq;
  211. u32 reserved;
  212. } __attribute__ ((packed));
  213. /*
  214.  * ACPI Table Descriptor.  One per ACPI table
  215.  */
  216. typedef struct acpi_table_desc {
  217. struct acpi_table_desc *prev;
  218. struct acpi_table_desc *next;
  219. struct acpi_table_desc *installed_desc;
  220. acpi_table_header *pointer;
  221. void *base_pointer;
  222. u8 *aml_pointer;
  223. u64 physical_address;
  224. u32 aml_length;
  225. u32 length;
  226. u32 count;
  227. u16 table_id;
  228. u8 type;
  229. u8 allocation;
  230. u8 loaded_into_namespace;
  231. } acpi_table_desc __attribute__ ((packed));;
  232. #endif