linux/drivers/acpi/acpica/aclocal.h

/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
/******************************************************************************
 *
 * Name: aclocal.h - Internal data types used across the ACPI subsystem
 *
 * Copyright (C) 2000 - 2023, Intel Corp.
 *
 *****************************************************************************/

#ifndef __ACLOCAL_H__
#define __ACLOCAL_H__

/* acpisrc:struct_defs -- for acpisrc conversion */

#define ACPI_SERIALIZED

acpi_mutex_handle;
#define ACPI_GLOBAL_LOCK

/* Total number of aml opcodes defined */

#define AML_NUM_OPCODES

/* Forward declarations */

struct acpi_walk_state;
struct acpi_obj_mutex;
acpi_parse_object;

/*****************************************************************************
 *
 * Mutex typedefs and structs
 *
 ****************************************************************************/

/*
 * Predefined handles for the mutex objects used within the subsystem
 * All mutex objects are automatically created by acpi_ut_mutex_initialize.
 *
 * The acquire/release ordering protocol is implied via this list. Mutexes
 * with a lower value must be acquired before mutexes with a higher value.
 *
 * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names
 * table below also!
 */
#define ACPI_MTX_INTERPRETER
#define ACPI_MTX_NAMESPACE
#define ACPI_MTX_TABLES
#define ACPI_MTX_EVENTS
#define ACPI_MTX_CACHES
#define ACPI_MTX_MEMORY

#define ACPI_MAX_MUTEX
#define ACPI_NUM_MUTEX

/* Lock structure for reader/writer interfaces */

struct acpi_rw_lock {};

/*
 * Predefined handles for spinlocks used within the subsystem.
 * These spinlocks are created by acpi_ut_mutex_initialize
 */
#define ACPI_LOCK_GPES
#define ACPI_LOCK_HARDWARE

#define ACPI_MAX_LOCK
#define ACPI_NUM_LOCK

/* This Thread ID means that the mutex is not in use (unlocked) */

#define ACPI_MUTEX_NOT_ACQUIRED

/* This Thread ID means an invalid thread ID */

#ifdef ACPI_OS_INVALID_THREAD_ID
#define ACPI_INVALID_THREAD_ID
#else
#define ACPI_INVALID_THREAD_ID
#endif

/* Table for the global mutexes */

struct acpi_mutex_info {};

/* Lock flag parameter for various interfaces */

#define ACPI_MTX_DO_NOT_LOCK
#define ACPI_MTX_LOCK

/* Field access granularities */

#define ACPI_FIELD_BYTE_GRANULARITY
#define ACPI_FIELD_WORD_GRANULARITY
#define ACPI_FIELD_DWORD_GRANULARITY
#define ACPI_FIELD_QWORD_GRANULARITY

#define ACPI_ENTRY_NOT_FOUND

/*****************************************************************************
 *
 * Namespace typedefs and structs
 *
 ****************************************************************************/

/* Operational modes of the AML interpreter/scanner */

acpi_interpreter_mode;

/*
 * The Namespace Node describes a named object that appears in the AML.
 * descriptor_type is used to differentiate between internal descriptors.
 *
 * The node is optimized for both 32-bit and 64-bit platforms:
 * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case.
 *
 * Note: The descriptor_type and Type fields must appear in the identical
 * position in both the struct acpi_namespace_node and union acpi_operand_object
 * structures.
 */
struct acpi_namespace_node {};

/* Namespace Node flags */

#define ANOBJ_RESERVED
#define ANOBJ_TEMPORARY
#define ANOBJ_METHOD_ARG
#define ANOBJ_METHOD_LOCAL
#define ANOBJ_SUBTREE_HAS_INI
#define ANOBJ_EVALUATED
#define ANOBJ_ALLOCATED_BUFFER
#define ANOBJ_NODE_EARLY_INIT

#define ANOBJ_IS_EXTERNAL
#define ANOBJ_METHOD_NO_RETVAL
#define ANOBJ_METHOD_SOME_NO_RETVAL
#define ANOBJ_IS_REFERENCED

/* Internal ACPI table management - master table list */

struct acpi_table_list {};

/* Flags for above */

#define ACPI_ROOT_ORIGIN_UNKNOWN
#define ACPI_ROOT_ORIGIN_ALLOCATED
#define ACPI_ROOT_ALLOW_RESIZE

/* List to manage incoming ACPI tables */

struct acpi_new_table_desc {};

/* Predefined table indexes */

#define ACPI_INVALID_TABLE_INDEX

struct acpi_find_context {};

struct acpi_ns_search_data {};

/* Object types used during package copies */

#define ACPI_COPY_TYPE_SIMPLE
#define ACPI_COPY_TYPE_PACKAGE

/* Info structure used to convert external<->internal namestrings */

struct acpi_namestring_info {};

/* Field creation info */

struct acpi_create_field_info {};

acpi_internal_method;

/*
 * Bitmapped ACPI types. Used internally only
 */
#define ACPI_BTYPE_ANY
#define ACPI_BTYPE_INTEGER
#define ACPI_BTYPE_STRING
#define ACPI_BTYPE_BUFFER
#define ACPI_BTYPE_PACKAGE
#define ACPI_BTYPE_FIELD_UNIT
#define ACPI_BTYPE_DEVICE
#define ACPI_BTYPE_EVENT
#define ACPI_BTYPE_METHOD
#define ACPI_BTYPE_MUTEX
#define ACPI_BTYPE_REGION
#define ACPI_BTYPE_POWER
#define ACPI_BTYPE_PROCESSOR
#define ACPI_BTYPE_THERMAL
#define ACPI_BTYPE_BUFFER_FIELD
#define ACPI_BTYPE_DDB_HANDLE
#define ACPI_BTYPE_DEBUG_OBJECT
#define ACPI_BTYPE_REFERENCE_OBJECT
#define ACPI_BTYPE_RESOURCE
#define ACPI_BTYPE_NAMED_REFERENCE

#define ACPI_BTYPE_COMPUTE_DATA

#define ACPI_BTYPE_DATA

	/* Used by Copy, de_ref_of, Store, Printf, Fprintf */

#define ACPI_BTYPE_DATA_REFERENCE
#define ACPI_BTYPE_DEVICE_OBJECTS
#define ACPI_BTYPE_OBJECTS_AND_REFS
#define ACPI_BTYPE_ALL_OBJECTS

#pragma pack(1)

/*
 * Information structure for ACPI predefined names.
 * Each entry in the table contains the following items:
 *
 * name                 - The ACPI reserved name
 * param_count          - Number of arguments to the method
 * expected_return_btypes - Allowed type(s) for the return value
 */
struct acpi_name_info {};

/*
 * Secondary information structures for ACPI predefined objects that return
 * package objects. This structure appears as the next entry in the table
 * after the NAME_INFO structure above.
 *
 * The reason for this is to minimize the size of the predefined name table.
 */

/*
 * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2,
 * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT,
 * ACPI_PTYPE2_FIX_VAR
 */
struct acpi_package_info {};

/* Used for ACPI_PTYPE2_FIXED */

struct acpi_package_info2 {};

/* Used for ACPI_PTYPE1_OPTION */

struct acpi_package_info3 {};

struct acpi_package_info4 {};

acpi_predefined_info;

/* Reset to default packing */

#pragma pack()

/* Return object auto-repair info */

acpi_object_converter;

struct acpi_simple_repair_info {};

/*
 * Bitmapped return value types
 * Note: the actual data types must be contiguous, a loop in nspredef.c
 * depends on this.
 */
#define ACPI_RTYPE_ANY
#define ACPI_RTYPE_NONE
#define ACPI_RTYPE_INTEGER
#define ACPI_RTYPE_STRING
#define ACPI_RTYPE_BUFFER
#define ACPI_RTYPE_PACKAGE
#define ACPI_RTYPE_REFERENCE
#define ACPI_RTYPE_ALL

#define ACPI_NUM_RTYPES

/* Info for running the _REG methods */

struct acpi_reg_walk_info {};

/*****************************************************************************
 *
 * Event typedefs and structs
 *
 ****************************************************************************/

/* Dispatch info for each host-installed SCI handler */

struct acpi_sci_handler_info {};

/* Dispatch info for each GPE -- either a method or handler, cannot be both */

struct acpi_gpe_handler_info {};

/* Notify info for implicit notify, multiple device objects */

struct acpi_gpe_notify_info {};

/*
 * GPE dispatch info. At any time, the GPE can have at most one type
 * of dispatch - Method, Handler, or Implicit Notify.
 */
acpi_gpe_dispatch_info;

/*
 * Information about a GPE, one per each GPE in an array.
 * NOTE: Important to keep this struct as small as possible.
 */
struct acpi_gpe_event_info {};

/* GPE register address */

struct acpi_gpe_address {};

/* Information about a GPE register pair, one per each status/enable pair in an array */

struct acpi_gpe_register_info {};

/*
 * Information about a GPE register block, one per each installed block --
 * GPE0, GPE1, and one per each installed GPE Block Device.
 */
struct acpi_gpe_block_info {};

/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */

struct acpi_gpe_xrupt_info {};

struct acpi_gpe_walk_info {};

struct acpi_gpe_device_info {};

acpi_gpe_callback;

/* Information about each particular fixed event */

struct acpi_fixed_event_handler {};

struct acpi_fixed_event_info {};

/* Information used during field processing */

struct acpi_field_info {};

/* Information about the interrupt ID and _EVT of a GED device */

struct acpi_ged_handler_info {};

/*****************************************************************************
 *
 * Generic "state" object for stacks
 *
 ****************************************************************************/

#define ACPI_CONTROL_NORMAL
#define ACPI_CONTROL_CONDITIONAL_EXECUTING
#define ACPI_CONTROL_PREDICATE_EXECUTING
#define ACPI_CONTROL_PREDICATE_FALSE
#define ACPI_CONTROL_PREDICATE_TRUE

#define ACPI_STATE_COMMON

	/* There are 2 bytes available here until the next natural alignment boundary */

struct acpi_common_state {};

/*
 * Update state - used to traverse complex objects such as packages
 */
struct acpi_update_state {};

/*
 * Pkg state - used to traverse nested package structures
 */
struct acpi_pkg_state {};

/*
 * Control state - one per if/else and while constructs.
 * Allows nesting of these constructs
 */
struct acpi_control_state {};

/*
 * Scope state - current scope during namespace lookups
 */
struct acpi_scope_state {};

struct acpi_pscope_state {};

/*
 * Thread state - one per thread across multiple walk states. Multiple walk
 * states are created when there are nested control methods executing.
 */
struct acpi_thread_state {};

/*
 * Result values - used to accumulate the results of nested
 * AML arguments
 */
struct acpi_result_values {};

acpi_parse_downwards;

acpi_parse_upwards;

/* Global handlers for AML Notifies */

struct acpi_global_notify_handler {};

/*
 * Notify info - used to pass info to the deferred notify
 * handler/dispatcher.
 */
struct acpi_notify_info {};

/* Generic state is union of structs above */

acpi_generic_state;

/*****************************************************************************
 *
 * Interpreter typedefs and structs
 *
 ****************************************************************************/

acpi_execute_op;

/* Address Range info block */

struct acpi_address_range {};

/*****************************************************************************
 *
 * Parser typedefs and structs
 *
 ****************************************************************************/

/*
 * AML opcode, name, and argument layout
 */
struct acpi_opcode_info {};

/* Value associated with the parse object */

acpi_parse_value;

#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
#define ACPI_DISASM_ONLY_MEMBERS(a)
#else
#define ACPI_DISASM_ONLY_MEMBERS
#endif

#if defined(ACPI_ASL_COMPILER)
#define ACPI_CONVERTER_ONLY_MEMBERS
#else
#define ACPI_CONVERTER_ONLY_MEMBERS(a)
#endif

#define ACPI_PARSE_COMMON

/* categories of comments */

asl_comment_types;

/* Internal opcodes for disasm_opcode field above */

#define ACPI_DASM_BUFFER
#define ACPI_DASM_RESOURCE
#define ACPI_DASM_STRING
#define ACPI_DASM_UNICODE
#define ACPI_DASM_PLD_METHOD
#define ACPI_DASM_UUID
#define ACPI_DASM_EISAID
#define ACPI_DASM_MATCHOP
#define ACPI_DASM_LNOT_PREFIX
#define ACPI_DASM_LNOT_SUFFIX
#define ACPI_DASM_HID_STRING
#define ACPI_DASM_IGNORE_SINGLE
#define ACPI_DASM_SWITCH
#define ACPI_DASM_SWITCH_PREDICATE
#define ACPI_DASM_CASE
#define ACPI_DASM_DEFAULT

/*
 * List struct used in the -ca option
 */
struct acpi_comment_node {};

struct acpi_comment_addr_node {};

/*
 * File node - used for "Include" operator file stack and
 * dependency tree for the -ca option
 */
struct acpi_file_node {};

/*
 * Generic operation (for example:  If, While, Store)
 */
struct acpi_parse_obj_common {};

/*
 * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions),
 * and bytelists.
 */
struct acpi_parse_obj_named {};

/* This version is used by the iASL compiler only */

#define ACPI_MAX_PARSEOP_NAME

struct acpi_parse_obj_asl {};

acpi_parse_object;

struct asl_comment_state {};

/*
 * Parse state - one state per parser invocation and each control
 * method.
 */
struct acpi_parse_state {};

/* Parse object flags */

#define ACPI_PARSEOP_GENERIC
#define ACPI_PARSEOP_NAMED_OBJECT
#define ACPI_PARSEOP_DEFERRED
#define ACPI_PARSEOP_BYTELIST
#define ACPI_PARSEOP_IN_STACK
#define ACPI_PARSEOP_TARGET
#define ACPI_PARSEOP_IN_CACHE

/* Parse object disasm_flags */

#define ACPI_PARSEOP_IGNORE
#define ACPI_PARSEOP_PARAMETER_LIST
#define ACPI_PARSEOP_EMPTY_TERMLIST
#define ACPI_PARSEOP_PREDEFINED_CHECKED
#define ACPI_PARSEOP_CLOSING_PAREN
#define ACPI_PARSEOP_COMPOUND_ASSIGNMENT
#define ACPI_PARSEOP_ASSIGNMENT
#define ACPI_PARSEOP_ELSEIF
#define ACPI_PARSEOP_LEGACY_ASL_ONLY

/*****************************************************************************
 *
 * Hardware (ACPI registers) and PNP
 *
 ****************************************************************************/

struct acpi_bit_register_info {};

/*
 * Some ACPI registers have bits that must be ignored -- meaning that they
 * must be preserved.
 */
#define ACPI_PM1_STATUS_PRESERVED_BITS

/* Write-only bits must be zeroed by software */

#define ACPI_PM1_CONTROL_WRITEONLY_BITS

/* For control registers, both ignored and reserved bits must be preserved */

/*
 * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the
 * ACPI specification to be a "preserved" bit - "OSPM always preserves this
 * bit position", section 4.7.3.2.1. However, on some machines the OS must
 * write a one to this bit after resume for the machine to work properly.
 * To enable this, we no longer attempt to preserve this bit. No machines
 * are known to fail if the bit is not preserved. (May 2009)
 */
#define ACPI_PM1_CONTROL_IGNORED_BITS
#define ACPI_PM1_CONTROL_RESERVED_BITS
#define ACPI_PM1_CONTROL_PRESERVED_BITS

#define ACPI_PM2_CONTROL_PRESERVED_BITS

/*
 * Register IDs
 * These are the full ACPI registers
 */
