diff options
Diffstat (limited to 'drivers/acpi/acpi_memhotplug.c')
-rw-r--r-- | drivers/acpi/acpi_memhotplug.c | 176 |
1 files changed, 80 insertions, 96 deletions
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c index 77285ffe41c5..01a1bd239263 100644 --- a/drivers/acpi/acpi_memhotplug.c +++ b/drivers/acpi/acpi_memhotplug.c | |||
@@ -32,7 +32,6 @@ | |||
32 | #include <linux/memory_hotplug.h> | 32 | #include <linux/memory_hotplug.h> |
33 | #include <acpi/acpi_drivers.h> | 33 | #include <acpi/acpi_drivers.h> |
34 | 34 | ||
35 | |||
36 | #define ACPI_MEMORY_DEVICE_COMPONENT 0x08000000UL | 35 | #define ACPI_MEMORY_DEVICE_COMPONENT 0x08000000UL |
37 | #define ACPI_MEMORY_DEVICE_CLASS "memory" | 36 | #define ACPI_MEMORY_DEVICE_CLASS "memory" |
38 | #define ACPI_MEMORY_DEVICE_HID "PNP0C80" | 37 | #define ACPI_MEMORY_DEVICE_HID "PNP0C80" |
@@ -41,8 +40,8 @@ | |||
41 | 40 | ||
42 | #define _COMPONENT ACPI_MEMORY_DEVICE_COMPONENT | 41 | #define _COMPONENT ACPI_MEMORY_DEVICE_COMPONENT |
43 | 42 | ||
44 | ACPI_MODULE_NAME ("acpi_memory") | 43 | ACPI_MODULE_NAME("acpi_memory") |
45 | MODULE_AUTHOR("Naveen B S <naveen.b.s@intel.com>"); | 44 | MODULE_AUTHOR("Naveen B S <naveen.b.s@intel.com>"); |
46 | MODULE_DESCRIPTION(ACPI_MEMORY_DEVICE_DRIVER_NAME); | 45 | MODULE_DESCRIPTION(ACPI_MEMORY_DEVICE_DRIVER_NAME); |
47 | MODULE_LICENSE("GPL"); | 46 | MODULE_LICENSE("GPL"); |
48 | 47 | ||
@@ -56,34 +55,33 @@ MODULE_LICENSE("GPL"); | |||
56 | #define MEMORY_POWER_ON_STATE 1 | 55 | #define MEMORY_POWER_ON_STATE 1 |
57 | #define MEMORY_POWER_OFF_STATE 2 | 56 | #define MEMORY_POWER_OFF_STATE 2 |
58 | 57 | ||
59 | static int acpi_memory_device_add (struct acpi_device *device); | 58 | static int acpi_memory_device_add(struct acpi_device *device); |
60 | static int acpi_memory_device_remove (struct acpi_device *device, int type); | 59 | static int acpi_memory_device_remove(struct acpi_device *device, int type); |
61 | 60 | ||
62 | static struct acpi_driver acpi_memory_device_driver = { | 61 | static struct acpi_driver acpi_memory_device_driver = { |
63 | .name = ACPI_MEMORY_DEVICE_DRIVER_NAME, | 62 | .name = ACPI_MEMORY_DEVICE_DRIVER_NAME, |
64 | .class = ACPI_MEMORY_DEVICE_CLASS, | 63 | .class = ACPI_MEMORY_DEVICE_CLASS, |
65 | .ids = ACPI_MEMORY_DEVICE_HID, | 64 | .ids = ACPI_MEMORY_DEVICE_HID, |
66 | .ops = { | 65 | .ops = { |
67 | .add = acpi_memory_device_add, | 66 | .add = acpi_memory_device_add, |
68 | .remove = acpi_memory_device_remove, | 67 | .remove = acpi_memory_device_remove, |
69 | }, | 68 | }, |
70 | }; | 69 | }; |
71 | 70 | ||
72 | struct acpi_memory_device { | 71 | struct acpi_memory_device { |
73 | acpi_handle handle; | 72 | acpi_handle handle; |
74 | unsigned int state; /* State of the memory device */ | 73 | unsigned int state; /* State of the memory device */ |
75 | unsigned short cache_attribute; /* memory cache attribute */ | 74 | unsigned short cache_attribute; /* memory cache attribute */ |
76 | unsigned short read_write_attribute;/* memory read/write attribute */ | 75 | unsigned short read_write_attribute; /* memory read/write attribute */ |
77 | u64 start_addr; /* Memory Range start physical addr */ | 76 | u64 start_addr; /* Memory Range start physical addr */ |
78 | u64 end_addr; /* Memory Range end physical addr */ | 77 | u64 end_addr; /* Memory Range end physical addr */ |
79 | }; | 78 | }; |
80 | 79 | ||
81 | |||
82 | static int | 80 | static int |
83 | acpi_memory_get_device_resources(struct acpi_memory_device *mem_device) | 81 | acpi_memory_get_device_resources(struct acpi_memory_device *mem_device) |
84 | { | 82 | { |
85 | acpi_status status; | 83 | acpi_status status; |
86 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 84 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
87 | struct acpi_resource *resource = NULL; | 85 | struct acpi_resource *resource = NULL; |
88 | struct acpi_resource_address64 address64; | 86 | struct acpi_resource_address64 address64; |
89 | 87 | ||
@@ -94,15 +92,15 @@ acpi_memory_get_device_resources(struct acpi_memory_device *mem_device) | |||
94 | if (ACPI_FAILURE(status)) | 92 | if (ACPI_FAILURE(status)) |
95 | return_VALUE(-EINVAL); | 93 | return_VALUE(-EINVAL); |
96 | 94 | ||
97 | resource = (struct acpi_resource *) buffer.pointer; | 95 | resource = (struct acpi_resource *)buffer.pointer; |
98 | status = acpi_resource_to_address64(resource, &address64); | 96 | status = acpi_resource_to_address64(resource, &address64); |
99 | if (ACPI_SUCCESS(status)) { | 97 | if (ACPI_SUCCESS(status)) { |
100 | if (address64.resource_type == ACPI_MEMORY_RANGE) { | 98 | if (address64.resource_type == ACPI_MEMORY_RANGE) { |
101 | /* Populate the structure */ | 99 | /* Populate the structure */ |
102 | mem_device->cache_attribute = | 100 | mem_device->cache_attribute = |
103 | address64.attribute.memory.cache_attribute; | 101 | address64.attribute.memory.cache_attribute; |
104 | mem_device->read_write_attribute = | 102 | mem_device->read_write_attribute = |
105 | address64.attribute.memory.read_write_attribute; | 103 | address64.attribute.memory.read_write_attribute; |
106 | mem_device->start_addr = address64.min_address_range; | 104 | mem_device->start_addr = address64.min_address_range; |
107 | mem_device->end_addr = address64.max_address_range; | 105 | mem_device->end_addr = address64.max_address_range; |
108 | } | 106 | } |
@@ -114,7 +112,7 @@ acpi_memory_get_device_resources(struct acpi_memory_device *mem_device) | |||
114 | 112 | ||
115 | static int | 113 | static int |
116 | acpi_memory_get_device(acpi_handle handle, | 114 | acpi_memory_get_device(acpi_handle handle, |
117 | struct acpi_memory_device **mem_device) | 115 | struct acpi_memory_device **mem_device) |
118 | { | 116 | { |
119 | acpi_status status; | 117 | acpi_status status; |
120 | acpi_handle phandle; | 118 | acpi_handle phandle; |
@@ -128,8 +126,7 @@ acpi_memory_get_device(acpi_handle handle, | |||
128 | 126 | ||
129 | status = acpi_get_parent(handle, &phandle); | 127 | status = acpi_get_parent(handle, &phandle); |
130 | if (ACPI_FAILURE(status)) { | 128 | if (ACPI_FAILURE(status)) { |
131 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 129 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error in acpi_get_parent\n")); |
132 | "Error in acpi_get_parent\n")); | ||
133 | return_VALUE(-EINVAL); | 130 | return_VALUE(-EINVAL); |
134 | } | 131 | } |
135 | 132 | ||
@@ -137,7 +134,7 @@ acpi_memory_get_device(acpi_handle handle, | |||
137 | status = acpi_bus_get_device(phandle, &pdevice); | 134 | status = acpi_bus_get_device(phandle, &pdevice); |
138 | if (ACPI_FAILURE(status)) { | 135 | if (ACPI_FAILURE(status)) { |
139 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 136 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
140 | "Error in acpi_bus_get_device\n")); | 137 | "Error in acpi_bus_get_device\n")); |
141 | return_VALUE(-EINVAL); | 138 | return_VALUE(-EINVAL); |
142 | } | 139 | } |
143 | 140 | ||
@@ -147,23 +144,21 @@ acpi_memory_get_device(acpi_handle handle, | |||
147 | */ | 144 | */ |
148 | status = acpi_bus_add(&device, pdevice, handle, ACPI_BUS_TYPE_DEVICE); | 145 | status = acpi_bus_add(&device, pdevice, handle, ACPI_BUS_TYPE_DEVICE); |
149 | if (ACPI_FAILURE(status)) { | 146 | if (ACPI_FAILURE(status)) { |
150 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 147 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error in acpi_bus_add\n")); |
151 | "Error in acpi_bus_add\n")); | ||
152 | return_VALUE(-EINVAL); | 148 | return_VALUE(-EINVAL); |
153 | } | 149 | } |
154 | 150 | ||
155 | end: | 151 | end: |
156 | *mem_device = acpi_driver_data(device); | 152 | *mem_device = acpi_driver_data(device); |
157 | if (!(*mem_device)) { | 153 | if (!(*mem_device)) { |
158 | printk(KERN_ERR "\n driver data not found" ); | 154 | printk(KERN_ERR "\n driver data not found"); |
159 | return_VALUE(-ENODEV); | 155 | return_VALUE(-ENODEV); |
160 | } | 156 | } |
161 | 157 | ||
162 | return_VALUE(0); | 158 | return_VALUE(0); |
163 | } | 159 | } |
164 | 160 | ||
165 | static int | 161 | static int acpi_memory_check_device(struct acpi_memory_device *mem_device) |
166 | acpi_memory_check_device(struct acpi_memory_device *mem_device) | ||
167 | { | 162 | { |
168 | unsigned long current_status; | 163 | unsigned long current_status; |
169 | 164 | ||
@@ -171,22 +166,21 @@ acpi_memory_check_device(struct acpi_memory_device *mem_device) | |||
171 | 166 | ||
172 | /* Get device present/absent information from the _STA */ | 167 | /* Get device present/absent information from the _STA */ |
173 | if (ACPI_FAILURE(acpi_evaluate_integer(mem_device->handle, "_STA", | 168 | if (ACPI_FAILURE(acpi_evaluate_integer(mem_device->handle, "_STA", |
174 | NULL, ¤t_status))) | 169 | NULL, ¤t_status))) |
175 | return_VALUE(-ENODEV); | 170 | return_VALUE(-ENODEV); |
176 | /* | 171 | /* |
177 | * Check for device status. Device should be | 172 | * Check for device status. Device should be |
178 | * present/enabled/functioning. | 173 | * present/enabled/functioning. |
179 | */ | 174 | */ |
180 | if (!((current_status & ACPI_MEMORY_STA_PRESENT) | 175 | if (!((current_status & ACPI_MEMORY_STA_PRESENT) |
181 | && (current_status & ACPI_MEMORY_STA_ENABLED) | 176 | && (current_status & ACPI_MEMORY_STA_ENABLED) |
182 | && (current_status & ACPI_MEMORY_STA_FUNCTIONAL))) | 177 | && (current_status & ACPI_MEMORY_STA_FUNCTIONAL))) |
183 | return_VALUE(-ENODEV); | 178 | return_VALUE(-ENODEV); |
184 | 179 | ||
185 | return_VALUE(0); | 180 | return_VALUE(0); |
186 | } | 181 | } |
187 | 182 | ||
188 | static int | 183 | static int acpi_memory_enable_device(struct acpi_memory_device *mem_device) |
189 | acpi_memory_enable_device(struct acpi_memory_device *mem_device) | ||
190 | { | 184 | { |
191 | int result; | 185 | int result; |
192 | 186 | ||
@@ -196,7 +190,7 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device) | |||
196 | result = acpi_memory_get_device_resources(mem_device); | 190 | result = acpi_memory_get_device_resources(mem_device); |
197 | if (result) { | 191 | if (result) { |
198 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 192 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
199 | "\nget_device_resources failed\n")); | 193 | "\nget_device_resources failed\n")); |
200 | mem_device->state = MEMORY_INVALID_STATE; | 194 | mem_device->state = MEMORY_INVALID_STATE; |
201 | return result; | 195 | return result; |
202 | } | 196 | } |
@@ -206,11 +200,10 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device) | |||
206 | * Note: Assume that this function returns zero on success | 200 | * Note: Assume that this function returns zero on success |
207 | */ | 201 | */ |
208 | result = add_memory(mem_device->start_addr, | 202 | result = add_memory(mem_device->start_addr, |
209 | (mem_device->end_addr - mem_device->start_addr) + 1, | 203 | (mem_device->end_addr - mem_device->start_addr) + 1, |
210 | mem_device->read_write_attribute); | 204 | mem_device->read_write_attribute); |
211 | if (result) { | 205 | if (result) { |
212 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 206 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "\nadd_memory failed\n")); |
213 | "\nadd_memory failed\n")); | ||
214 | mem_device->state = MEMORY_INVALID_STATE; | 207 | mem_device->state = MEMORY_INVALID_STATE; |
215 | return result; | 208 | return result; |
216 | } | 209 | } |
@@ -218,11 +211,10 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device) | |||
218 | return result; | 211 | return result; |
219 | } | 212 | } |
220 | 213 | ||
221 | static int | 214 | static int acpi_memory_powerdown_device(struct acpi_memory_device *mem_device) |
222 | acpi_memory_powerdown_device(struct acpi_memory_device *mem_device) | ||
223 | { | 215 | { |
224 | acpi_status status; | 216 | acpi_status status; |
225 | struct acpi_object_list arg_list; | 217 | struct acpi_object_list arg_list; |
226 | union acpi_object arg; | 218 | union acpi_object arg; |
227 | unsigned long current_status; | 219 | unsigned long current_status; |
228 | 220 | ||
@@ -234,16 +226,16 @@ acpi_memory_powerdown_device(struct acpi_memory_device *mem_device) | |||
234 | arg.type = ACPI_TYPE_INTEGER; | 226 | arg.type = ACPI_TYPE_INTEGER; |
235 | arg.integer.value = 1; | 227 | arg.integer.value = 1; |
236 | status = acpi_evaluate_object(mem_device->handle, | 228 | status = acpi_evaluate_object(mem_device->handle, |
237 | "_EJ0", &arg_list, NULL); | 229 | "_EJ0", &arg_list, NULL); |
238 | /* Return on _EJ0 failure */ | 230 | /* Return on _EJ0 failure */ |
239 | if (ACPI_FAILURE(status)) { | 231 | if (ACPI_FAILURE(status)) { |
240 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"_EJ0 failed.\n")); | 232 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "_EJ0 failed.\n")); |
241 | return_VALUE(-ENODEV); | 233 | return_VALUE(-ENODEV); |
242 | } | 234 | } |
243 | 235 | ||
244 | /* Evalute _STA to check if the device is disabled */ | 236 | /* Evalute _STA to check if the device is disabled */ |
245 | status = acpi_evaluate_integer(mem_device->handle, "_STA", | 237 | status = acpi_evaluate_integer(mem_device->handle, "_STA", |
246 | NULL, ¤t_status); | 238 | NULL, ¤t_status); |
247 | if (ACPI_FAILURE(status)) | 239 | if (ACPI_FAILURE(status)) |
248 | return_VALUE(-ENODEV); | 240 | return_VALUE(-ENODEV); |
249 | 241 | ||
@@ -254,8 +246,7 @@ acpi_memory_powerdown_device(struct acpi_memory_device *mem_device) | |||
254 | return_VALUE(0); | 246 | return_VALUE(0); |
255 | } | 247 | } |
256 | 248 | ||
257 | static int | 249 | static int acpi_memory_disable_device(struct acpi_memory_device *mem_device) |
258 | acpi_memory_disable_device(struct acpi_memory_device *mem_device) | ||
259 | { | 250 | { |
260 | int result; | 251 | int result; |
261 | u64 start = mem_device->start_addr; | 252 | u64 start = mem_device->start_addr; |
@@ -278,7 +269,7 @@ acpi_memory_disable_device(struct acpi_memory_device *mem_device) | |||
278 | result = acpi_memory_powerdown_device(mem_device); | 269 | result = acpi_memory_powerdown_device(mem_device); |
279 | if (result) { | 270 | if (result) { |
280 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 271 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
281 | "Device Power Down failed.\n")); | 272 | "Device Power Down failed.\n")); |
282 | /* Set the status of the device to invalid */ | 273 | /* Set the status of the device to invalid */ |
283 | mem_device->state = MEMORY_INVALID_STATE; | 274 | mem_device->state = MEMORY_INVALID_STATE; |
284 | return result; | 275 | return result; |
@@ -288,8 +279,7 @@ acpi_memory_disable_device(struct acpi_memory_device *mem_device) | |||
288 | return result; | 279 | return result; |
289 | } | 280 | } |
290 | 281 | ||
291 | static void | 282 | static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data) |
292 | acpi_memory_device_notify(acpi_handle handle, u32 event, void *data) | ||
293 | { | 283 | { |
294 | struct acpi_memory_device *mem_device; | 284 | struct acpi_memory_device *mem_device; |
295 | struct acpi_device *device; | 285 | struct acpi_device *device; |
@@ -299,37 +289,37 @@ acpi_memory_device_notify(acpi_handle handle, u32 event, void *data) | |||
299 | switch (event) { | 289 | switch (event) { |
300 | case ACPI_NOTIFY_BUS_CHECK: | 290 | case ACPI_NOTIFY_BUS_CHECK: |
301 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 291 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
302 | "\nReceived BUS CHECK notification for device\n")); | 292 | "\nReceived BUS CHECK notification for device\n")); |
303 | /* Fall Through */ | 293 | /* Fall Through */ |
304 | case ACPI_NOTIFY_DEVICE_CHECK: | 294 | case ACPI_NOTIFY_DEVICE_CHECK: |
305 | if (event == ACPI_NOTIFY_DEVICE_CHECK) | 295 | if (event == ACPI_NOTIFY_DEVICE_CHECK) |
306 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 296 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
307 | "\nReceived DEVICE CHECK notification for device\n")); | 297 | "\nReceived DEVICE CHECK notification for device\n")); |
308 | if (acpi_memory_get_device(handle, &mem_device)) { | 298 | if (acpi_memory_get_device(handle, &mem_device)) { |
309 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 299 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
310 | "Error in finding driver data\n")); | 300 | "Error in finding driver data\n")); |
311 | return_VOID; | 301 | return_VOID; |
312 | } | 302 | } |
313 | 303 | ||
314 | if (!acpi_memory_check_device(mem_device)) { | 304 | if (!acpi_memory_check_device(mem_device)) { |
315 | if (acpi_memory_enable_device(mem_device)) | 305 | if (acpi_memory_enable_device(mem_device)) |
316 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 306 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
317 | "Error in acpi_memory_enable_device\n")); | 307 | "Error in acpi_memory_enable_device\n")); |
318 | } | 308 | } |
319 | break; | 309 | break; |
320 | case ACPI_NOTIFY_EJECT_REQUEST: | 310 | case ACPI_NOTIFY_EJECT_REQUEST: |
321 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 311 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
322 | "\nReceived EJECT REQUEST notification for device\n")); | 312 | "\nReceived EJECT REQUEST notification for device\n")); |
323 | 313 | ||
324 | if (acpi_bus_get_device(handle, &device)) { | 314 | if (acpi_bus_get_device(handle, &device)) { |
325 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 315 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
326 | "Device doesn't exist\n")); | 316 | "Device doesn't exist\n")); |
327 | break; | 317 | break; |
328 | } | 318 | } |
329 | mem_device = acpi_driver_data(device); | 319 | mem_device = acpi_driver_data(device); |
330 | if (!mem_device) { | 320 | if (!mem_device) { |
331 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 321 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
332 | "Driver Data is NULL\n")); | 322 | "Driver Data is NULL\n")); |
333 | break; | 323 | break; |
334 | } | 324 | } |
335 | 325 | ||
@@ -337,26 +327,25 @@ acpi_memory_device_notify(acpi_handle handle, u32 event, void *data) | |||
337 | * Currently disabling memory device from kernel mode | 327 | * Currently disabling memory device from kernel mode |
338 | * TBD: Can also be disabled from user mode scripts | 328 | * TBD: Can also be disabled from user mode scripts |
339 | * TBD: Can also be disabled by Callback registration | 329 | * TBD: Can also be disabled by Callback registration |
340 | * with generic sysfs driver | 330 | * with generic sysfs driver |
341 | */ | 331 | */ |
342 | if (acpi_memory_disable_device(mem_device)) | 332 | if (acpi_memory_disable_device(mem_device)) |
343 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 333 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
344 | "Error in acpi_memory_disable_device\n")); | 334 | "Error in acpi_memory_disable_device\n")); |
345 | /* | 335 | /* |
346 | * TBD: Invoke acpi_bus_remove to cleanup data structures | 336 | * TBD: Invoke acpi_bus_remove to cleanup data structures |
347 | */ | 337 | */ |
348 | break; | 338 | break; |
349 | default: | 339 | default: |
350 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 340 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
351 | "Unsupported event [0x%x]\n", event)); | 341 | "Unsupported event [0x%x]\n", event)); |
352 | break; | 342 | break; |
353 | } | 343 | } |
354 | 344 | ||
355 | return_VOID; | 345 | return_VOID; |
356 | } | 346 | } |
357 | 347 | ||
358 | static int | 348 | static int acpi_memory_device_add(struct acpi_device *device) |
359 | acpi_memory_device_add(struct acpi_device *device) | ||
360 | { | 349 | { |
361 | int result; | 350 | int result; |
362 | struct acpi_memory_device *mem_device = NULL; | 351 | struct acpi_memory_device *mem_device = NULL; |
@@ -391,8 +380,7 @@ acpi_memory_device_add(struct acpi_device *device) | |||
391 | return_VALUE(result); | 380 | return_VALUE(result); |
392 | } | 381 | } |
393 | 382 | ||
394 | static int | 383 | static int acpi_memory_device_remove(struct acpi_device *device, int type) |
395 | acpi_memory_device_remove (struct acpi_device *device, int type) | ||
396 | { | 384 | { |
397 | struct acpi_memory_device *mem_device = NULL; | 385 | struct acpi_memory_device *mem_device = NULL; |
398 | 386 | ||
@@ -401,7 +389,7 @@ acpi_memory_device_remove (struct acpi_device *device, int type) | |||
401 | if (!device || !acpi_driver_data(device)) | 389 | if (!device || !acpi_driver_data(device)) |
402 | return_VALUE(-EINVAL); | 390 | return_VALUE(-EINVAL); |
403 | 391 | ||
404 | mem_device = (struct acpi_memory_device *) acpi_driver_data(device); | 392 | mem_device = (struct acpi_memory_device *)acpi_driver_data(device); |
405 | kfree(mem_device); | 393 | kfree(mem_device); |
406 | 394 | ||
407 | return_VALUE(0); | 395 | return_VALUE(0); |
@@ -410,12 +398,11 @@ acpi_memory_device_remove (struct acpi_device *device, int type) | |||
410 | /* | 398 | /* |
411 | * Helper function to check for memory device | 399 | * Helper function to check for memory device |
412 | */ | 400 | */ |
413 | static acpi_status | 401 | static acpi_status is_memory_device(acpi_handle handle) |
414 | is_memory_device(acpi_handle handle) | ||
415 | { | 402 | { |
416 | char *hardware_id; | 403 | char *hardware_id; |
417 | acpi_status status; | 404 | acpi_status status; |
418 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 405 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
419 | struct acpi_device_info *info; | 406 | struct acpi_device_info *info; |
420 | 407 | ||
421 | ACPI_FUNCTION_TRACE("is_memory_device"); | 408 | ACPI_FUNCTION_TRACE("is_memory_device"); |
@@ -432,7 +419,7 @@ is_memory_device(acpi_handle handle) | |||
432 | 419 | ||
433 | hardware_id = info->hardware_id.value; | 420 | hardware_id = info->hardware_id.value; |
434 | if ((hardware_id == NULL) || | 421 | if ((hardware_id == NULL) || |
435 | (strcmp(hardware_id, ACPI_MEMORY_DEVICE_HID))) | 422 | (strcmp(hardware_id, ACPI_MEMORY_DEVICE_HID))) |
436 | status = AE_ERROR; | 423 | status = AE_ERROR; |
437 | 424 | ||
438 | acpi_os_free(buffer.pointer); | 425 | acpi_os_free(buffer.pointer); |
@@ -440,8 +427,8 @@ is_memory_device(acpi_handle handle) | |||
440 | } | 427 | } |
441 | 428 | ||
442 | static acpi_status | 429 | static acpi_status |
443 | acpi_memory_register_notify_handler (acpi_handle handle, | 430 | acpi_memory_register_notify_handler(acpi_handle handle, |
444 | u32 level, void *ctxt, void **retv) | 431 | u32 level, void *ctxt, void **retv) |
445 | { | 432 | { |
446 | acpi_status status; | 433 | acpi_status status; |
447 | 434 | ||
@@ -452,10 +439,10 @@ acpi_memory_register_notify_handler (acpi_handle handle, | |||
452 | return_ACPI_STATUS(AE_OK); /* continue */ | 439 | return_ACPI_STATUS(AE_OK); /* continue */ |
453 | 440 | ||
454 | status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, | 441 | status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, |
455 | acpi_memory_device_notify, NULL); | 442 | acpi_memory_device_notify, NULL); |
456 | if (ACPI_FAILURE(status)) { | 443 | if (ACPI_FAILURE(status)) { |
457 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 444 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
458 | "Error installing notify handler\n")); | 445 | "Error installing notify handler\n")); |
459 | return_ACPI_STATUS(AE_OK); /* continue */ | 446 | return_ACPI_STATUS(AE_OK); /* continue */ |
460 | } | 447 | } |
461 | 448 | ||
@@ -463,8 +450,8 @@ acpi_memory_register_notify_handler (acpi_handle handle, | |||
463 | } | 450 | } |
464 | 451 | ||
465 | static acpi_status | 452 | static acpi_status |
466 | acpi_memory_deregister_notify_handler (acpi_handle handle, | 453 | acpi_memory_deregister_notify_handler(acpi_handle handle, |
467 | u32 level, void *ctxt, void **retv) | 454 | u32 level, void *ctxt, void **retv) |
468 | { | 455 | { |
469 | acpi_status status; | 456 | acpi_status status; |
470 | 457 | ||
@@ -475,18 +462,18 @@ acpi_memory_deregister_notify_handler (acpi_handle handle, | |||
475 | return_ACPI_STATUS(AE_OK); /* continue */ | 462 | return_ACPI_STATUS(AE_OK); /* continue */ |
476 | 463 | ||
477 | status = acpi_remove_notify_handler(handle, | 464 | status = acpi_remove_notify_handler(handle, |
478 | ACPI_SYSTEM_NOTIFY, acpi_memory_device_notify); | 465 | ACPI_SYSTEM_NOTIFY, |
466 | acpi_memory_device_notify); | ||
479 | if (ACPI_FAILURE(status)) { | 467 | if (ACPI_FAILURE(status)) { |
480 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 468 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
481 | "Error removing notify handler\n")); | 469 | "Error removing notify handler\n")); |
482 | return_ACPI_STATUS(AE_OK); /* continue */ | 470 | return_ACPI_STATUS(AE_OK); /* continue */ |
483 | } | 471 | } |
484 | 472 | ||
485 | return_ACPI_STATUS(status); | 473 | return_ACPI_STATUS(status); |
486 | } | 474 | } |
487 | 475 | ||
488 | static int __init | 476 | static int __init acpi_memory_device_init(void) |
489 | acpi_memory_device_init (void) | ||
490 | { | 477 | { |
491 | int result; | 478 | int result; |
492 | acpi_status status; | 479 | acpi_status status; |
@@ -499,21 +486,20 @@ acpi_memory_device_init (void) | |||
499 | return_VALUE(-ENODEV); | 486 | return_VALUE(-ENODEV); |
500 | 487 | ||
501 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, | 488 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, |
502 | ACPI_UINT32_MAX, | 489 | ACPI_UINT32_MAX, |
503 | acpi_memory_register_notify_handler, | 490 | acpi_memory_register_notify_handler, |
504 | NULL, NULL); | 491 | NULL, NULL); |
505 | 492 | ||
506 | if (ACPI_FAILURE (status)) { | 493 | if (ACPI_FAILURE(status)) { |
507 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed\n")); | 494 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed\n")); |
508 | acpi_bus_unregister_driver(&acpi_memory_device_driver); | 495 | acpi_bus_unregister_driver(&acpi_memory_device_driver); |
509 | return_VALUE(-ENODEV); | 496 | return_VALUE(-ENODEV); |
510 | } | 497 | } |
511 | 498 | ||
512 | return_VALUE(0); | 499 | return_VALUE(0); |
513 | } | 500 | } |
514 | 501 | ||
515 | static void __exit | 502 | static void __exit acpi_memory_device_exit(void) |
516 | acpi_memory_device_exit (void) | ||
517 | { | 503 | { |
518 | acpi_status status; | 504 | acpi_status status; |
519 | 505 | ||
@@ -524,12 +510,12 @@ acpi_memory_device_exit (void) | |||
524 | * handles. | 510 | * handles. |
525 | */ | 511 | */ |
526 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, | 512 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, |
527 | ACPI_UINT32_MAX, | 513 | ACPI_UINT32_MAX, |
528 | acpi_memory_deregister_notify_handler, | 514 | acpi_memory_deregister_notify_handler, |
529 | NULL, NULL); | 515 | NULL, NULL); |
530 | 516 | ||
531 | if (ACPI_FAILURE (status)) | 517 | if (ACPI_FAILURE(status)) |
532 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed\n")); | 518 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed\n")); |
533 | 519 | ||
534 | acpi_bus_unregister_driver(&acpi_memory_device_driver); | 520 | acpi_bus_unregister_driver(&acpi_memory_device_driver); |
535 | 521 | ||
@@ -538,5 +524,3 @@ acpi_memory_device_exit (void) | |||
538 | 524 | ||
539 | module_init(acpi_memory_device_init); | 525 | module_init(acpi_memory_device_init); |
540 | module_exit(acpi_memory_device_exit); | 526 | module_exit(acpi_memory_device_exit); |
541 | |||
542 | |||