At 2025-11-27 21:52:16, "Michael S. Tsirkin" <mst@redhat.com> wrote:
>On Thu, Nov 27, 2025 at 08:36:02PM +0800, AlanoSong@163.com wrote:
>> According to ACPI 5.0 section 19.5.54, I add aml_gpio_io()
>> wrapper for GPIO IO Connection purpose.
>> 
>> Signed-off-by: Alano Song <AlanoSong@163.com>
>> ---
>>  hw/acpi/aml-build.c         | 19 +++++++++++++++++++
>>  include/hw/acpi/aml-build.h | 17 +++++++++++++++++
>>  2 files changed, 36 insertions(+)
>> 
>> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
>> index 2d5826a8f1..b4dd0bc665 100644
>> --- a/hw/acpi/aml-build.c
>> +++ b/hw/acpi/aml-build.c
>> @@ -962,6 +962,25 @@ Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro,
>>                                 vendor_data_len);
>>  }
>>  
>> +/*
>> + * ACPI 5.0: 19.5.54
>> + * GpioIo(GPIO Connection IO Resource Descriptor Macro)
>> + */
>> +Aml *aml_gpio_io(AmlConsumerAndProducer con_and_pro,
>> +                 AmlIoRestriction io_restriction, AmlShared shared,
>> +                 AmlPinConfig pin_config, uint16_t debounce_timeout,
>> +                 const uint32_t pin_list[], uint32_t pin_count,
>> +                 const char *resource_source_name,
>> +                 const uint8_t *vendor_data, uint16_t vendor_data_len)
>> +{
>> +    uint8_t flags = io_restriction | shared << 3;
>> +
>> +    return aml_gpio_connection(AML_IO_CONNECTION, con_and_pro, flags,
>> +                               pin_config, 0, debounce_timeout, pin_list,
>> +                               pin_count, resource_source_name, vendor_data,
>> +                               vendor_data_len);
>> +}
>> +
>>  /*
>>   * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
>>   * (Type 1, Large Item Name 0x6)
>> diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
>> index f38e129719..f5c0c5886b 100644
>> --- a/include/hw/acpi/aml-build.h
>> +++ b/include/hw/acpi/aml-build.h
>> @@ -167,6 +167,17 @@ typedef enum {
>>      AML_ACTIVE_LOW = 1,
>>  } AmlActiveHighAndLow;
>>  
>> +/*
>> + * ACPI 5.0: Table 5-133 Predefined ACPI Names
>
>what does that have to do with anything?

Because in my project's acpi table need use GpioIo method,
and I found there is no such api in qemu project.
And I think someone else may also need use this api,
so I push this patch.

> >> + * _IOR field definition >> + */ >> +typedef enum { >> + AML_IO_RESTRICTION_NONE = 0, >> + AML_IO_RESTRICTION_INPUT_ONLY = 1, >> + AML_IO_RESTRICTION_OUTPUT_ONLY = 2, >> + AML_IO_RESTRICTION_NONE_AND_PRESERVE = 3, > >these numbers are not from that table. > >> +} AmlIoRestriction; >> + > >the actual table is here: > >Table 6-189 GPIO Connection Descriptor Definition >
Yes, you're right, I will double check this comment!
> >and there are no names there to not match this enum. > >So a better way to do it is different. Pass in u8, >and at the calling site, you add text matching spec verbatim: > 0x1 /* This pin or pins can only be used for Input, and the pin configuration must be preserved while not in use. */ > >only use an enum if same value used multiple times. >in that cases, add this comment at the enum values. > >but it is important to use spec text verbatim so people can >easily find the relevant spec part.
>

I will consider your suggestion and rewrite this part.

> >> /* >> * ACPI 5.0: Table 6-187 Extended Interrupt Descriptor Definition >> * _SHR field definition >> @@ -331,6 +342,12 @@ Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro, >> const uint32_t pin_list[], uint32_t pin_count, >> const char *resource_source_name, >> const uint8_t *vendor_data, uint16_t vendor_data_len); >> +Aml *aml_gpio_io(AmlConsumerAndProducer con_and_pro, >> + AmlIoRestriction io_restriction, AmlShared shared, >> + AmlPinConfig pin_config, uint16_t debounce_timeout, >> + const uint32_t pin_list[], uint32_t pin_count, >> + const char *resource_source_name, >> + const uint8_t *vendor_data, uint16_t vendor_data_len); >> Aml *aml_memory32_fixed(uint32_t addr, uint32_t size, >> AmlReadAndWrite read_and_write); >> Aml *aml_interrupt(AmlConsumerAndProducer con_and_pro, > > >fyi I am not merging unused code. pls make this patch a part >of a patchset using this.
>

Maybe I call this new api in hw/arm/virt.c & hw/arm/virt-acpi-build.c ?
This might take some time.
I still want to add such method, cause someone else may also want use such method.
And it is a very commonly used api in acpi table.

>> -- >> 2.43.0 >