diff options
author | Bob Moore <robert.moore@intel.com> | 2007-02-02 11:48:18 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-02-02 21:14:21 -0500 |
commit | f3d2e7865c816258c699ff965768e46b50d536d3 (patch) | |
tree | 83d21269e506109275b77d3ed161883bba8a39cf /drivers/acpi/utilities/utinit.c | |
parent | 2e42005bcdb4f63bed1cea7f537a5534d4bd7a57 (diff) |
ACPICA: Implement simplified Table Manager
The Table Manager component has been completely
redesigned and reimplemented. The new design is much
simpler, and reduces the overall code and data size of
the kernel-resident ACPICA by approximately 5%. Also,
it is now possible to obtain the ACPI tables very early
during kernel initialization, even before dynamic memory
management is initialized.
Signed-off-by: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/utilities/utinit.c')
-rw-r--r-- | drivers/acpi/utilities/utinit.c | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/drivers/acpi/utilities/utinit.c b/drivers/acpi/utilities/utinit.c index ff76055eb7d6..2d2c4a3aeaae 100644 --- a/drivers/acpi/utilities/utinit.c +++ b/drivers/acpi/utilities/utinit.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
45 | #include <acpi/acnamesp.h> | 45 | #include <acpi/acnamesp.h> |
46 | #include <acpi/acevents.h> | 46 | #include <acpi/acevents.h> |
47 | #include <acpi/actables.h> | ||
47 | 48 | ||
48 | #define _COMPONENT ACPI_UTILITIES | 49 | #define _COMPONENT ACPI_UTILITIES |
49 | ACPI_MODULE_NAME("utinit") | 50 | ACPI_MODULE_NAME("utinit") |
@@ -73,8 +74,8 @@ acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset) | |||
73 | { | 74 | { |
74 | 75 | ||
75 | ACPI_WARNING((AE_INFO, | 76 | ACPI_WARNING((AE_INFO, |
76 | "Invalid FADT value %s=%X at offset %X FADT=%p", | 77 | "Invalid FADT value %s=%X at offset %X in FADT=%p", |
77 | register_name, value, offset, acpi_gbl_FADT)); | 78 | register_name, value, offset, &acpi_gbl_FADT)); |
78 | } | 79 | } |
79 | 80 | ||
80 | /****************************************************************************** | 81 | /****************************************************************************** |
@@ -96,62 +97,70 @@ acpi_status acpi_ut_validate_fadt(void) | |||
96 | * Verify Fixed ACPI Description Table fields, | 97 | * Verify Fixed ACPI Description Table fields, |
97 | * but don't abort on any problems, just display error | 98 | * but don't abort on any problems, just display error |
98 | */ | 99 | */ |
99 | if (acpi_gbl_FADT->pm1_evt_len < 4) { | 100 | if (acpi_gbl_FADT.pm1_event_length < 4) { |
100 | acpi_ut_fadt_register_error("PM1_EVT_LEN", | 101 | acpi_ut_fadt_register_error("PM1_EVT_LEN", |
101 | (u32) acpi_gbl_FADT->pm1_evt_len, | 102 | (u32) acpi_gbl_FADT. |
102 | ACPI_FADT_OFFSET(pm1_evt_len)); | 103 | pm1_event_length, |
104 | ACPI_FADT_OFFSET(pm1_event_length)); | ||
103 | } | 105 | } |
104 | 106 | ||
105 | if (!acpi_gbl_FADT->pm1_cnt_len) { | 107 | if (!acpi_gbl_FADT.pm1_control_length) { |
106 | acpi_ut_fadt_register_error("PM1_CNT_LEN", 0, | 108 | acpi_ut_fadt_register_error("PM1_CNT_LEN", 0, |
107 | ACPI_FADT_OFFSET(pm1_cnt_len)); | 109 | ACPI_FADT_OFFSET |
110 | (pm1_control_length)); | ||
108 | } | 111 | } |
109 | 112 | ||
110 | if (!acpi_gbl_FADT->xpm1a_evt_blk.address) { | 113 | if (!acpi_gbl_FADT.xpm1a_event_block.address) { |
111 | acpi_ut_fadt_register_error("X_PM1a_EVT_BLK", 0, | 114 | acpi_ut_fadt_register_error("X_PM1a_EVT_BLK", 0, |
112 | ACPI_FADT_OFFSET(xpm1a_evt_blk. | 115 | ACPI_FADT_OFFSET(xpm1a_event_block. |
113 | address)); | 116 | address)); |
114 | } | 117 | } |
115 | 118 | ||
116 | if (!acpi_gbl_FADT->xpm1a_cnt_blk.address) { | 119 | if (!acpi_gbl_FADT.xpm1a_control_block.address) { |
117 | acpi_ut_fadt_register_error("X_PM1a_CNT_BLK", 0, | 120 | acpi_ut_fadt_register_error("X_PM1a_CNT_BLK", 0, |
118 | ACPI_FADT_OFFSET(xpm1a_cnt_blk. | 121 | ACPI_FADT_OFFSET |
119 | address)); | 122 | (xpm1a_control_block.address)); |
120 | } | 123 | } |
121 | 124 | ||
122 | if (!acpi_gbl_FADT->xpm_tmr_blk.address) { | 125 | if (!acpi_gbl_FADT.xpm_timer_block.address) { |
123 | acpi_ut_fadt_register_error("X_PM_TMR_BLK", 0, | 126 | acpi_ut_fadt_register_error("X_PM_TMR_BLK", 0, |
124 | ACPI_FADT_OFFSET(xpm_tmr_blk. | 127 | ACPI_FADT_OFFSET(xpm_timer_block. |
125 | address)); | 128 | address)); |
126 | } | 129 | } |
127 | 130 | ||
128 | if ((acpi_gbl_FADT->xpm2_cnt_blk.address && | 131 | if ((acpi_gbl_FADT.xpm2_control_block.address && |
129 | !acpi_gbl_FADT->pm2_cnt_len)) { | 132 | !acpi_gbl_FADT.pm2_control_length)) { |
130 | acpi_ut_fadt_register_error("PM2_CNT_LEN", | 133 | acpi_ut_fadt_register_error("PM2_CNT_LEN", |
131 | (u32) acpi_gbl_FADT->pm2_cnt_len, | 134 | (u32) acpi_gbl_FADT. |
132 | ACPI_FADT_OFFSET(pm2_cnt_len)); | 135 | pm2_control_length, |
136 | ACPI_FADT_OFFSET | ||
137 | (pm2_control_length)); | ||
133 | } | 138 | } |
134 | 139 | ||
135 | if (acpi_gbl_FADT->pm_tm_len < 4) { | 140 | if (acpi_gbl_FADT.pm_timer_length < 4) { |
136 | acpi_ut_fadt_register_error("PM_TM_LEN", | 141 | acpi_ut_fadt_register_error("PM_TM_LEN", |
137 | (u32) acpi_gbl_FADT->pm_tm_len, | 142 | (u32) acpi_gbl_FADT.pm_timer_length, |
138 | ACPI_FADT_OFFSET(pm_tm_len)); | 143 | ACPI_FADT_OFFSET(pm_timer_length)); |
139 | } | 144 | } |
140 | 145 | ||
141 | /* Length of GPE blocks must be a multiple of 2 */ | 146 | /* Length of GPE blocks must be a multiple of 2 */ |
142 | 147 | ||
143 | if (acpi_gbl_FADT->xgpe0_blk.address && | 148 | if (acpi_gbl_FADT.xgpe0_block.address && |
144 | (acpi_gbl_FADT->gpe0_blk_len & 1)) { | 149 | (acpi_gbl_FADT.gpe0_block_length & 1)) { |
145 | acpi_ut_fadt_register_error("(x)GPE0_BLK_LEN", | 150 | acpi_ut_fadt_register_error("(x)GPE0_BLK_LEN", |
146 | (u32) acpi_gbl_FADT->gpe0_blk_len, | 151 | (u32) acpi_gbl_FADT. |
147 | ACPI_FADT_OFFSET(gpe0_blk_len)); | 152 | gpe0_block_length, |
153 | ACPI_FADT_OFFSET | ||
154 | (gpe0_block_length)); | ||
148 | } | 155 | } |
149 | 156 | ||
150 | if (acpi_gbl_FADT->xgpe1_blk.address && | 157 | if (acpi_gbl_FADT.xgpe1_block.address && |
151 | (acpi_gbl_FADT->gpe1_blk_len & 1)) { | 158 | (acpi_gbl_FADT.gpe1_block_length & 1)) { |
152 | acpi_ut_fadt_register_error("(x)GPE1_BLK_LEN", | 159 | acpi_ut_fadt_register_error("(x)GPE1_BLK_LEN", |
153 | (u32) acpi_gbl_FADT->gpe1_blk_len, | 160 | (u32) acpi_gbl_FADT. |
154 | ACPI_FADT_OFFSET(gpe1_blk_len)); | 161 | gpe1_block_length, |
162 | ACPI_FADT_OFFSET | ||
163 | (gpe1_block_length)); | ||
155 | } | 164 | } |
156 | 165 | ||
157 | return (AE_OK); | 166 | return (AE_OK); |
@@ -178,7 +187,6 @@ static void acpi_ut_terminate(void) | |||
178 | 187 | ||
179 | ACPI_FUNCTION_TRACE(ut_terminate); | 188 | ACPI_FUNCTION_TRACE(ut_terminate); |
180 | 189 | ||
181 | /* Free global tables, etc. */ | ||
182 | /* Free global GPE blocks and related info structures */ | 190 | /* Free global GPE blocks and related info structures */ |
183 | 191 | ||
184 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; | 192 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; |
@@ -239,6 +247,10 @@ void acpi_ut_subsystem_shutdown(void) | |||
239 | 247 | ||
240 | acpi_ns_terminate(); | 248 | acpi_ns_terminate(); |
241 | 249 | ||
250 | /* Delete the ACPI tables */ | ||
251 | |||
252 | acpi_tb_terminate(); | ||
253 | |||
242 | /* Close the globals */ | 254 | /* Close the globals */ |
243 | 255 | ||
244 | acpi_ut_terminate(); | 256 | acpi_ut_terminate(); |