On Sat, May 19, 2018 at 09:25:47AM +0200, Mark Kettenis wrote:
> > Date: Fri, 18 May 2018 22:21:06 -0700
> > From: Mike Larkin <[email protected]>
> >
> > > @@ -2564,6 +2564,14 @@ aml_rwgsb(struct aml_value *conn, int bp
> > > cmdlen = 1;
> > > buflen = 2;
> > > break;
> > > + case 0x0b: /* AttribBytes */
> > > + cmdlen = 1;
> > > + buflen = alen;
> > > + break;
> > > + case 0x0e: /* AttribRawBytes */
> > > + cmdlen = 1;
> > > + cmdlen = alen;
> >
> > The previous two lines don't look right...
>
> Good catch. Here is a new diff with that fixed.
>
> ok?
>
no objections here, rest reads ok. I'm not sure if I have any hardware that
exercises this but I'll toss it into my working tree nonetheless.
Now is probably the right time in the cycle to get it in, so go for it
if you're looking for oks.
>
> Index: dev/acpi/dsdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
> retrieving revision 1.239
> diff -u -p -r1.239 dsdt.c
> --- dev/acpi/dsdt.c 17 May 2018 20:46:45 -0000 1.239
> +++ dev/acpi/dsdt.c 19 May 2018 07:24:32 -0000
> @@ -2293,7 +2293,7 @@ aml_register_regionspace(struct aml_node
>
> void aml_rwgen(struct aml_value *, int, int, struct aml_value *, int, int);
> void aml_rwgpio(struct aml_value *, int, int, struct aml_value *, int, int);
> -void aml_rwgsb(struct aml_value *, int, int, struct aml_value *, int, int);
> +void aml_rwgsb(struct aml_value *, int, int, int, struct aml_value *, int,
> int);
> void aml_rwindexfield(struct aml_value *, struct aml_value *val, int);
> void aml_rwfield(struct aml_value *, int, int, struct aml_value *, int);
>
> @@ -2520,8 +2520,8 @@ aml_rwgpio(struct aml_value *conn, int b
> #ifndef SMALL_KERNEL
>
> void
> -aml_rwgsb(struct aml_value *conn, int bpos, int blen, struct aml_value *val,
> - int mode, int flag)
> +aml_rwgsb(struct aml_value *conn, int alen, int bpos, int blen,
> + struct aml_value *val, int mode, int flag)
> {
> union acpi_resource *crs = (union acpi_resource *)conn->v_buffer;
> struct aml_node *node;
> @@ -2566,6 +2566,14 @@ aml_rwgsb(struct aml_value *conn, int bp
> cmdlen = 1;
> buflen = 2;
> break;
> + case 0x0b: /* AttribBytes */
> + cmdlen = 1;
> + buflen = alen;
> + break;
> + case 0x0e: /* AttribRawBytes */
> + cmdlen = 0;
> + buflen = alen;
> + break;
> default:
> aml_die("unsupported access type 0x%x", flag);
> break;
> @@ -2714,7 +2722,8 @@ aml_rwfield(struct aml_value *fld, int b
> break;
> #ifndef SMALL_KERNEL
> case ACPI_OPREG_GSB:
> - aml_rwgsb(ref2, fld->v_field.bitpos + bpos, blen,
> + aml_rwgsb(ref2, fld->v_field.ref3,
> + fld->v_field.bitpos + bpos, blen,
> val, mode, fld->v_field.flags);
> break;
> #endif
> @@ -2801,17 +2810,17 @@ aml_parsefieldlist(struct aml_scope *msc
> bpos = 0;
> while (mscope->pos < mscope->end) {
> switch (*mscope->pos) {
> - case 0x00: /* reserved, length */
> + case 0x00: /* ReservedField */
> mscope->pos++;
> blen = aml_parselength(mscope);
> break;
> - case 0x01: /* attrib */
> + case 0x01: /* AccessField */
> mscope->pos++;
> blen = 0;
> flags = aml_get8(mscope->pos++);
> flags |= aml_get8(mscope->pos++) << 8;
> break;
> - case 0x02: /* connection */
> + case 0x02: /* ConnectionField */
> mscope->pos++;
> blen = 0;
> conn = aml_parse(mscope, 'o', "Connection");
> @@ -2819,7 +2828,14 @@ aml_parsefieldlist(struct aml_scope *msc
> aml_die("Could not parse connection");
> conn->node = mscope->node;
> break;
> - default: /* 4-byte name, length */
> + case 0x03: /* ExtendedAccessField */
> + mscope->pos++;
> + blen = 0;
> + flags = aml_get8(mscope->pos++);
> + flags |= aml_get8(mscope->pos++) << 8;
> + indexval = aml_get8(mscope->pos++);
> + break;
> + default: /* NamedField */
> mscope->pos = aml_parsename(mscope->node, mscope->pos,
> &rv, 1);
> blen = aml_parselength(mscope);
>