Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
0002 /*******************************************************************************
0003  *
0004  * Module Name: rsinfo - Dispatch and Info tables
0005  *
0006  ******************************************************************************/
0007 
0008 #include <acpi/acpi.h>
0009 #include "accommon.h"
0010 #include "acresrc.h"
0011 
0012 #define _COMPONENT          ACPI_RESOURCES
0013 ACPI_MODULE_NAME("rsinfo")
0014 
0015 /*
0016  * Resource dispatch and information tables. Any new resource types (either
0017  * Large or Small) must be reflected in each of these tables, so they are here
0018  * in one place.
0019  *
0020  * The tables for Large descriptors are indexed by bits 6:0 of the AML
0021  * descriptor type byte. The tables for Small descriptors are indexed by
0022  * bits 6:3 of the descriptor byte. The tables for internal resource
0023  * descriptors are indexed by the acpi_resource_type field.
0024  */
0025 /* Dispatch table for resource-to-AML (Set Resource) conversion functions */
0026 struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = {
0027     acpi_rs_set_irq,    /* 0x00, ACPI_RESOURCE_TYPE_IRQ */
0028     acpi_rs_convert_dma,    /* 0x01, ACPI_RESOURCE_TYPE_DMA */
0029     acpi_rs_set_start_dpf,  /* 0x02, ACPI_RESOURCE_TYPE_START_DEPENDENT */
0030     acpi_rs_convert_end_dpf,    /* 0x03, ACPI_RESOURCE_TYPE_END_DEPENDENT */
0031     acpi_rs_convert_io, /* 0x04, ACPI_RESOURCE_TYPE_IO */
0032     acpi_rs_convert_fixed_io,   /* 0x05, ACPI_RESOURCE_TYPE_FIXED_IO */
0033     acpi_rs_set_vendor, /* 0x06, ACPI_RESOURCE_TYPE_VENDOR */
0034     acpi_rs_convert_end_tag,    /* 0x07, ACPI_RESOURCE_TYPE_END_TAG */
0035     acpi_rs_convert_memory24,   /* 0x08, ACPI_RESOURCE_TYPE_MEMORY24 */
0036     acpi_rs_convert_memory32,   /* 0x09, ACPI_RESOURCE_TYPE_MEMORY32 */
0037     acpi_rs_convert_fixed_memory32, /* 0x0A, ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */
0038     acpi_rs_convert_address16,  /* 0x0B, ACPI_RESOURCE_TYPE_ADDRESS16 */
0039     acpi_rs_convert_address32,  /* 0x0C, ACPI_RESOURCE_TYPE_ADDRESS32 */
0040     acpi_rs_convert_address64,  /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */
0041     acpi_rs_convert_ext_address64,  /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
0042     acpi_rs_convert_ext_irq,    /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
0043     acpi_rs_convert_generic_reg,    /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
0044     acpi_rs_convert_gpio,   /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
0045     acpi_rs_convert_fixed_dma,  /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
0046     NULL,           /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
0047     acpi_rs_convert_pin_function,   /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */
0048     acpi_rs_convert_pin_config, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */
0049     acpi_rs_convert_pin_group,  /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */
0050     acpi_rs_convert_pin_group_function, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
0051     acpi_rs_convert_pin_group_config,   /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
0052 };
0053 
0054 /* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
0055 
0056 struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = {
0057     /* Small descriptors */
0058 
0059     NULL,           /* 0x00, Reserved */
0060     NULL,           /* 0x01, Reserved */
0061     NULL,           /* 0x02, Reserved */
0062     NULL,           /* 0x03, Reserved */
0063     acpi_rs_get_irq,    /* 0x04, ACPI_RESOURCE_NAME_IRQ */
0064     acpi_rs_convert_dma,    /* 0x05, ACPI_RESOURCE_NAME_DMA */
0065     acpi_rs_get_start_dpf,  /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */
0066     acpi_rs_convert_end_dpf,    /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */
0067     acpi_rs_convert_io, /* 0x08, ACPI_RESOURCE_NAME_IO */
0068     acpi_rs_convert_fixed_io,   /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */
0069     acpi_rs_convert_fixed_dma,  /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */
0070     NULL,           /* 0x0B, Reserved */
0071     NULL,           /* 0x0C, Reserved */
0072     NULL,           /* 0x0D, Reserved */
0073     acpi_rs_get_vendor_small,   /* 0x0E, ACPI_RESOURCE_NAME_VENDOR_SMALL */
0074     acpi_rs_convert_end_tag,    /* 0x0F, ACPI_RESOURCE_NAME_END_TAG */
0075 
0076     /* Large descriptors */
0077 
0078     NULL,           /* 0x00, Reserved */
0079     acpi_rs_convert_memory24,   /* 0x01, ACPI_RESOURCE_NAME_MEMORY24 */
0080     acpi_rs_convert_generic_reg,    /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */
0081     NULL,           /* 0x03, Reserved */
0082     acpi_rs_get_vendor_large,   /* 0x04, ACPI_RESOURCE_NAME_VENDOR_LARGE */
0083     acpi_rs_convert_memory32,   /* 0x05, ACPI_RESOURCE_NAME_MEMORY32 */
0084     acpi_rs_convert_fixed_memory32, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY32 */
0085     acpi_rs_convert_address32,  /* 0x07, ACPI_RESOURCE_NAME_ADDRESS32 */
0086     acpi_rs_convert_address16,  /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */
0087     acpi_rs_convert_ext_irq,    /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */
0088     acpi_rs_convert_address64,  /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
0089     acpi_rs_convert_ext_address64,  /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
0090     acpi_rs_convert_gpio,   /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
0091     acpi_rs_convert_pin_function,   /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
0092     NULL,           /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
0093     acpi_rs_convert_pin_config, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
0094     acpi_rs_convert_pin_group,  /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
0095     acpi_rs_convert_pin_group_function, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
0096     acpi_rs_convert_pin_group_config,   /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
0097 };
0098 
0099 /* Subtype table for serial_bus -- I2C, SPI, UART, and CSI2 */
0100 
0101 struct acpi_rsconvert_info *acpi_gbl_convert_resource_serial_bus_dispatch[] = {
0102     NULL,
0103     acpi_rs_convert_i2c_serial_bus,
0104     acpi_rs_convert_spi_serial_bus,
0105     acpi_rs_convert_uart_serial_bus,
0106     acpi_rs_convert_csi2_serial_bus
0107 };
0108 
0109 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER)
0110 
0111 /* Dispatch table for resource dump functions */
0112 
0113 struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = {
0114     acpi_rs_dump_irq,   /* ACPI_RESOURCE_TYPE_IRQ */
0115     acpi_rs_dump_dma,   /* ACPI_RESOURCE_TYPE_DMA */
0116     acpi_rs_dump_start_dpf, /* ACPI_RESOURCE_TYPE_START_DEPENDENT */
0117     acpi_rs_dump_end_dpf,   /* ACPI_RESOURCE_TYPE_END_DEPENDENT */
0118     acpi_rs_dump_io,    /* ACPI_RESOURCE_TYPE_IO */
0119     acpi_rs_dump_fixed_io,  /* ACPI_RESOURCE_TYPE_FIXED_IO */
0120     acpi_rs_dump_vendor,    /* ACPI_RESOURCE_TYPE_VENDOR */
0121     acpi_rs_dump_end_tag,   /* ACPI_RESOURCE_TYPE_END_TAG */
0122     acpi_rs_dump_memory24,  /* ACPI_RESOURCE_TYPE_MEMORY24 */
0123     acpi_rs_dump_memory32,  /* ACPI_RESOURCE_TYPE_MEMORY32 */
0124     acpi_rs_dump_fixed_memory32,    /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */
0125     acpi_rs_dump_address16, /* ACPI_RESOURCE_TYPE_ADDRESS16 */
0126     acpi_rs_dump_address32, /* ACPI_RESOURCE_TYPE_ADDRESS32 */
0127     acpi_rs_dump_address64, /* ACPI_RESOURCE_TYPE_ADDRESS64 */
0128     acpi_rs_dump_ext_address64, /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
0129     acpi_rs_dump_ext_irq,   /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
0130     acpi_rs_dump_generic_reg,   /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
0131     acpi_rs_dump_gpio,  /* ACPI_RESOURCE_TYPE_GPIO */
0132     acpi_rs_dump_fixed_dma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */
0133     NULL,           /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
0134     acpi_rs_dump_pin_function,  /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
0135     acpi_rs_dump_pin_config,    /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
0136     acpi_rs_dump_pin_group, /* ACPI_RESOURCE_TYPE_PIN_GROUP */
0137     acpi_rs_dump_pin_group_function,    /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
0138     acpi_rs_dump_pin_group_config,  /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
0139 };
0140 
0141 struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
0142     NULL,
0143     acpi_rs_dump_i2c_serial_bus,    /* AML_RESOURCE_I2C_BUS_TYPE */
0144     acpi_rs_dump_spi_serial_bus,    /* AML_RESOURCE_SPI_BUS_TYPE */
0145     acpi_rs_dump_uart_serial_bus,   /* AML_RESOURCE_UART_BUS_TYPE */
0146     acpi_rs_dump_csi2_serial_bus,   /* AML_RESOURCE_CSI2_BUS_TYPE */
0147 };
0148 #endif
0149 
0150 /*
0151  * Base sizes for external AML resource descriptors, indexed by internal type.
0152  * Includes size of the descriptor header (1 byte for small descriptors,
0153  * 3 bytes for large descriptors)
0154  */
0155 const u8 acpi_gbl_aml_resource_sizes[] = {
0156     sizeof(struct aml_resource_irq),    /* ACPI_RESOURCE_TYPE_IRQ (optional Byte 3 always created) */
0157     sizeof(struct aml_resource_dma),    /* ACPI_RESOURCE_TYPE_DMA */
0158     sizeof(struct aml_resource_start_dependent),    /* ACPI_RESOURCE_TYPE_START_DEPENDENT (optional Byte 1 always created) */
0159     sizeof(struct aml_resource_end_dependent),  /* ACPI_RESOURCE_TYPE_END_DEPENDENT */
0160     sizeof(struct aml_resource_io), /* ACPI_RESOURCE_TYPE_IO */
0161     sizeof(struct aml_resource_fixed_io),   /* ACPI_RESOURCE_TYPE_FIXED_IO */
0162     sizeof(struct aml_resource_vendor_small),   /* ACPI_RESOURCE_TYPE_VENDOR */
0163     sizeof(struct aml_resource_end_tag),    /* ACPI_RESOURCE_TYPE_END_TAG */
0164     sizeof(struct aml_resource_memory24),   /* ACPI_RESOURCE_TYPE_MEMORY24 */
0165     sizeof(struct aml_resource_memory32),   /* ACPI_RESOURCE_TYPE_MEMORY32 */
0166     sizeof(struct aml_resource_fixed_memory32), /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */
0167     sizeof(struct aml_resource_address16),  /* ACPI_RESOURCE_TYPE_ADDRESS16 */
0168     sizeof(struct aml_resource_address32),  /* ACPI_RESOURCE_TYPE_ADDRESS32 */
0169     sizeof(struct aml_resource_address64),  /* ACPI_RESOURCE_TYPE_ADDRESS64 */
0170     sizeof(struct aml_resource_extended_address64), /*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
0171     sizeof(struct aml_resource_extended_irq),   /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
0172     sizeof(struct aml_resource_generic_register),   /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
0173     sizeof(struct aml_resource_gpio),   /* ACPI_RESOURCE_TYPE_GPIO */
0174     sizeof(struct aml_resource_fixed_dma),  /* ACPI_RESOURCE_TYPE_FIXED_DMA */
0175     sizeof(struct aml_resource_common_serialbus),   /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
0176     sizeof(struct aml_resource_pin_function),   /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
0177     sizeof(struct aml_resource_pin_config), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
0178     sizeof(struct aml_resource_pin_group),  /* ACPI_RESOURCE_TYPE_PIN_GROUP */
0179     sizeof(struct aml_resource_pin_group_function), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
0180     sizeof(struct aml_resource_pin_group_config),   /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
0181 };
0182 
0183 const u8 acpi_gbl_resource_struct_sizes[] = {
0184     /* Small descriptors */
0185 
0186     0,
0187     0,
0188     0,
0189     0,
0190     ACPI_RS_SIZE(struct acpi_resource_irq),
0191     ACPI_RS_SIZE(struct acpi_resource_dma),
0192     ACPI_RS_SIZE(struct acpi_resource_start_dependent),
0193     ACPI_RS_SIZE_MIN,
0194     ACPI_RS_SIZE(struct acpi_resource_io),
0195     ACPI_RS_SIZE(struct acpi_resource_fixed_io),
0196     ACPI_RS_SIZE(struct acpi_resource_fixed_dma),
0197     0,
0198     0,
0199     0,
0200     ACPI_RS_SIZE(struct acpi_resource_vendor),
0201     ACPI_RS_SIZE_MIN,
0202 
0203     /* Large descriptors */
0204 
0205     0,
0206     ACPI_RS_SIZE(struct acpi_resource_memory24),
0207     ACPI_RS_SIZE(struct acpi_resource_generic_register),
0208     0,
0209     ACPI_RS_SIZE(struct acpi_resource_vendor),
0210     ACPI_RS_SIZE(struct acpi_resource_memory32),
0211     ACPI_RS_SIZE(struct acpi_resource_fixed_memory32),
0212     ACPI_RS_SIZE(struct acpi_resource_address32),
0213     ACPI_RS_SIZE(struct acpi_resource_address16),
0214     ACPI_RS_SIZE(struct acpi_resource_extended_irq),
0215     ACPI_RS_SIZE(struct acpi_resource_address64),
0216     ACPI_RS_SIZE(struct acpi_resource_extended_address64),
0217     ACPI_RS_SIZE(struct acpi_resource_gpio),
0218     ACPI_RS_SIZE(struct acpi_resource_pin_function),
0219     ACPI_RS_SIZE(struct acpi_resource_common_serialbus),
0220     ACPI_RS_SIZE(struct acpi_resource_pin_config),
0221     ACPI_RS_SIZE(struct acpi_resource_pin_group),
0222     ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
0223     ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
0224 };
0225 
0226 const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
0227     0,
0228     sizeof(struct aml_resource_i2c_serialbus),
0229     sizeof(struct aml_resource_spi_serialbus),
0230     sizeof(struct aml_resource_uart_serialbus),
0231     sizeof(struct aml_resource_csi2_serialbus),
0232 };
0233 
0234 const u8 acpi_gbl_resource_struct_serial_bus_sizes[] = {
0235     0,
0236     ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
0237     ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
0238     ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
0239     ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus),
0240 };