Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / acpi / amlresrc.h
index b20ec30..fb47353 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2006, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef __AMLRESRC_H
 #define __AMLRESRC_H
 
-
 #define ASL_RESNAME_ADDRESS                     "_ADR"
 #define ASL_RESNAME_ALIGNMENT                   "_ALN"
 #define ASL_RESNAME_ADDRESSSPACE                "_ASI"
 #define ASL_RESNAME_ACCESSSIZE                  "_ASZ"
 #define ASL_RESNAME_TYPESPECIFICATTRIBUTES      "_ATT"
 #define ASL_RESNAME_BASEADDRESS                 "_BAS"
-#define ASL_RESNAME_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
+#define ASL_RESNAME_BUSMASTER                   "_BM_" /* Master(1), Slave(0) */
 #define ASL_RESNAME_DECODE                      "_DEC"
 #define ASL_RESNAME_DMA                         "_DMA"
-#define ASL_RESNAME_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
+#define ASL_RESNAME_DMATYPE                     "_TYP" /* Compatible(0), A(1), B(2), F(3) */
 #define ASL_RESNAME_GRANULARITY                 "_GRA"
 #define ASL_RESNAME_INTERRUPT                   "_INT"
-#define ASL_RESNAME_INTERRUPTLEVEL              "_LL_"  /* active_lo(1), active_hi(0) */
-#define ASL_RESNAME_INTERRUPTSHARE              "_SHR"  /* Shareable(1), no_share(0) */
-#define ASL_RESNAME_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
+#define ASL_RESNAME_INTERRUPTLEVEL              "_LL_" /* active_lo(1), active_hi(0) */
+#define ASL_RESNAME_INTERRUPTSHARE              "_SHR" /* Shareable(1), no_share(0) */
+#define ASL_RESNAME_INTERRUPTTYPE               "_HE_" /* Edge(1), Level(0) */
 #define ASL_RESNAME_LENGTH                      "_LEN"
-#define ASL_RESNAME_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
-#define ASL_RESNAME_MEMTYPE                     "_MEM"  /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
+#define ASL_RESNAME_MEMATTRIBUTES               "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
+#define ASL_RESNAME_MEMTYPE                     "_MEM" /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
 #define ASL_RESNAME_MAXADDR                     "_MAX"
 #define ASL_RESNAME_MINADDR                     "_MIN"
 #define ASL_RESNAME_MAXTYPE                     "_MAF"
 #define ASL_RESNAME_REGISTERBITOFFSET           "_RBO"
 #define ASL_RESNAME_REGISTERBITWIDTH            "_RBW"
 #define ASL_RESNAME_RANGETYPE                   "_RNG"
-#define ASL_RESNAME_READWRITETYPE               "_RW_"  /* read_only(0), Writeable (1) */
+#define ASL_RESNAME_READWRITETYPE               "_RW_" /* read_only(0), Writeable (1) */
 #define ASL_RESNAME_TRANSLATION                 "_TRA"
-#define ASL_RESNAME_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
-#define ASL_RESNAME_TYPE                        "_TTP"  /* Translation(1), Static (0) */
-#define ASL_RESNAME_XFERTYPE                    "_SIz"  /* 8(0), 8_and16(1), 16(2) */
-
+#define ASL_RESNAME_TRANSTYPE                   "_TRS" /* Sparse(1), Dense(0) */
+#define ASL_RESNAME_TYPE                        "_TTP" /* Translation(1), Static (0) */
+#define ASL_RESNAME_XFERTYPE                    "_SIz" /* 8(0), 8_and16(1), 16(2) */
 
 /* Default sizes for "small" resource descriptors */
 
 #define ASL_RDESC_FIXED_IO_SIZE                 0x03
 #define ASL_RDESC_END_TAG_SIZE                  0x01
 
