Subversion Repositories Kolibri OS

Rev

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

  1. /*******************************************************************************
  2.  *
  3.  * Module Name: rsmisc - Miscellaneous resource descriptors
  4.  *
  5.  ******************************************************************************/
  6.  
  7. /******************************************************************************
  8.  *
  9.  * 1. Copyright Notice
  10.  *
  11.  * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
  12.  * All rights reserved.
  13.  *
  14.  * 2. License
  15.  *
  16.  * 2.1. This is your license from Intel Corp. under its intellectual property
  17.  * rights.  You may have additional license terms from the party that provided
  18.  * you this software, covering your right to use that party's intellectual
  19.  * property rights.
  20.  *
  21.  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
  22.  * copy of the source code appearing in this file ("Covered Code") an
  23.  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
  24.  * base code distributed originally by Intel ("Original Intel Code") to copy,
  25.  * make derivatives, distribute, use and display any portion of the Covered
  26.  * Code in any form, with the right to sublicense such rights; and
  27.  *
  28.  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
  29.  * license (with the right to sublicense), under only those claims of Intel
  30.  * patents that are infringed by the Original Intel Code, to make, use, sell,
  31.  * offer to sell, and import the Covered Code and derivative works thereof
  32.  * solely to the minimum extent necessary to exercise the above copyright
  33.  * license, and in no event shall the patent license extend to any additions
  34.  * to or modifications of the Original Intel Code.  No other license or right
  35.  * is granted directly or by implication, estoppel or otherwise;
  36.  *
  37.  * The above copyright and patent license is granted only if the following
  38.  * conditions are met:
  39.  *
  40.  * 3. Conditions
  41.  *
  42.  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
  43.  * Redistribution of source code of any substantial portion of the Covered
  44.  * Code or modification with rights to further distribute source must include
  45.  * the above Copyright Notice, the above License, this list of Conditions,
  46.  * and the following Disclaimer and Export Compliance provision.  In addition,
  47.  * Licensee must cause all Covered Code to which Licensee contributes to
  48.  * contain a file documenting the changes Licensee made to create that Covered
  49.  * Code and the date of any change.  Licensee must include in that file the
  50.  * documentation of any changes made by any predecessor Licensee.  Licensee
  51.  * must include a prominent statement that the modification is derived,
  52.  * directly or indirectly, from Original Intel Code.
  53.  *
  54.  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
  55.  * Redistribution of source code of any substantial portion of the Covered
  56.  * Code or modification without rights to further distribute source must
  57.  * include the following Disclaimer and Export Compliance provision in the
  58.  * documentation and/or other materials provided with distribution.  In
  59.  * addition, Licensee may not authorize further sublicense of source of any
  60.  * portion of the Covered Code, and must include terms to the effect that the
  61.  * license from Licensee to its licensee is limited to the intellectual
  62.  * property embodied in the software Licensee provides to its licensee, and
  63.  * not to intellectual property embodied in modifications its licensee may
  64.  * make.
  65.  *
  66.  * 3.3. Redistribution of Executable. Redistribution in executable form of any
  67.  * substantial portion of the Covered Code or modification must reproduce the
  68.  * above Copyright Notice, and the following Disclaimer and Export Compliance
  69.  * provision in the documentation and/or other materials provided with the
  70.  * distribution.
  71.  *
  72.  * 3.4. Intel retains all right, title, and interest in and to the Original
  73.  * Intel Code.
  74.  *
  75.  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
  76.  * Intel shall be used in advertising or otherwise to promote the sale, use or
  77.  * other dealings in products derived from or relating to the Covered Code
  78.  * without prior written authorization from Intel.
  79.  *
  80.  * 4. Disclaimer and Export Compliance
  81.  *
  82.  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
  83.  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
  84.  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
  85.  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
  86.  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
  87.  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
  88.  * PARTICULAR PURPOSE.
  89.  *
  90.  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
  91.  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
  92.  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
  93.  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
  94.  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
  95.  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
  96.  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
  97.  * LIMITED REMEDY.
  98.  *
  99.  * 4.3. Licensee shall not export, either directly or indirectly, any of this
  100.  * software or system incorporating such software without first obtaining any
  101.  * required license or other approval from the U. S. Department of Commerce or
  102.  * any other agency or department of the United States Government.  In the
  103.  * event Licensee exports any such software from the United States or
  104.  * re-exports any such software from a foreign destination, Licensee shall
  105.  * ensure that the distribution and export/re-export of the software is in
  106.  * compliance with all laws, regulations, orders, or other restrictions of the
  107.  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
  108.  * any of its subsidiaries will export/re-export any technical data, process,
  109.  * software, or service, directly or indirectly, to any country for which the
  110.  * United States government or any agency thereof requires an export license,
  111.  * other governmental approval, or letter of assurance, without first obtaining
  112.  * such license, approval or letter.
  113.  *
  114.  *****************************************************************************/
  115.  
  116. #define __RSMISC_C__
  117.  
  118. #include "acpi.h"
  119. #include "accommon.h"
  120. #include "acresrc.h"
  121.  
  122. #define _COMPONENT          ACPI_RESOURCES
  123.         ACPI_MODULE_NAME    ("rsmisc")
  124.  
  125.  
  126. #define INIT_RESOURCE_TYPE(i)       i->ResourceOffset
  127. #define INIT_RESOURCE_LENGTH(i)     i->AmlOffset
  128. #define INIT_TABLE_LENGTH(i)        i->Value
  129.  
  130. #define COMPARE_OPCODE(i)           i->ResourceOffset
  131. #define COMPARE_TARGET(i)           i->AmlOffset
  132. #define COMPARE_VALUE(i)            i->Value
  133.  
  134.  
  135. /*******************************************************************************
  136.  *
  137.  * FUNCTION:    AcpiRsConvertAmlToResource
  138.  *
  139.  * PARAMETERS:  Resource            - Pointer to the resource descriptor
  140.  *              Aml                 - Where the AML descriptor is returned
  141.  *              Info                - Pointer to appropriate conversion table
  142.  *
  143.  * RETURN:      Status
  144.  *
  145.  * DESCRIPTION: Convert an external AML resource descriptor to the corresponding
  146.  *              internal resource descriptor
  147.  *
  148.  ******************************************************************************/
  149.  
  150. ACPI_STATUS
  151. AcpiRsConvertAmlToResource (
  152.     ACPI_RESOURCE           *Resource,
  153.     AML_RESOURCE            *Aml,
  154.     ACPI_RSCONVERT_INFO     *Info)
  155. {
  156.     ACPI_RS_LENGTH          AmlResourceLength;
  157.     void                    *Source;
  158.     void                    *Destination;
  159.     char                    *Target;
  160.     UINT8                   Count;
  161.     UINT8                   FlagsMode = FALSE;
  162.     UINT16                  ItemCount = 0;
  163.     UINT16                  Temp16 = 0;
  164.  
  165.  
  166.     ACPI_FUNCTION_TRACE (RsConvertAmlToResource);
  167.  
  168.  
  169.     if (((ACPI_SIZE) Resource) & 0x3)
  170.     {
  171.         /* Each internal resource struct is expected to be 32-bit aligned */
  172.  
  173.         ACPI_WARNING ((AE_INFO,
  174.             "Misaligned resource pointer (get): %p Type 0x%2.2X Length %u",
  175.             Resource, Resource->Type, Resource->Length));
  176.     }
  177.  
  178.     /* Extract the resource Length field (does not include header length) */
  179.  
  180.     AmlResourceLength = AcpiUtGetResourceLength (Aml);
  181.  
  182.     /*
  183.      * First table entry must be ACPI_RSC_INITxxx and must contain the
  184.      * table length (# of table entries)
  185.      */
  186.     Count = INIT_TABLE_LENGTH (Info);
  187.  
  188.     while (Count)
  189.     {
  190.         /*
  191.          * Source is the external AML byte stream buffer,
  192.          * destination is the internal resource descriptor
  193.          */
  194.         Source      = ACPI_ADD_PTR (void, Aml, Info->AmlOffset);
  195.         Destination = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset);
  196.  
  197.         switch (Info->Opcode)
  198.         {
  199.         case ACPI_RSC_INITGET:
  200.             /*
  201.              * Get the resource type and the initial (minimum) length
  202.              */
  203.             ACPI_MEMSET (Resource, 0, INIT_RESOURCE_LENGTH (Info));
  204.             Resource->Type = INIT_RESOURCE_TYPE (Info);
  205.             Resource->Length = INIT_RESOURCE_LENGTH (Info);
  206.             break;
  207.  
  208.  
  209.         case ACPI_RSC_INITSET:
  210.             break;
  211.  
  212.  
  213.         case ACPI_RSC_FLAGINIT:
  214.  
  215.             FlagsMode = TRUE;
  216.             break;
  217.  
  218.  
  219.         case ACPI_RSC_1BITFLAG:
  220.             /*
  221.              * Mask and shift the flag bit
  222.              */
  223.             ACPI_SET8 (Destination) = (UINT8)
  224.                 ((ACPI_GET8 (Source) >> Info->Value) & 0x01);
  225.             break;
  226.  
  227.  
  228.         case ACPI_RSC_2BITFLAG:
  229.             /*
  230.              * Mask and shift the flag bits
  231.              */
  232.             ACPI_SET8 (Destination) = (UINT8)
  233.                 ((ACPI_GET8 (Source) >> Info->Value) & 0x03);
  234.             break;
  235.  
  236.  
  237.         case ACPI_RSC_COUNT:
  238.  
  239.             ItemCount = ACPI_GET8 (Source);
  240.             ACPI_SET8 (Destination) = (UINT8) ItemCount;
  241.  
  242.             Resource->Length = Resource->Length +
  243.                 (Info->Value * (ItemCount - 1));
  244.             break;
  245.  
  246.  
  247.         case ACPI_RSC_COUNT16:
  248.  
  249.             ItemCount = AmlResourceLength;
  250.             ACPI_SET16 (Destination) = ItemCount;
  251.  
  252.             Resource->Length = Resource->Length +
  253.                 (Info->Value * (ItemCount - 1));
  254.             break;
  255.  
  256.  
  257.         case ACPI_RSC_LENGTH:
  258.  
  259.             Resource->Length = Resource->Length + Info->Value;
  260.             break;
  261.  
  262.  
  263.         case ACPI_RSC_MOVE8:
  264.         case ACPI_RSC_MOVE16:
  265.         case ACPI_RSC_MOVE32:
  266.         case ACPI_RSC_MOVE64:
  267.             /*
  268.              * Raw data move. Use the Info value field unless ItemCount has
  269.              * been previously initialized via a COUNT opcode
  270.              */
  271.             if (Info->Value)
  272.             {
  273.                 ItemCount = Info->Value;
  274.             }
  275.             AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
  276.             break;
  277.  
  278.  
  279.         case ACPI_RSC_SET8:
  280.  
  281.             ACPI_MEMSET (Destination, Info->AmlOffset, Info->Value);
  282.             break;
  283.  
  284.  
  285.         case ACPI_RSC_DATA8:
  286.  
  287.             Target = ACPI_ADD_PTR (char, Resource, Info->Value);
  288.             ACPI_MEMCPY (Destination, Source,  ACPI_GET16 (Target));
  289.             break;
  290.  
  291.  
  292.         case ACPI_RSC_ADDRESS:
  293.             /*
  294.              * Common handler for address descriptor flags
  295.              */
  296.             if (!AcpiRsGetAddressCommon (Resource, Aml))
  297.             {
  298.                 return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
  299.             }
  300.             break;
  301.  
  302.  
  303.         case ACPI_RSC_SOURCE:
  304.             /*
  305.              * Optional ResourceSource (Index and String)
  306.              */
  307.             Resource->Length +=
  308.                 AcpiRsGetResourceSource (AmlResourceLength, Info->Value,
  309.                     Destination, Aml, NULL);
  310.             break;
  311.  
  312.  
  313.         case ACPI_RSC_SOURCEX:
  314.             /*
  315.              * Optional ResourceSource (Index and String). This is the more
  316.              * complicated case used by the Interrupt() macro
  317.              */
  318.             Target = ACPI_ADD_PTR (char, Resource, Info->AmlOffset + (ItemCount * 4));
  319.  
  320.             Resource->Length +=
  321.                 AcpiRsGetResourceSource (AmlResourceLength,
  322.                     (ACPI_RS_LENGTH) (((ItemCount - 1) * sizeof (UINT32)) + Info->Value),
  323.                     Destination, Aml, Target);
  324.             break;
  325.  
  326.  
  327.         case ACPI_RSC_BITMASK:
  328.             /*
  329.              * 8-bit encoded bitmask (DMA macro)
  330.              */
  331.             ItemCount = AcpiRsDecodeBitmask (ACPI_GET8 (Source), Destination);
  332.             if (ItemCount)
  333.             {
  334.                 Resource->Length += (ItemCount - 1);
  335.             }
  336.  
  337.             Target = ACPI_ADD_PTR (char, Resource, Info->Value);
  338.             ACPI_SET8 (Target) = (UINT8) ItemCount;
  339.             break;
  340.  
  341.  
  342.         case ACPI_RSC_BITMASK16:
  343.             /*
  344.              * 16-bit encoded bitmask (IRQ macro)
  345.              */
  346.             ACPI_MOVE_16_TO_16 (&Temp16, Source);
  347.  
  348.             ItemCount = AcpiRsDecodeBitmask (Temp16, Destination);
  349.             if (ItemCount)
  350.             {
  351.                 Resource->Length += (ItemCount - 1);
  352.             }
  353.  
  354.             Target = ACPI_ADD_PTR (char, Resource, Info->Value);
  355.             ACPI_SET8 (Target) = (UINT8) ItemCount;
  356.             break;
  357.  
  358.  
  359.         case ACPI_RSC_EXIT_NE:
  360.             /*
  361.              * Control - Exit conversion if not equal
  362.              */
  363.             switch (Info->ResourceOffset)
  364.             {
  365.             case ACPI_RSC_COMPARE_AML_LENGTH:
  366.                 if (AmlResourceLength != Info->Value)
  367.                 {
  368.                     goto Exit;
  369.                 }
  370.                 break;
  371.  
  372.             case ACPI_RSC_COMPARE_VALUE:
  373.                 if (ACPI_GET8 (Source) != Info->Value)
  374.                 {
  375.                     goto Exit;
  376.                 }
  377.                 break;
  378.  
  379.             default:
  380.  
  381.                 ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode"));
  382.                 return_ACPI_STATUS (AE_BAD_PARAMETER);
  383.             }
  384.             break;
  385.  
  386.  
  387.         default:
  388.  
  389.             ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));
  390.             return_ACPI_STATUS (AE_BAD_PARAMETER);
  391.         }
  392.  
  393.         Count--;
  394.         Info++;
  395.     }
  396.  
  397. Exit:
  398.     if (!FlagsMode)
  399.     {
  400.         /* Round the resource struct length up to the next boundary (32 or 64) */
  401.  
  402.         Resource->Length = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (Resource->Length);
  403.     }
  404.     return_ACPI_STATUS (AE_OK);
  405. }
  406.  
  407.  
  408. /*******************************************************************************
  409.  *
  410.  * FUNCTION:    AcpiRsConvertResourceToAml
  411.  *
  412.  * PARAMETERS:  Resource            - Pointer to the resource descriptor
  413.  *              Aml                 - Where the AML descriptor is returned
  414.  *              Info                - Pointer to appropriate conversion table
  415.  *
  416.  * RETURN:      Status
  417.  *
  418.  * DESCRIPTION: Convert an internal resource descriptor to the corresponding
  419.  *              external AML resource descriptor.
  420.  *
  421.  ******************************************************************************/
  422.  
  423. ACPI_STATUS
  424. AcpiRsConvertResourceToAml (
  425.     ACPI_RESOURCE           *Resource,
  426.     AML_RESOURCE            *Aml,
  427.     ACPI_RSCONVERT_INFO     *Info)
  428. {
  429.     void                    *Source = NULL;
  430.     void                    *Destination;
  431.     ACPI_RSDESC_SIZE        AmlLength = 0;
  432.     UINT8                   Count;
  433.     UINT16                  Temp16 = 0;
  434.     UINT16                  ItemCount = 0;
  435.  
  436.  
  437.     ACPI_FUNCTION_TRACE (RsConvertResourceToAml);
  438.  
  439.  
  440.     /*
  441.      * First table entry must be ACPI_RSC_INITxxx and must contain the
  442.      * table length (# of table entries)
  443.      */
  444.     Count = INIT_TABLE_LENGTH (Info);
  445.  
  446.     while (Count)
  447.     {
  448.         /*
  449.          * Source is the internal resource descriptor,
  450.          * destination is the external AML byte stream buffer
  451.          */
  452.         Source      = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset);
  453.         Destination = ACPI_ADD_PTR (void, Aml, Info->AmlOffset);
  454.  
  455.         switch (Info->Opcode)
  456.         {
  457.         case ACPI_RSC_INITSET:
  458.  
  459.             ACPI_MEMSET (Aml, 0, INIT_RESOURCE_LENGTH (Info));
  460.             AmlLength = INIT_RESOURCE_LENGTH (Info);
  461.             AcpiRsSetResourceHeader (INIT_RESOURCE_TYPE (Info), AmlLength, Aml);
  462.             break;
  463.  
  464.  
  465.         case ACPI_RSC_INITGET:
  466.             break;
  467.  
  468.  
  469.         case ACPI_RSC_FLAGINIT:
  470.             /*
  471.              * Clear the flag byte
  472.              */
  473.             ACPI_SET8 (Destination) = 0;
  474.             break;
  475.  
  476.  
  477.         case ACPI_RSC_1BITFLAG:
  478.             /*
  479.              * Mask and shift the flag bit
  480.              */
  481.             ACPI_SET8 (Destination) |= (UINT8)
  482.                 ((ACPI_GET8 (Source) & 0x01) << Info->Value);
  483.             break;
  484.  
  485.  
  486.         case ACPI_RSC_2BITFLAG:
  487.             /*
  488.              * Mask and shift the flag bits
  489.              */
  490.             ACPI_SET8 (Destination) |= (UINT8)
  491.                 ((ACPI_GET8 (Source) & 0x03) << Info->Value);
  492.             break;
  493.  
  494.  
  495.         case ACPI_RSC_COUNT:
  496.  
  497.             ItemCount = ACPI_GET8 (Source);
  498.             ACPI_SET8 (Destination) = (UINT8) ItemCount;
  499.  
  500.             AmlLength = (UINT16) (AmlLength + (Info->Value * (ItemCount - 1)));
  501.             break;
  502.  
  503.  
  504.         case ACPI_RSC_COUNT16:
  505.  
  506.             ItemCount = ACPI_GET16 (Source);
  507.             AmlLength = (UINT16) (AmlLength + ItemCount);
  508.             AcpiRsSetResourceLength (AmlLength, Aml);
  509.             break;
  510.  
  511.  
  512.         case ACPI_RSC_LENGTH:
  513.  
  514.             AcpiRsSetResourceLength (Info->Value, Aml);
  515.             break;
  516.  
  517.  
  518.         case ACPI_RSC_MOVE8:
  519.         case ACPI_RSC_MOVE16:
  520.         case ACPI_RSC_MOVE32:
  521.         case ACPI_RSC_MOVE64:
  522.  
  523.             if (Info->Value)
  524.             {
  525.                 ItemCount = Info->Value;
  526.             }
  527.             AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
  528.             break;
  529.  
  530.  
  531.         case ACPI_RSC_ADDRESS:
  532.  
  533.             /* Set the Resource Type, General Flags, and Type-Specific Flags */
  534.  
  535.             AcpiRsSetAddressCommon (Aml, Resource);
  536.             break;
  537.  
  538.  
  539.         case ACPI_RSC_SOURCEX:
  540.             /*
  541.              * Optional ResourceSource (Index and String)
  542.              */
  543.             AmlLength = AcpiRsSetResourceSource (
  544.                             Aml, (ACPI_RS_LENGTH) AmlLength, Source);
  545.             AcpiRsSetResourceLength (AmlLength, Aml);
  546.             break;
  547.  
  548.  
  549.         case ACPI_RSC_SOURCE:
  550.             /*
  551.              * Optional ResourceSource (Index and String). This is the more
  552.              * complicated case used by the Interrupt() macro
  553.              */
  554.             AmlLength = AcpiRsSetResourceSource (Aml, Info->Value, Source);
  555.             AcpiRsSetResourceLength (AmlLength, Aml);
  556.             break;
  557.  
  558.  
  559.         case ACPI_RSC_BITMASK:
  560.             /*
  561.              * 8-bit encoded bitmask (DMA macro)
  562.              */
  563.             ACPI_SET8 (Destination) = (UINT8)
  564.                 AcpiRsEncodeBitmask (Source,
  565.                     *ACPI_ADD_PTR (UINT8, Resource, Info->Value));
  566.             break;
  567.  
  568.  
  569.         case ACPI_RSC_BITMASK16:
  570.             /*
  571.              * 16-bit encoded bitmask (IRQ macro)
  572.              */
  573.             Temp16 = AcpiRsEncodeBitmask (Source,
  574.                         *ACPI_ADD_PTR (UINT8, Resource, Info->Value));
  575.             ACPI_MOVE_16_TO_16 (Destination, &Temp16);
  576.             break;
  577.  
  578.  
  579.         case ACPI_RSC_EXIT_LE:
  580.             /*
  581.              * Control - Exit conversion if less than or equal
  582.              */
  583.             if (ItemCount <= Info->Value)
  584.             {
  585.                 goto Exit;
  586.             }
  587.             break;
  588.  
  589.  
  590.         case ACPI_RSC_EXIT_NE:
  591.             /*
  592.              * Control - Exit conversion if not equal
  593.              */
  594.             switch (COMPARE_OPCODE (Info))
  595.             {
  596.             case ACPI_RSC_COMPARE_VALUE:
  597.  
  598.                 if (*ACPI_ADD_PTR (UINT8, Resource,
  599.                         COMPARE_TARGET (Info)) != COMPARE_VALUE (Info))
  600.                 {
  601.                     goto Exit;
  602.                 }
  603.                 break;
  604.  
  605.             default:
  606.  
  607.                 ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode"));
  608.                 return_ACPI_STATUS (AE_BAD_PARAMETER);
  609.             }
  610.             break;
  611.  
  612.  
  613.         case ACPI_RSC_EXIT_EQ:
  614.             /*
  615.              * Control - Exit conversion if equal
  616.              */
  617.             if (*ACPI_ADD_PTR (UINT8, Resource,
  618.                     COMPARE_TARGET (Info)) == COMPARE_VALUE (Info))
  619.             {
  620.                 goto Exit;
  621.             }
  622.             break;
  623.  
  624.  
  625.         default:
  626.  
  627.             ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));
  628.             return_ACPI_STATUS (AE_BAD_PARAMETER);
  629.         }
  630.  
  631.         Count--;
  632.         Info++;
  633.     }
  634.  
  635. Exit:
  636.     return_ACPI_STATUS (AE_OK);
  637. }
  638.  
  639.  
  640. #if 0
  641. /* Previous resource validations */
  642.  
  643.     if (Aml->ExtAddress64.RevisionID != AML_RESOURCE_EXTENDED_ADDRESS_REVISION)
  644.     {
  645.         return_ACPI_STATUS (AE_SUPPORT);
  646.     }
  647.  
  648.     if (Resource->Data.StartDpf.PerformanceRobustness >= 3)
  649.     {
  650.         return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE);
  651.     }
  652.  
  653.     if (((Aml->Irq.Flags & 0x09) == 0x00) ||
  654.         ((Aml->Irq.Flags & 0x09) == 0x09))
  655.     {
  656.         /*
  657.          * Only [ActiveHigh, EdgeSensitive] or [ActiveLow, LevelSensitive]
  658.          * polarity/trigger interrupts are allowed (ACPI spec, section
  659.          * "IRQ Format"), so 0x00 and 0x09 are illegal.
  660.          */
  661.         ACPI_ERROR ((AE_INFO,
  662.             "Invalid interrupt polarity/trigger in resource list, 0x%X",
  663.             Aml->Irq.Flags));
  664.         return_ACPI_STATUS (AE_BAD_DATA);
  665.     }
  666.  
  667.     Resource->Data.ExtendedIrq.InterruptCount = Temp8;
  668.     if (Temp8 < 1)
  669.     {
  670.         /* Must have at least one IRQ */
  671.  
  672.         return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
  673.     }
  674.  
  675.     if (Resource->Data.Dma.Transfer == 0x03)
  676.     {
  677.         ACPI_ERROR ((AE_INFO,
  678.             "Invalid DMA.Transfer preference (3)"));
  679.         return_ACPI_STATUS (AE_BAD_DATA);
  680.     }
  681. #endif
  682.  
  683.  
  684.