/******************************************************************************
 *
 * Name: actables.h - ACPI table management
 *       $Revision: 36 $
 *
 *****************************************************************************/

/*
 *  Copyright (C) 2000 - 2002, R. Byron Moore
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __ACTABLES_H__
#define __ACTABLES_H__


/* Used in Acpi_tb_map_acpi_table for size parameter if table header is to be used */

#define SIZE_IN_HEADER          0


acpi_status
acpi_tb_handle_to_object (
	u16                     table_id,
	acpi_table_desc         **table_desc);

/*
 * tbconvrt - Table conversion routines
 */

acpi_status
acpi_tb_convert_to_xsdt (
	acpi_table_desc         *table_info,
	u32                     *number_of_tables);

acpi_status
acpi_tb_convert_table_fadt (
	void);

acpi_status
acpi_tb_build_common_facs (
	acpi_table_desc         *table_info);

u32
acpi_tb_get_table_count (
	RSDP_DESCRIPTOR         *RSDP,
	acpi_table_header       *RSDT);

/*
 * tbget - Table "get" routines
 */

acpi_status
acpi_tb_get_table_ptr (
	acpi_table_type         table_type,
	u32                     instance,
	acpi_table_header       **table_ptr_loc);

acpi_status
acpi_tb_get_table (
	ACPI_POINTER            *address,
	acpi_table_desc         *table_info);

acpi_status
acpi_tb_verify_rsdp (
	ACPI_POINTER            *address);

void
acpi_tb_get_rsdt_address (
	ACPI_POINTER            *out_address);

acpi_status
acpi_tb_validate_rsdt (
	acpi_table_header       *table_ptr);

acpi_status
acpi_tb_get_table_pointer (
	ACPI_POINTER            *address,
	u32                     flags,
	u32                     *size,
	acpi_table_header       **table_ptr);

/*
 * tbgetall - Get all firmware ACPI tables
 */

acpi_status
acpi_tb_get_all_tables (
	u32                     number_of_tables,
	acpi_table_header       *buffer_ptr);


/*
 * tbinstall - Table installation
 */

acpi_status
acpi_tb_install_table (
	acpi_table_header       *table_ptr,
	acpi_table_desc         *table_info);

acpi_status
acpi_tb_match_signature (
	NATIVE_CHAR             *signature,
	acpi_table_desc         *table_info);

acpi_status
acpi_tb_recognize_table (
	acpi_table_header       *table_ptr,
	acpi_table_desc         *table_info);

acpi_status
acpi_tb_init_table_descriptor (
	acpi_table_type         table_type,
	acpi_table_desc         *table_info);


/*
 * tbremove - Table removal and deletion
 */

void
acpi_tb_delete_acpi_tables (
	void);

void
acpi_tb_delete_acpi_table (
	acpi_table_type         type);

void
acpi_tb_delete_single_table (
	acpi_table_desc         *table_desc);

acpi_table_desc *
acpi_tb_uninstall_table (
	acpi_table_desc         *table_desc);

void
acpi_tb_free_acpi_tables_of_type (
	acpi_table_desc         *table_info);


/*
 * tbrsd - RSDP, RSDT utilities
 */

acpi_status
acpi_tb_get_table_rsdt (
	u32                     *number_of_tables);

u8 *
acpi_tb_scan_memory_for_rsdp (
	u8                      *start_address,
	u32                     length);

acpi_status
acpi_tb_find_rsdp (
	acpi_table_desc         *table_info,
	u32                     flags);


/*
 * tbutils - common table utilities
 */

acpi_status
acpi_tb_find_table (
	NATIVE_CHAR             *signature,
	NATIVE_CHAR             *oem_id,
	NATIVE_CHAR             *oem_table_id,
	acpi_table_header       **table_ptr);

acpi_status
acpi_tb_map_acpi_table (
	ACPI_PHYSICAL_ADDRESS   physical_address,
	u32                     *size,
	acpi_table_header       **logical_address);

acpi_status
acpi_tb_verify_table_checksum (
	acpi_table_header       *table_header);

u8
acpi_tb_checksum (
	void                    *buffer,
	u32                     length);

acpi_status
acpi_tb_validate_table_header (
	acpi_table_header       *table_header);


#endif /* __ACTABLES_H__ */
