Deleted Added
full compact
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", &params->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", &params->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 ---