Any thoughts on this? -----Mesaj original----- De la: "Paul Irofti" <p...@irofti.net> Trimis: 22.10.2016 15:34 Către: "Mark Kettenis" <mark.kette...@xs4all.nl> Cc: "guent...@gmail.com" <guent...@gmail.com>; "tech@openbsd.org" <tech@openbsd.org> Subiect: Re: acpiec on acer aspire S7 with CURRENT
> I'm not really happy about the use of the static variable in the > resource parsing function. It feels like the aml_parse_resource API > should be changed to pass the resource number to the callback > function. I hated doing that as well, but I was afraid it wouldn't be justified to change the prototype and all the callers for this particular use case. Glad you suggested it. Here is a diff to add support for that in the current code. Index: acpi.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpi.c,v retrieving revision 1.316 diff -u -p -u -p -r1.316 acpi.c --- acpi.c 18 Sep 2016 23:56:45 -0000 1.316 +++ acpi.c 22 Oct 2016 12:29:11 -0000 @@ -513,10 +513,10 @@ TAILQ_HEAD(, acpi_pci) acpi_pcirootdevs TAILQ_HEAD_INITIALIZER(acpi_pcirootdevs); int acpi_getpci(struct aml_node *node, void *arg); -int acpi_getminbus(union acpi_resource *crs, void *arg); +int acpi_getminbus(union acpi_resource *crs, void *arg, int crsno); int -acpi_getminbus(union acpi_resource *crs, void *arg) +acpi_getminbus(union acpi_resource *crs, void *arg, int crsno) { int *bbn = arg; int typ = AML_CRSTYPE(crs); Index: acpiprt.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpiprt.c,v retrieving revision 1.47 diff -u -p -u -p -r1.47 acpiprt.c --- acpiprt.c 14 Mar 2015 03:38:46 -0000 1.47 +++ acpiprt.c 22 Oct 2016 12:29:11 -0000 @@ -60,8 +60,8 @@ SIMPLEQ_HEAD(, acpiprt_map) acpiprt_map_ int acpiprt_match(struct device *, void *, void *); void acpiprt_attach(struct device *, struct device *, void *); -int acpiprt_getirq(union acpi_resource *crs, void *arg); -int acpiprt_chooseirq(union acpi_resource *, void *); +int acpiprt_getirq(union acpi_resource *crs, void *arg, int crsno); +int acpiprt_chooseirq(union acpi_resource *, void *, int); struct acpiprt_softc { struct device sc_dev; @@ -137,7 +137,7 @@ acpiprt_attach(struct device *parent, st } int -acpiprt_getirq(union acpi_resource *crs, void *arg) +acpiprt_getirq(union acpi_resource *crs, void *arg, int crsno) { struct acpiprt_irq *irq = arg; int typ, len; @@ -190,7 +190,7 @@ acpiprt_pri[16] = { }; int -acpiprt_chooseirq(union acpi_resource *crs, void *arg) +acpiprt_chooseirq(union acpi_resource *crs, void *arg, int crsno) { struct acpiprt_irq *irq = arg; int typ, len, i, pri = -1; Index: bytgpio.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/bytgpio.c,v retrieving revision 1.11 diff -u -p -u -p -r1.11 bytgpio.c --- bytgpio.c 8 May 2016 11:08:01 -0000 1.11 +++ bytgpio.c 22 Oct 2016 12:29:11 -0000 @@ -104,7 +104,7 @@ const int byt_sus_pins[] = { 56, 54, 49, 55, 48, 57, 50, 58, 52, 53, 59, 40 }; -int bytgpio_parse_resources(union acpi_resource *, void *); +int bytgpio_parse_resources(union acpi_resource *, void *, int crsno); int bytgpio_read_pin(void *, int); void bytgpio_write_pin(void *, int, int); void bytgpio_intr_establish(void *, int, int, int (*)(), void *); @@ -238,7 +238,7 @@ free: } int -bytgpio_parse_resources(union acpi_resource *crs, void *arg) +bytgpio_parse_resources(union acpi_resource *crs, void *arg, int crsno) { struct bytgpio_softc *sc = arg; int type = AML_CRSTYPE(crs); Index: chvgpio.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/chvgpio.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 chvgpio.c --- chvgpio.c 8 May 2016 18:18:42 -0000 1.5 +++ chvgpio.c 22 Oct 2016 12:29:11 -0000 @@ -143,7 +143,7 @@ const int chv_southeast_pins[] = { 8, 12, 6, 8, 10, 11, -1 }; -int chvgpio_parse_resources(union acpi_resource *, void *); +int chvgpio_parse_resources(union acpi_resource *, void *, int); int chvgpio_check_pin(struct chvgpio_softc *, int); int chvgpio_read_pin(void *, int); void chvgpio_write_pin(void *, int, int); @@ -264,7 +264,7 @@ unmap: } int -chvgpio_parse_resources(union acpi_resource *crs, void *arg) +chvgpio_parse_resources(union acpi_resource *crs, void *arg, int crsno) { struct chvgpio_softc *sc = arg; int type = AML_CRSTYPE(crs); Index: dsdt.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v retrieving revision 1.225 diff -u -p -u -p -r1.225 dsdt.c --- dsdt.c 27 Sep 2016 10:04:19 -0000 1.225 +++ dsdt.c 22 Oct 2016 12:29:12 -0000 @@ -1621,14 +1621,14 @@ aml_mapresource(union acpi_resource *crs int aml_parse_resource(struct aml_value *res, - int (*crs_enum)(union acpi_resource *, void *), void *arg) + int (*crs_enum)(union acpi_resource *, void *, int), void *arg) { - int off, rlen; + int off, rlen, crsno; union acpi_resource *crs; if (res->type != AML_OBJTYPE_BUFFER || res->length < 5) return (-1); - for (off = 0; off < res->length; off += rlen) { + for (off = 0, crsno = 0; off < res->length; off += rlen, crsno++) { crs = (union acpi_resource *)(res->v_buffer+off); rlen = AML_CRSLEN(crs); @@ -1639,7 +1639,7 @@ aml_parse_resource(struct aml_value *res #ifdef ACPI_DEBUG aml_print_resource(crs, NULL); #endif - crs_enum(crs, arg); + crs_enum(crs, arg, crsno); } return (0); @@ -1746,7 +1746,7 @@ int aml_compare(struct aml_value *, str struct aml_value *aml_concat(struct aml_value *, struct aml_value *); struct aml_value *aml_concatres(struct aml_value *, struct aml_value *); struct aml_value *aml_mid(struct aml_value *, int, int); -int aml_ccrlen(union acpi_resource *, void *); +int aml_ccrlen(union acpi_resource *, void *, int); void aml_store(struct aml_scope *, struct aml_value *, int64_t, struct aml_value *); @@ -2140,7 +2140,7 @@ aml_concat(struct aml_value *a1, struct /* Calculate length of Resource Template */ int -aml_ccrlen(union acpi_resource *rs, void *arg) +aml_ccrlen(union acpi_resource *rs, void *arg, int crsno) { int *plen = arg; Index: dsdt.h =================================================================== RCS file: /cvs/src/sys/dev/acpi/dsdt.h,v retrieving revision 1.72 diff -u -p -u -p -r1.72 dsdt.h --- dsdt.h 2 Sep 2016 13:59:51 -0000 1.72 +++ dsdt.h 22 Oct 2016 12:29:12 -0000 @@ -290,7 +290,8 @@ union acpi_resource { int aml_print_resource(union acpi_resource *, void *); int aml_parse_resource(struct aml_value *, - int (*)(union acpi_resource *, void *), void *); + int (*)(union acpi_resource *, void *, int), + void *); #define ACPI_E_NOERROR 0x00 #define ACPI_E_BADVALUE 0x01 Index: dwiic.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/dwiic.c,v retrieving revision 1.21 diff -u -p -u -p -r1.21 dwiic.c --- dwiic.c 7 Sep 2016 15:31:41 -0000 1.21 +++ dwiic.c 22 Oct 2016 12:29:12 -0000 @@ -176,7 +176,7 @@ void * dwiic_i2c_intr_establish(void *, int (*)(void *), void *, const char *); const char * dwiic_i2c_intr_string(void *, void *); -int dwiic_acpi_parse_crs(union acpi_resource *, void *); +int dwiic_acpi_parse_crs(union acpi_resource *, void *, int); int dwiic_acpi_found_hid(struct aml_node *, void *); int dwiic_acpi_found_ihidev(struct dwiic_softc *, struct aml_node *, char *, struct dwiic_crs); @@ -385,7 +385,7 @@ dwiic_activate(struct device *self, int } int -dwiic_acpi_parse_crs(union acpi_resource *crs, void *arg) +dwiic_acpi_parse_crs(union acpi_resource *crs, void *arg, int crsno) { struct dwiic_crs *sc_crs = arg; struct aml_node *node; Index: sdhc_acpi.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/sdhc_acpi.c,v retrieving revision 1.8 diff -u -p -u -p -r1.8 sdhc_acpi.c --- sdhc_acpi.c 30 Apr 2016 11:32:23 -0000 1.8 +++ sdhc_acpi.c 22 Oct 2016 12:29:12 -0000 @@ -69,7 +69,7 @@ const char *sdhc_hids[] = { NULL }; -int sdhc_acpi_parse_resources(union acpi_resource *, void *); +int sdhc_acpi_parse_resources(union acpi_resource *, void *, int); int sdhc_acpi_card_detect(struct sdhc_softc *); int sdhc_acpi_card_detect_intr(void *); @@ -141,7 +141,7 @@ sdhc_acpi_attach(struct device *parent, } int -sdhc_acpi_parse_resources(union acpi_resource *crs, void *arg) +sdhc_acpi_parse_resources(union acpi_resource *crs, void *arg, int crsno) { struct sdhc_acpi_softc *sc = arg; int type = AML_CRSTYPE(crs); Index: tpm.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/tpm.c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 tpm.c --- tpm.c 3 Aug 2016 17:23:38 -0000 1.1 +++ tpm.c 22 Oct 2016 12:29:12 -0000 @@ -158,7 +158,7 @@ const struct { int tpm_match(struct device *, void *, void *); void tpm_attach(struct device *, struct device *, void *); int tpm_activate(struct device *, int); -int tpm_parse_crs(union acpi_resource *, void *); +int tpm_parse_crs(union acpi_resource *, void *, int); int tpm_probe(bus_space_tag_t, bus_space_handle_t); int tpm_init(struct tpm_softc *); @@ -272,7 +272,7 @@ tpm_attach(struct device *parent, struct } int -tpm_parse_crs(union acpi_resource *crs, void *arg) +tpm_parse_crs(union acpi_resource *crs, void *arg, int crsno) { struct tpm_crs *sc_crs = arg;