306 lines
8.4 KiB
C
306 lines
8.4 KiB
C
|
|
/******************************************************************************
|
|
*
|
|
* Module Name: amlresrc.h - AML resource descriptors
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*
|
|
* Copyright (C) 2000 - 2005, R. Byron Moore
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions, and the following disclaimer,
|
|
* without modification.
|
|
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
* substantially similar to the "NO WARRANTY" disclaimer below
|
|
* ("Disclaimer") and any redistribution must be conditioned upon
|
|
* including a substantially similar Disclaimer requirement for further
|
|
* binary redistribution.
|
|
* 3. Neither the names of the above-listed copyright holders nor the names
|
|
* of any contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* Alternatively, this software may be distributed under the terms of the
|
|
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
* Software Foundation.
|
|
*
|
|
* NO WARRANTY
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* 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_DECODE "_DEC"
|
|
#define ASL_RESNAME_DMA "_DMA"
|
|
#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_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_MAXADDR "_MAX"
|
|
#define ASL_RESNAME_MINADDR "_MIN"
|
|
#define ASL_RESNAME_MAXTYPE "_MAF"
|
|
#define ASL_RESNAME_MINTYPE "_MIF"
|
|
#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_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) */
|
|
|
|
/* Default sizes for "small" resource descriptors */
|
|
|
|
#define ASL_RDESC_IRQ_SIZE 0x02
|
|
#define ASL_RDESC_DMA_SIZE 0x02
|
|
#define ASL_RDESC_ST_DEPEND_SIZE 0x00
|
|
#define ASL_RDESC_END_DEPEND_SIZE 0x00
|
|
#define ASL_RDESC_IO_SIZE 0x07
|
|
#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;
|
|
};
|
|
|
|
/*
|
|
* Resource descriptors defined in the ACPI specification.
|
|
*
|
|
* Packing/alignment must be BYTE because these descriptors
|
|
* are used to overlay the 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 {
|
|
u8 descriptor_type;
|
|
u8 dma_channel_mask;
|
|
u8 flags;
|
|
};
|
|
|
|
struct asl_start_dependent_desc {
|
|
u8 descriptor_type;
|
|
u8 flags;
|
|
};
|
|
|
|
struct asl_start_dependent_noprio_desc {
|
|
u8 descriptor_type;
|
|
};
|
|
|
|
struct asl_end_dependent_desc {
|
|
u8 descriptor_type;
|
|
};
|
|
|
|
struct asl_io_port_desc {
|
|
u8 descriptor_type;
|
|
u8 information;
|
|
u16 address_min;
|
|
u16 address_max;
|
|
u8 alignment;
|
|
u8 length;
|
|
};
|
|
|
|
struct asl_fixed_io_port_desc {
|
|
u8 descriptor_type;
|
|
u16 base_address;
|
|
u8 length;
|
|
};
|
|
|
|
struct asl_small_vendor_desc {
|
|
u8 descriptor_type;
|
|
u8 vendor_defined[7];
|
|
};
|
|
|
|
struct asl_end_tag_desc {
|
|
u8 descriptor_type;
|
|
u8 checksum;
|
|
};
|
|
|
|
/* 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 asl_large_vendor_desc {
|
|
u8 descriptor_type;
|
|
u16 length;
|
|
u8 vendor_defined[1];
|
|
};
|
|
|
|
struct asl_memory_32_desc {
|
|
u8 descriptor_type;
|
|
u16 length;
|
|
u8 information;
|
|
u32 address_min;
|
|
u32 address_max;
|
|
u32 alignment;
|
|
u32 range_length;
|
|
};
|
|
|
|
struct asl_fixed_memory_32_desc {
|
|
u8 descriptor_type;
|
|
u16 length;
|
|
u8 information;
|
|
u32 base_address;
|
|
u32 range_length;
|
|
};
|
|
|
|
struct asl_extended_address_desc {
|
|
u8 descriptor_type;
|
|
u16 length;
|
|
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 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 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 asl_extended_xrupt_desc {
|
|
u8 descriptor_type;
|
|
u16 length;
|
|
u8 flags;
|
|
u8 table_length;
|
|
u32 interrupt_number[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;
|
|
};
|
|
|
|
/* restore default alignment */
|
|
|
|
#pragma pack()
|
|
|
|
/* 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;
|
|
};
|
|
|
|
#endif
|