1 /******************************************************************************* 2 * 3 * Module Name: rsmem24 - Memory resource descriptors 4 * 5 ******************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2022, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #include "acpi.h" 45 #include "accommon.h" 46 #include "acresrc.h" 47 48 #define _COMPONENT ACPI_RESOURCES 49 ACPI_MODULE_NAME ("rsmemory") 50 51 52 /******************************************************************************* 53 * 54 * AcpiRsConvertMemory24 55 * 56 ******************************************************************************/ 57 58 ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[4] = 59 { 60 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, 61 ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), 62 ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory24)}, 63 64 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, 65 sizeof (AML_RESOURCE_MEMORY24), 66 0}, 67 68 /* Read/Write bit */ 69 70 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory24.WriteProtect), 71 AML_OFFSET (Memory24.Flags), 72 0}, 73 /* 74 * These fields are contiguous in both the source and destination: 75 * Minimum Base Address 76 * Maximum Base Address 77 * Address Base Alignment 78 * Range Length 79 */ 80 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Memory24.Minimum), 81 AML_OFFSET (Memory24.Minimum), 82 4} 83 }; 84 85 86 /******************************************************************************* 87 * 88 * AcpiRsConvertMemory32 89 * 90 ******************************************************************************/ 91 92 ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[4] = 93 { 94 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, 95 ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), 96 ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory32)}, 97 98 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, 99 sizeof (AML_RESOURCE_MEMORY32), 100 0}, 101 102 /* Read/Write bit */ 103 104 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory32.WriteProtect), 105 AML_OFFSET (Memory32.Flags), 106 0}, 107 /* 108 * These fields are contiguous in both the source and destination: 109 * Minimum Base Address 110 * Maximum Base Address 111 * Address Base Alignment 112 * Range Length 113 */ 114 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.Memory32.Minimum), 115 AML_OFFSET (Memory32.Minimum), 116 4} 117 }; 118 119 120 /******************************************************************************* 121 * 122 * AcpiRsConvertFixedMemory32 123 * 124 ******************************************************************************/ 125 126 ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[4] = 127 { 128 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, 129 ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), 130 ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedMemory32)}, 131 132 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, 133 sizeof (AML_RESOURCE_FIXED_MEMORY32), 134 0}, 135 136 /* Read/Write bit */ 137 138 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.FixedMemory32.WriteProtect), 139 AML_OFFSET (FixedMemory32.Flags), 140 0}, 141 /* 142 * These fields are contiguous in both the source and destination: 143 * Base Address 144 * Range Length 145 */ 146 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.FixedMemory32.Address), 147 AML_OFFSET (FixedMemory32.Address), 148 2} 149 }; 150 151 152 /******************************************************************************* 153 * 154 * AcpiRsGetVendorSmall 155 * 156 ******************************************************************************/ 157 158 ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[3] = 159 { 160 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, 161 ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), 162 ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorSmall)}, 163 164 /* Length of the vendor data (byte count) */ 165 166 {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 167 0, 168 sizeof (UINT8)}, 169 170 /* Vendor data */ 171 172 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), 173 sizeof (AML_RESOURCE_SMALL_HEADER), 174 0} 175 }; 176 177 178 /******************************************************************************* 179 * 180 * AcpiRsGetVendorLarge 181 * 182 ******************************************************************************/ 183 184 ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[3] = 185 { 186 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, 187 ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), 188 ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorLarge)}, 189 190 /* Length of the vendor data (byte count) */ 191 192 {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 193 0, 194 sizeof (UINT8)}, 195 196 /* Vendor data */ 197 198 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), 199 sizeof (AML_RESOURCE_LARGE_HEADER), 200 0} 201 }; 202 203 204 /******************************************************************************* 205 * 206 * AcpiRsSetVendor 207 * 208 ******************************************************************************/ 209 210 ACPI_RSCONVERT_INFO AcpiRsSetVendor[7] = 211 { 212 /* Default is a small vendor descriptor */ 213 214 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, 215 sizeof (AML_RESOURCE_SMALL_HEADER), 216 ACPI_RSC_TABLE_SIZE (AcpiRsSetVendor)}, 217 218 /* Get the length and copy the data */ 219 220 {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 221 0, 222 0}, 223 224 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), 225 sizeof (AML_RESOURCE_SMALL_HEADER), 226 0}, 227 228 /* 229 * All done if the Vendor byte length is 7 or less, meaning that it will 230 * fit within a small descriptor 231 */ 232 {ACPI_RSC_EXIT_LE, 0, 0, 7}, 233 234 /* Must create a large vendor descriptor */ 235 236 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, 237 sizeof (AML_RESOURCE_LARGE_HEADER), 238 0}, 239 240 {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 241 0, 242 0}, 243 244 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), 245 sizeof (AML_RESOURCE_LARGE_HEADER), 246 0} 247 }; 248