#define ACPI_REGISTER_PM1_STATUS
#define ACPI_REGISTER_PM1_ENABLE
#define ACPI_REGISTER_PM1_CONTROL
#define ACPI_REGISTER_PM2_CONTROL
#define ACPI_REGISTER_PM_TIMER
#define ACPI_REGISTER_PROCESSOR_BLOCK
#define ACPI_REGISTER_SMI_COMMAND_BLOCK

/* Masks used to access the bit_registers */

#define ACPI_BITMASK_TIMER_STATUS
#define ACPI_BITMASK_BUS_MASTER_STATUS
#define ACPI_BITMASK_GLOBAL_LOCK_STATUS
#define ACPI_BITMASK_POWER_BUTTON_STATUS
#define ACPI_BITMASK_SLEEP_BUTTON_STATUS
#define ACPI_BITMASK_RT_CLOCK_STATUS
#define ACPI_BITMASK_PCIEXP_WAKE_STATUS
#define ACPI_BITMASK_WAKE_STATUS

#define ACPI_BITMASK_ALL_FIXED_STATUS

#define ACPI_BITMASK_TIMER_ENABLE
#define ACPI_BITMASK_GLOBAL_LOCK_ENABLE
#define ACPI_BITMASK_POWER_BUTTON_ENABLE
#define ACPI_BITMASK_SLEEP_BUTTON_ENABLE
#define ACPI_BITMASK_RT_CLOCK_ENABLE
#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE

#define ACPI_BITMASK_SCI_ENABLE
#define ACPI_BITMASK_BUS_MASTER_RLD
#define ACPI_BITMASK_GLOBAL_LOCK_RELEASE
#define ACPI_BITMASK_SLEEP_TYPE
#define ACPI_BITMASK_SLEEP_ENABLE

#define ACPI_BITMASK_ARB_DISABLE

/* Raw bit position of each bit_register */

#define ACPI_BITPOSITION_TIMER_STATUS
#define ACPI_BITPOSITION_BUS_MASTER_STATUS
#define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS
#define ACPI_BITPOSITION_POWER_BUTTON_STATUS
#define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS
#define ACPI_BITPOSITION_RT_CLOCK_STATUS
#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS
#define ACPI_BITPOSITION_WAKE_STATUS

#define ACPI_BITPOSITION_TIMER_ENABLE
#define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE
#define ACPI_BITPOSITION_POWER_BUTTON_ENABLE
#define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE
#define ACPI_BITPOSITION_RT_CLOCK_ENABLE
#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE

#define ACPI_BITPOSITION_SCI_ENABLE
#define ACPI_BITPOSITION_BUS_MASTER_RLD
#define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE
#define ACPI_BITPOSITION_SLEEP_TYPE
#define ACPI_BITPOSITION_SLEEP_ENABLE

#define ACPI_BITPOSITION_ARB_DISABLE

/* Structs and definitions for _OSI support and I/O port validation */

#define ACPI_ALWAYS_ILLEGAL

struct acpi_interface_info {};

#define ACPI_OSI_INVALID
#define ACPI_OSI_DYNAMIC
#define ACPI_OSI_FEATURE
#define ACPI_OSI_DEFAULT_INVALID
#define ACPI_OSI_OPTIONAL_FEATURE

struct acpi_port_info {};

/*****************************************************************************
 *
 * Resource descriptors
 *
 ****************************************************************************/

/* resource_type values */

#define ACPI_ADDRESS_TYPE_MEMORY_RANGE
#define ACPI_ADDRESS_TYPE_IO_RANGE
#define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE

#define ACPI_ADDRESS_TYPE_PCC_NUMBER

/* Resource descriptor types and masks */

#define ACPI_RESOURCE_NAME_LARGE
#define ACPI_RESOURCE_NAME_SMALL

#define ACPI_RESOURCE_NAME_SMALL_MASK
#define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK
#define ACPI_RESOURCE_NAME_LARGE_MASK

/*
 * Small resource descriptor "names" as defined by the ACPI specification.
 * Note: Bits 2:0 are used for the descriptor length
 */
