root/drivers/acpi/acpica/acresrc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */