cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rsmemory.c (5563B)


      1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
      2/*******************************************************************************
      3 *
      4 * Module Name: rsmem24 - Memory resource descriptors
      5 *
      6 ******************************************************************************/
      7
      8#include <acpi/acpi.h>
      9#include "accommon.h"
     10#include "acresrc.h"
     11
     12#define _COMPONENT          ACPI_RESOURCES
     13ACPI_MODULE_NAME("rsmemory")
     14
     15/*******************************************************************************
     16 *
     17 * acpi_rs_convert_memory24
     18 *
     19 ******************************************************************************/
     20struct acpi_rsconvert_info acpi_rs_convert_memory24[4] = {
     21	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24,
     22	 ACPI_RS_SIZE(struct acpi_resource_memory24),
     23	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)},
     24
     25	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24,
     26	 sizeof(struct aml_resource_memory24),
     27	 0},
     28
     29	/* Read/Write bit */
     30
     31	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect),
     32	 AML_OFFSET(memory24.flags),
     33	 0},
     34	/*
     35	 * These fields are contiguous in both the source and destination:
     36	 * Minimum Base Address
     37	 * Maximum Base Address
     38	 * Address Base Alignment
     39	 * Range Length
     40	 */
     41	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum),
     42	 AML_OFFSET(memory24.minimum),
     43	 4}
     44};
     45
     46/*******************************************************************************
     47 *
     48 * acpi_rs_convert_memory32
     49 *
     50 ******************************************************************************/
     51
     52struct acpi_rsconvert_info acpi_rs_convert_memory32[4] = {
     53	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32,
     54	 ACPI_RS_SIZE(struct acpi_resource_memory32),
     55	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)},
     56
     57	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32,
     58	 sizeof(struct aml_resource_memory32),
     59	 0},
     60
     61	/* Read/Write bit */
     62
     63	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect),
     64	 AML_OFFSET(memory32.flags),
     65	 0},
     66	/*
     67	 * These fields are contiguous in both the source and destination:
     68	 * Minimum Base Address
     69	 * Maximum Base Address
     70	 * Address Base Alignment
     71	 * Range Length
     72	 */
     73	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum),
     74	 AML_OFFSET(memory32.minimum),
     75	 4}
     76};
     77
     78/*******************************************************************************
     79 *
     80 * acpi_rs_convert_fixed_memory32
     81 *
     82 ******************************************************************************/
     83
     84struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = {
     85	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32,
     86	 ACPI_RS_SIZE(struct acpi_resource_fixed_memory32),
     87	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)},
     88
     89	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32,
     90	 sizeof(struct aml_resource_fixed_memory32),
     91	 0},
     92
     93	/* Read/Write bit */
     94
     95	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect),
     96	 AML_OFFSET(fixed_memory32.flags),
     97	 0},
     98	/*
     99	 * These fields are contiguous in both the source and destination:
    100	 * Base Address
    101	 * Range Length
    102	 */
    103	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address),
    104	 AML_OFFSET(fixed_memory32.address),
    105	 2}
    106};
    107
    108/*******************************************************************************
    109 *
    110 * acpi_rs_get_vendor_small
    111 *
    112 ******************************************************************************/
    113
    114struct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = {
    115	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
    116	 ACPI_RS_SIZE(struct acpi_resource_vendor),
    117	 ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)},
    118
    119	/* Length of the vendor data (byte count) */
    120
    121	{ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
    122	 0,
    123	 sizeof(u8)},
    124
    125	/* Vendor data */
    126
    127	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
    128	 sizeof(struct aml_resource_small_header),
    129	 0}
    130};
    131
    132/*******************************************************************************
    133 *
    134 * acpi_rs_get_vendor_large
    135 *
    136 ******************************************************************************/
    137
    138struct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = {
    139	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
    140	 ACPI_RS_SIZE(struct acpi_resource_vendor),
    141	 ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)},
    142
    143	/* Length of the vendor data (byte count) */
    144
    145	{ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
    146	 0,
    147	 sizeof(u8)},
    148
    149	/* Vendor data */
    150
    151	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
    152	 sizeof(struct aml_resource_large_header),
    153	 0}
    154};
    155
    156/*******************************************************************************
    157 *
    158 * acpi_rs_set_vendor
    159 *
    160 ******************************************************************************/
    161
    162struct acpi_rsconvert_info acpi_rs_set_vendor[7] = {
    163	/* Default is a small vendor descriptor */
    164
    165	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL,
    166	 sizeof(struct aml_resource_small_header),
    167	 ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)},
    168
    169	/* Get the length and copy the data */
    170
    171	{ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
    172	 0,
    173	 0},
    174
    175	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
    176	 sizeof(struct aml_resource_small_header),
    177	 0},
    178
    179	/*
    180	 * All done if the Vendor byte length is 7 or less, meaning that it will
    181	 * fit within a small descriptor
    182	 */
    183	{ACPI_RSC_EXIT_LE, 0, 0, 7},
    184
    185	/* Must create a large vendor descriptor */
    186
    187	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE,
    188	 sizeof(struct aml_resource_large_header),
    189	 0},
    190
    191	{ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
    192	 0,
    193	 0},
    194
    195	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
    196	 sizeof(struct aml_resource_large_header),
    197	 0}
    198};