#define ACPI_RESOURCE_NAME_IRQ
#define ACPI_RESOURCE_NAME_DMA
#define ACPI_RESOURCE_NAME_START_DEPENDENT
#define ACPI_RESOURCE_NAME_END_DEPENDENT
#define ACPI_RESOURCE_NAME_IO
#define ACPI_RESOURCE_NAME_FIXED_IO
#define ACPI_RESOURCE_NAME_FIXED_DMA
#define ACPI_RESOURCE_NAME_RESERVED_S2
#define ACPI_RESOURCE_NAME_RESERVED_S3
#define ACPI_RESOURCE_NAME_RESERVED_S4
#define ACPI_RESOURCE_NAME_VENDOR_SMALL
#define ACPI_RESOURCE_NAME_END_TAG

/*
 * Large resource descriptor "names" as defined by the ACPI specification.
 * Note: includes the Large Descriptor bit in bit[7]
 */
#define ACPI_RESOURCE_NAME_MEMORY24
#define ACPI_RESOURCE_NAME_GENERIC_REGISTER
#define ACPI_RESOURCE_NAME_RESERVED_L1
#define ACPI_RESOURCE_NAME_VENDOR_LARGE
#define ACPI_RESOURCE_NAME_MEMORY32
#define ACPI_RESOURCE_NAME_FIXED_MEMORY32
#define ACPI_RESOURCE_NAME_ADDRESS32
#define ACPI_RESOURCE_NAME_ADDRESS16
#define ACPI_RESOURCE_NAME_EXTENDED_IRQ
#define ACPI_RESOURCE_NAME_ADDRESS64
#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64
#define ACPI_RESOURCE_NAME_GPIO
#define ACPI_RESOURCE_NAME_PIN_FUNCTION
#define ACPI_RESOURCE_NAME_SERIAL_BUS
#define ACPI_RESOURCE_NAME_PIN_CONFIG
#define ACPI_RESOURCE_NAME_PIN_GROUP
#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION
#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG
#define ACPI_RESOURCE_NAME_CLOCK_INPUT
#define ACPI_RESOURCE_NAME_LARGE_MAX

/*****************************************************************************
 *
 * Miscellaneous
 *
 ****************************************************************************/

#define ACPI_ASCII_ZERO

/*****************************************************************************
 *
 * Disassembler
 *
 ****************************************************************************/

struct acpi_external_list {};

/* Values for Flags field above */

#define ACPI_EXT_RESOLVED_REFERENCE
#define ACPI_EXT_ORIGIN_FROM_FILE
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED
#define ACPI_EXT_EXTERNAL_EMITTED
#define ACPI_EXT_ORIGIN_FROM_OPCODE
#define ACPI_EXT_CONFLICTING_DECLARATION

struct acpi_external_file {};

struct acpi_parse_object_list {};

/*****************************************************************************
 *
 * Debugger
 *
 ****************************************************************************/

struct acpi_db_method_info {};

struct acpi_integrity_info {};

#define ACPI_DB_DISABLE_OUTPUT
#define ACPI_DB_REDIRECTABLE_OUTPUT
#define ACPI_DB_CONSOLE_OUTPUT
#define ACPI_DB_DUPLICATE_OUTPUT

struct acpi_object_info {};

/*****************************************************************************
 *
 * Debug
 *
 ****************************************************************************/

/* Entry for a memory allocation (debug only) */

#define ACPI_MEM_MALLOC
#define ACPI_MEM_CALLOC
#define ACPI_MAX_MODULE_NAME

#define ACPI_COMMON_DEBUG_MEM_HEADER

struct acpi_debug_mem_header {};

struct acpi_debug_mem_block {};

#define ACPI_MEM_LIST_GLOBAL
#define ACPI_MEM_LIST_NSNODE
#define ACPI_MEM_LIST_MAX
#define ACPI_NUM_MEM_LISTS

/*****************************************************************************
 *
 * Info/help support
 *
 ****************************************************************************/

struct ah_predefined_name {};

struct ah_device_id {};

struct ah_uuid {};

struct ah_table {};

#endif				/* __ACLOCAL_H__ */