CTC++ Coverage Report - Execution Profile    #251/1532

Files Summary | Functions Summary | Execution Profile | Index | No Index
First | Previous | Next | Last


File: drivers/acpi/resources/rslist.c
Instrumentation mode: function-decision-multicondition
TER: 24 % ( 7/ 29)

Start/ End/    
True False - Line Source

  1 /*******************************************************************************
  2  *
  3  * Module Name: rslist - Linked list utilities
  4  *
  5  ******************************************************************************/
  6 
  7 /*
  8  * Copyright (C) 2000 - 2006, R. Byron Moore
  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 <acpi/acresrc.h>
  46 
  47 #define _COMPONENT          ACPI_RESOURCES
  48 ACPI_MODULE_NAME("rslist")
  49 
  50 /*******************************************************************************
  51  *
  52  * FUNCTION:    acpi_rs_convert_aml_to_resources
  53  *
  54  * PARAMETERS:  Aml                 - Pointer to the resource byte stream
  55  *              aml_length          - Length of Aml
  56  *              output_buffer       - Pointer to the buffer that will
  57  *                                    contain the output structures
  58  *
  59  * RETURN:      Status
  60  *
  61  * DESCRIPTION: Takes the resource byte stream and parses it, creating a
  62  *              linked list of resources in the caller's output buffer
  63  *
  64  ******************************************************************************/
  65 acpi_status
 
120   66 acpi_rs_convert_aml_to_resources(u8 * aml, u32 aml_length, u8 * output_buffer)
  67 {
  68    struct acpi_resource *resource = (void *)output_buffer;
  69    acpi_status status;
  70    u8 resource_index;
  71    u8 *end_aml;
  72 
  73    ACPI_FUNCTION_TRACE("rs_convert_aml_to_resources");
  74 
  75    end_aml = aml + aml_length;
  76 
  77    /* Loop until end-of-buffer or an end_tag is found */
  78 
426 - 79    while (aml < end_aml) {
  80       /* Validate the Resource Type and Resource Length */
  81 
  82       status = acpi_ut_validate_resource(aml, &resource_index);
426 - 83       if (ACPI_FAILURE(status)) {
 - 84          return_ACPI_STATUS(status);
  85       }
  86 
  87       /* Convert the AML byte stream resource to a local resource struct */
  88 
  89       status =
  90           acpi_rs_convert_aml_to_resource(resource,
  91                       ACPI_CAST_PTR(union
  92                           aml_resource,
  93                           aml),
  94                       acpi_gbl_get_resource_dispatch
  95                       [resource_index]);
426 - 96       if (ACPI_FAILURE(status)) {
  97          ACPI_EXCEPTION((AE_INFO, status,
  98                "Could not convert AML resource (Type %X)",
  99                *aml));
 - 100          return_ACPI_STATUS(status);
  101       }
  102 
  103       /* Normal exit on completion of an end_tag resource descriptor */
  104 
  105       if (acpi_ut_get_resource_type(aml) ==
120 306   106           ACPI_RESOURCE_NAME_END_TAG) {
120    107          return_ACPI_STATUS(AE_OK);
  108       }
  109 
  110       /* Point to the next input AML resource */
  111 
  112       aml += acpi_ut_get_descriptor_length(aml);
  113 
  114       /* Point to the next structure in the output buffer */
  115 
  116       resource =
  117           ACPI_ADD_PTR(struct acpi_resource, resource,
  118              resource->length);
  119    }
  120 
  121    /* Did not find an end_tag resource descriptor */
  122 
 - 123    return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
  124 }
  125 
  126 /*******************************************************************************
  127  *
  128  * FUNCTION:    acpi_rs_convert_resources_to_aml
  129  *
  130  * PARAMETERS:  Resource            - Pointer to the resource linked list
  131  *              aml_size_needed     - Calculated size of the byte stream
  132  *                                    needed from calling acpi_rs_get_aml_length()
  133  *                                    The size of the output_buffer is
  134  *                                    guaranteed to be >= aml_size_needed
  135  *              output_buffer       - Pointer to the buffer that will
  136  *                                    contain the byte stream
  137  *
  138  * RETURN:      Status
  139  *
  140  * DESCRIPTION: Takes the resource linked list and parses it, creating a
  141  *              byte stream of resources in the caller's output buffer
  142  *
  143  ******************************************************************************/
  144 
  145 acpi_status
 
- 146 acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
  147              acpi_size aml_size_needed, u8 * output_buffer)
  148 {
  149    u8 *aml = output_buffer;
  150    u8 *end_aml = output_buffer + aml_size_needed;
  151    acpi_status status;
  152 
  153    ACPI_FUNCTION_TRACE("rs_convert_resources_to_aml");
  154 
  155    /* Walk the resource descriptor list, convert each descriptor */
  156 
- 157    while (aml < end_aml) {
  158       /* Validate the (internal) Resource Type */
  159 
- 160       if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
  161          ACPI_ERROR((AE_INFO,
  162                 "Invalid descriptor type (%X) in resource list",
  163                 resource->type));
 - 164          return_ACPI_STATUS(AE_BAD_DATA);
  165       }
  166 
  167       /* Perform the conversion */
  168 
  169       status = acpi_rs_convert_resource_to_aml(resource,
  170                       ACPI_CAST_PTR(union
  171                                aml_resource,
  172                                aml),
  173                       acpi_gbl_set_resource_dispatch
  174                       [resource->type]);
- 175       if (ACPI_FAILURE(status)) {
  176          ACPI_EXCEPTION((AE_INFO, status,
  177                "Could not convert resource (type %X) to AML",
  178                resource->type));
 - 179          return_ACPI_STATUS(status);
  180       }
  181 
  182       /* Perform final sanity check on the new AML resource descriptor */
  183 
  184       status =
  185           acpi_ut_validate_resource(ACPI_CAST_PTR
  186                      (union aml_resource, aml), NULL);
- 187       if (ACPI_FAILURE(status)) {
 - 188          return_ACPI_STATUS(status);
  189       }
  190 
  191       /* Check for end-of-list, normal exit */
  192 
- 193       if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) {
  194          /* An End Tag indicates the end of the input Resource Template */
  195 
 - 196          return_ACPI_STATUS(AE_OK);
  197       }
  198 
  199       /*
  200        * Extract the total length of the new descriptor and set the
  201        * Aml to point to the next (output) resource descriptor
  202        */
  203       aml += acpi_ut_get_descriptor_length(aml);
  204 
  205       /* Point to the next input resource descriptor */
  206 
  207       resource =
  208           ACPI_ADD_PTR(struct acpi_resource, resource,
  209              resource->length);
  210    }
  211 
  212    /* Completed buffer, but did not find an end_tag resource descriptor */
  213 
 - 214    return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
  215 }
***TER 24% (7/29) of SOURCE FILE rslist.c

Files Summary | Functions Summary | Execution Profile | Index | No Index
First | Previous | Next | Last | Top