/******************************************************************************
 *
 * Name: achware.h -- hardware specific interfaces
 *       $Revision: 56 $
 *
 *****************************************************************************/

/*
 *  Copyright (C) 2000, 2001 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 __ACHWARE_H__
#define __ACHWARE_H__


/* PM Timer ticks per second (HZ) */
#define PM_TIMER_FREQUENCY  3579545


/* Prototypes */


acpi_status
acpi_hw_initialize (
	void);

acpi_status
acpi_hw_shutdown (
	void);

acpi_status
acpi_hw_initialize_system_info (
	void);

acpi_status
acpi_hw_set_mode (
	u32                     mode);

u32
acpi_hw_get_mode (
	void);

u32
acpi_hw_get_mode_capabilities (
	void);

/* Register I/O Prototypes */


u32
acpi_hw_register_bit_access (
	NATIVE_UINT             read_write,
	u8                      use_lock,
	u32                     register_id,
	... /* DWORD Write Value */);

u32
acpi_hw_register_read (
	u8                      use_lock,
	u32                     register_id);

void
acpi_hw_register_write (
	u8                      use_lock,
	u32                     register_id,
	u32                     value);

u32
acpi_hw_low_level_read (
	u32                     width,
	acpi_generic_address    *reg,
	u32                     offset);

void
acpi_hw_low_level_write (
	u32                     width,
	u32                     value,
	acpi_generic_address    *reg,
	u32                     offset);

void
acpi_hw_clear_acpi_status (
   void);

u32
acpi_hw_get_bit_shift (
	u32                     mask);


/* GPE support */

void
acpi_hw_enable_gpe (
	u32                     gpe_number);

void
acpi_hw_enable_gpe_for_wakeup (
	u32                     gpe_number);

void
acpi_hw_disable_gpe (
	u32                     gpe_number);

void
acpi_hw_disable_gpe_for_wakeup (
	u32                     gpe_number);

void
acpi_hw_clear_gpe (
	u32                     gpe_number);

void
acpi_hw_get_gpe_status (
	u32                     gpe_number,
	acpi_event_status       *event_status);

void
acpi_hw_disable_non_wakeup_gpes (
	void);

void
acpi_hw_enable_non_wakeup_gpes (
	void);


/* Sleep Prototypes */

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


/* ACPI Timer prototypes */

acpi_status
acpi_get_timer_resolution (
	u32                     *resolution);

acpi_status
acpi_get_timer (
	u32                     *ticks);

acpi_status
acpi_get_timer_duration (
	u32                     start_ticks,
	u32                     end_ticks,
	u32                     *time_elapsed);


#endif /* __ACHWARE_H__ */