-
-struct asl_resource_node
-{
-       u32                                 buffer_length;
-       void                                *buffer;
-       struct asl_resource_node            *next;
+struct asl_resource_node {
+       u32 buffer_length;
+       void *buffer;
+       struct asl_resource_node *next;
 };
 
+/* Macros used to generate AML resource length fields */
+
+#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
+#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
 
 /*
  * Resource descriptors defined in the ACPI specification.
  *
  * Packing/alignment must be BYTE because these descriptors
- * are used to overlay the AML byte stream.
+ * are used to overlay the raw AML byte stream.
  */
 #pragma pack(1)
 
-struct asl_irq_format_desc
-{
-       u8                                  descriptor_type;
-       u16                                 irq_mask;
-       u8                                  flags;
-};
-
-
-struct asl_irq_noflags_desc
-{
-       u8                                  descriptor_type;
-       u16                                 irq_mask;
-};
-
-
-struct asl_dma_format_desc
-{
+/*
+ * SMALL descriptors
+ */
+#define AML_RESOURCE_SMALL_HEADER_COMMON \
        u8                                  descriptor_type;
-       u8                                  dma_channel_mask;
-       u8                                  flags;
-};
 
+struct aml_resource_small_header {
+AML_RESOURCE_SMALL_HEADER_COMMON};
 
-struct asl_start_dependent_desc
-{
-       u8                                  descriptor_type;
-       u8                                  flags;
+struct aml_resource_irq {
+       AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
+       u8 flags;
 };
 
-
-struct asl_start_dependent_noprio_desc
-{
-       u8                                  descriptor_type;
+struct aml_resource_irq_noflags {
+       AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
 };
 
-
-struct asl_end_dependent_desc
-{
-       u8                                  descriptor_type;
+struct aml_resource_dma {
+       AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
+       u8 flags;
 };
 
-
-struct asl_io_port_desc
-{
-       u8                                  descriptor_type;
-       u8                                  information;
-       u16                                 address_min;
-       u16                                 address_max;
-       u8                                  alignment;
-       u8                                  length;
+struct aml_resource_start_dependent {
+       AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
 };
 
+struct aml_resource_start_dependent_noprio {
+AML_RESOURCE_SMALL_HEADER_COMMON};
 
-struct asl_fixed_io_port_desc
-{
-       u8                                  descriptor_type;
-       u16                                 base_address;
-       u8                                  length;
-};
+struct aml_resource_end_dependent {
+AML_RESOURCE_SMALL_HEADER_COMMON};
 
-
-struct asl_small_vendor_desc
-{
-       u8                                  descriptor_type;
-       u8                                  vendor_defined[7];
+struct aml_resource_io {
+       AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
+       u16 minimum;
+       u16 maximum;
+       u8 alignment;
+       u8 address_length;
 };
 
-
-struct asl_end_tag_desc
-{
-       u8                                  descriptor_type;
-       u8                                  checksum;
+struct aml_resource_fixed_io {
+       AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
+       u8 address_length;
 };
 
+struct aml_resource_vendor_small {
+AML_RESOURCE_SMALL_HEADER_COMMON};
 
-/* LARGE descriptors */
-
-struct asl_memory_24_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u16                                 address_min;
-       u16                                 address_max;
-       u16                                 alignment;
-       u16                                 range_length;
+struct aml_resource_end_tag {
+       AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
 };
 
-
-struct asl_large_vendor_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  vendor_defined[1];
+/*
+ * LARGE descriptors
+ */
+#define AML_RESOURCE_LARGE_HEADER_COMMON \
+       u8                                  descriptor_type;\
+       u16                                 resource_length;
+
+struct aml_resource_large_header {
+AML_RESOURCE_LARGE_HEADER_COMMON};
+
+struct aml_resource_memory24 {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
+       u16 minimum;
+       u16 maximum;
+       u16 alignment;
+       u16 address_length;
 };
 
+struct aml_resource_vendor_large {
+AML_RESOURCE_LARGE_HEADER_COMMON};
 
-struct asl_memory_32_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u32                                 address_min;
-       u32                                 address_max;
-       u32                                 alignment;
-       u32                                 range_length;
+struct aml_resource_memory32 {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
+       u32 minimum;
+       u32 maximum;
+       u32 alignment;
+       u32 address_length;
 };
 
-
-struct asl_fixed_memory_32_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u32                                 base_address;
-       u32                                 range_length;
+struct aml_resource_fixed_memory32 {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
+       u32 address;
+       u32 address_length;
 };
 
-
-struct asl_extended_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
+#define AML_RESOURCE_ADDRESS_COMMON \
+       u8                                  resource_type; \
+       u8                                  flags; \
        u8                                  specific_flags;
-       u8                                  revision_iD;
-       u8                                  reserved;
-       u64                                 granularity;
-       u64                                 address_min;
-       u64                                 address_max;
-       u64                                 translation_offset;
-       u64                                 address_length;
-       u64                                 type_specific_attributes;
-       u8                                  optional_fields[2]; /* Used for length calculation only */
-};
-
-#define ASL_EXTENDED_ADDRESS_DESC_REVISION          1       /* ACPI 3.0 */
 
-
-struct asl_qword_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u64                                 granularity;
-       u64                                 address_min;
-       u64                                 address_max;
-       u64                                 translation_offset;
-       u64                                 address_length;
-       u8                                  optional_fields[2];
+struct aml_resource_address {
+AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
+
+struct aml_resource_extended_address64 {
+       AML_RESOURCE_LARGE_HEADER_COMMON
+           AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
+       u8 reserved;
+       u64 granularity;
+       u64 minimum;
+       u64 maximum;
+       u64 translation_offset;
+       u64 address_length;
+       u64 type_specific;
 };
 
+#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1      /* ACPI 3.0 */
 
-struct asl_dword_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u32                                 granularity;
-       u32                                 address_min;
-       u32                                 address_max;
-       u32                                 translation_offset;
-       u32                                 address_length;
-       u8                                  optional_fields[2];
+struct aml_resource_address64 {
+       AML_RESOURCE_LARGE_HEADER_COMMON
+           AML_RESOURCE_ADDRESS_COMMON u64 granularity;
+       u64 minimum;
+       u64 maximum;
+       u64 translation_offset;
+       u64 address_length;
 };
 
-
-struct asl_word_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u16                                 granularity;
-       u16                                 address_min;
-       u16                                 address_max;
-       u16                                 translation_offset;
-       u16                                 address_length;
-       u8                                  optional_fields[2];
+struct aml_resource_address32 {
+       AML_RESOURCE_LARGE_HEADER_COMMON
+           AML_RESOURCE_ADDRESS_COMMON u32 granularity;
+       u32 minimum;
+       u32 maximum;
+       u32 translation_offset;
+       u32 address_length;
 };
 
+struct aml_resource_address16 {
+       AML_RESOURCE_LARGE_HEADER_COMMON
+           AML_RESOURCE_ADDRESS_COMMON u16 granularity;
+       u16 minimum;
+       u16 maximum;
+       u16 translation_offset;
+       u16 address_length;
+};
 
-struct asl_extended_xrupt_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  flags;
-       u8                                  table_length;
-       u32                                 interrupt_number[1];
+struct aml_resource_extended_irq {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
+       u8 interrupt_count;
+       u32 interrupts[1];
        /* res_source_index, res_source optional fields follow */
 };
 
-
-struct asl_general_register_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  address_space_id;
-       u8                                  bit_width;
-       u8                                  bit_offset;
-       u8                                  access_size; /* ACPI 3.0, was Reserved */
-       u64                                 address;
+struct aml_resource_generic_register {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
+       u8 bit_width;
+       u8 bit_offset;
+       u8 access_size;         /* ACPI 3.0, was previously Reserved */
+       u64 address;
 };
 
 /* restore default alignment */
@@ -322,32 +263,42 @@ struct asl_general_register_desc
 
 /* Union of all resource descriptors, so we can allocate the worst case */
 
-union asl_resource_desc
-{
-       struct asl_irq_format_desc          irq;
-       struct asl_dma_format_desc          dma;
-       struct asl_start_dependent_desc     std;
-       struct asl_end_dependent_desc       end;
-       struct asl_io_port_desc             iop;
-       struct asl_fixed_io_port_desc       fio;
-       struct asl_small_vendor_desc        smv;
-       struct asl_end_tag_desc             et;
-
-       struct asl_memory_24_desc           M24;
-       struct asl_large_vendor_desc        lgv;
-       struct asl_memory_32_desc           M32;
-       struct asl_fixed_memory_32_desc     F32;
-       struct asl_qword_address_desc       qas;
-       struct asl_dword_address_desc       das;
-       struct asl_word_address_desc        was;
-       struct asl_extended_address_desc    eas;
-       struct asl_extended_xrupt_desc      exx;
-       struct asl_general_register_desc    grg;
-       u32                                 u32_item;
-       u16                                 u16_item;
-       u8                                  U8item;
+union aml_resource {
+       /* Descriptor headers */
+
+       struct aml_resource_small_header small_header;
+       struct aml_resource_large_header large_header;
+
+       /* Small resource descriptors */
+
+       struct aml_resource_irq irq;
+       struct aml_resource_dma dma;
+       struct aml_resource_start_dependent start_dpf;
+       struct aml_resource_end_dependent end_dpf;
+       struct aml_resource_io io;
+       struct aml_resource_fixed_io fixed_io;
+       struct aml_resource_vendor_small vendor_small;
+       struct aml_resource_end_tag end_tag;
+
+       /* Large resource descriptors */
+
+       struct aml_resource_memory24 memory24;
+       struct aml_resource_generic_register generic_reg;
+       struct aml_resource_vendor_large vendor_large;
+       struct aml_resource_memory32 memory32;
+       struct aml_resource_fixed_memory32 fixed_memory32;
+       struct aml_resource_address16 address16;
+       struct aml_resource_address32 address32;
+       struct aml_resource_address64 address64;
+       struct aml_resource_extended_address64 ext_address64;
+       struct aml_resource_extended_irq extended_irq;
+
+       /* Utility overlays */
+
+       struct aml_resource_address address;
+       u32 u32_item;
+       u16 u16_item;
+       u8 U8item;
 };
 
-
 #endif
-