
/******************************************************************************
 *
 * Name: acpixf.h - External interfaces to the ACPI subsystem
 *
 *****************************************************************************/

/*
 * 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 __ACXFACE_H__
#define __ACXFACE_H__

#include "actypes.h"
#include "actbl.h"


 /*
 * Global interfaces
 */

acpi_status
acpi_initialize_subsystem (
	void);

acpi_status
acpi_enable_subsystem (
	u32                             flags);

acpi_status
acpi_initialize_objects (
	u32                             flags);

acpi_status
acpi_terminate (
	void);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_subsystem_status (
	void);
#endif

acpi_status
acpi_enable (
	void);

acpi_status
acpi_disable (
	void);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_get_system_info (
	struct acpi_buffer              *ret_buffer);
#endif

const char *
acpi_format_exception (
	acpi_status                     exception);

acpi_status
acpi_purge_cached_objects (
	void);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_install_initialization_handler (
	acpi_init_handler               handler,
	u32                             function);
#endif

/*
 * ACPI Memory manager
 */

void *
acpi_allocate (
	u32                             size);

void *
acpi_callocate (
	u32                             size);

void
acpi_free (
	void                            *address);


/*
 * ACPI table manipulation interfaces
 */

acpi_status
acpi_find_root_pointer (
	u32                             flags,
	struct acpi_pointer             *rsdp_address);

acpi_status
acpi_load_tables (
	void);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_load_table (
	struct acpi_table_header        *table_ptr);

acpi_status
acpi_unload_table (
	acpi_table_type                 table_type);

acpi_status
acpi_get_table_header (
	acpi_table_type                 table_type,
	u32                             instance,
	struct acpi_table_header        *out_table_header);
#endif  /*  ACPI_FUTURE_USAGE  */

acpi_status
acpi_get_table (
	acpi_table_type                 table_type,
	u32                             instance,
	struct acpi_buffer              *ret_buffer);

acpi_status
acpi_get_firmware_table (
	acpi_string                     signature,
	u32                             instance,
	u32                             flags,
	struct acpi_table_header        **table_pointer);


/*
 * Namespace and name interfaces
 */

acpi_status
acpi_walk_namespace (
	acpi_object_type                type,
	acpi_handle                     start_object,
	u32                             max_depth,
	acpi_walk_callback              user_function,
	void                            *context,
	void                            **return_value);

acpi_status
acpi_get_devices (
	char                            *HID,
	acpi_walk_callback              user_function,
	void                            *context,
	void                            **return_value);

acpi_status
acpi_get_name (
	acpi_handle                     handle,
	u32                             name_type,
	struct acpi_buffer              *ret_path_ptr);

acpi_status
acpi_get_handle (
	acpi_handle                     parent,
	acpi_string                     pathname,
	acpi_handle                     *ret_handle);

acpi_status
acpi_attach_data (
	acpi_handle                     obj_handle,
	acpi_object_handler             handler,
	void                            *data);

acpi_status
acpi_detach_data (
	acpi_handle                     obj_handle,
	acpi_object_handler             handler);

acpi_status
acpi_get_data (
	acpi_handle                     obj_handle,
	acpi_object_handler             handler,
	void                            **data);


/*
 * Object manipulation and enumeration
 */

acpi_status
acpi_evaluate_object (
	acpi_handle                     object,
	acpi_string                     pathname,
	struct acpi_object_list         *parameter_objects,
	struct acpi_buffer              *return_object_buffer);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_evaluate_object_typed (
	acpi_handle                     object,
	acpi_string                     pathname,
	struct acpi_object_list         *external_params,
	struct acpi_buffer              *return_buffer,
	acpi_object_type                return_type);
#endif

acpi_status
acpi_get_object_info (
	acpi_handle                     handle,
	struct acpi_buffer              *return_buffer);

acpi_status
acpi_get_next_object (
	acpi_object_type                type,
	acpi_handle                     parent,
	acpi_handle                     child,
	acpi_handle                     *out_handle);

acpi_status
acpi_get_type (
	acpi_handle                     object,
	acpi_object_type                *out_type);

acpi_status
acpi_get_parent (
	acpi_handle                     object,
	acpi_handle                     *out_handle);


/*
 * Event handler interfaces
 */

acpi_status
acpi_install_fixed_event_handler (
	u32                             acpi_event,
	acpi_event_handler              handler,
	void                            *context);

acpi_status
acpi_remove_fixed_event_handler (
	u32                             acpi_event,
	acpi_event_handler              handler);

