Annotation of Gnu-Mach/xen/public/platform.h, revision 1.1

1.1     ! root        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:     };
        !           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:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.