home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / acpi / amlresrc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  9.6 KB  |  305 lines

  1.  
  2. /******************************************************************************
  3.  *
  4.  * Module Name: amlresrc.h - AML resource descriptors
  5.  *
  6.  *****************************************************************************/
  7.  
  8. /*
  9.  * Copyright (C) 2000 - 2006, R. Byron Moore
  10.  * All rights reserved.
  11.  *
  12.  * Redistribution and use in source and binary forms, with or without
  13.  * modification, are permitted provided that the following conditions
  14.  * are met:
  15.  * 1. Redistributions of source code must retain the above copyright
  16.  *    notice, this list of conditions, and the following disclaimer,
  17.  *    without modification.
  18.  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  19.  *    substantially similar to the "NO WARRANTY" disclaimer below
  20.  *    ("Disclaimer") and any redistribution must be conditioned upon
  21.  *    including a substantially similar Disclaimer requirement for further
  22.  *    binary redistribution.
  23.  * 3. Neither the names of the above-listed copyright holders nor the names
  24.  *    of any contributors may be used to endorse or promote products derived
  25.  *    from this software without specific prior written permission.
  26.  *
  27.  * Alternatively, this software may be distributed under the terms of the
  28.  * GNU General Public License ("GPL") version 2 as published by the Free
  29.  * Software Foundation.
  30.  *
  31.  * NO WARRANTY
  32.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  33.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  34.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  35.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  36.  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  37.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  38.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  39.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  40.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  41.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  42.  * POSSIBILITY OF SUCH DAMAGES.
  43.  */
  44.  
  45. #ifndef __AMLRESRC_H
  46. #define __AMLRESRC_H
  47.  
  48. #define ASL_RESNAME_ADDRESS                     "_ADR"
  49. #define ASL_RESNAME_ALIGNMENT                   "_ALN"
  50. #define ASL_RESNAME_ADDRESSSPACE                "_ASI"
  51. #define ASL_RESNAME_ACCESSSIZE                  "_ASZ"
  52. #define ASL_RESNAME_TYPESPECIFICATTRIBUTES      "_ATT"
  53. #define ASL_RESNAME_BASEADDRESS                 "_BAS"
  54. #define ASL_RESNAME_BUSMASTER                   "_BM_"    /* Master(1), Slave(0) */
  55. #define ASL_RESNAME_DECODE                      "_DEC"
  56. #define ASL_RESNAME_DMA                         "_DMA"
  57. #define ASL_RESNAME_DMATYPE                     "_TYP"    /* Compatible(0), A(1), B(2), F(3) */
  58. #define ASL_RESNAME_GRANULARITY                 "_GRA"
  59. #define ASL_RESNAME_INTERRUPT                   "_INT"
  60. #define ASL_RESNAME_INTERRUPTLEVEL              "_LL_"    /* active_lo(1), active_hi(0) */
  61. #define ASL_RESNAME_INTERRUPTSHARE              "_SHR"    /* Shareable(1), no_share(0) */
  62. #define ASL_RESNAME_INTERRUPTTYPE               "_HE_"    /* Edge(1), Level(0) */
  63. #define ASL_RESNAME_LENGTH                      "_LEN"
  64. #define ASL_RESNAME_MEMATTRIBUTES               "_MTP"    /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
  65. #define ASL_RESNAME_MEMTYPE                     "_MEM"    /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
  66. #define ASL_RESNAME_MAXADDR                     "_MAX"
  67. #define ASL_RESNAME_MINADDR                     "_MIN"
  68. #define ASL_RESNAME_MAXTYPE                     "_MAF"
  69. #define ASL_RESNAME_MINTYPE                     "_MIF"
  70. #define ASL_RESNAME_REGISTERBITOFFSET           "_RBO"
  71. #define ASL_RESNAME_REGISTERBITWIDTH            "_RBW"
  72. #define ASL_RESNAME_RANGETYPE                   "_RNG"
  73. #define ASL_RESNAME_READWRITETYPE               "_RW_"    /* read_only(0), Writeable (1) */
  74. #define ASL_RESNAME_TRANSLATION                 "_TRA"
  75. #define ASL_RESNAME_TRANSTYPE                   "_TRS"    /* Sparse(1), Dense(0) */
  76. #define ASL_RESNAME_TYPE                        "_TTP"    /* Translation(1), Static (0) */
  77. #define ASL_RESNAME_XFERTYPE                    "_SIz"    /* 8(0), 8_and16(1), 16(2) */
  78.  
  79. /* Default sizes for "small" resource descriptors */
  80.  
  81. #define ASL_RDESC_IRQ_SIZE                      0x02
  82. #define ASL_RDESC_DMA_SIZE                      0x02
  83. #define ASL_RDESC_ST_DEPEND_SIZE                0x00
  84. #define ASL_RDESC_END_DEPEND_SIZE               0x00
  85. #define ASL_RDESC_IO_SIZE                       0x07
  86. #define ASL_RDESC_FIXED_IO_SIZE                 0x03
  87. #define ASL_RDESC_END_TAG_SIZE                  0x01
  88.  
  89. struct asl_resource_node {
  90.     u32 buffer_length;
  91.     void *buffer;
  92.     struct asl_resource_node *next;
  93. };
  94.  
  95. /* Macros used to generate AML resource length fields */
  96.  
  97. #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
  98. #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
  99.  
  100. /*
  101.  * Resource descriptors defined in the ACPI specification.
  102.  *
  103.  * Packing/alignment must be BYTE because these descriptors
  104.  * are used to overlay the raw AML byte stream.
  105.  */
  106. #pragma pack(1)
  107.  
  108. /*
  109.  * SMALL descriptors
  110.  */
  111. #define AML_RESOURCE_SMALL_HEADER_COMMON \
  112.     u8                                  descriptor_type;
  113.  
  114. struct aml_resource_small_header {
  115. AML_RESOURCE_SMALL_HEADER_COMMON};
  116.  
  117. struct aml_resource_irq {
  118.     AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
  119.     u8 flags;
  120. };
  121.  
  122. struct aml_resource_irq_noflags {
  123.     AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
  124. };
  125.  
  126. struct aml_resource_dma {
  127.     AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
  128.     u8 flags;
  129. };
  130.  
  131. struct aml_resource_start_dependent {
  132.     AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
  133. };
  134.  
  135. struct aml_resource_start_dependent_noprio {
  136. AML_RESOURCE_SMALL_HEADER_COMMON};
  137.  
  138. struct aml_resource_end_dependent {
  139. AML_RESOURCE_SMALL_HEADER_COMMON};
  140.  
  141. struct aml_resource_io {
  142.     AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
  143.     u16 minimum;
  144.     u16 maximum;
  145.     u8 alignment;
  146.     u8 address_length;
  147. };
  148.  
  149. struct aml_resource_fixed_io {
  150.     AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
  151.     u8 address_length;
  152. };
  153.  
  154. struct aml_resource_vendor_small {
  155. AML_RESOURCE_SMALL_HEADER_COMMON};
  156.  
  157. struct aml_resource_end_tag {
  158.     AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
  159. };
  160.  
  161. /*
  162.  * LARGE descriptors
  163.  */
  164. #define AML_RESOURCE_LARGE_HEADER_COMMON \
  165.     u8                                  descriptor_type;\
  166.     u16                                 resource_length;
  167.  
  168. struct aml_resource_large_header {
  169. AML_RESOURCE_LARGE_HEADER_COMMON};
  170.  
  171. struct aml_resource_memory24 {
  172.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  173.     u16 minimum;
  174.     u16 maximum;
  175.     u16 alignment;
  176.     u16 address_length;
  177. };
  178.  
  179. struct aml_resource_vendor_large {
  180. AML_RESOURCE_LARGE_HEADER_COMMON};
  181.  
  182. struct aml_resource_memory32 {
  183.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  184.     u32 minimum;
  185.     u32 maximum;
  186.     u32 alignment;
  187.     u32 address_length;
  188. };
  189.  
  190. struct aml_resource_fixed_memory32 {
  191.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  192.     u32 address;
  193.     u32 address_length;
  194. };
  195.  
  196. #define AML_RESOURCE_ADDRESS_COMMON \
  197.     u8                                  resource_type; \
  198.     u8                                  flags; \
  199.     u8                                  specific_flags;
  200.  
  201. struct aml_resource_address {
  202. AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
  203.  
  204. struct aml_resource_extended_address64 {
  205.     AML_RESOURCE_LARGE_HEADER_COMMON
  206.         AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
  207.     u8 reserved;
  208.     u64 granularity;
  209.     u64 minimum;
  210.     u64 maximum;
  211.     u64 translation_offset;
  212.     u64 address_length;
  213.     u64 type_specific;
  214. };
  215.  
  216. #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1    /* ACPI 3.0 */
  217.  
  218. struct aml_resource_address64 {
  219.     AML_RESOURCE_LARGE_HEADER_COMMON
  220.         AML_RESOURCE_ADDRESS_COMMON u64 granularity;
  221.     u64 minimum;
  222.     u64 maximum;
  223.     u64 translation_offset;
  224.     u64 address_length;
  225. };
  226.  
  227. struct aml_resource_address32 {
  228.     AML_RESOURCE_LARGE_HEADER_COMMON
  229.         AML_RESOURCE_ADDRESS_COMMON u32 granularity;
  230.     u32 minimum;
  231.     u32 maximum;
  232.     u32 translation_offset;
  233.     u32 address_length;
  234. };
  235.  
  236. struct aml_resource_address16 {
  237.     AML_RESOURCE_LARGE_HEADER_COMMON
  238.         AML_RESOURCE_ADDRESS_COMMON u16 granularity;
  239.     u16 minimum;
  240.     u16 maximum;
  241.     u16 translation_offset;
  242.     u16 address_length;
  243. };
  244.  
  245. struct aml_resource_extended_irq {
  246.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  247.     u8 interrupt_count;
  248.     u32 interrupts[1];
  249.     /* res_source_index, res_source optional fields follow */
  250. };
  251.  
  252. struct aml_resource_generic_register {
  253.     AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
  254.     u8 bit_width;
  255.     u8 bit_offset;
  256.     u8 access_size;        /* ACPI 3.0, was previously Reserved */
  257.     u64 address;
  258. };
  259.  
  260. /* restore default alignment */
  261.  
  262. #pragma pack()
  263.  
  264. /* Union of all resource descriptors, so we can allocate the worst case */
  265.  
  266. union aml_resource {
  267.     /* Descriptor headers */
  268.  
  269.     struct aml_resource_small_header small_header;
  270.     struct aml_resource_large_header large_header;
  271.  
  272.     /* Small resource descriptors */
  273.  
  274.     struct aml_resource_irq irq;
  275.     struct aml_resource_dma dma;
  276.     struct aml_resource_start_dependent start_dpf;
  277.     struct aml_resource_end_dependent end_dpf;
  278.     struct aml_resource_io io;
  279.     struct aml_resource_fixed_io fixed_io;
  280.     struct aml_resource_vendor_small vendor_small;
  281.     struct aml_resource_end_tag end_tag;
  282.  
  283.     /* Large resource descriptors */
  284.  
  285.     struct aml_resource_memory24 memory24;
  286.     struct aml_resource_generic_register generic_reg;
  287.     struct aml_resource_vendor_large vendor_large;
  288.     struct aml_resource_memory32 memory32;
  289.     struct aml_resource_fixed_memory32 fixed_memory32;
  290.     struct aml_resource_address16 address16;
  291.     struct aml_resource_address32 address32;
  292.     struct aml_resource_address64 address64;
  293.     struct aml_resource_extended_address64 ext_address64;
  294.     struct aml_resource_extended_irq extended_irq;
  295.  
  296.     /* Utility overlays */
  297.  
  298.     struct aml_resource_address address;
  299.     u32 u32_item;
  300.     u16 u16_item;
  301.     u8 U8item;
  302. };
  303.  
  304. #endif
  305.