home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / acpi / acresrc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  10.8 KB  |  337 lines

  1. /******************************************************************************
  2.  *
  3.  * Name: acresrc.h - Resource Manager function prototypes
  4.  *
  5.  *****************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2008, 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. #define ACPI_RSC_INITGET                0
  77. #define ACPI_RSC_INITSET                1
  78. #define ACPI_RSC_FLAGINIT               2
  79. #define ACPI_RSC_1BITFLAG               3
  80. #define ACPI_RSC_2BITFLAG               4
  81. #define ACPI_RSC_COUNT                  5
  82. #define ACPI_RSC_COUNT16                6
  83. #define ACPI_RSC_LENGTH                 7
  84. #define ACPI_RSC_MOVE8                  8
  85. #define ACPI_RSC_MOVE16                 9
  86. #define ACPI_RSC_MOVE32                 10
  87. #define ACPI_RSC_MOVE64                 11
  88. #define ACPI_RSC_SET8                   12
  89. #define ACPI_RSC_DATA8                  13
  90. #define ACPI_RSC_ADDRESS                14
  91. #define ACPI_RSC_SOURCE                 15
  92. #define ACPI_RSC_SOURCEX                16
  93. #define ACPI_RSC_BITMASK                17
  94. #define ACPI_RSC_BITMASK16              18
  95. #define ACPI_RSC_EXIT_NE                19
  96. #define ACPI_RSC_EXIT_LE                20
  97. #define ACPI_RSC_EXIT_EQ                21
  98.  
  99. /* Resource Conversion sub-opcodes */
  100.  
  101. #define ACPI_RSC_COMPARE_AML_LENGTH     0
  102. #define ACPI_RSC_COMPARE_VALUE          1
  103.  
  104. #define ACPI_RSC_TABLE_SIZE(d)          (sizeof (d) / sizeof (struct acpi_rsconvert_info))
  105.  
  106. #define ACPI_RS_OFFSET(f)               (u8) ACPI_OFFSET (struct acpi_resource,f)
  107. #define AML_OFFSET(f)                   (u8) ACPI_OFFSET (union aml_resource,f)
  108.  
  109. typedef const struct acpi_rsdump_info {
  110.     u8 opcode;
  111.     u8 offset;
  112.     char *name;
  113.     const char **pointer;
  114.  
  115. } acpi_rsdump_info;
  116.  
  117. /* Values for the Opcode field above */
  118.  
  119. #define ACPI_RSD_TITLE                  0
  120. #define ACPI_RSD_LITERAL                1
  121. #define ACPI_RSD_STRING                 2
  122. #define ACPI_RSD_UINT8                  3
  123. #define ACPI_RSD_UINT16                 4
  124. #define ACPI_RSD_UINT32                 5
  125. #define ACPI_RSD_UINT64                 6
  126. #define ACPI_RSD_1BITFLAG               7
  127. #define ACPI_RSD_2BITFLAG               8
  128. #define ACPI_RSD_SHORTLIST              9
  129. #define ACPI_RSD_LONGLIST               10
  130. #define ACPI_RSD_DWORDLIST              11
  131. #define ACPI_RSD_ADDRESS                12
  132. #define ACPI_RSD_SOURCE                 13
  133.  
  134. /* restore default alignment */
  135.  
  136. #pragma pack()
  137.  
  138. /* Resource tables indexed by internal resource type */
  139.  
  140. extern const u8 acpi_gbl_aml_resource_sizes[];
  141. extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
  142.  
  143. /* Resource tables indexed by raw AML resource descriptor type */
  144.  
  145. extern const u8 acpi_gbl_resource_struct_sizes[];
  146. extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
  147.  
  148. struct acpi_vendor_walk_info {
  149.     struct acpi_vendor_uuid *uuid;
  150.     struct acpi_buffer *buffer;
  151.     acpi_status status;
  152. };
  153.  
  154. /*
  155.  * rscreate
  156.  */
  157. acpi_status
  158. acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
  159.                  struct acpi_buffer *output_buffer);
  160.  
  161. acpi_status
  162. acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
  163.                  struct acpi_buffer *output_buffer);
  164.  
  165. acpi_status
  166. acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
  167.                  struct acpi_buffer *output_buffer);
  168.  
  169. /*
  170.  * rsutils
  171.  */
  172.  
  173. acpi_status
  174. acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
  175.                 struct acpi_buffer *ret_buffer);
  176.  
  177. acpi_status
  178. acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
  179.                 struct acpi_buffer *ret_buffer);
  180.  
  181. acpi_status
  182. acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
  183.                 struct acpi_buffer *ret_buffer);
  184.  
  185. acpi_status
  186. acpi_rs_get_method_data(acpi_handle handle,
  187.             char *path, struct acpi_buffer *ret_buffer);
  188.  
  189. acpi_status
  190. acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
  191.                 struct acpi_buffer *ret_buffer);
  192.  
  193. /*
  194.  * rscalc
  195.  */
  196. acpi_status
  197. acpi_rs_get_list_length(u8 * aml_buffer,
  198.             u32 aml_buffer_length, acpi_size * size_needed);
  199.  
  200. acpi_status
  201. acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
  202.                acpi_size * size_needed);
  203.  
  204. acpi_status
  205. acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
  206.                      acpi_size * buffer_size_needed);
  207.  
  208. acpi_status
  209. acpi_rs_convert_aml_to_resources(u8 * aml,
  210.                  u32 length,
  211.                  u32 offset, u8 resource_index, void **context);
  212.  
  213. acpi_status
  214. acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
  215.                  acpi_size aml_size_needed, u8 * output_buffer);
  216.  
  217. /*
  218.  * rsaddr
  219.  */
  220. void
  221. acpi_rs_set_address_common(union aml_resource *aml,
  222.                struct acpi_resource *resource);
  223.  
  224. u8
  225. acpi_rs_get_address_common(struct acpi_resource *resource,
  226.                union aml_resource *aml);
  227.  
  228. /*
  229.  * rsmisc
  230.  */
  231. acpi_status
  232. acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
  233.                 union aml_resource *aml,
  234.                 struct acpi_rsconvert_info *info);
  235.  
  236. acpi_status
  237. acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
  238.                 union aml_resource *aml,
  239.                 struct acpi_rsconvert_info *info);
  240.  
  241. /*
  242.  * rsutils
  243.  */
  244. void
  245. acpi_rs_move_data(void *destination,
  246.           void *source, u16 item_count, u8 move_type);
  247.  
  248. u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
  249.  
  250. u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
  251.  
  252. acpi_rs_length
  253. acpi_rs_get_resource_source(acpi_rs_length resource_length,
  254.                 acpi_rs_length minimum_length,
  255.                 struct acpi_resource_source *resource_source,
  256.                 union aml_resource *aml, char *string_ptr);
  257.  
  258. acpi_rsdesc_size
  259. acpi_rs_set_resource_source(union aml_resource *aml,
  260.                 acpi_rs_length minimum_length,
  261.                 struct acpi_resource_source *resource_source);
  262.  
  263. void
  264. acpi_rs_set_resource_header(u8 descriptor_type,
  265.                 acpi_rsdesc_size total_length,
  266.                 union aml_resource *aml);
  267.  
  268. void
  269. acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
  270.                 union aml_resource *aml);
  271.  
  272. /*
  273.  * rsdump
  274.  */
  275. void acpi_rs_dump_resource_list(struct acpi_resource *resource);
  276.  
  277. void acpi_rs_dump_irq_list(u8 * route_table);
  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.  
  297. /* These resources require separate get/set tables */
  298.  
  299. extern struct acpi_rsconvert_info acpi_rs_get_irq[];
  300. extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
  301. extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
  302. extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
  303.  
  304. extern struct acpi_rsconvert_info acpi_rs_set_irq[];
  305. extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
  306. extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
  307.  
  308. #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
  309. /*
  310.  * rsinfo
  311.  */
  312. extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
  313.  
  314. /*
  315.  * rsdump
  316.  */
  317. extern struct acpi_rsdump_info acpi_rs_dump_irq[];
  318. extern struct acpi_rsdump_info acpi_rs_dump_dma[];
  319. extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
  320. extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
  321. extern struct acpi_rsdump_info acpi_rs_dump_io[];
  322. extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
  323. extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
  324. extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
  325. extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
  326. extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
  327. extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
  328. extern struct acpi_rsdump_info acpi_rs_dump_address16[];
  329. extern struct acpi_rsdump_info acpi_rs_dump_address32[];
  330. extern struct acpi_rsdump_info acpi_rs_dump_address64[];
  331. extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
  332. extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
  333. extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
  334. #endif
  335.  
  336. #endif                /* __ACRESRC_H__ */
  337.