Annotation of Gnu-Mach/xen/public/physdev.h, revision 1.1.1.1

1.1       root        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
                     36: struct physdev_eoi {
                     37:     /* IN */
                     38:     uint32_t irq;
                     39: };
                     40: typedef struct physdev_eoi physdev_eoi_t;
                     41: DEFINE_XEN_GUEST_HANDLE(physdev_eoi_t);
                     42: 
                     43: /*
                     44:  * Query the status of an IRQ line.
                     45:  * @arg == pointer to physdev_irq_status_query structure.
                     46:  */
                     47: #define PHYSDEVOP_irq_status_query       5
                     48: struct physdev_irq_status_query {
                     49:     /* IN */
                     50:     uint32_t irq;
                     51:     /* OUT */
                     52:     uint32_t flags; /* XENIRQSTAT_* */
                     53: };
                     54: typedef struct physdev_irq_status_query physdev_irq_status_query_t;
                     55: DEFINE_XEN_GUEST_HANDLE(physdev_irq_status_query_t);
                     56: 
                     57: /* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
                     58: #define _XENIRQSTAT_needs_eoi   (0)
                     59: #define  XENIRQSTAT_needs_eoi   (1U<<_XENIRQSTAT_needs_eoi)
                     60: 
                     61: /* IRQ shared by multiple guests? */
                     62: #define _XENIRQSTAT_shared      (1)
                     63: #define  XENIRQSTAT_shared      (1U<<_XENIRQSTAT_shared)
                     64: 
                     65: /*
                     66:  * Set the current VCPU's I/O privilege level.
                     67:  * @arg == pointer to physdev_set_iopl structure.
                     68:  */
                     69: #define PHYSDEVOP_set_iopl               6
                     70: struct physdev_set_iopl {
                     71:     /* IN */
                     72:     uint32_t iopl;
                     73: };
                     74: typedef struct physdev_set_iopl physdev_set_iopl_t;
                     75: DEFINE_XEN_GUEST_HANDLE(physdev_set_iopl_t);
                     76: 
                     77: /*
                     78:  * Set the current VCPU's I/O-port permissions bitmap.
                     79:  * @arg == pointer to physdev_set_iobitmap structure.
                     80:  */
                     81: #define PHYSDEVOP_set_iobitmap           7
                     82: struct physdev_set_iobitmap {
                     83:     /* IN */
                     84: #if __XEN_INTERFACE_VERSION__ >= 0x00030205
                     85:     XEN_GUEST_HANDLE(uint8) bitmap;
                     86: #else
                     87:     uint8_t *bitmap;
                     88: #endif
                     89:     uint32_t nr_ports;
                     90: };
                     91: typedef struct physdev_set_iobitmap physdev_set_iobitmap_t;
                     92: DEFINE_XEN_GUEST_HANDLE(physdev_set_iobitmap_t);
                     93: 
                     94: /*
                     95:  * Read or write an IO-APIC register.
                     96:  * @arg == pointer to physdev_apic structure.
                     97:  */
                     98: #define PHYSDEVOP_apic_read              8
                     99: #define PHYSDEVOP_apic_write             9
                    100: struct physdev_apic {
                    101:     /* IN */
                    102:     unsigned long apic_physbase;
                    103:     uint32_t reg;
                    104:     /* IN or OUT */
                    105:     uint32_t value;
                    106: };
                    107: typedef struct physdev_apic physdev_apic_t;
                    108: DEFINE_XEN_GUEST_HANDLE(physdev_apic_t);
                    109: 
                    110: /*
                    111:  * Allocate or free a physical upcall vector for the specified IRQ line.
                    112:  * @arg == pointer to physdev_irq structure.
                    113:  */
                    114: #define PHYSDEVOP_alloc_irq_vector      10
                    115: #define PHYSDEVOP_free_irq_vector       11
                    116: struct physdev_irq {
                    117:     /* IN */
                    118:     uint32_t irq;
                    119:     /* IN or OUT */
                    120:     uint32_t vector;
                    121: };
                    122: typedef struct physdev_irq physdev_irq_t;
                    123: DEFINE_XEN_GUEST_HANDLE(physdev_irq_t);
                    124:  
                    125: #define MAP_PIRQ_TYPE_MSI               0x0
                    126: #define MAP_PIRQ_TYPE_GSI               0x1
                    127: #define MAP_PIRQ_TYPE_UNKNOWN           0x2
                    128: 
                    129: #define PHYSDEVOP_map_pirq               13
                    130: struct physdev_map_pirq {
                    131:     domid_t domid;
                    132:     /* IN */
                    133:     int type;
                    134:     /* IN */
                    135:     int index;
                    136:     /* IN or OUT */
                    137:     int pirq;
                    138:     /* IN */
                    139:     int bus;
                    140:     /* IN */
                    141:     int devfn;
                    142:     /* IN */
                    143:     int entry_nr;
                    144:     /* IN */
                    145:     uint64_t table_base;
                    146: };
                    147: typedef struct physdev_map_pirq physdev_map_pirq_t;
                    148: DEFINE_XEN_GUEST_HANDLE(physdev_map_pirq_t);
                    149: 
                    150: #define PHYSDEVOP_unmap_pirq             14
                    151: struct physdev_unmap_pirq {
                    152:     domid_t domid;
                    153:     /* IN */
                    154:     int pirq;
                    155: };
                    156: 
                    157: typedef struct physdev_unmap_pirq physdev_unmap_pirq_t;
                    158: DEFINE_XEN_GUEST_HANDLE(physdev_unmap_pirq_t);
                    159: 
                    160: #define PHYSDEVOP_manage_pci_add         15
                    161: #define PHYSDEVOP_manage_pci_remove      16
                    162: struct physdev_manage_pci {
                    163:     /* IN */
                    164:     uint8_t bus;
                    165:     uint8_t devfn;
                    166: }; 
                    167: 
                    168: typedef struct physdev_manage_pci physdev_manage_pci_t;
                    169: DEFINE_XEN_GUEST_HANDLE(physdev_manage_pci_t);
                    170: 
                    171: /*
                    172:  * Argument to physdev_op_compat() hypercall. Superceded by new physdev_op()
                    173:  * hypercall since 0x00030202.
                    174:  */
                    175: struct physdev_op {
                    176:     uint32_t cmd;
                    177:     union {
                    178:         struct physdev_irq_status_query      irq_status_query;
                    179:         struct physdev_set_iopl              set_iopl;
                    180:         struct physdev_set_iobitmap          set_iobitmap;
                    181:         struct physdev_apic                  apic_op;
                    182:         struct physdev_irq                   irq_op;
                    183:     } u;
                    184: };
                    185: typedef struct physdev_op physdev_op_t;
                    186: DEFINE_XEN_GUEST_HANDLE(physdev_op_t);
                    187: 
                    188: /*
                    189:  * Notify that some PIRQ-bound event channels have been unmasked.
                    190:  * ** This command is obsolete since interface version 0x00030202 and is **
                    191:  * ** unsupported by newer versions of Xen.                              **
                    192:  */
                    193: #define PHYSDEVOP_IRQ_UNMASK_NOTIFY      4
                    194: 
                    195: /*
                    196:  * These all-capitals physdev operation names are superceded by the new names
                    197:  * (defined above) since interface version 0x00030202.
                    198:  */
                    199: #define PHYSDEVOP_IRQ_STATUS_QUERY       PHYSDEVOP_irq_status_query
                    200: #define PHYSDEVOP_SET_IOPL               PHYSDEVOP_set_iopl
                    201: #define PHYSDEVOP_SET_IOBITMAP           PHYSDEVOP_set_iobitmap
                    202: #define PHYSDEVOP_APIC_READ              PHYSDEVOP_apic_read
                    203: #define PHYSDEVOP_APIC_WRITE             PHYSDEVOP_apic_write
                    204: #define PHYSDEVOP_ASSIGN_VECTOR          PHYSDEVOP_alloc_irq_vector
                    205: #define PHYSDEVOP_FREE_VECTOR            PHYSDEVOP_free_irq_vector
                    206: #define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY XENIRQSTAT_needs_eoi
                    207: #define PHYSDEVOP_IRQ_SHARED             XENIRQSTAT_shared
                    208: 
                    209: #endif /* __XEN_PUBLIC_PHYSDEV_H__ */
                    210: 
                    211: /*
                    212:  * Local variables:
                    213:  * mode: C
                    214:  * c-set-style: "BSD"
                    215:  * c-basic-offset: 4
                    216:  * tab-width: 4
                    217:  * indent-tabs-mode: nil
                    218:  * End:
                    219:  */

unix.superglobalmegacorp.com

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