linux/drivers/acpi/acpica/acresrc.h
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * Name: acresrc.h - Resource Manager function prototypes
   4 *
   5 *****************************************************************************/
   6
   7/*
   8 * Copyright (C) 2000 - 2016, 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#ifndef __ACRESRC_H__
  45#define __ACRESRC_H__
  46
  47/* Need the AML resource descriptor structs */
  48
  49#include "amlresrc.h"
  50
  51/*
  52 * If possible, pack the following structures to byte alignment, since we
  53 * don't care about performance for debug output. Two cases where we cannot
  54 * pack the structures:
  55 *
  56 * 1) Hardware does not support misaligned memory transfers
  57 * 2) Compiler does not support pointers within packed structures
  58 */
  59#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
  60#pragma pack(1)
  61#endif
  62
  63/*
  64 * Individual entry for the resource conversion tables
  65 */
  66typedef const struct acpi_rsconvert_info {
  67        u8 opcode;
  68        u8 resource_offset;
  69        u8 aml_offset;
  70        u8 value;
  71
  72} acpi_rsconvert_info;
  73
  74/* Resource conversion opcodes */
  75
  76typedef enum {
  77        ACPI_RSC_INITGET = 0,
  78        ACPI_RSC_INITSET,
  79        ACPI_RSC_FLAGINIT,
  80        ACPI_RSC_1BITFLAG,
  81        ACPI_RSC_2BITFLAG,
  82        ACPI_RSC_3BITFLAG,
  83        ACPI_RSC_ADDRESS,
  84        ACPI_RSC_BITMASK,
  85        ACPI_RSC_BITMASK16,
  86        ACPI_RSC_COUNT,
  87        ACPI_RSC_COUNT16,
  88        ACPI_RSC_COUNT_GPIO_PIN,
  89        ACPI_RSC_COUNT_GPIO_RES,
  90        ACPI_RSC_COUNT_GPIO_VEN,
  91        ACPI_RSC_COUNT_SERIAL_RES,
  92        ACPI_RSC_COUNT_SERIAL_VEN,
  93        ACPI_RSC_DATA8,
  94        ACPI_RSC_EXIT_EQ,
  95        ACPI_RSC_EXIT_LE,
  96        ACPI_RSC_EXIT_NE,
  97        ACPI_RSC_LENGTH,
  98        ACPI_RSC_MOVE_GPIO_PIN,
  99        ACPI_RSC_MOVE_GPIO_RES,
 100        ACPI_RSC_MOVE_SERIAL_RES,
 101        ACPI_RSC_MOVE_SERIAL_VEN,
 102        ACPI_RSC_MOVE8,
 103        ACPI_RSC_MOVE16,
 104        ACPI_RSC_MOVE32,
 105        ACPI_RSC_MOVE64,
 106        ACPI_RSC_SET8,
 107        ACPI_RSC_SOURCE,
 108        ACPI_RSC_SOURCEX
 109} ACPI_RSCONVERT_OPCODES;
 110
 111/* Resource Conversion sub-opcodes */
 112
 113#define ACPI_RSC_COMPARE_AML_LENGTH     0
 114#define ACPI_RSC_COMPARE_VALUE          1
 115
 116#define ACPI_RSC_TABLE_SIZE(d)          (sizeof (d) / sizeof (struct acpi_rsconvert_info))
 117
 118#define ACPI_RS_OFFSET(f)               (u8) ACPI_OFFSET (struct acpi_resource,f)
 119#define AML_OFFSET(f)                   (u8) ACPI_OFFSET (union aml_resource,f)
 120
 121/*
 122 * Individual entry for the resource dump tables
 123 */
 124typedef const struct acpi_rsdump_info {
 125        u8 opcode;
 126        u8 offset;
 127        char *name;
 128        const char **pointer;
 129
 130} acpi_rsdump_info;
 131
 132/* Values for the Opcode field above */
 133
 134typedef enum {
 135        ACPI_RSD_TITLE = 0,
 136        ACPI_RSD_1BITFLAG,
 137        ACPI_RSD_2BITFLAG,
 138        ACPI_RSD_3BITFLAG,
 139        ACPI_RSD_ADDRESS,
 140        ACPI_RSD_DWORDLIST,
 141        ACPI_RSD_LITERAL,
 142        ACPI_RSD_LONGLIST,
 143        ACPI_RSD_SHORTLIST,
 144        ACPI_RSD_SHORTLISTX,
 145        ACPI_RSD_SOURCE,
 146        ACPI_RSD_STRING,
 147        ACPI_RSD_UINT8,
 148        ACPI_RSD_UINT16,
 149        ACPI_RSD_UINT32,
 150        ACPI_RSD_UINT64,
 151        ACPI_RSD_WORDLIST
 152} ACPI_RSDUMP_OPCODES;
 153
 154/* restore default alignment */
 155
 156#pragma pack()
 157
 158/* Resource tables indexed by internal resource type */
 159
 160extern const u8 acpi_gbl_aml_resource_sizes[];
 161extern const u8 acpi_gbl_aml_resource_serial_bus_sizes[];
 162extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
 163
 164/* Resource tables indexed by raw AML resource descriptor type */
 165
 166extern const u8 acpi_gbl_resource_struct_sizes[];
 167extern const u8 acpi_gbl_resource_struct_serial_bus_sizes[];
 168extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
 169
 170extern struct acpi_rsconvert_info
 171    *acpi_gbl_convert_resource_serial_bus_dispatch[];
 172
 173struct acpi_vendor_walk_info {
 174        struct acpi_vendor_uuid *uuid;
 175        struct acpi_buffer *buffer;
 176        acpi_status status;
 177};
 178
 179/*
 180 * rscreate
 181 */
 182acpi_status
 183acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
 184                             struct acpi_buffer *output_buffer);
 185
 186acpi_status
 187acpi_rs_create_aml_resources(struct acpi_buffer *resource_list,
 188                             struct acpi_buffer *output_buffer);
 189
 190acpi_status
 191acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
 192                                 struct acpi_buffer *output_buffer);
 193
 194/*
 195 * rsutils
 196 */
 197
 198acpi_status
 199acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
 200                            struct acpi_buffer *ret_buffer);
 201
 202acpi_status
 203acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
 204                            struct acpi_buffer *ret_buffer);
 205
 206acpi_status
 207acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
 208                            struct acpi_buffer *ret_buffer);
 209
 210acpi_status
 211acpi_rs_get_method_data(acpi_handle handle,
 212                        char *path, struct acpi_buffer *ret_buffer);
 213
 214acpi_status
 215acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
 216                            struct acpi_buffer *ret_buffer);
 217
 218acpi_status
 219acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
 220                            struct acpi_buffer *ret_buffer);
 221
 222/*
 223 * rscalc
 224 */
 225acpi_status
 226acpi_rs_get_list_length(u8 * aml_buffer,
 227                        u32 aml_buffer_length, acpi_size * size_needed);
 228
 229acpi_status
 230acpi_rs_get_aml_length(struct acpi_resource *resource_list,
 231                       acpi_size resource_list_size, acpi_size * size_needed);
 232
 233acpi_status
 234acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
 235                                     acpi_size * buffer_size_needed);
 236
 237acpi_status
 238acpi_rs_convert_aml_to_resources(u8 * aml,
 239                                 u32 length,
 240                                 u32 offset, u8 resource_index, void **context);
 241
 242acpi_status
 243acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
 244                                 acpi_size aml_size_needed, u8 * output_buffer);
 245
 246/*
 247 * rsaddr
 248 */
 249void
 250acpi_rs_set_address_common(union aml_resource *aml,
 251                           struct acpi_resource *resource);
 252
 253u8
 254acpi_rs_get_address_common(struct acpi_resource *resource,
 255                           union aml_resource *aml);
 256
 257/*
 258 * rsmisc
 259 */
 260acpi_status
 261acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
 262                                union aml_resource *aml,
 263                                struct acpi_rsconvert_info *info);
 264
 265acpi_status
 266acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
 267                                union aml_resource *aml,
 268                                struct acpi_rsconvert_info *info);
 269
 270/*
 271 * rsutils
 272 */
 273void
 274acpi_rs_move_data(void *destination,
 275                  void *source, u16 item_count, u8 move_type);
 276
 277u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
 278
 279u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
 280
 281acpi_rs_length
 282acpi_rs_get_resource_source(acpi_rs_length resource_length,
 283                            acpi_rs_length minimum_length,
 284                            struct acpi_resource_source *resource_source,
 285                            union aml_resource *aml, char *string_ptr);
 286
 287acpi_rsdesc_size
 288acpi_rs_set_resource_source(union aml_resource *aml,
 289                            acpi_rs_length minimum_length,
 290                            struct acpi_resource_source *resource_source);
 291
 292void
 293acpi_rs_set_resource_header(u8 descriptor_type,
 294                            acpi_rsdesc_size total_length,
 295                            union aml_resource *aml);
 296
 297void
 298acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
 299                            union aml_resource *aml);
 300
 301/*
 302 * rsdump - Debugger support
 303 */
 304#ifdef ACPI_DEBUGGER
 305void acpi_rs_dump_resource_list(struct acpi_resource *resource);
 306
 307void acpi_rs_dump_irq_list(u8 *route_table);
 308#endif
 309
 310/*
 311 * Resource conversion tables
 312 */
 313extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
 314extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
 315extern struct acpi_rsconvert_info acpi_rs_convert_io[];
 316extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
 317extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
 318extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
 319extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
 320extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
 321extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
 322extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
 323extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
 324extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
 325extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
 326extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
 327extern struct acpi_rsconvert_info acpi_rs_convert_gpio[];
 328extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];
 329extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
 330extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
 331extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
 332
 333/* These resources require separate get/set tables */
 334
 335extern struct acpi_rsconvert_info acpi_rs_get_irq[];
 336extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
 337extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
 338extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
 339
 340extern struct acpi_rsconvert_info acpi_rs_set_irq[];
 341extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
 342extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
 343
 344#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 345/*
 346 * rsinfo
 347 */
 348extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
 349extern struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[];
 350
 351/*
 352 * rsdumpinfo
 353 */
 354extern struct acpi_rsdump_info acpi_rs_dump_irq[];
 355extern struct acpi_rsdump_info acpi_rs_dump_prt[];
 356extern struct acpi_rsdump_info acpi_rs_dump_dma[];
 357extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
 358extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
 359extern struct acpi_rsdump_info acpi_rs_dump_io[];
 360extern struct acpi_rsdump_info acpi_rs_dump_io_flags[];
 361extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
 362extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
 363extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
 364extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
 365extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
 366extern struct acpi_rsdump_info acpi_rs_dump_memory_flags[];
 367extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
 368extern struct acpi_rsdump_info acpi_rs_dump_address16[];
 369extern struct acpi_rsdump_info acpi_rs_dump_address32[];
 370extern struct acpi_rsdump_info acpi_rs_dump_address64[];
 371extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
 372extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
 373extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
 374extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
 375extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
 376extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
 377extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
 378extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
 379extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
 380extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
 381#endif
 382
 383#endif                          /* __ACRESRC_H__ */
 384