brintos

brintos / linux-shallow public Read only

0
0
Text · 7.2 KiB · 687aaed Raw
255 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/*******************************************************************************3 *4 * Module Name: rsio - IO and DMA resource descriptors5 *6 ******************************************************************************/7 8#include <acpi/acpi.h>9#include "accommon.h"10#include "acresrc.h"11 12#define _COMPONENT          ACPI_RESOURCES13ACPI_MODULE_NAME("rsio")14 15/*******************************************************************************16 *17 * acpi_rs_convert_io18 *19 ******************************************************************************/20struct acpi_rsconvert_info acpi_rs_convert_io[5] = {21	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IO,22	 ACPI_RS_SIZE(struct acpi_resource_io),23	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_io)},24 25	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IO,26	 sizeof(struct aml_resource_io),27	 0},28 29	/* Decode flag */30 31	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.io.io_decode),32	 AML_OFFSET(io.flags),33	 0},34	/*35	 * These fields are contiguous in both the source and destination:36	 * Address Alignment37	 * Length38	 * Minimum Base Address39	 * Maximum Base Address40	 */41	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.io.alignment),42	 AML_OFFSET(io.alignment),43	 2},44 45	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.io.minimum),46	 AML_OFFSET(io.minimum),47	 2}48};49 50/*******************************************************************************51 *52 * acpi_rs_convert_fixed_io53 *54 ******************************************************************************/55 56struct acpi_rsconvert_info acpi_rs_convert_fixed_io[4] = {57	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_IO,58	 ACPI_RS_SIZE(struct acpi_resource_fixed_io),59	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_io)},60 61	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_IO,62	 sizeof(struct aml_resource_fixed_io),63	 0},64	/*65	 * These fields are contiguous in both the source and destination:66	 * Base Address67	 * Length68	 */69	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.fixed_io.address_length),70	 AML_OFFSET(fixed_io.address_length),71	 1},72 73	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.fixed_io.address),74	 AML_OFFSET(fixed_io.address),75	 1}76};77 78/*******************************************************************************79 *80 * acpi_rs_convert_generic_reg81 *82 ******************************************************************************/83 84struct acpi_rsconvert_info acpi_rs_convert_generic_reg[4] = {85	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GENERIC_REGISTER,86	 ACPI_RS_SIZE(struct acpi_resource_generic_register),87	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_generic_reg)},88 89	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GENERIC_REGISTER,90	 sizeof(struct aml_resource_generic_register),91	 0},92	/*93	 * These fields are contiguous in both the source and destination:94	 * Address Space ID95	 * Register Bit Width96	 * Register Bit Offset97	 * Access Size98	 */99	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.generic_reg.space_id),100	 AML_OFFSET(generic_reg.address_space_id),101	 4},102 103	/* Get the Register Address */104 105	{ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.generic_reg.address),106	 AML_OFFSET(generic_reg.address),107	 1}108};109 110/*******************************************************************************111 *112 * acpi_rs_convert_end_dpf113 *114 ******************************************************************************/115 116struct acpi_rsconvert_info acpi_rs_convert_end_dpf[2] = {117	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_DEPENDENT,118	 ACPI_RS_SIZE_MIN,119	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_end_dpf)},120 121	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_DEPENDENT,122	 sizeof(struct aml_resource_end_dependent),123	 0}124};125 126/*******************************************************************************127 *128 * acpi_rs_convert_end_tag129 *130 ******************************************************************************/131 132struct acpi_rsconvert_info acpi_rs_convert_end_tag[2] = {133	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_TAG,134	 ACPI_RS_SIZE_MIN,135	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_end_tag)},136 137	/*138	 * Note: The checksum field is set to zero, meaning that the resource139	 * data is treated as if the checksum operation succeeded.140	 * (ACPI Spec 1.0b Section 6.4.2.8)141	 */142	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_TAG,143	 sizeof(struct aml_resource_end_tag),144	 0}145};146 147/*******************************************************************************148 *149 * acpi_rs_get_start_dpf150 *151 ******************************************************************************/152 153struct acpi_rsconvert_info acpi_rs_get_start_dpf[6] = {154	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_START_DEPENDENT,155	 ACPI_RS_SIZE(struct acpi_resource_start_dependent),156	 ACPI_RSC_TABLE_SIZE(acpi_rs_get_start_dpf)},157 158	/* Defaults for Compatibility and Performance priorities */159 160	{ACPI_RSC_SET8, ACPI_RS_OFFSET(data.start_dpf.compatibility_priority),161	 ACPI_ACCEPTABLE_CONFIGURATION,162	 2},163 164	/* Get the descriptor length (0 or 1 for Start Dpf descriptor) */165 166	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.start_dpf.descriptor_length),167	 AML_OFFSET(start_dpf.descriptor_type),168	 0},169 170	/* All done if there is no flag byte present in the descriptor */171 172	{ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 1},173 174	/* Flag byte is present, get the flags */175 176	{ACPI_RSC_2BITFLAG,177	 ACPI_RS_OFFSET(data.start_dpf.compatibility_priority),178	 AML_OFFSET(start_dpf.flags),179	 0},180 181	{ACPI_RSC_2BITFLAG,182	 ACPI_RS_OFFSET(data.start_dpf.performance_robustness),183	 AML_OFFSET(start_dpf.flags),184	 2}185};186 187/*******************************************************************************188 *189 * acpi_rs_set_start_dpf190 *191 ******************************************************************************/192 193struct acpi_rsconvert_info acpi_rs_set_start_dpf[10] = {194	/* Start with a default descriptor of length 1 */195 196	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_START_DEPENDENT,197	 sizeof(struct aml_resource_start_dependent),198	 ACPI_RSC_TABLE_SIZE(acpi_rs_set_start_dpf)},199 200	/* Set the default flag values */201 202	{ACPI_RSC_2BITFLAG,203	 ACPI_RS_OFFSET(data.start_dpf.compatibility_priority),204	 AML_OFFSET(start_dpf.flags),205	 0},206 207	{ACPI_RSC_2BITFLAG,208	 ACPI_RS_OFFSET(data.start_dpf.performance_robustness),209	 AML_OFFSET(start_dpf.flags),210	 2},211	/*212	 * All done if the output descriptor length is required to be 1213	 * (i.e., optimization to 0 bytes cannot be attempted)214	 */215	{ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE,216	 ACPI_RS_OFFSET(data.start_dpf.descriptor_length),217	 1},218 219	/* Set length to 0 bytes (no flags byte) */220 221	{ACPI_RSC_LENGTH, 0, 0,222	 sizeof(struct aml_resource_start_dependent_noprio)},223 224	/*225	 * All done if the output descriptor length is required to be 0.226	 *227	 * TBD: Perhaps we should check for error if input flags are not228	 * compatible with a 0-byte descriptor.229	 */230	{ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE,231	 ACPI_RS_OFFSET(data.start_dpf.descriptor_length),232	 0},233 234	/* Reset length to 1 byte (descriptor with flags byte) */235 236	{ACPI_RSC_LENGTH, 0, 0, sizeof(struct aml_resource_start_dependent)},237 238	/*239	 * All done if flags byte is necessary -- if either priority value240	 * is not ACPI_ACCEPTABLE_CONFIGURATION241	 */242	{ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE,243	 ACPI_RS_OFFSET(data.start_dpf.compatibility_priority),244	 ACPI_ACCEPTABLE_CONFIGURATION},245 246	{ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE,247	 ACPI_RS_OFFSET(data.start_dpf.performance_robustness),248	 ACPI_ACCEPTABLE_CONFIGURATION},249 250	/* Flag byte is not necessary */251 252	{ACPI_RSC_LENGTH, 0, 0,253	 sizeof(struct aml_resource_start_dependent_noprio)}254};255