Deleted Added
full compact
acpi.c (96277) acpi.c (96926)
1/*-
2 * Copyright (c) 2000 Takanori Watanabe <takawata@jp.freebsd.org>
3 * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
4 * Copyright (c) 2000, 2001 Michael Smith
5 * Copyright (c) 2000 BSDi
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 12 unchanged lines hidden (view full) ---

21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
1/*-
2 * Copyright (c) 2000 Takanori Watanabe <takawata@jp.freebsd.org>
3 * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
4 * Copyright (c) 2000, 2001 Michael Smith
5 * Copyright (c) 2000 BSDi
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 12 unchanged lines hidden (view full) ---

21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD: head/sys/dev/acpica/acpi.c 96277 2002-05-09 21:13:37Z jhb $
29 * $FreeBSD: head/sys/dev/acpica/acpi.c 96926 2002-05-19 06:16:47Z peter $
30 */
31
32#include "opt_acpi.h"
33#include <sys/param.h>
34#include <sys/kernel.h>
35#include <sys/proc.h>
36#include <sys/lock.h>
37#include <sys/malloc.h>

--- 170 unchanged lines hidden (view full) ---

208{
209 device_t child;
210 int error;
211 caddr_t acpi_dsdt, p;
212#ifdef ENABLE_DEBUGGER
213 char *debugpoint;
214#endif
215
30 */
31
32#include "opt_acpi.h"
33#include <sys/param.h>
34#include <sys/kernel.h>
35#include <sys/proc.h>
36#include <sys/lock.h>
37#include <sys/malloc.h>

--- 170 unchanged lines hidden (view full) ---

208{
209 device_t child;
210 int error;
211 caddr_t acpi_dsdt, p;
212#ifdef ENABLE_DEBUGGER
213 char *debugpoint;
214#endif
215
216 ACPI_FUNCTION_TRACE(__func__);
216 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
217
218 if(!cold){
219 printf("Don't load this driver from userland!!\n");
220 return ;
221 }
222
223 /*
224 * Check that we haven't been disabled with a hint.

--- 66 unchanged lines hidden (view full) ---

291static int
292acpi_probe(device_t dev)
293{
294 ACPI_TABLE_HEADER th;
295 char buf[20];
296 ACPI_STATUS status;
297 int error;
298
217
218 if(!cold){
219 printf("Don't load this driver from userland!!\n");
220 return ;
221 }
222
223 /*
224 * Check that we haven't been disabled with a hint.

--- 66 unchanged lines hidden (view full) ---

291static int
292acpi_probe(device_t dev)
293{
294 ACPI_TABLE_HEADER th;
295 char buf[20];
296 ACPI_STATUS status;
297 int error;
298
299 ACPI_FUNCTION_TRACE(__func__);
299 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
300
301 if (power_pm_get_type() != POWER_PM_TYPE_NONE &&
302 power_pm_get_type() != POWER_PM_TYPE_ACPI) {
303 device_printf(dev, "Other PM system enabled.\n");
304 return_VALUE(ENXIO);
305 }
306
307 ACPI_LOCK;

--- 17 unchanged lines hidden (view full) ---

325 ACPI_STATUS status;
326 int error;
327 UINT32 flags;
328
329#ifdef ENABLE_DEBUGGER
330 char *debugpoint;
331#endif
332
300
301 if (power_pm_get_type() != POWER_PM_TYPE_NONE &&
302 power_pm_get_type() != POWER_PM_TYPE_ACPI) {
303 device_printf(dev, "Other PM system enabled.\n");
304 return_VALUE(ENXIO);
305 }
306
307 ACPI_LOCK;

--- 17 unchanged lines hidden (view full) ---

325 ACPI_STATUS status;
326 int error;
327 UINT32 flags;
328
329#ifdef ENABLE_DEBUGGER
330 char *debugpoint;
331#endif
332
333 ACPI_FUNCTION_TRACE(__func__);
333 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
334 ACPI_LOCK;
335 sc = device_get_softc(dev);
336 bzero(sc, sizeof(*sc));
337 sc->acpi_dev = dev;
338
339#ifdef ENABLE_DEBUGGER
340 debugpoint = getenv("debug.acpi.debugger");
341 if (debugpoint) {

--- 385 unchanged lines hidden (view full) ---

727static u_int32_t
728acpi_isa_get_logicalid(device_t dev)
729{
730 ACPI_HANDLE h;
731 ACPI_DEVICE_INFO devinfo;
732 ACPI_STATUS error;
733 u_int32_t pnpid;
734
334 ACPI_LOCK;
335 sc = device_get_softc(dev);
336 bzero(sc, sizeof(*sc));
337 sc->acpi_dev = dev;
338
339#ifdef ENABLE_DEBUGGER
340 debugpoint = getenv("debug.acpi.debugger");
341 if (debugpoint) {

--- 385 unchanged lines hidden (view full) ---

727static u_int32_t
728acpi_isa_get_logicalid(device_t dev)
729{
730 ACPI_HANDLE h;
731 ACPI_DEVICE_INFO devinfo;
732 ACPI_STATUS error;
733 u_int32_t pnpid;
734
735 ACPI_FUNCTION_TRACE(__func__);
735 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
736
737 pnpid = 0;
738 ACPI_LOCK;
739
740 /* fetch and validate the HID */
741 if ((h = acpi_get_handle(dev)) == NULL)
742 goto out;
743 if (ACPI_FAILURE(error = AcpiGetObjectInfo(h, &devinfo)))

--- 8 unchanged lines hidden (view full) ---

752}
753
754static int
755acpi_isa_pnp_probe(device_t bus, device_t child, struct isa_pnp_id *ids)
756{
757 int result;
758 u_int32_t pnpid;
759
736
737 pnpid = 0;
738 ACPI_LOCK;
739
740 /* fetch and validate the HID */
741 if ((h = acpi_get_handle(dev)) == NULL)
742 goto out;
743 if (ACPI_FAILURE(error = AcpiGetObjectInfo(h, &devinfo)))

--- 8 unchanged lines hidden (view full) ---

752}
753
754static int
755acpi_isa_pnp_probe(device_t bus, device_t child, struct isa_pnp_id *ids)
756{
757 int result;
758 u_int32_t pnpid;
759
760 ACPI_FUNCTION_TRACE(__func__);
760 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
761
762 /*
763 * ISA-style drivers attached to ACPI may persist and
764 * probe manually if we return ENOENT. We never want
765 * that to happen, so don't ever return it.
766 */
767 result = ENXIO;
768

--- 18 unchanged lines hidden (view full) ---

787 */
788static void
789acpi_probe_children(device_t bus)
790{
791 ACPI_HANDLE parent;
792 static char *scopes[] = {"\\_PR_", "\\_TZ_", "\\_SI", "\\_SB_", NULL};
793 int i;
794
761
762 /*
763 * ISA-style drivers attached to ACPI may persist and
764 * probe manually if we return ENOENT. We never want
765 * that to happen, so don't ever return it.
766 */
767 result = ENXIO;
768

--- 18 unchanged lines hidden (view full) ---

787 */
788static void
789acpi_probe_children(device_t bus)
790{
791 ACPI_HANDLE parent;
792 static char *scopes[] = {"\\_PR_", "\\_TZ_", "\\_SI", "\\_SB_", NULL};
793 int i;
794
795 ACPI_FUNCTION_TRACE(__func__);
795 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
796 ACPI_ASSERTLOCK;
797
798 /*
799 * Create any static children by calling device identify methods.
800 */
801 ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "device identify routines\n"));
802 bus_generic_probe(bus);
803

--- 33 unchanged lines hidden (view full) ---

837 * it.
838 */
839static ACPI_STATUS
840acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
841{
842 ACPI_OBJECT_TYPE type;
843 device_t child, bus = (device_t)context;
844
796 ACPI_ASSERTLOCK;
797
798 /*
799 * Create any static children by calling device identify methods.
800 */
801 ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "device identify routines\n"));
802 bus_generic_probe(bus);
803

--- 33 unchanged lines hidden (view full) ---

837 * it.
838 */
839static ACPI_STATUS
840acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
841{
842 ACPI_OBJECT_TYPE type;
843 device_t child, bus = (device_t)context;
844
845 ACPI_FUNCTION_TRACE(__func__);
845 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
846
847 /*
848 * Skip this device if we think we'll have trouble with it.
849 */
850 if (acpi_avoid(handle))
851 return_ACPI_STATUS(AE_OK);
852
853 if (ACPI_SUCCESS(AcpiGetType(handle, &type))) {

--- 453 unchanged lines hidden (view full) ---

1307 */
1308ACPI_STATUS
1309acpi_SetSleepState(struct acpi_softc *sc, int state)
1310{
1311 ACPI_STATUS status = AE_OK;
1312 UINT8 TypeA;
1313 UINT8 TypeB;
1314
846
847 /*
848 * Skip this device if we think we'll have trouble with it.
849 */
850 if (acpi_avoid(handle))
851 return_ACPI_STATUS(AE_OK);
852
853 if (ACPI_SUCCESS(AcpiGetType(handle, &type))) {

--- 453 unchanged lines hidden (view full) ---

1307 */
1308ACPI_STATUS
1309acpi_SetSleepState(struct acpi_softc *sc, int state)
1310{
1311 ACPI_STATUS status = AE_OK;
1312 UINT8 TypeA;
1313 UINT8 TypeB;
1314
1315 ACPI_FUNCTION_TRACE_U32(__func__, state);
1315 ACPI_FUNCTION_TRACE_U32((char *)(uintptr_t)__func__, state);
1316 ACPI_ASSERTLOCK;
1317
1318 if (sc->acpi_sstate != ACPI_STATE_S0)
1319 return_ACPI_STATUS(AE_BAD_PARAMETER); /* avoid reentry */
1320
1321 if (sc->acpi_sleep_disabled)
1322 return_ACPI_STATUS(AE_OK);
1323

--- 82 unchanged lines hidden (view full) ---

1406 * Enable/Disable ACPI
1407 */
1408ACPI_STATUS
1409acpi_Enable(struct acpi_softc *sc)
1410{
1411 ACPI_STATUS status;
1412 u_int32_t flags;
1413
1316 ACPI_ASSERTLOCK;
1317
1318 if (sc->acpi_sstate != ACPI_STATE_S0)
1319 return_ACPI_STATUS(AE_BAD_PARAMETER); /* avoid reentry */
1320
1321 if (sc->acpi_sleep_disabled)
1322 return_ACPI_STATUS(AE_OK);
1323

--- 82 unchanged lines hidden (view full) ---

1406 * Enable/Disable ACPI
1407 */
1408ACPI_STATUS
1409acpi_Enable(struct acpi_softc *sc)
1410{
1411 ACPI_STATUS status;
1412 u_int32_t flags;
1413
1414 ACPI_FUNCTION_TRACE(__func__);
1414 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1415 ACPI_ASSERTLOCK;
1416
1417 flags = ACPI_NO_ADDRESS_SPACE_INIT | ACPI_NO_HARDWARE_INIT |
1418 ACPI_NO_DEVICE_INIT | ACPI_NO_OBJECT_INIT;
1419 if (!sc->acpi_enabled) {
1420 status = AcpiEnableSubsystem(flags);
1421 } else {
1422 status = AE_OK;
1423 }
1424 if (status == AE_OK)
1425 sc->acpi_enabled = 1;
1426 return_ACPI_STATUS(status);
1427}
1428
1429ACPI_STATUS
1430acpi_Disable(struct acpi_softc *sc)
1431{
1432 ACPI_STATUS status;
1433
1415 ACPI_ASSERTLOCK;
1416
1417 flags = ACPI_NO_ADDRESS_SPACE_INIT | ACPI_NO_HARDWARE_INIT |
1418 ACPI_NO_DEVICE_INIT | ACPI_NO_OBJECT_INIT;
1419 if (!sc->acpi_enabled) {
1420 status = AcpiEnableSubsystem(flags);
1421 } else {
1422 status = AE_OK;
1423 }
1424 if (status == AE_OK)
1425 sc->acpi_enabled = 1;
1426 return_ACPI_STATUS(status);
1427}
1428
1429ACPI_STATUS
1430acpi_Disable(struct acpi_softc *sc)
1431{
1432 ACPI_STATUS status;
1433
1434 ACPI_FUNCTION_TRACE(__func__);
1434 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1435 ACPI_ASSERTLOCK;
1436
1437 if (sc->acpi_enabled) {
1438 status = AcpiDisable();
1439 } else {
1440 status = AE_OK;
1441 }
1442 if (status == AE_OK)

--- 5 unchanged lines hidden (view full) ---

1448 * ACPI Event Handlers
1449 */
1450
1451/* System Event Handlers (registered by EVENTHANDLER_REGISTER) */
1452
1453static void
1454acpi_system_eventhandler_sleep(void *arg, int state)
1455{
1435 ACPI_ASSERTLOCK;
1436
1437 if (sc->acpi_enabled) {
1438 status = AcpiDisable();
1439 } else {
1440 status = AE_OK;
1441 }
1442 if (status == AE_OK)

--- 5 unchanged lines hidden (view full) ---

1448 * ACPI Event Handlers
1449 */
1450
1451/* System Event Handlers (registered by EVENTHANDLER_REGISTER) */
1452
1453static void
1454acpi_system_eventhandler_sleep(void *arg, int state)
1455{
1456 ACPI_FUNCTION_TRACE_U32(__func__, state);
1456 ACPI_FUNCTION_TRACE_U32((char *)(uintptr_t)__func__, state);
1457
1458 ACPI_LOCK;
1459 if (state >= ACPI_STATE_S0 && state <= ACPI_S_STATES_MAX)
1460 acpi_SetSleepState((struct acpi_softc *)arg, state);
1461 ACPI_UNLOCK;
1462 return_VOID;
1463}
1464
1465static void
1466acpi_system_eventhandler_wakeup(void *arg, int state)
1467{
1457
1458 ACPI_LOCK;
1459 if (state >= ACPI_STATE_S0 && state <= ACPI_S_STATES_MAX)
1460 acpi_SetSleepState((struct acpi_softc *)arg, state);
1461 ACPI_UNLOCK;
1462 return_VOID;
1463}
1464
1465static void
1466acpi_system_eventhandler_wakeup(void *arg, int state)
1467{
1468 ACPI_FUNCTION_TRACE_U32(__func__, state);
1468 ACPI_FUNCTION_TRACE_U32((char *)(uintptr_t)__func__, state);
1469
1470 /* Well, what to do? :-) */
1471
1472 ACPI_LOCK;
1473 ACPI_UNLOCK;
1474
1475 return_VOID;
1476}
1477
1478/*
1479 * ACPICA Event Handlers (FixedEvent, also called from button notify handler)
1480 */
1481UINT32
1482acpi_eventhandler_power_button_for_sleep(void *context)
1483{
1484 struct acpi_softc *sc = (struct acpi_softc *)context;
1485
1469
1470 /* Well, what to do? :-) */
1471
1472 ACPI_LOCK;
1473 ACPI_UNLOCK;
1474
1475 return_VOID;
1476}
1477
1478/*
1479 * ACPICA Event Handlers (FixedEvent, also called from button notify handler)
1480 */
1481UINT32
1482acpi_eventhandler_power_button_for_sleep(void *context)
1483{
1484 struct acpi_softc *sc = (struct acpi_softc *)context;
1485
1486 ACPI_FUNCTION_TRACE(__func__);
1486 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1487
1488 EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_power_button_sx);
1489
1490 return_VALUE(ACPI_INTERRUPT_HANDLED);
1491}
1492
1493UINT32
1494acpi_eventhandler_power_button_for_wakeup(void *context)
1495{
1496 struct acpi_softc *sc = (struct acpi_softc *)context;
1497
1487
1488 EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_power_button_sx);
1489
1490 return_VALUE(ACPI_INTERRUPT_HANDLED);
1491}
1492
1493UINT32
1494acpi_eventhandler_power_button_for_wakeup(void *context)
1495{
1496 struct acpi_softc *sc = (struct acpi_softc *)context;
1497
1498 ACPI_FUNCTION_TRACE(__func__);
1498 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1499
1500 EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_power_button_sx);
1501
1502 return_VALUE(ACPI_INTERRUPT_HANDLED);
1503}
1504
1505UINT32
1506acpi_eventhandler_sleep_button_for_sleep(void *context)
1507{
1508 struct acpi_softc *sc = (struct acpi_softc *)context;
1509
1499
1500 EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_power_button_sx);
1501
1502 return_VALUE(ACPI_INTERRUPT_HANDLED);
1503}
1504
1505UINT32
1506acpi_eventhandler_sleep_button_for_sleep(void *context)
1507{
1508 struct acpi_softc *sc = (struct acpi_softc *)context;
1509
1510 ACPI_FUNCTION_TRACE(__func__);
1510 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1511
1512 EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_sleep_button_sx);
1513
1514 return_VALUE(ACPI_INTERRUPT_HANDLED);
1515}
1516
1517UINT32
1518acpi_eventhandler_sleep_button_for_wakeup(void *context)
1519{
1520 struct acpi_softc *sc = (struct acpi_softc *)context;
1521
1511
1512 EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_sleep_button_sx);
1513
1514 return_VALUE(ACPI_INTERRUPT_HANDLED);
1515}
1516
1517UINT32
1518acpi_eventhandler_sleep_button_for_wakeup(void *context)
1519{
1520 struct acpi_softc *sc = (struct acpi_softc *)context;
1521
1522 ACPI_FUNCTION_TRACE(__func__);
1522 ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
1523
1524 EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_sleep_button_sx);
1525
1526 return_VALUE(ACPI_INTERRUPT_HANDLED);
1527}
1528
1529/*
1530 * XXX This is kinda ugly, and should not be here.

--- 456 unchanged lines hidden ---
1523
1524 EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_sleep_button_sx);
1525
1526 return_VALUE(ACPI_INTERRUPT_HANDLED);
1527}
1528
1529/*
1530 * XXX This is kinda ugly, and should not be here.

--- 456 unchanged lines hidden ---