summaryrefslogtreecommitdiff
path: root/sys/dev/acpi/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/acpi/acpi.c')
-rw-r--r--sys/dev/acpi/acpi.c134
1 files changed, 53 insertions, 81 deletions
diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c
index 584cdd14b4e..78f5876a556 100644
--- a/sys/dev/acpi/acpi.c
+++ b/sys/dev/acpi/acpi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpi.c,v 1.67 2006/12/06 17:45:57 mk Exp $ */
+/* $OpenBSD: acpi.c,v 1.68 2006/12/19 04:09:11 deraadt Exp $ */
/*
* Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
* Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
@@ -80,8 +80,8 @@ void acpi_filtdetach(struct knote *);
int acpi_filtread(struct knote *, long);
void __acpi_enable_gpe(struct acpi_softc *, int, int);
-int acpi_gpe_level(struct acpi_softc *, int, void *);
-int acpi_gpe_edge(struct acpi_softc *, int, void *);
+int acpi_gpe_level(struct acpi_softc *, int, void *);
+int acpi_gpe_edge(struct acpi_softc *, int, void *);
#define ACPI_LOCK(sc)
#define ACPI_UNLOCK(sc)
@@ -102,14 +102,14 @@ struct cfdriver acpi_cd = {
};
struct acpi_softc *acpi_softc;
-int acpi_s5, acpi_evindex, icount;
+int acpi_s5, acpi_evindex;
#ifdef __i386__
-#define acpi_bus_space_map _bus_space_map
-#define acpi_bus_space_unmap _bus_space_unmap
+#define acpi_bus_space_map _bus_space_map
+#define acpi_bus_space_unmap _bus_space_unmap
#elif defined(__amd64__)
-#define acpi_bus_space_map _x86_memio_map
-#define acpi_bus_space_unmap _x86_memio_unmap
+#define acpi_bus_space_map _x86_memio_map
+#define acpi_bus_space_unmap _x86_memio_unmap
#else
#error ACPI supported on i386/amd64 only
#endif
@@ -124,8 +124,8 @@ acpi_delay(struct acpi_softc *sc, int64_t uSecs)
}
int
-acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
- int access_size, int len, void *buffer)
+acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
+ int access_size, int len, void *buffer)
{
u_int8_t *pb;
bus_space_handle_t ioh;
@@ -136,14 +136,14 @@ acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
int reg, idx, ival, sval;
dnprintf(50, "gasio: %.2x 0x%.8llx %s\n",
- iospace, address, (iodir == ACPI_IOWRITE) ? "write" : "read");
+ iospace, address, (iodir == ACPI_IOWRITE) ? "write" : "read");
pb = (u_int8_t *)buffer;
switch (iospace) {
case GAS_SYSTEM_MEMORY:
/* copy to/from system memory */
acpi_map(address, len, &mh);
- if (iodir == ACPI_IOREAD)
+ if (iodir == ACPI_IOREAD)
memcpy(buffer, mh.va, len);
else
memcpy(mh.va, buffer, len);
@@ -163,33 +163,36 @@ acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
case 1:
*(uint8_t *)(pb+reg) = bus_space_read_1(
sc->sc_iot, ioh, reg);
- dnprintf(80, "os_in8(%llx) = %x\n", reg+
- address, *(uint8_t *)(pb+reg));
+ dnprintf(80, "os_in8(%llx) = %x\n",
+ reg+address, *(uint8_t *)(pb+reg));
break;
case 2:
- *(uint16_t *)(pb+reg) = bus_space_read_2
- (sc->sc_iot, ioh, reg);
- dnprintf(80, "os_in16(%llx) = %x\n", reg +address, *(uint16_t *)(pb+reg));
+ *(uint16_t *)(pb+reg) = bus_space_read_2(
+ sc->sc_iot, ioh, reg);
+ dnprintf(80, "os_in16(%llx) = %x\n",
+ reg+address, *(uint16_t *)(pb+reg));
break;
case 4:
- *(uint32_t *)(pb+reg) = bus_space_read_4 (sc->sc_iot, ioh, reg);
+ *(uint32_t *)(pb+reg) = bus_space_read_4(
+ sc->sc_iot, ioh, reg);
break;
}
- }
- else {
+ } else {
switch (access_size) {
case 1:
- bus_space_write_1(sc->sc_iot, ioh, reg, *(uint8_t *)(pb+reg));
- dnprintf(80, "os_out8(%llx,%x)\n", reg+
- address, *(uint8_t *)(pb+reg));
+ bus_space_write_1(sc->sc_iot, ioh, reg,
+ *(uint8_t *)(pb+reg));
+ dnprintf(80, "os_out8(%llx,%x)\n",
+ reg+address, *(uint8_t *)(pb+reg));
break;
case 2:
- bus_space_write_2(sc->sc_iot, ioh, reg,
+ bus_space_write_2(sc->sc_iot, ioh, reg,
*(uint16_t *)(pb+reg));
- dnprintf(80, "os_out16(%llx,%x)\n", reg+ address, *(uint16_t *)(pb+reg));
+ dnprintf(80, "os_out16(%llx,%x)\n",
+ reg+address, *(uint16_t *)(pb+reg));
break;
case 4:
- bus_space_write_4(sc->sc_iot, ioh, reg,
+ bus_space_write_4(sc->sc_iot, ioh, reg,
*(uint32_t *)(pb+reg));
break;
}
@@ -207,14 +210,14 @@ acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
break;
case GAS_PCI_CFG_SPACE:
- /* format of address:
+ /* format of address:
* bits 00..15 = register
* bits 16..31 = function
* bits 32..47 = device
* bits 48..63 = bus
*/
pc = NULL;
- tag = pci_make_tag(pc,
+ tag = pci_make_tag(pc,
ACPI_PCI_BUS(address), ACPI_PCI_DEV(address),
ACPI_PCI_FN(address));
@@ -223,41 +226,11 @@ acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address,
for (idx=reg; idx<reg+len; idx++) {
ival = pci_conf_read(pc, tag, idx & ~0x3);
if (iodir == ACPI_IOREAD) {
- switch (idx & 0x3) {
- case 0:
- *pb = ival;
- break;
- case 1:
- *pb = (ival >> 8);
- break;
- case 2:
- *pb = (ival >> 16);
- break;
- case 3:
- *pb = (ival >> 24);
- break;
- }
- }
- else {
+ *pb = ival >> (8 * (idx & 0x3));
+ } else {
sval = *pb;
- switch (idx & 0x3) {
- case 0:
- ival &= ~0xFF;
- ival |= sval;
- break;
- case 1:
- ival &= ~0xFF00;
- ival |= (sval << 8L);
- break;
- case 2:
- ival &= ~0xFF0000;
- ival |= (sval << 16L);
- break;
- case 3:
- ival &= ~0xFF000000L;
- ival |= (sval << 24L);
- break;
- }
+ ival &= ~(0xFF << (8* (idx & 0x3)));
+ ival |= sval << (8* (idx & 0x3));
pci_conf_write(pc, tag, idx & ~0x3, ival);
}
pb++;
@@ -358,7 +331,7 @@ acpi_map_pmregs(struct acpi_softc *sc)
dnprintf(20, "gpe1 block len : %x\n",
sc->sc_fadt->gpe1_blk_len >> 1);
- dnprintf(20, "gpe1 block addr: %x\n",
+ dnprintf(20, "gpe1 block addr: %x\n",
sc->sc_fadt->gpe1_blk);
if (reg == ACPIREG_GPE1_EN && addr) {
addr += size;
@@ -416,7 +389,7 @@ acpi_read_pmreg(struct acpi_softc *sc, int reg, int offset)
acpi_read_pmreg(sc, ACPIREG_PM1B_CNT, offset));
case ACPIREG_GPE_STS:
__size = 1;
- dnprintf(50, "read GPE_STS offset: %.2x %.2x %.2x\n", offset,
+ dnprintf(50, "read GPE_STS offset: %.2x %.2x %.2x\n", offset,
sc->sc_fadt->gpe0_blk_len>>1, sc->sc_fadt->gpe1_blk_len>>1);
if (offset < (sc->sc_fadt->gpe0_blk_len >> 1)) {
reg = ACPIREG_GPE0_STS;
@@ -424,15 +397,15 @@ acpi_read_pmreg(struct acpi_softc *sc, int reg, int offset)
break;
case ACPIREG_GPE_EN:
__size = 1;
- dnprintf(50, "read GPE_EN offset: %.2x %.2x %.2x\n",
+ dnprintf(50, "read GPE_EN offset: %.2x %.2x %.2x\n",
offset, sc->sc_fadt->gpe0_blk_len>>1,
sc->sc_fadt->gpe1_blk_len>>1);
if (offset < (sc->sc_fadt->gpe0_blk_len >> 1)) {
reg = ACPIREG_GPE0_EN;
}
- break;
+ break;
}
-
+
if (reg >= ACPIREG_MAXREG || sc->sc_pmregs[reg].size == 0)
return (0);
@@ -486,7 +459,7 @@ acpi_write_pmreg(struct acpi_softc *sc, int reg, int offset, int regval)
break;
case ACPIREG_GPE_STS:
__size = 1;
- dnprintf(50, "write GPE_STS offset: %.2x %.2x %.2x %.2x\n",
+ dnprintf(50, "write GPE_STS offset: %.2x %.2x %.2x %.2x\n",
offset, sc->sc_fadt->gpe0_blk_len>>1,
sc->sc_fadt->gpe1_blk_len>>1, regval);
if (offset < (sc->sc_fadt->gpe0_blk_len >> 1)) {
@@ -495,13 +468,13 @@ acpi_write_pmreg(struct acpi_softc *sc, int reg, int offset, int regval)
break;
case ACPIREG_GPE_EN:
__size = 1;
- dnprintf(50, "write GPE_EN offset: %.2x %.2x %.2x %.2x\n",
+ dnprintf(50, "write GPE_EN offset: %.2x %.2x %.2x %.2x\n",
offset, sc->sc_fadt->gpe0_blk_len>>1,
sc->sc_fadt->gpe1_blk_len>>1, regval);
if (offset < (sc->sc_fadt->gpe0_blk_len >> 1)) {
reg = ACPIREG_GPE0_EN;
}
- break;
+ break;
}
/* All special case return here */
@@ -584,11 +557,11 @@ acpi_foundhid(struct aml_node *node, void *arg)
struct acpi_softc *sc = (struct acpi_softc *)arg;
struct device *self = (struct device *)arg;
const char *dev;
- struct aml_value res;
+ struct aml_value res;
struct acpi_attach_args aaa;
dnprintf(10, "found hid device: %s ", node->parent->name);
- if (aml_evalnode(sc, node, 0, NULL, &res) != 0)
+ if (aml_evalnode(sc, node, 0, NULL, &res) != 0)
return;
switch (res.type) {
@@ -799,7 +772,7 @@ acpi_attach(struct device *parent, struct device *self, void *aux)
/* Find available sleep/resume related methods. */
acpi_init_pm(sc);
-
+
/*
* Set up a pointer to the firmware control structure
*/
@@ -846,7 +819,7 @@ acpi_attach(struct device *parent, struct device *self, void *aux)
acpi_attach_machdep(sc);
printf("\n");
-
+
printf("%s: tables ", DEVNAME(sc));
SIMPLEQ_FOREACH(entry, &sc->sc_tables, q_next) {
printf("%.4s ", entry->q_table);
@@ -969,8 +942,8 @@ acpi_print(void *aux, const char *pnp)
#ifdef ACPIVERBOSE
if (hdr)
printf(" table %c%c%c%c",
- hdr->signature[0], hdr->signature[1],
- hdr->signature[2], hdr->signature[3]);
+ hdr->signature[0], hdr->signature[1],
+ hdr->signature[2], hdr->signature[3]);
#endif
return (UNCONF);
@@ -1160,7 +1133,7 @@ __acpi_enable_gpe(struct acpi_softc *sc, int gpe, int enable)
/* Read enabled register */
en = acpi_read_pmreg(sc, ACPIREG_GPE_EN, gpe>>3);
- dnprintf(50, "%sabling GPE %.2x (current: %sabled) %.2x\n",
+ dnprintf(50, "%sabling GPE %.2x (current: %sabled) %.2x\n",
enable ? "en" : "dis", gpe, (en & mask) ? "en" : "dis", en);
if (enable)
en |= mask;
@@ -1391,10 +1364,10 @@ void
acpi_resume(struct acpi_softc *sc)
{
struct aml_value env;
-
+
env.type = AML_OBJTYPE_INTEGER;
env.v_integer = sc->sc_state;
-
+
if (sc->sc_bfs) {
if (aml_evalnode(sc, sc->sc_pts, 1, &env, NULL) != 0) {
dnprintf(10, "%s evaluating method _BFS failed.\n",
@@ -1641,9 +1614,8 @@ acpi_isr_thread(void *arg)
if (pgpe->active) {
pgpe->active = 0;
dnprintf(50, "softgpe: %.2x\n", gpe);
- if (pgpe->handler) {
+ if (pgpe->handler)
pgpe->handler(sc, gpe, pgpe->arg);
- }
}
}
if (sc->sc_powerbtn) {