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