qemu/include/hw/timer/hpet.h
<<
>>
Prefs
   1/*
   2 * QEMU Emulated HPET support
   3 *
   4 * Copyright IBM, Corp. 2008
   5 *
   6 * Authors:
   7 *  Beth Kon   <bkon@us.ibm.com>
   8 *
   9 * This work is licensed under the terms of the GNU GPL, version 2.  See
  10 * the COPYING file in the top-level directory.
  11 *
  12 */
  13#ifndef QEMU_HPET_EMUL_H
  14#define QEMU_HPET_EMUL_H
  15
  16#include "qom/object.h"
  17
  18#define HPET_BASE               0xfed00000
  19#define HPET_LEN                0x400
  20#define HPET_CLK_PERIOD         10 /* 10 ns*/
  21
  22#define FS_PER_NS 1000000       /* 1000000 femtoseconds == 1 ns */
  23#define HPET_MIN_TIMERS         3
  24#define HPET_MAX_TIMERS         32
  25
  26#define HPET_NUM_IRQ_ROUTES     32
  27
  28#define HPET_LEGACY_PIT_INT     0
  29#define HPET_LEGACY_RTC_INT     1
  30
  31#define HPET_CFG_ENABLE 0x001
  32#define HPET_CFG_LEGACY 0x002
  33
  34#define HPET_ID         0x000
  35#define HPET_PERIOD     0x004
  36#define HPET_CFG        0x010
  37#define HPET_STATUS     0x020
  38#define HPET_COUNTER    0x0f0
  39#define HPET_TN_CFG     0x000
  40#define HPET_TN_CMP     0x008
  41#define HPET_TN_ROUTE   0x010
  42#define HPET_CFG_WRITE_MASK  0x3
  43
  44#define HPET_ID_NUM_TIM_SHIFT   8
  45#define HPET_ID_NUM_TIM_MASK    0x1f00
  46
  47#define HPET_TN_TYPE_LEVEL       0x002
  48#define HPET_TN_ENABLE           0x004
  49#define HPET_TN_PERIODIC         0x008
  50#define HPET_TN_PERIODIC_CAP     0x010
  51#define HPET_TN_SIZE_CAP         0x020
  52#define HPET_TN_SETVAL           0x040
  53#define HPET_TN_32BIT            0x100
  54#define HPET_TN_INT_ROUTE_MASK  0x3e00
  55#define HPET_TN_FSB_ENABLE      0x4000
  56#define HPET_TN_FSB_CAP         0x8000
  57#define HPET_TN_CFG_WRITE_MASK  0x7f4e
  58#define HPET_TN_INT_ROUTE_SHIFT      9
  59#define HPET_TN_INT_ROUTE_CAP_SHIFT 32
  60#define HPET_TN_CFG_BITS_READONLY_OR_RESERVED 0xffff80b1U
  61
  62struct hpet_fw_entry
  63{
  64    uint32_t event_timer_block_id;
  65    uint64_t address;
  66    uint16_t min_tick;
  67    uint8_t page_prot;
  68} QEMU_PACKED;
  69
  70struct hpet_fw_config
  71{
  72    uint8_t count;
  73    struct hpet_fw_entry hpet[8];
  74} QEMU_PACKED;
  75
  76extern struct hpet_fw_config hpet_cfg;
  77
  78#define TYPE_HPET "hpet"
  79
  80static inline bool hpet_find(void)
  81{
  82    return object_resolve_path_type("", TYPE_HPET, NULL);
  83}
  84
  85#endif
  86