Skip site navigation (1)Skip section navigation (2)
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>