Date: Mon, 3 Oct 2016 20:15:11 +0200 From: Torfinn Ingolfsen <torfinn.ingolfsen@getmail.no> To: freebsd-stable@freebsd.org Subject: Re: aibs(4) / atk0110 support for newer systems Message-ID: <20161003201511.7258687453f12c44a46a361a@getmail.no> In-Reply-To: <7a868c22-e0bd-f677-e4ad-2bdf6f3605d0@FreeBSD.org> References: <86cf8380-ac6f-55f0-f0f8-16000d7f04b2@FreeBSD.org> <20160930145704.4dbc9d90011154b38493964e@getmail.no> <7d498084-ec05-d4c9-5f49-6aef32495caf@FreeBSD.org> <20160930205928.77d7e74f7bd1a35fcf1aa50a@getmail.no> <7a868c22-e0bd-f677-e4ad-2bdf6f3605d0@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Sat, 1 Oct 2016 00:08:15 +0300
Andriy Gapon <avg@FreeBSD.org> wrote:
> On 30/09/2016 21:59, Torfinn Ingolfsen wrote:
> > As I used '-C' as an argument to patch, there isn't one:
> > root@kg-core1# l /sys/dev/acpi_support/atk0110.c.rej
> > ls: /sys/dev/acpi_support/atk0110.c.rej: No such file or directory
>
> Right. So, I guess I have to specifically ask to not use -C option? :-)
Sorry for the delay. I was distracted by other things.
root@kg-core1# cd /
root@kg-core1# patch -p1 < /home/tingo/dl/aibs-ggrp-gitm.diff
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/sys/dev/acpi_support/atk0110.c b/sys/dev/acpi_support/atk0110.c
|index e79a0e00e3577..743684100f737 100644
|--- a/sys/dev/acpi_support/atk0110.c
|+++ b/sys/dev/acpi_support/atk0110.c
--------------------------
Patching file sys/dev/acpi_support/atk0110.c using Plan A...
Hunk #1 succeeded at 28.
Hunk #2 succeeded at 52.
Hunk #3 succeeded at 78.
Hunk #4 succeeded at 124.
Hunk #5 succeeded at 362.
Hunk #6 succeeded at 370.
Hunk #7 failed at 391.
Hunk #8 succeeded at 435.
Hunk #9 succeeded at 450.
Hunk #10 failed at 488.
2 out of 10 hunks failed--saving rejects to sys/dev/acpi_support/atk0110.c.rej
HTH
--
Torfinn Ingolfsen <torfinn.ingolfsen@getmail.no>
[-- Attachment #2 --]
***************
*** 193,268 ****
device_printf(sc->sc_dev, "%s: no members in the package\n",
name);
AcpiOsFree(b.Pointer);
- return;
}
- as = malloc(sizeof(*as) * n, M_DEVBUF, M_NOWAIT | M_ZERO);
- if (as == NULL) {
- device_printf(sc->sc_dev, "%s: malloc fail\n", name);
- AcpiOsFree(b.Pointer);
- return;
- }
switch (st) {
- case AIBS_VOLT:
sc->sc_asens_volt = as;
break;
- case AIBS_TEMP:
sc->sc_asens_temp = as;
break;
- case AIBS_FAN:
sc->sc_asens_fan = as;
break;
}
/* sysctl subtree for sensors of this type */
- so = SYSCTL_ADD_NODE(device_get_sysctl_ctx(sc->sc_dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(sc->sc_dev)), st,
node, CTLFLAG_RD, NULL, NULL);
for (i = 0, o++; i < n; i++, o++) {
- ACPI_OBJECT *oi;
- char si[3];
- const char *desc;
-
- /* acpica5 automatically evaluates the referenced package */
- if (o[0].Type != ACPI_TYPE_PACKAGE) {
- device_printf(sc->sc_dev,
- "%s: %i: not a package: %i type\n",
- name, i, o[0].Type);
- continue;
- }
- oi = o[0].Package.Elements;
- if (o[0].Package.Count != 5 ||
- oi[0].Type != ACPI_TYPE_INTEGER ||
- oi[1].Type != ACPI_TYPE_STRING ||
- oi[2].Type != ACPI_TYPE_INTEGER ||
- oi[3].Type != ACPI_TYPE_INTEGER ||
- oi[4].Type != ACPI_TYPE_INTEGER) {
- device_printf(sc->sc_dev,
- "%s: %i: invalid package\n",
- name, i);
- continue;
- }
- as[i].i = oi[0].Integer.Value;
- desc = oi[1].String.Pointer;
- as[i].l = oi[2].Integer.Value;
- as[i].h = oi[3].Integer.Value;
- as[i].t = st;
- #ifdef AIBS_VERBOSE
- device_printf(sc->sc_dev, "%c%i: "
- "0x%08"PRIx64" %20s %5"PRIi64" / %5"PRIi64" "
- "0x%"PRIx64"\n",
- name[0], i,
- (uint64_t)as[i].i, desc, (int64_t)as[i].l,
- (int64_t)as[i].h, (uint64_t)oi[4].Integer.Value);
- #endif
- snprintf(si, sizeof(si), "%i", i);
- SYSCTL_ADD_PROC(device_get_sysctl_ctx(sc->sc_dev),
- SYSCTL_CHILDREN(so), i, si, CTLTYPE_INT | CTLFLAG_RD,
- sc, st, aibs_sysctl, st == AIBS_TEMP ? "IK" : "I", desc);
}
AcpiOsFree(b.Pointer);
}
static int
--- 391,427 ----
device_printf(sc->sc_dev, "%s: no members in the package\n",
name);
AcpiOsFree(b.Pointer);
+ return (ENXIO);;
}
+ as = malloc(sizeof(*as) * n, M_DEVBUF, M_WAITOK | M_ZERO);
switch (st) {
+ case AIBS_SENS_TYPE_VOLT:
sc->sc_asens_volt = as;
break;
+ case AIBS_SENS_TYPE_TEMP:
sc->sc_asens_temp = as;
break;
+ case AIBS_SENS_TYPE_FAN:
sc->sc_asens_fan = as;
break;
}
/* sysctl subtree for sensors of this type */
+ *so = SYSCTL_ADD_NODE(device_get_sysctl_ctx(sc->sc_dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(sc->sc_dev)), st,
node, CTLFLAG_RD, NULL, NULL);
for (i = 0, o++; i < n; i++, o++) {
+ const char *descr;
+
+ err = aibs_add_sensor(sc, 0, &as[i], &descr);
+ if (err == 0)
+ aibs_sensor_added(sc, *so, node, i, &as[i], descr);
}
AcpiOsFree(b.Pointer);
+ return (0);;
}
static int
***************
*** 333,358 ****
"%s: %i: evaluation failed\n",
name, i);
ACPI_SERIAL_END(aibs);
- return EIO;
}
bp = b.Pointer;
v = bp->Integer.Value;
AcpiOsFree(b.Pointer);
ACPI_SERIAL_END(aibs);
- switch (st) {
- case AIBS_VOLT:
break;
- case AIBS_TEMP:
v += 2731;
l += 2731;
h += 2731;
break;
- case AIBS_FAN:
break;
}
so[0] = v;
so[1] = l;
so[2] = h;
- return sysctl_handle_opaque(oidp, &so, sizeof(so), req);
}
--- 488,578 ----
"%s: %i: evaluation failed\n",
name, i);
ACPI_SERIAL_END(aibs);
+ return (EIO);
}
bp = b.Pointer;
v = bp->Integer.Value;
AcpiOsFree(b.Pointer);
ACPI_SERIAL_END(aibs);
+ switch (sensor->t) {
+ case AIBS_SENS_TYPE_VOLT:
+ break;
+ case AIBS_SENS_TYPE_TEMP:
+ v += 2731;
+ l += 2731;
+ h += 2731;
+ break;
+ case AIBS_SENS_TYPE_FAN:
+ break;
+ }
+ so[0] = v;
+ so[1] = l;
+ so[2] = h;
+ return (sysctl_handle_opaque(oidp, &so, sizeof(so), req));
+ }
+
+ static int
+ aibs_sysctl_ggrp(SYSCTL_HANDLER_ARGS)
+ {
+ struct aibs_softc *sc = arg1;
+ struct aibs_sensor *sensor = (void *)arg2;
+ ACPI_STATUS rs;
+ ACPI_OBJECT p, *bp;
+ ACPI_OBJECT_LIST arg;
+ ACPI_BUFFER buf;
+ ACPI_INTEGER v, l, h;
+ int so[3];
+ uint32_t *ret;
+ uint32_t cmd[3];
+
+ cmd[0] = sensor->i;
+ cmd[1] = 0;
+ cmd[2] = 0;
+ p.Type = ACPI_TYPE_BUFFER;
+ p.Buffer.Pointer = (void *)cmd;
+ p.Buffer.Length = sizeof(cmd);
+ arg.Count = 1;
+ arg.Pointer = &p;
+ buf.Pointer = NULL;
+ buf.Length = ACPI_ALLOCATE_BUFFER;
+ ACPI_SERIAL_BEGIN(aibs);
+ rs = AcpiEvaluateObjectTyped(sc->sc_ah, "GITM", &arg, &buf,
+ ACPI_TYPE_BUFFER);
+ ACPI_SERIAL_END(aibs);
+ if (ACPI_FAILURE(rs)) {
+ device_printf(sc->sc_dev, "GITM evaluation failed\n");
+ return (EIO);
+ }
+ bp = buf.Pointer;
+ if (bp->Buffer.Length < 8) {
+ device_printf(sc->sc_dev, "GITM returned short buffer\n");
+ return (EIO);
+ }
+ ret = (uint32_t *)bp->Buffer.Pointer;
+ if (ret[0] == 0) {
+ device_printf(sc->sc_dev, "GITM returned error status\n");
+ return (EINVAL);
+ }
+ v = ret[1];
+ AcpiOsFree(buf.Pointer);
+
+ l = sensor->l;
+ h = sensor->h;
+
+ switch (sensor->t) {
+ case AIBS_SENS_TYPE_VOLT:
break;
+ case AIBS_SENS_TYPE_TEMP:
v += 2731;
l += 2731;
h += 2731;
break;
+ case AIBS_SENS_TYPE_FAN:
break;
}
so[0] = v;
so[1] = l;
so[2] = h;
+ return (sysctl_handle_opaque(oidp, &so, sizeof(so), req));
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20161003201511.7258687453f12c44a46a361a>
