162306a36Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 262306a36Sopenharmony_ci/******************************************************************************* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Module Name: rsmem24 - Memory resource descriptors 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci ******************************************************************************/ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <acpi/acpi.h> 962306a36Sopenharmony_ci#include "accommon.h" 1062306a36Sopenharmony_ci#include "acresrc.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define _COMPONENT ACPI_RESOURCES 1362306a36Sopenharmony_ciACPI_MODULE_NAME("rsmemory") 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/******************************************************************************* 1662306a36Sopenharmony_ci * 1762306a36Sopenharmony_ci * acpi_rs_convert_memory24 1862306a36Sopenharmony_ci * 1962306a36Sopenharmony_ci ******************************************************************************/ 2062306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_convert_memory24[4] = { 2162306a36Sopenharmony_ci {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, 2262306a36Sopenharmony_ci ACPI_RS_SIZE(struct acpi_resource_memory24), 2362306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)}, 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, 2662306a36Sopenharmony_ci sizeof(struct aml_resource_memory24), 2762306a36Sopenharmony_ci 0}, 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* Read/Write bit */ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect), 3262306a36Sopenharmony_ci AML_OFFSET(memory24.flags), 3362306a36Sopenharmony_ci 0}, 3462306a36Sopenharmony_ci /* 3562306a36Sopenharmony_ci * These fields are contiguous in both the source and destination: 3662306a36Sopenharmony_ci * Minimum Base Address 3762306a36Sopenharmony_ci * Maximum Base Address 3862306a36Sopenharmony_ci * Address Base Alignment 3962306a36Sopenharmony_ci * Range Length 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_ci {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum), 4262306a36Sopenharmony_ci AML_OFFSET(memory24.minimum), 4362306a36Sopenharmony_ci 4} 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/******************************************************************************* 4762306a36Sopenharmony_ci * 4862306a36Sopenharmony_ci * acpi_rs_convert_memory32 4962306a36Sopenharmony_ci * 5062306a36Sopenharmony_ci ******************************************************************************/ 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_convert_memory32[4] = { 5362306a36Sopenharmony_ci {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, 5462306a36Sopenharmony_ci ACPI_RS_SIZE(struct acpi_resource_memory32), 5562306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)}, 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, 5862306a36Sopenharmony_ci sizeof(struct aml_resource_memory32), 5962306a36Sopenharmony_ci 0}, 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci /* Read/Write bit */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect), 6462306a36Sopenharmony_ci AML_OFFSET(memory32.flags), 6562306a36Sopenharmony_ci 0}, 6662306a36Sopenharmony_ci /* 6762306a36Sopenharmony_ci * These fields are contiguous in both the source and destination: 6862306a36Sopenharmony_ci * Minimum Base Address 6962306a36Sopenharmony_ci * Maximum Base Address 7062306a36Sopenharmony_ci * Address Base Alignment 7162306a36Sopenharmony_ci * Range Length 7262306a36Sopenharmony_ci */ 7362306a36Sopenharmony_ci {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum), 7462306a36Sopenharmony_ci AML_OFFSET(memory32.minimum), 7562306a36Sopenharmony_ci 4} 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/******************************************************************************* 7962306a36Sopenharmony_ci * 8062306a36Sopenharmony_ci * acpi_rs_convert_fixed_memory32 8162306a36Sopenharmony_ci * 8262306a36Sopenharmony_ci ******************************************************************************/ 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = { 8562306a36Sopenharmony_ci {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, 8662306a36Sopenharmony_ci ACPI_RS_SIZE(struct acpi_resource_fixed_memory32), 8762306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)}, 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, 9062306a36Sopenharmony_ci sizeof(struct aml_resource_fixed_memory32), 9162306a36Sopenharmony_ci 0}, 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci /* Read/Write bit */ 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect), 9662306a36Sopenharmony_ci AML_OFFSET(fixed_memory32.flags), 9762306a36Sopenharmony_ci 0}, 9862306a36Sopenharmony_ci /* 9962306a36Sopenharmony_ci * These fields are contiguous in both the source and destination: 10062306a36Sopenharmony_ci * Base Address 10162306a36Sopenharmony_ci * Range Length 10262306a36Sopenharmony_ci */ 10362306a36Sopenharmony_ci {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address), 10462306a36Sopenharmony_ci AML_OFFSET(fixed_memory32.address), 10562306a36Sopenharmony_ci 2} 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci/******************************************************************************* 10962306a36Sopenharmony_ci * 11062306a36Sopenharmony_ci * acpi_rs_get_vendor_small 11162306a36Sopenharmony_ci * 11262306a36Sopenharmony_ci ******************************************************************************/ 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = { 11562306a36Sopenharmony_ci {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, 11662306a36Sopenharmony_ci ACPI_RS_SIZE(struct acpi_resource_vendor), 11762306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)}, 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci /* Length of the vendor data (byte count) */ 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), 12262306a36Sopenharmony_ci 0, 12362306a36Sopenharmony_ci sizeof(u8)}, 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci /* Vendor data */ 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), 12862306a36Sopenharmony_ci sizeof(struct aml_resource_small_header), 12962306a36Sopenharmony_ci 0} 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci/******************************************************************************* 13362306a36Sopenharmony_ci * 13462306a36Sopenharmony_ci * acpi_rs_get_vendor_large 13562306a36Sopenharmony_ci * 13662306a36Sopenharmony_ci ******************************************************************************/ 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = { 13962306a36Sopenharmony_ci {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, 14062306a36Sopenharmony_ci ACPI_RS_SIZE(struct acpi_resource_vendor), 14162306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)}, 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci /* Length of the vendor data (byte count) */ 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), 14662306a36Sopenharmony_ci 0, 14762306a36Sopenharmony_ci sizeof(u8)}, 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci /* Vendor data */ 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), 15262306a36Sopenharmony_ci sizeof(struct aml_resource_large_header), 15362306a36Sopenharmony_ci 0} 15462306a36Sopenharmony_ci}; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci/******************************************************************************* 15762306a36Sopenharmony_ci * 15862306a36Sopenharmony_ci * acpi_rs_set_vendor 15962306a36Sopenharmony_ci * 16062306a36Sopenharmony_ci ******************************************************************************/ 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_cistruct acpi_rsconvert_info acpi_rs_set_vendor[7] = { 16362306a36Sopenharmony_ci /* Default is a small vendor descriptor */ 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, 16662306a36Sopenharmony_ci sizeof(struct aml_resource_small_header), 16762306a36Sopenharmony_ci ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)}, 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci /* Get the length and copy the data */ 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), 17262306a36Sopenharmony_ci 0, 17362306a36Sopenharmony_ci 0}, 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), 17662306a36Sopenharmony_ci sizeof(struct aml_resource_small_header), 17762306a36Sopenharmony_ci 0}, 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci /* 18062306a36Sopenharmony_ci * All done if the Vendor byte length is 7 or less, meaning that it will 18162306a36Sopenharmony_ci * fit within a small descriptor 18262306a36Sopenharmony_ci */ 18362306a36Sopenharmony_ci {ACPI_RSC_EXIT_LE, 0, 0, 7}, 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci /* Must create a large vendor descriptor */ 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, 18862306a36Sopenharmony_ci sizeof(struct aml_resource_large_header), 18962306a36Sopenharmony_ci 0}, 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), 19262306a36Sopenharmony_ci 0, 19362306a36Sopenharmony_ci 0}, 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), 19662306a36Sopenharmony_ci sizeof(struct aml_resource_large_header), 19762306a36Sopenharmony_ci 0} 19862306a36Sopenharmony_ci}; 199