linux/include/xen/interface/physdev.h
<<
>>
Prefs
   1/*
   2 * Permission is hereby granted, free of charge, to any person obtaining a copy
   3 * of this software and associated documentation files (the "Software"), to
   4 * deal in the Software without restriction, including without limitation the
   5 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   6 * sell copies of the Software, and to permit persons to whom the Software is
   7 * furnished to do so, subject to the following conditions:
   8 *
   9 * The above copyright notice and this permission notice shall be included in
  10 * all copies or substantial portions of the Software.
  11 *
  12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  18 * DEALINGS IN THE SOFTWARE.
  19 */
  20
  21#ifndef __XEN_PUBLIC_PHYSDEV_H__
  22#define __XEN_PUBLIC_PHYSDEV_H__
  23
  24/*
  25 * Prototype for this hypercall is:
  26 *  int physdev_op(int cmd, void *args)
  27 * @cmd  == PHYSDEVOP_??? (physdev operation).
  28 * @args == Operation-specific extra arguments (NULL if none).
  29 */
  30
  31/*
  32 * Notify end-of-interrupt (EOI) for the specified IRQ.
  33 * @arg == pointer to physdev_eoi structure.
  34 */
  35#define PHYSDEVOP_eoi                   12
  36struct physdev_eoi {
  37        /* IN */
  38        uint32_t irq;
  39};
  40
  41/*
  42 * Query the status of an IRQ line.
  43 * @arg == pointer to physdev_irq_status_query structure.
  44 */
  45#define PHYSDEVOP_irq_status_query       5
  46struct physdev_irq_status_query {
  47        /* IN */
  48        uint32_t irq;
  49        /* OUT */
  50        uint32_t flags; /* XENIRQSTAT_* */
  51};
  52
  53/* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
  54#define _XENIRQSTAT_needs_eoi   (0)
  55#define  XENIRQSTAT_needs_eoi   (1U<<_XENIRQSTAT_needs_eoi)
  56
  57/* IRQ shared by multiple guests? */
  58#define _XENIRQSTAT_shared      (1)
  59#define  XENIRQSTAT_shared      (1U<<_XENIRQSTAT_shared)
  60
  61/*
  62 * Set the current VCPU's I/O privilege level.
  63 * @arg == pointer to physdev_set_iopl structure.
  64 */
  65#define PHYSDEVOP_set_iopl               6
  66struct physdev_set_iopl {
  67        /* IN */
  68        uint32_t iopl;
  69};
  70
  71/*
  72 * Set the current VCPU's I/O-port permissions bitmap.
  73 * @arg == pointer to physdev_set_iobitmap structure.
  74 */
  75#define PHYSDEVOP_set_iobitmap           7
  76struct physdev_set_iobitmap {
  77        /* IN */
  78        uint8_t * bitmap;
  79        uint32_t nr_ports;
  80};
  81
  82/*
  83 * Read or write an IO-APIC register.
  84 * @arg == pointer to physdev_apic structure.
  85 */
  86#define PHYSDEVOP_apic_read              8
  87#define PHYSDEVOP_apic_write             9
  88struct physdev_apic {
  89        /* IN */
  90        unsigned long apic_physbase;
  91        uint32_t reg;
  92        /* IN or OUT */
  93        uint32_t value;
  94};
  95
  96/*
  97 * Allocate or free a physical upcall vector for the specified IRQ line.
  98 * @arg == pointer to physdev_irq structure.
  99 */
 100#define PHYSDEVOP_alloc_irq_vector      10
 101#define PHYSDEVOP_free_irq_vector       11
 102struct physdev_irq {
 103        /* IN */
 104        uint32_t irq;
 105        /* IN or OUT */
 106        uint32_t vector;
 107};
 108
 109/*
 110 * Argument to physdev_op_compat() hypercall. Superceded by new physdev_op()
 111 * hypercall since 0x00030202.
 112 */
 113struct physdev_op {
 114        uint32_t cmd;
 115        union {
 116                struct physdev_irq_status_query      irq_status_query;
 117                struct physdev_set_iopl              set_iopl;
 118                struct physdev_set_iobitmap          set_iobitmap;
 119                struct physdev_apic                  apic_op;
 120                struct physdev_irq                   irq_op;
 121        } u;
 122};
 123
 124/*
 125 * Notify that some PIRQ-bound event channels have been unmasked.
 126 * ** This command is obsolete since interface version 0x00030202 and is **
 127 * ** unsupported by newer versions of Xen.                              **
 128 */
 129#define PHYSDEVOP_IRQ_UNMASK_NOTIFY      4
 130
 131/*
 132 * These all-capitals physdev operation names are superceded by the new names
 133 * (defined above) since interface version 0x00030202.
 134 */
 135#define PHYSDEVOP_IRQ_STATUS_QUERY       PHYSDEVOP_irq_status_query
 136#define PHYSDEVOP_SET_IOPL               PHYSDEVOP_set_iopl
 137#define PHYSDEVOP_SET_IOBITMAP           PHYSDEVOP_set_iobitmap
 138#define PHYSDEVOP_APIC_READ              PHYSDEVOP_apic_read
 139#define PHYSDEVOP_APIC_WRITE             PHYSDEVOP_apic_write
 140#define PHYSDEVOP_ASSIGN_VECTOR          PHYSDEVOP_alloc_irq_vector
 141#define PHYSDEVOP_FREE_VECTOR            PHYSDEVOP_free_irq_vector
 142#define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY XENIRQSTAT_needs_eoi
 143#define PHYSDEVOP_IRQ_SHARED             XENIRQSTAT_shared
 144
 145#endif /* __XEN_PUBLIC_PHYSDEV_H__ */
 146