Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*******************************************************************************
  2.  *
  3.  * Module Name: rsmem24 - Memory resource descriptors
  4.  *
  5.  ******************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2015, 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 MERCHANTIBILITY 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/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.  * acpi_rs_convert_memory24
  54.  *
  55.  ******************************************************************************/
  56. struct acpi_rsconvert_info acpi_rs_convert_memory24[4] = {
  57.         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24,
  58.          ACPI_RS_SIZE(struct acpi_resource_memory24),
  59.          ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)},
  60.  
  61.         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24,
  62.          sizeof(struct aml_resource_memory24),
  63.          0},
  64.  
  65.         /* Read/Write bit */
  66.  
  67.         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect),
  68.          AML_OFFSET(memory24.flags),
  69.          0},
  70.         /*
  71.          * These fields are contiguous in both the source and destination:
  72.          * Minimum Base Address
  73.          * Maximum Base Address
  74.          * Address Base Alignment
  75.          * Range Length
  76.          */
  77.         {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum),
  78.          AML_OFFSET(memory24.minimum),
  79.          4}
  80. };
  81.  
  82. /*******************************************************************************
  83.  *
  84.  * acpi_rs_convert_memory32
  85.  *
  86.  ******************************************************************************/
  87.  
  88. struct acpi_rsconvert_info acpi_rs_convert_memory32[4] = {
  89.         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32,
  90.          ACPI_RS_SIZE(struct acpi_resource_memory32),
  91.          ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)},
  92.  
  93.         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32,
  94.          sizeof(struct aml_resource_memory32),
  95.          0},
  96.  
  97.         /* Read/Write bit */
  98.  
  99.         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect),
  100.          AML_OFFSET(memory32.flags),
  101.          0},
  102.         /*
  103.          * These fields are contiguous in both the source and destination:
  104.          * Minimum Base Address
  105.          * Maximum Base Address
  106.          * Address Base Alignment
  107.          * Range Length
  108.          */
  109.         {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum),
  110.          AML_OFFSET(memory32.minimum),
  111.          4}
  112. };
  113.  
  114. /*******************************************************************************
  115.  *
  116.  * acpi_rs_convert_fixed_memory32
  117.  *
  118.  ******************************************************************************/
  119.  
  120. struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = {
  121.         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32,
  122.          ACPI_RS_SIZE(struct acpi_resource_fixed_memory32),
  123.          ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)},
  124.  
  125.         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32,
  126.          sizeof(struct aml_resource_fixed_memory32),
  127.          0},
  128.  
  129.         /* Read/Write bit */
  130.  
  131.         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect),
  132.          AML_OFFSET(fixed_memory32.flags),
  133.          0},
  134.         /*
  135.          * These fields are contiguous in both the source and destination:
  136.          * Base Address
  137.          * Range Length
  138.          */
  139.         {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address),
  140.          AML_OFFSET(fixed_memory32.address),
  141.          2}
  142. };
  143.  
  144. /*******************************************************************************
  145.  *
  146.  * acpi_rs_get_vendor_small
  147.  *
  148.  ******************************************************************************/
  149.  
  150. struct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = {
  151.         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
  152.          ACPI_RS_SIZE(struct acpi_resource_vendor),
  153.          ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)},
  154.  
  155.         /* Length of the vendor data (byte count) */
  156.  
  157.         {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  158.          0,
  159.          sizeof(u8)},
  160.  
  161.         /* Vendor data */
  162.  
  163.         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  164.          sizeof(struct aml_resource_small_header),
  165.          0}
  166. };
  167.  
  168. /*******************************************************************************
  169.  *
  170.  * acpi_rs_get_vendor_large
  171.  *
  172.  ******************************************************************************/
  173.  
  174. struct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = {
  175.         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
  176.          ACPI_RS_SIZE(struct acpi_resource_vendor),
  177.          ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)},
  178.  
  179.         /* Length of the vendor data (byte count) */
  180.  
  181.         {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  182.          0,
  183.          sizeof(u8)},
  184.  
  185.         /* Vendor data */
  186.  
  187.         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  188.          sizeof(struct aml_resource_large_header),
  189.          0}
  190. };
  191.  
  192. /*******************************************************************************
  193.  *
  194.  * acpi_rs_set_vendor
  195.  *
  196.  ******************************************************************************/
  197.  
  198. struct acpi_rsconvert_info acpi_rs_set_vendor[7] = {
  199.         /* Default is a small vendor descriptor */
  200.  
  201.         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL,
  202.          sizeof(struct aml_resource_small_header),
  203.          ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)},
  204.  
  205.         /* Get the length and copy the data */
  206.  
  207.         {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  208.          0,
  209.          0},
  210.  
  211.         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  212.          sizeof(struct aml_resource_small_header),
  213.          0},
  214.  
  215.         /*
  216.          * All done if the Vendor byte length is 7 or less, meaning that it will
  217.          * fit within a small descriptor
  218.          */
  219.         {ACPI_RSC_EXIT_LE, 0, 0, 7},
  220.  
  221.         /* Must create a large vendor descriptor */
  222.  
  223.         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE,
  224.          sizeof(struct aml_resource_large_header),
  225.          0},
  226.  
  227.         {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  228.          0,
  229.          0},
  230.  
  231.         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  232.          sizeof(struct aml_resource_large_header),
  233.          0}
  234. };
  235.