acpi_status
acpi_install_notify_handler (
	acpi_handle                     device,
	u32                             handler_type,
	acpi_notify_handler             handler,
	void                            *context);

acpi_status
acpi_remove_notify_handler (
	acpi_handle                     device,
	u32                             handler_type,
	acpi_notify_handler             handler);

acpi_status
acpi_install_address_space_handler (
	acpi_handle                     device,
	acpi_adr_space_type             space_id,
	acpi_adr_space_handler          handler,
	acpi_adr_space_setup            setup,
	void                            *context);

acpi_status
acpi_remove_address_space_handler (
	acpi_handle                     device,
	acpi_adr_space_type             space_id,
	acpi_adr_space_handler          handler);

acpi_status
acpi_install_gpe_handler (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u32                             type,
	acpi_event_handler              address,
	void                            *context);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_install_exception_handler (
	acpi_exception_handler          handler);
#endif


/*
 * Event interfaces
 */

acpi_status
acpi_acquire_global_lock (
	u16                             timeout,
	u32                             *handle);

acpi_status
acpi_release_global_lock (
	u32                             handle);

acpi_status
acpi_remove_gpe_handler (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	acpi_event_handler              address);

acpi_status
acpi_enable_event (
	u32                             event,
	u32                             flags);

acpi_status
acpi_disable_event (
	u32                             event,
	u32                             flags);

acpi_status
acpi_clear_event (
	u32                             event);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_get_event_status (
	u32                             event,
	acpi_event_status               *event_status);
#endif  /*  ACPI_FUTURE_USAGE  */

acpi_status
acpi_set_gpe_type (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u8                              type);

acpi_status
acpi_enable_gpe (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u32                             flags);

acpi_status
acpi_disable_gpe (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u32                             flags);

acpi_status
acpi_clear_gpe (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u32                             flags);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_get_gpe_status (
	acpi_handle                     gpe_device,
	u32                             gpe_number,
	u32                             flags,
	acpi_event_status               *event_status);
#endif  /*  ACPI_FUTURE_USAGE  */

acpi_status
acpi_install_gpe_block (
	acpi_handle                     gpe_device,
	struct acpi_generic_address     *gpe_block_address,
	u32                             register_count,
	u32                             interrupt_level);

acpi_status
acpi_remove_gpe_block (
	acpi_handle                     gpe_device);


/*
 * Resource interfaces
 */

typedef
acpi_status (*ACPI_WALK_RESOURCE_CALLBACK) (
	struct acpi_resource            *resource,
	void                            *context);


acpi_status
acpi_get_current_resources(
	acpi_handle                     device_handle,
	struct acpi_buffer              *ret_buffer);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_get_possible_resources(
	acpi_handle                     device_handle,
	struct acpi_buffer              *ret_buffer);
#endif

acpi_status
acpi_walk_resources (
	acpi_handle                             device_handle,
	char                                    *path,
	ACPI_WALK_RESOURCE_CALLBACK     user_function,
	void                                    *context);

acpi_status
acpi_set_current_resources (
	acpi_handle                     device_handle,
	struct acpi_buffer              *in_buffer);

acpi_status
acpi_get_irq_routing_table (
	acpi_handle                     bus_device_handle,
	struct acpi_buffer              *ret_buffer);

acpi_status
acpi_resource_to_address64 (
	struct acpi_resource            *resource,
	struct acpi_resource_address64 *out);

/*
 * Hardware (ACPI device) interfaces
 */

acpi_status
acpi_get_register (
	u32                             register_id,
	u32                             *return_value,
	u32                             flags);

acpi_status
acpi_set_register (
	u32                             register_id,
	u32                             value,
	u32                             flags);

acpi_status
acpi_set_firmware_waking_vector (
	acpi_physical_address           physical_address);

#ifdef ACPI_FUTURE_USAGE
acpi_status
acpi_get_firmware_waking_vector (
	acpi_physical_address           *physical_address);
#endif

acpi_status
acpi_get_sleep_type_data (
	u8                              sleep_state,
	u8                              *slp_typ_a,
	u8                              *slp_typ_b);

acpi_status
acpi_enter_sleep_state_prep (
	u8                              sleep_state);

acpi_status asmlinkage
acpi_enter_sleep_state (
	u8                              sleep_state);

acpi_status asmlinkage
acpi_enter_sleep_state_s4bios (
	void);

acpi_status
acpi_leave_sleep_state (
	u8                              sleep_state);


#endif /* __ACXFACE_H__ */
