haiku/headers/private/kernel/arch/x86/arch_hpet.h

47 lines
1.6 KiB
C
Raw Normal View History

/*
* Copyright 2008, Dustin Howett, dustin.howett@gmail.com. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_x86_HPET_H
#define _KERNEL_ARCH_x86_HPET_H
/* All masks are 64 bits wide to represent bit locations;
the HPET registers are 64 bits wide. */
/* Global Capability Register Masks */
#define HPET_CAP_MASK_ID 0x00000000000000FF
#define HPET_CAP_MASK_NUMTIMERS 0x0000000000001F00
#define HPET_CAP_MASK_WIDTH 0x0000000000002000
#define HPET_CAP_MASK_LEGACY 0x0000000000008000
#define HPET_CAP_MASK_VENDOR_ID 0x00000000FFFF0000
#define HPET_CAP_MASK_PERIOD 0xFFFFFFFF00000000
/* Retrieve Global Capabilities */
#define HPET_GET_ID(regs) ((regs)->caps & HPET_CAP_MASK_ID)
#define HPET_GET_NUM_TIMERS(regs) (((regs)->caps & HPET_CAP_MASK_NUMTIMERS) >> 8)
#define HPET_IS_64BIT_CAPABLE(regs) (((regs)->caps & HPET_CAP_MASK_WIDTH) >> 13)
#define HPET_IS_LEGACY_CAPABLE(regs) (((regs)->caps & HPET_CAP_MASK_LEGACY) >> 15)
#define HPET_GET_VENDOR_ID(regs) (((regs)->caps & HPET_CAP_MASK_VENDOR_ID) >> 16)
#define HPET_GET_PERIOD(regs) (((regs)->caps & HPET_CAP_MASK_PERIOD) >> 32)
struct hpet_timer {
uint64 config, /* Timer configuration and capabilities */
uint64 comparator, /* Comparator value */
uint64 introute, /* FSB Interrupt Routing */
uint64 reserved
};
struct hpet_regs {
uint64 caps, /* HPET Capabilities and ID */
uint64 reserved1,
uint64 config, /* General Configuration */
uint64 reserved2,
uint64 intstatus, /* General Interrupt Status */
uint8 reserved3[200],
uint64 mainvalue, /* Main Counter Value */
uint64 reserved3,
struct hpet_timer timers[1] /* Timers */
};
#endif