The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/xen/interface/platform.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /******************************************************************************
    2  * platform.h
    3  * 
    4  * Hardware platform operations. Intended for use by domain-0 kernel.
    5  * 
    6  * Permission is hereby granted, free of charge, to any person obtaining a copy
    7  * of this software and associated documentation files (the "Software"), to
    8  * deal in the Software without restriction, including without limitation the
    9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   10  * sell copies of the Software, and to permit persons to whom the Software is
   11  * furnished to do so, subject to the following conditions:
   12  *
   13  * The above copyright notice and this permission notice shall be included in
   14  * all copies or substantial portions of the Software.
   15  *
   16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   22  * DEALINGS IN THE SOFTWARE.
   23  *
   24  * Copyright (c) 2002-2006, K Fraser
   25  */
   26 
   27 #ifndef __XEN_PUBLIC_PLATFORM_H__
   28 #define __XEN_PUBLIC_PLATFORM_H__
   29 
   30 #include "xen.h"
   31 
   32 #define XENPF_INTERFACE_VERSION 0x03000001
   33 
   34 /*
   35  * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
   36  * 1 January, 1970 if the current system time was <system_time>.
   37  */
   38 #define XENPF_settime             17
   39 struct xenpf_settime {
   40     /* IN variables. */
   41     uint32_t secs;
   42     uint32_t nsecs;
   43     uint64_t system_time;
   44 };
   45 typedef struct xenpf_settime xenpf_settime_t;
   46 DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t);
   47 
   48 /*
   49  * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type.
   50  * On x86, @type is an architecture-defined MTRR memory type.
   51  * On success, returns the MTRR that was used (@reg) and a handle that can
   52  * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting.
   53  * (x86-specific).
   54  */
   55 #define XENPF_add_memtype         31
   56 struct xenpf_add_memtype {
   57     /* IN variables. */
   58     xen_pfn_t mfn;
   59     uint64_t nr_mfns;
   60     uint32_t type;
   61     /* OUT variables. */
   62     uint32_t handle;
   63     uint32_t reg;
   64 };
   65 typedef struct xenpf_add_memtype xenpf_add_memtype_t;
   66 DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t);
   67 
   68 /*
   69  * Tear down an existing memory-range type. If @handle is remembered then it
   70  * should be passed in to accurately tear down the correct setting (in case
   71  * of overlapping memory regions with differing types). If it is not known
   72  * then @handle should be set to zero. In all cases @reg must be set.
   73  * (x86-specific).
   74  */
   75 #define XENPF_del_memtype         32
   76 struct xenpf_del_memtype {
   77     /* IN variables. */
   78     uint32_t handle;
   79     uint32_t reg;
   80 };
   81 typedef struct xenpf_del_memtype xenpf_del_memtype_t;
   82 DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t);
   83 
   84 /* Read current type of an MTRR (x86-specific). */
   85 #define XENPF_read_memtype        33
   86 struct xenpf_read_memtype {
   87     /* IN variables. */
   88     uint32_t reg;
   89     /* OUT variables. */
   90     xen_pfn_t mfn;
   91     uint64_t nr_mfns;
   92     uint32_t type;
   93 };
   94 typedef struct xenpf_read_memtype xenpf_read_memtype_t;
   95 DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t);
   96 
   97 #define XENPF_microcode_update    35
   98 struct xenpf_microcode_update {
   99     /* IN variables. */
  100     XEN_GUEST_HANDLE(const_void) data;/* Pointer to microcode data */
  101     uint32_t length;                  /* Length of microcode data. */
  102 };
  103 typedef struct xenpf_microcode_update xenpf_microcode_update_t;
  104 DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t);
  105 
  106 #define XENPF_platform_quirk      39
  107 #define QUIRK_NOIRQBALANCING      1 /* Do not restrict IO-APIC RTE targets */
  108 #define QUIRK_IOAPIC_BAD_REGSEL   2 /* IO-APIC REGSEL forgets its value    */
  109 #define QUIRK_IOAPIC_GOOD_REGSEL  3 /* IO-APIC REGSEL behaves properly     */
  110 struct xenpf_platform_quirk {
  111     /* IN variables. */
  112     uint32_t quirk_id;
  113 };
  114 typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
  115 DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
  116 
  117 #define XENPF_firmware_info       50
  118 #define XEN_FW_DISK_INFO          1 /* from int 13 AH=08/41/48 */
  119 #define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
  120 #define XEN_FW_VBEDDC_INFO        3 /* from int 10 AX=4f15 */
  121 struct xenpf_firmware_info {
  122     /* IN variables. */
  123     uint32_t type;
  124     uint32_t index;
  125     /* OUT variables. */
  126     union {
  127         struct {
  128             /* Int13, Fn48: Check Extensions Present. */
  129             uint8_t device;                   /* %dl: bios device number */
  130             uint8_t version;                  /* %ah: major version      */
  131             uint16_t interface_support;       /* %cx: support bitmap     */
  132             /* Int13, Fn08: Legacy Get Device Parameters. */
  133             uint16_t legacy_max_cylinder;     /* %cl[7:6]:%ch: max cyl # */
  134             uint8_t legacy_max_head;          /* %dh: max head #         */
  135             uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector #  */
  136             /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */
  137             /* NB. First uint16_t of buffer must be set to buffer size.      */
  138             XEN_GUEST_HANDLE(void) edd_params;
  139         } disk_info; /* XEN_FW_DISK_INFO */
  140         struct {
  141             uint8_t device;                   /* bios device number  */
  142             uint32_t mbr_signature;           /* offset 0x1b8 in mbr */
  143         } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */
  144         struct {
  145             /* Int10, AX=4F15: Get EDID info. */
  146             uint8_t capabilities;
  147             uint8_t edid_transfer_time;
  148             /* must refer to 128-byte buffer */
  149             XEN_GUEST_HANDLE(uint8) edid;
  150         } vbeddc_info; /* XEN_FW_VBEDDC_INFO */
  151     } u;
  152 };
  153 typedef struct xenpf_firmware_info xenpf_firmware_info_t;
  154 DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t);
  155 
  156 #define XENPF_enter_acpi_sleep    51
  157 struct xenpf_enter_acpi_sleep {
  158     /* IN variables */
  159     uint16_t pm1a_cnt_val;      /* PM1a control value. */
  160     uint16_t pm1b_cnt_val;      /* PM1b control value. */
  161     uint32_t sleep_state;       /* Which state to enter (Sn). */
  162     uint32_t flags;             /* Must be zero. */
  163 };
  164 typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t;
  165 DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t);
  166 
  167 #define XENPF_change_freq         52
  168 struct xenpf_change_freq {
  169     /* IN variables */
  170     uint32_t flags; /* Must be zero. */
  171     uint32_t cpu;   /* Physical cpu. */
  172     uint64_t freq;  /* New frequency (Hz). */
  173 };
  174 typedef struct xenpf_change_freq xenpf_change_freq_t;
  175 DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t);
  176 
  177 /*
  178  * Get idle times (nanoseconds since boot) for physical CPUs specified in the
  179  * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is
  180  * indexed by CPU number; only entries with the corresponding @cpumap_bitmap
  181  * bit set are written to. On return, @cpumap_bitmap is modified so that any
  182  * non-existent CPUs are cleared. Such CPUs have their @idletime array entry
  183  * cleared.
  184  */
  185 #define XENPF_getidletime         53
  186 struct xenpf_getidletime {
  187     /* IN/OUT variables */
  188     /* IN: CPUs to interrogate; OUT: subset of IN which are present */
  189     XEN_GUEST_HANDLE(uint8) cpumap_bitmap;
  190     /* IN variables */
  191     /* Size of cpumap bitmap. */
  192     uint32_t cpumap_nr_cpus;
  193     /* Must be indexable for every cpu in cpumap_bitmap. */
  194     XEN_GUEST_HANDLE(uint64) idletime;
  195     /* OUT variables */
  196     /* System time when the idletime snapshots were taken. */
  197     uint64_t now;
  198 };
  199 typedef struct xenpf_getidletime xenpf_getidletime_t;
  200 DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t);
  201 
  202 #define XENPF_set_processor_pminfo      54
  203 
  204 /* ability bits */
  205 #define XEN_PROCESSOR_PM_CX     1
  206 #define XEN_PROCESSOR_PM_PX     2
  207 #define XEN_PROCESSOR_PM_TX     4
  208 
  209 /* cmd type */
  210 #define XEN_PM_CX   0
  211 #define XEN_PM_PX   1
  212 #define XEN_PM_TX   2
  213 
  214 /* Px sub info type */
  215 #define XEN_PX_PCT   1
  216 #define XEN_PX_PSS   2
  217 #define XEN_PX_PPC   4
  218 #define XEN_PX_PSD   8
  219 
  220 struct xen_power_register {
  221     uint32_t     space_id;
  222     uint32_t     bit_width;
  223     uint32_t     bit_offset;
  224     uint32_t     access_size;
  225     uint64_t     address;
  226 };
  227 
  228 struct xen_processor_csd {
  229     uint32_t    domain;      /* domain number of one dependent group */
  230     uint32_t    coord_type;  /* coordination type */
  231     uint32_t    num;         /* number of processors in same domain */
  232 };
  233 typedef struct xen_processor_csd xen_processor_csd_t;
  234 DEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t);
  235 
  236 struct xen_processor_cx {
  237     struct xen_power_register  reg; /* GAS for Cx trigger register */
  238     uint8_t     type;     /* cstate value, c0: 0, c1: 1, ... */
  239     uint32_t    latency;  /* worst latency (ms) to enter/exit this cstate */
  240     uint32_t    power;    /* average power consumption(mW) */
  241     uint32_t    dpcnt;    /* number of dependency entries */
  242     XEN_GUEST_HANDLE(xen_processor_csd_t) dp; /* NULL if no dependency */
  243 };
  244 typedef struct xen_processor_cx xen_processor_cx_t;
  245 DEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t);
  246 
  247 struct xen_processor_flags {
  248     uint32_t bm_control:1;
  249     uint32_t bm_check:1;
  250     uint32_t has_cst:1;
  251     uint32_t power_setup_done:1;
  252     uint32_t bm_rld_set:1;
  253 };
  254 
  255 struct xen_processor_power {
  256     uint32_t count;  /* number of C state entries in array below */
  257     struct xen_processor_flags flags;  /* global flags of this processor */
  258     XEN_GUEST_HANDLE(xen_processor_cx_t) states; /* supported c states */
  259 };
  260 
  261 struct xen_pct_register {
  262     uint8_t  descriptor;
  263     uint16_t length;
  264     uint8_t  space_id;
  265     uint8_t  bit_width;
  266     uint8_t  bit_offset;
  267     uint8_t  reserved;
  268     uint64_t address;
  269 };
  270 
  271 struct xen_processor_px {
  272     uint64_t core_frequency; /* megahertz */
  273     uint64_t power;      /* milliWatts */
  274     uint64_t transition_latency; /* microseconds */
  275     uint64_t bus_master_latency; /* microseconds */
  276     uint64_t control;        /* control value */
  277     uint64_t status;     /* success indicator */
  278 };
  279 typedef struct xen_processor_px xen_processor_px_t;
  280 DEFINE_XEN_GUEST_HANDLE(xen_processor_px_t);
  281 
  282 struct xen_psd_package {
  283     uint64_t num_entries;
  284     uint64_t revision;
  285     uint64_t domain;
  286     uint64_t coord_type;
  287     uint64_t num_processors;
  288 };
  289 
  290 struct xen_processor_performance {
  291     uint32_t flags;     /* flag for Px sub info type */
  292     uint32_t platform_limit;  /* Platform limitation on freq usage */
  293     struct xen_pct_register control_register;
  294     struct xen_pct_register status_register;
  295     uint32_t state_count;     /* total available performance states */
  296     XEN_GUEST_HANDLE(xen_processor_px_t) states;
  297     struct xen_psd_package domain_info;
  298     uint32_t shared_type;     /* coordination type of this processor */
  299 };
  300 typedef struct xen_processor_performance xen_processor_performance_t;
  301 DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t);
  302 
  303 struct xenpf_set_processor_pminfo {
  304     /* IN variables */
  305     uint32_t id;    /* ACPI CPU ID */
  306     uint32_t type;  /* {XEN_PM_CX, XEN_PM_PX} */
  307     union {
  308         struct xen_processor_power          power;/* Cx: _CST/_CSD */
  309         struct xen_processor_performance    perf; /* Px: _PPC/_PCT/_PSS/_PSD */
  310     } u;
  311 };
  312 typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
  313 DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
  314 
  315 struct xen_platform_op {
  316     uint32_t cmd;
  317     uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
  318     union {
  319         struct xenpf_settime           settime;
  320         struct xenpf_add_memtype       add_memtype;
  321         struct xenpf_del_memtype       del_memtype;
  322         struct xenpf_read_memtype      read_memtype;
  323         struct xenpf_microcode_update  microcode;
  324         struct xenpf_platform_quirk    platform_quirk;
  325         struct xenpf_firmware_info     firmware_info;
  326         struct xenpf_enter_acpi_sleep  enter_acpi_sleep;
  327         struct xenpf_change_freq       change_freq;
  328         struct xenpf_getidletime       getidletime;
  329         struct xenpf_set_processor_pminfo set_pminfo;
  330         uint8_t                        pad[128];
  331     } u;
  332 };
  333 typedef struct xen_platform_op xen_platform_op_t;
  334 DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t);
  335 
  336 #endif /* __XEN_PUBLIC_PLATFORM_H__ */
  337 
  338 /*
  339  * Local variables:
  340  * mode: C
  341  * c-set-style: "BSD"
  342  * c-basic-offset: 4
  343  * tab-width: 4
  344  * indent-tabs-mode: nil
  345  * End:
  346  */

Cache object: 2b0f4061ab4bfaffe058d1b29b89a1e8


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.