diff options
Diffstat (limited to 'drivers/acpi/utilities/utinit.c')
-rw-r--r-- | drivers/acpi/utilities/utinit.c | 114 |
1 files changed, 6 insertions, 108 deletions
diff --git a/drivers/acpi/utilities/utinit.c b/drivers/acpi/utilities/utinit.c index ff76055eb7d6..ad3c0d0a5cf8 100644 --- a/drivers/acpi/utilities/utinit.c +++ b/drivers/acpi/utilities/utinit.c | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -44,119 +44,14 @@ | |||
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") |
50 | 51 | ||
51 | /* Local prototypes */ | 52 | /* Local prototypes */ |
52 | static void | ||
53 | acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset); | ||
54 | |||
55 | static void acpi_ut_terminate(void); | 53 | static void acpi_ut_terminate(void); |
56 | 54 | ||
57 | /******************************************************************************* | ||
58 | * | ||
59 | * FUNCTION: acpi_ut_fadt_register_error | ||
60 | * | ||
61 | * PARAMETERS: register_name - Pointer to string identifying register | ||
62 | * Value - Actual register contents value | ||
63 | * Offset - Byte offset in the FADT | ||
64 | * | ||
65 | * RETURN: AE_BAD_VALUE | ||
66 | * | ||
67 | * DESCRIPTION: Display failure message | ||
68 | * | ||
69 | ******************************************************************************/ | ||
70 | |||
71 | static void | ||
72 | acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset) | ||
73 | { | ||
74 | |||
75 | ACPI_WARNING((AE_INFO, | ||
76 | "Invalid FADT value %s=%X at offset %X FADT=%p", | ||
77 | register_name, value, offset, acpi_gbl_FADT)); | ||
78 | } | ||
79 | |||
80 | /****************************************************************************** | ||
81 | * | ||
82 | * FUNCTION: acpi_ut_validate_fadt | ||
83 | * | ||
84 | * PARAMETERS: None | ||
85 | * | ||
86 | * RETURN: Status | ||
87 | * | ||
88 | * DESCRIPTION: Validate various ACPI registers in the FADT | ||
89 | * | ||
90 | ******************************************************************************/ | ||
91 | |||
92 | acpi_status acpi_ut_validate_fadt(void) | ||
93 | { | ||
94 | |||
95 | /* | ||
96 | * Verify Fixed ACPI Description Table fields, | ||
97 | * but don't abort on any problems, just display error | ||
98 | */ | ||
99 | if (acpi_gbl_FADT->pm1_evt_len < 4) { | ||
100 | acpi_ut_fadt_register_error("PM1_EVT_LEN", | ||
101 | (u32) acpi_gbl_FADT->pm1_evt_len, | ||
102 | ACPI_FADT_OFFSET(pm1_evt_len)); | ||
103 | } | ||
104 | |||
105 | if (!acpi_gbl_FADT->pm1_cnt_len) { | ||
106 | acpi_ut_fadt_register_error("PM1_CNT_LEN", 0, | ||
107 | ACPI_FADT_OFFSET(pm1_cnt_len)); | ||
108 | } | ||
109 | |||
110 | if (!acpi_gbl_FADT->xpm1a_evt_blk.address) { | ||
111 | acpi_ut_fadt_register_error("X_PM1a_EVT_BLK", 0, | ||
112 | ACPI_FADT_OFFSET(xpm1a_evt_blk. | ||
113 | address)); | ||
114 | } | ||
115 | |||
116 | if (!acpi_gbl_FADT->xpm1a_cnt_blk.address) { | ||
117 | acpi_ut_fadt_register_error("X_PM1a_CNT_BLK", 0, | ||
118 | ACPI_FADT_OFFSET(xpm1a_cnt_blk. | ||
119 | address)); | ||
120 | } | ||
121 | |||
122 | if (!acpi_gbl_FADT->xpm_tmr_blk.address) { | ||
123 | acpi_ut_fadt_register_error("X_PM_TMR_BLK", 0, | ||
124 | ACPI_FADT_OFFSET(xpm_tmr_blk. | ||
125 | address)); | ||
126 | } | ||
127 | |||
128 | if ((acpi_gbl_FADT->xpm2_cnt_blk.address && | ||
129 | !acpi_gbl_FADT->pm2_cnt_len)) { | ||
130 | acpi_ut_fadt_register_error("PM2_CNT_LEN", | ||
131 | (u32) acpi_gbl_FADT->pm2_cnt_len, | ||
132 | ACPI_FADT_OFFSET(pm2_cnt_len)); | ||
133 | } | ||
134 | |||
135 | if (acpi_gbl_FADT->pm_tm_len < 4) { | ||
136 | acpi_ut_fadt_register_error("PM_TM_LEN", | ||
137 | (u32) acpi_gbl_FADT->pm_tm_len, | ||
138 | ACPI_FADT_OFFSET(pm_tm_len)); | ||
139 | } | ||
140 | |||
141 | /* Length of GPE blocks must be a multiple of 2 */ | ||
142 | |||
143 | if (acpi_gbl_FADT->xgpe0_blk.address && | ||
144 | (acpi_gbl_FADT->gpe0_blk_len & 1)) { | ||
145 | acpi_ut_fadt_register_error("(x)GPE0_BLK_LEN", | ||
146 | (u32) acpi_gbl_FADT->gpe0_blk_len, | ||
147 | ACPI_FADT_OFFSET(gpe0_blk_len)); | ||
148 | } | ||
149 | |||
150 | if (acpi_gbl_FADT->xgpe1_blk.address && | ||
151 | (acpi_gbl_FADT->gpe1_blk_len & 1)) { | ||
152 | acpi_ut_fadt_register_error("(x)GPE1_BLK_LEN", | ||
153 | (u32) acpi_gbl_FADT->gpe1_blk_len, | ||
154 | ACPI_FADT_OFFSET(gpe1_blk_len)); | ||
155 | } | ||
156 | |||
157 | return (AE_OK); | ||
158 | } | ||
159 | |||
160 | /****************************************************************************** | 55 | /****************************************************************************** |
161 | * | 56 | * |
162 | * FUNCTION: acpi_ut_terminate | 57 | * FUNCTION: acpi_ut_terminate |
@@ -178,7 +73,6 @@ static void acpi_ut_terminate(void) | |||
178 | 73 | ||
179 | ACPI_FUNCTION_TRACE(ut_terminate); | 74 | ACPI_FUNCTION_TRACE(ut_terminate); |
180 | 75 | ||
181 | /* Free global tables, etc. */ | ||
182 | /* Free global GPE blocks and related info structures */ | 76 | /* Free global GPE blocks and related info structures */ |
183 | 77 | ||
184 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; | 78 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; |
@@ -239,6 +133,10 @@ void acpi_ut_subsystem_shutdown(void) | |||
239 | 133 | ||
240 | acpi_ns_terminate(); | 134 | acpi_ns_terminate(); |
241 | 135 | ||
136 | /* Delete the ACPI tables */ | ||
137 | |||
138 | acpi_tb_terminate(); | ||
139 | |||
242 | /* Close the globals */ | 140 | /* Close the globals */ |
243 | 141 | ||
244 | acpi_ut_terminate(); | 142 | acpi_ut_terminate(); |