acpi_ec.c (193530) | acpi_ec.c (199016) |
---|---|
1/*- 2 * Copyright (c) 2003-2007 Nate Lawson 3 * Copyright (c) 2000 Michael Smith 4 * Copyright (c) 2000 BSDi 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 13 unchanged lines hidden (view full) --- 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2003-2007 Nate Lawson 3 * Copyright (c) 2000 Michael Smith 4 * Copyright (c) 2000 BSDi 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 13 unchanged lines hidden (view full) --- 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_ec.c 193530 2009-06-05 18:44:36Z jkim $"); | 30__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_ec.c 199016 2009-11-07 11:46:38Z avg $"); |
31 32#include "opt_acpi.h" 33#include <sys/param.h> 34#include <sys/kernel.h> 35#include <sys/bus.h> 36#include <sys/lock.h> 37#include <sys/malloc.h> 38#include <sys/module.h> --- 85 unchanged lines hidden (view full) --- 124/* Additional params to pass from the probe routine */ 125struct acpi_ec_params { 126 int glk; 127 int gpe_bit; 128 ACPI_HANDLE gpe_handle; 129 int uid; 130}; 131 | 31 32#include "opt_acpi.h" 33#include <sys/param.h> 34#include <sys/kernel.h> 35#include <sys/bus.h> 36#include <sys/lock.h> 37#include <sys/malloc.h> 38#include <sys/module.h> --- 85 unchanged lines hidden (view full) --- 124/* Additional params to pass from the probe routine */ 125struct acpi_ec_params { 126 int glk; 127 int gpe_bit; 128 ACPI_HANDLE gpe_handle; 129 int uid; 130}; 131 |
132/* Indicate that this device has already been probed via ECDT. */ 133#define DEV_ECDT(x) (acpi_get_magic(x) == (uintptr_t)&acpi_ec_devclass) 134 | |
135/* 136 * Driver softc. 137 */ 138struct acpi_ec_softc { 139 device_t ec_dev; 140 ACPI_HANDLE ec_handle; 141 int ec_uid; 142 ACPI_HANDLE ec_gpehandle; --- 184 unchanged lines hidden (view full) --- 327 * should be safe to call at this point. 328 */ 329 params = malloc(sizeof(struct acpi_ec_params), M_TEMP, M_WAITOK | M_ZERO); 330 params->gpe_handle = NULL; 331 params->gpe_bit = ecdt->Gpe; 332 params->uid = ecdt->Uid; 333 acpi_GetInteger(h, "_GLK", ¶ms->glk); 334 acpi_set_private(child, params); | 132/* 133 * Driver softc. 134 */ 135struct acpi_ec_softc { 136 device_t ec_dev; 137 ACPI_HANDLE ec_handle; 138 int ec_uid; 139 ACPI_HANDLE ec_gpehandle; --- 184 unchanged lines hidden (view full) --- 324 * should be safe to call at this point. 325 */ 326 params = malloc(sizeof(struct acpi_ec_params), M_TEMP, M_WAITOK | M_ZERO); 327 params->gpe_handle = NULL; 328 params->gpe_bit = ecdt->Gpe; 329 params->uid = ecdt->Uid; 330 acpi_GetInteger(h, "_GLK", ¶ms->glk); 331 acpi_set_private(child, params); |
335 acpi_set_magic(child, (uintptr_t)&acpi_ec_devclass); | |
336 337 /* Finish the attach process. */ 338 if (device_probe_and_attach(child) != 0) 339 device_delete_child(parent, child); 340} 341 342static int 343acpi_ec_probe(device_t dev) 344{ 345 ACPI_BUFFER buf; 346 ACPI_HANDLE h; 347 ACPI_OBJECT *obj; 348 ACPI_STATUS status; 349 device_t peer; 350 char desc[64]; | 332 333 /* Finish the attach process. */ 334 if (device_probe_and_attach(child) != 0) 335 device_delete_child(parent, child); 336} 337 338static int 339acpi_ec_probe(device_t dev) 340{ 341 ACPI_BUFFER buf; 342 ACPI_HANDLE h; 343 ACPI_OBJECT *obj; 344 ACPI_STATUS status; 345 device_t peer; 346 char desc[64]; |
347 int ecdt; |
|
351 int ret; 352 struct acpi_ec_params *params; 353 static char *ec_ids[] = { "PNP0C09", NULL }; 354 355 /* Check that this is a device and that EC is not disabled. */ 356 if (acpi_get_type(dev) != ACPI_TYPE_DEVICE || acpi_disabled("ec")) 357 return (ENXIO); 358 359 /* 360 * If probed via ECDT, set description and continue. Otherwise, 361 * we can access the namespace and make sure this is not a 362 * duplicate probe. 363 */ 364 ret = ENXIO; | 348 int ret; 349 struct acpi_ec_params *params; 350 static char *ec_ids[] = { "PNP0C09", NULL }; 351 352 /* Check that this is a device and that EC is not disabled. */ 353 if (acpi_get_type(dev) != ACPI_TYPE_DEVICE || acpi_disabled("ec")) 354 return (ENXIO); 355 356 /* 357 * If probed via ECDT, set description and continue. Otherwise, 358 * we can access the namespace and make sure this is not a 359 * duplicate probe. 360 */ 361 ret = ENXIO; |
365 params = NULL; | 362 ecdt = 0; |
366 buf.Pointer = NULL; 367 buf.Length = ACPI_ALLOCATE_BUFFER; | 363 buf.Pointer = NULL; 364 buf.Length = ACPI_ALLOCATE_BUFFER; |
368 if (DEV_ECDT(dev)) { 369 params = acpi_get_private(dev); | 365 params = acpi_get_private(dev); 366 if (params != NULL) { 367 ecdt = 1; |
370 ret = 0; 371 } else if (!acpi_disabled("ec") && 372 ACPI_ID_PROBE(device_get_parent(dev), dev, ec_ids)) { 373 params = malloc(sizeof(struct acpi_ec_params), M_TEMP, 374 M_WAITOK | M_ZERO); 375 h = acpi_get_handle(dev); 376 377 /* --- 56 unchanged lines hidden (view full) --- 434 else 435 device_disable(dev); 436 } 437 438out: 439 if (ret == 0) { 440 snprintf(desc, sizeof(desc), "Embedded Controller: GPE %#x%s%s", 441 params->gpe_bit, (params->glk) ? ", GLK" : "", | 368 ret = 0; 369 } else if (!acpi_disabled("ec") && 370 ACPI_ID_PROBE(device_get_parent(dev), dev, ec_ids)) { 371 params = malloc(sizeof(struct acpi_ec_params), M_TEMP, 372 M_WAITOK | M_ZERO); 373 h = acpi_get_handle(dev); 374 375 /* --- 56 unchanged lines hidden (view full) --- 432 else 433 device_disable(dev); 434 } 435 436out: 437 if (ret == 0) { 438 snprintf(desc, sizeof(desc), "Embedded Controller: GPE %#x%s%s", 439 params->gpe_bit, (params->glk) ? ", GLK" : "", |
442 DEV_ECDT(dev) ? ", ECDT" : ""); | 440 ecdt ? ", ECDT" : ""); |
443 device_set_desc_copy(dev, desc); 444 } 445 446 if (ret > 0 && params) 447 free(params, M_TEMP); 448 if (buf.Pointer) 449 AcpiOsFree(buf.Pointer); 450 return (ret); --- 595 unchanged lines hidden --- | 441 device_set_desc_copy(dev, desc); 442 } 443 444 if (ret > 0 && params) 445 free(params, M_TEMP); 446 if (buf.Pointer) 447 AcpiOsFree(buf.Pointer); 448 return (ret); --- 595 unchanged lines hidden --- |