d6a6a0a7cc
These are changes to make HPET work with ACRN hypervisor: - FSB interrupt delivery (which works like PCI MSI) - 32-bit mode support Signed-off-by: p-szafonimateusz <p-szafonimateusz@xiaomi.com>
97 lines
4.8 KiB
C
97 lines
4.8 KiB
C
/****************************************************************************
|
|
* arch/x86_64/include/hpet.h
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __ARCH_X86_64_INCLUDE_HPET_H
|
|
#define __ARCH_X86_64_INCLUDE_HPET_H
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Pre-processor Definitions
|
|
****************************************************************************/
|
|
|
|
/* Register definitions */
|
|
|
|
#define HPET_GCAPID_OFFSET (0x00)
|
|
#define HPET_GCONF_OFFSET (0x10)
|
|
#define HPET_GISR_OFFSET (0x20)
|
|
#define HPET_MCNTR_OFFSET (0xf0)
|
|
#define HPET_TCONF_OFFSET(n) (0x100 + (0x20 * (n)))
|
|
#define HPET_TCOMP_OFFSET(n) (0x108 + (0x20 * (n)))
|
|
#define HPET_TFSB_OFFSET(n) (0x110 + (0x20 * (n)))
|
|
|
|
/* General Capabilities and ID Register */
|
|
|
|
#define HPET_GCAPID_REVID_SHIFT (0ul) /* Bits 0-7: Revistion */
|
|
# define HPET_GCAPID_REVID_MASK (0xfful << HPET_GCAPID_REVID_SHIFT)
|
|
#define HPET_GCAPID_NUMTIM_SHIFT (8ul) /* Bits 8-12: Number of Timers */
|
|
#define HPET_GCAPID_NUMTIM_MASK (0x1ful << HPET_GCAPID_NUMTIM_SHIFT)
|
|
#define HPET_GCAPID_COUNTSIZE (1 << 13) /* Bit 13: Counter size, 0: 32 bit, 1: 64 bit */
|
|
/* Bit 14: Reserved */
|
|
#define HPET_GCAPID_LEGROUTE (1 << 15) /* Bit 15: LegacyReplacement Route Capable */
|
|
#define HPET_GCAPID_VENDORID_SHIFT (16ul) /* Bits 16-31: Vendor ID */
|
|
# define HPET_GCAPID_VENDORID_MASK (0x7ffful << HPET_GCAPID_VENDORID_SHIFT)
|
|
#define HPET_GCAPID_CLKPER_SHIFT (32ul) /* Bits 32-63: Main Counter Tick Period in ps */
|
|
# define HPET_GCAPID_CLKPER_MASK (0x7ffffffful << HPET_GCAPID_CLKPER_SHIFT)
|
|
|
|
/* General Configuration Register */
|
|
|
|
#define HPET_GCONF_ENABLE (1 << 0) /* Bit 0: Overall Enable */
|
|
#define HPET_GCONF_LEGERT (1 << 1) /* Bit 1: LegacyReplacement Route */
|
|
|
|
/* General Interrupt Status Register */
|
|
|
|
#define HPET_GISR_TINT(n) (1 << (n)) /* Timer n Interrupt Active */
|
|
|
|
/* Timer N Configuration and Capabilities Register */
|
|
|
|
/* Bit 0: Reserved */
|
|
#define HPET_TCONF_INTTYPE (1 << 1) /* Bit 1: Timer n Interrupt Type (0: edge, 1: level) */
|
|
#define HPET_TCONF_INTEN (1 << 2) /* Bit 2: Timer n Interrupt Enable */
|
|
#define HPET_TCONF_TYPE (1 << 3) /* Bit 3: Timer n Type (0: non-periodic, 1: periodic) */
|
|
#define HPET_TCONF_PERCAP (1 << 4) /* Bit 4: Timer n Periodic Interrupt Capable */
|
|
#define HPET_TCONF_SIZECAP (1 << 5) /* Bit 5: Timer n Size */
|
|
#define HPET_TCONF_VALSET (1 << 6) /* Bit 6: Timer n Value Set */
|
|
/* Bit 7: Reserved */
|
|
#define HPET_TCONF_32MODE (1 << 8) /* Bit 8: Timer n 32-bit mode */
|
|
#define HPET_TCONF_INTROUTE_SHIFT (9) /* Bits 9-13: Timer n Interrupt Route */
|
|
# define HPET_TCONF_INTROUTE_MASK (0x7f << HPET_TCONF_INTROUTE_SHIFT)
|
|
# define HPET_TCONF_INTROUTE(n) (((n) << HPET_TCONF_INTROUTE_SHIFT) & HPET_TCONF_INTROUTE_MASK)
|
|
#define HPET_TCONF_FSBEN (1 << 14) /* Bit 14: Timer n FSB Interrupt Enable */
|
|
#define HPET_TCONF_FSBCAP (1 << 15) /* Bit 15: Timer n FSB Interrupt Delivery */
|
|
/* Bits 16-31: Reserved */
|
|
#define HPET_TCONF_ROUTECAP_SHIFT (32) /* Bits 32-63: Timer n Interrupt Routing Capability */
|
|
# define HPET_TCONF_ROUTECAP_MASK (0x7ffffffful << HPET_TCONF_ROUTECAP_SHIFT)
|
|
|
|
/* Timer N FSB Interrupt Route Register */
|
|
|
|
#define HPET_TFSB_INT_VAL_SHIFT (0)
|
|
#define HPET_TFSB_INT_VAL_MASK (0x00000000ffffffff)
|
|
#define HPET_TFSB_INT_ADDR_SHIFT (32)
|
|
#define HPET_TFSB_INT_ADDR_MASK (0xffffffff00000000)
|
|
|
|
/* HPET register space */
|
|
|
|
#define HPET_REGION_SIZE (1024)
|
|
|
|
#endif /* __ARCH_X86_64_INCLUDE_HPET_H */
|