Subversion Repositories Kolibri OS

Rev

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

  1. /******************************************************************************
  2.  *
  3.  * Name: acresrc.h - Resource Manager function prototypes
  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. #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.  */
  66. typedef 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.  
  76. typedef 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.  */
  124. typedef 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.  
  134. typedef 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.  
  160. extern const u8 acpi_gbl_aml_resource_sizes[];
  161. extern const u8 acpi_gbl_aml_resource_serial_bus_sizes[];
  162. extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
  163.  
  164. /* Resource tables indexed by raw AML resource descriptor type */
  165.  
  166. extern const u8 acpi_gbl_resource_struct_sizes[];
  167. extern const u8 acpi_gbl_resource_struct_serial_bus_sizes[];
  168. extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
  169.  
  170. extern struct acpi_rsconvert_info
  171.     *acpi_gbl_convert_resource_serial_bus_dispatch[];
  172.  
  173. struct 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.  */
  182. acpi_status
  183. acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
  184.                              struct acpi_buffer *output_buffer);
  185.  
  186. acpi_status
  187. acpi_rs_create_aml_resources(struct acpi_buffer *resource_list,
  188.                              struct acpi_buffer *output_buffer);
  189.  
  190. acpi_status
  191. acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
  192.                                  struct acpi_buffer *output_buffer);
  193.  
  194. /*
  195.  * rsutils
  196.  */
  197.  
  198. acpi_status
  199. acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
  200.                             struct acpi_buffer *ret_buffer);
  201.  
  202. acpi_status
  203. acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
  204.                             struct acpi_buffer *ret_buffer);
  205.  
  206. acpi_status
  207. acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
  208.                             struct acpi_buffer *ret_buffer);
  209.  
  210. acpi_status
  211. acpi_rs_get_method_data(acpi_handle handle,
  212.                         char *path, struct acpi_buffer *ret_buffer);
  213.  
  214. acpi_status
  215. acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
  216.                             struct acpi_buffer *ret_buffer);
  217.  
  218. acpi_status
  219. acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
  220.                             struct acpi_buffer *ret_buffer);
  221.  
  222. /*
  223.  * rscalc
  224.  */
  225. acpi_status
  226. acpi_rs_get_list_length(u8 * aml_buffer,
  227.                         u32 aml_buffer_length, acpi_size * size_needed);
  228.  
  229. acpi_status
  230. acpi_rs_get_aml_length(struct acpi_resource *resource_list,
  231.                        acpi_size resource_list_size, acpi_size * size_needed);
  232.  
  233. acpi_status
  234. acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
  235.                                      acpi_size * buffer_size_needed);
  236.  
  237. acpi_status
  238. acpi_rs_convert_aml_to_resources(u8 * aml,
  239.                                  u32 length,
  240.                                  u32 offset, u8 resource_index, void **context);
  241.  
  242. acpi_status
  243. acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
  244.                                  acpi_size aml_size_needed, u8 * output_buffer);
  245.  
  246. /*
  247.  * rsaddr
  248.  */
  249. void
  250. acpi_rs_set_address_common(union aml_resource *aml,
  251.                            struct acpi_resource *resource);
  252.  
  253. u8
  254. acpi_rs_get_address_common(struct acpi_resource *resource,
  255.                            union aml_resource *aml);
  256.  
  257. /*
  258.  * rsmisc
  259.  */
  260. acpi_status
  261. acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
  262.                                 union aml_resource *aml,
  263.                                 struct acpi_rsconvert_info *info);
  264.  
  265. acpi_status
  266. acpi_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.  */
  273. void
  274. acpi_rs_move_data(void *destination,
  275.                   void *source, u16 item_count, u8 move_type);
  276.  
  277. u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
  278.  
  279. u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
  280.  
  281. acpi_rs_length
  282. acpi_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.  
  287. acpi_rsdesc_size
  288. acpi_rs_set_resource_source(union aml_resource *aml,
  289.                             acpi_rs_length minimum_length,
  290.                             struct acpi_resource_source *resource_source);
  291.  
  292. void
  293. acpi_rs_set_resource_header(u8 descriptor_type,
  294.                             acpi_rsdesc_size total_length,
  295.                             union aml_resource *aml);
  296.  
  297. void
  298. acpi_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
  305. void acpi_rs_dump_resource_list(struct acpi_resource *resource);
  306.  
  307. void acpi_rs_dump_irq_list(u8 *route_table);
  308. #endif
  309.  
  310. /*
  311.  * Resource conversion tables
  312.  */
  313. extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
  314. extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
  315. extern struct acpi_rsconvert_info acpi_rs_convert_io[];
  316. extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
  317. extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
  318. extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
  319. extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
  320. extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
  321. extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
  322. extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
  323. extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
  324. extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
  325. extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
  326. extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
  327. extern struct acpi_rsconvert_info acpi_rs_convert_gpio[];
  328. extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];
  329. extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
  330. extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
  331. extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
  332.  
  333. /* These resources require separate get/set tables */
  334.  
  335. extern struct acpi_rsconvert_info acpi_rs_get_irq[];
  336. extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
  337. extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
  338. extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
  339.  
  340. extern struct acpi_rsconvert_info acpi_rs_set_irq[];
  341. extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
  342. extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
  343.  
  344. #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
  345. /*
  346.  * rsinfo
  347.  */
  348. extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
  349. extern struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[];
  350.  
  351. /*
  352.  * rsdumpinfo
  353.  */
  354. extern struct acpi_rsdump_info acpi_rs_dump_irq[];
  355. extern struct acpi_rsdump_info acpi_rs_dump_prt[];
  356. extern struct acpi_rsdump_info acpi_rs_dump_dma[];
  357. extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
  358. extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
  359. extern struct acpi_rsdump_info acpi_rs_dump_io[];
  360. extern struct acpi_rsdump_info acpi_rs_dump_io_flags[];
  361. extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
  362. extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
  363. extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
  364. extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
  365. extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
  366. extern struct acpi_rsdump_info acpi_rs_dump_memory_flags[];
  367. extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
  368. extern struct acpi_rsdump_info acpi_rs_dump_address16[];
  369. extern struct acpi_rsdump_info acpi_rs_dump_address32[];
  370. extern struct acpi_rsdump_info acpi_rs_dump_address64[];
  371. extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
  372. extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
  373. extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
  374. extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
  375. extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
  376. extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
  377. extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
  378. extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
  379. extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
  380. extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
  381. #endif
  382.  
  383. #endif                          /* __ACRESRC_H__ */
  384.