diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-10-20 15:11:41 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-10-20 15:11:41 +0100 |
commit | c2a61a79bf8b05255ec191739e413af3e3e4218e (patch) | |
tree | 510ab6e2b8e5c1b78a48df4efa709d86e393ecfd /xen/include/xen/hvm | |
parent | 4fe64c10cb285a270ba9a7b630ed33b009f0c633 (diff) | |
download | xen-c2a61a79bf8b05255ec191739e413af3e3e4218e.tar.gz xen-c2a61a79bf8b05255ec191739e413af3e3e4218e.tar.bz2 xen-c2a61a79bf8b05255ec191739e413af3e3e4218e.zip |
Add a new file xen/include/xen/hvm/irq.h to share common definitions.
Signed-off-by: Anthony Xu <anthony.xu@intel.com>
Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
Diffstat (limited to 'xen/include/xen/hvm')
-rw-r--r-- | xen/include/xen/hvm/irq.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/xen/include/xen/hvm/irq.h b/xen/include/xen/hvm/irq.h new file mode 100644 index 0000000000..952be135d3 --- /dev/null +++ b/xen/include/xen/hvm/irq.h @@ -0,0 +1,98 @@ +/****************************************************************************** + * irq.h + * + * Interrupt distribution and delivery logic. + * + * Copyright (c) 2006, K A Fraser, XenSource Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __XEN_HVM_IRQ_H__ +#define __XEN_HVM_IRQ_H__ + +#include <xen/types.h> +#include <xen/spinlock.h> +#include <asm/irq.h> +#include <public/hvm/save.h> + +struct dev_intx_gsi_link { + struct list_head list; + uint8_t device; + uint8_t intx; + uint8_t gsi; + uint8_t link; +}; + +#define _HVM_IRQ_DPCI_MSI 0x1 + +struct hvm_gmsi_info { + uint32_t gvec; + uint32_t gflags; +}; + +struct hvm_mirq_dpci_mapping { + uint32_t flags; + int pending; + struct list_head digl_list; + struct domain *dom; + struct hvm_gmsi_info gmsi; +}; + +struct hvm_girq_dpci_mapping { + uint8_t valid; + uint8_t device; + uint8_t intx; + uint8_t machine_gsi; +}; + +#define NR_ISAIRQS 16 +#define NR_LINK 4 + +/* Protected by domain's event_lock */ +struct hvm_irq_dpci { + /* Machine IRQ to guest device/intx mapping. */ + DECLARE_BITMAP(mapping, NR_PIRQS); + struct hvm_mirq_dpci_mapping mirq[NR_IRQS]; + /* Guest IRQ to guest device/intx mapping. */ + struct hvm_girq_dpci_mapping girq[NR_IRQS]; + uint8_t msi_gvec_pirq[NR_VECTORS]; + DECLARE_BITMAP(dirq_mask, NR_IRQS); + /* Record of mapped ISA IRQs */ + DECLARE_BITMAP(isairq_map, NR_ISAIRQS); + /* Record of mapped Links */ + uint8_t link_cnt[NR_LINK]; + struct timer hvm_timer[NR_IRQS]; +}; + +/* Modify state of a PCI INTx wire. */ +void hvm_pci_intx_assert( + struct domain *d, unsigned int device, unsigned int intx); +void hvm_pci_intx_deassert( + struct domain *d, unsigned int device, unsigned int intx); + +/* Modify state of an ISA device's IRQ wire. */ +void hvm_isa_irq_assert( + struct domain *d, unsigned int isa_irq); +void hvm_isa_irq_deassert( + struct domain *d, unsigned int isa_irq); + +void hvm_set_pci_link_route(struct domain *d, u8 link, u8 isa_irq); + +void hvm_maybe_deassert_evtchn_irq(void); +void hvm_assert_evtchn_irq(struct vcpu *v); +void hvm_set_callback_via(struct domain *d, uint64_t via); + + +#endif /* __XEN_HVM_IRQ_H__ */ |