mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
4505153954
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that 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 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 136 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190530000436.384967451@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
90 lines
2.4 KiB
C
90 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2012 Advanced Micro Devices, Inc.
|
|
* Author: Joerg Roedel <joerg.roedel@amd.com>
|
|
*
|
|
* This header file contains the interface of the interrupt remapping code to
|
|
* the x86 interrupt management code.
|
|
*/
|
|
|
|
#ifndef __X86_IRQ_REMAPPING_H
|
|
#define __X86_IRQ_REMAPPING_H
|
|
|
|
#include <asm/irqdomain.h>
|
|
#include <asm/hw_irq.h>
|
|
#include <asm/io_apic.h>
|
|
|
|
struct msi_msg;
|
|
struct irq_alloc_info;
|
|
|
|
enum irq_remap_cap {
|
|
IRQ_POSTING_CAP = 0,
|
|
};
|
|
|
|
enum {
|
|
IRQ_REMAP_XAPIC_MODE,
|
|
IRQ_REMAP_X2APIC_MODE,
|
|
};
|
|
|
|
struct vcpu_data {
|
|
u64 pi_desc_addr; /* Physical address of PI Descriptor */
|
|
u32 vector; /* Guest vector of the interrupt */
|
|
};
|
|
|
|
#ifdef CONFIG_IRQ_REMAP
|
|
|
|
extern raw_spinlock_t irq_2_ir_lock;
|
|
|
|
extern bool irq_remapping_cap(enum irq_remap_cap cap);
|
|
extern void set_irq_remapping_broken(void);
|
|
extern int irq_remapping_prepare(void);
|
|
extern int irq_remapping_enable(void);
|
|
extern void irq_remapping_disable(void);
|
|
extern int irq_remapping_reenable(int);
|
|
extern int irq_remap_enable_fault_handling(void);
|
|
extern void panic_if_irq_remap(const char *msg);
|
|
|
|
extern struct irq_domain *
|
|
irq_remapping_get_ir_irq_domain(struct irq_alloc_info *info);
|
|
extern struct irq_domain *
|
|
irq_remapping_get_irq_domain(struct irq_alloc_info *info);
|
|
|
|
/* Create PCI MSI/MSIx irqdomain, use @parent as the parent irqdomain. */
|
|
extern struct irq_domain *
|
|
arch_create_remap_msi_irq_domain(struct irq_domain *par, const char *n, int id);
|
|
|
|
/* Get parent irqdomain for interrupt remapping irqdomain */
|
|
static inline struct irq_domain *arch_get_ir_parent_domain(void)
|
|
{
|
|
return x86_vector_domain;
|
|
}
|
|
|
|
#else /* CONFIG_IRQ_REMAP */
|
|
|
|
static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; }
|
|
static inline void set_irq_remapping_broken(void) { }
|
|
static inline int irq_remapping_prepare(void) { return -ENODEV; }
|
|
static inline int irq_remapping_enable(void) { return -ENODEV; }
|
|
static inline void irq_remapping_disable(void) { }
|
|
static inline int irq_remapping_reenable(int eim) { return -ENODEV; }
|
|
static inline int irq_remap_enable_fault_handling(void) { return -ENODEV; }
|
|
|
|
static inline void panic_if_irq_remap(const char *msg)
|
|
{
|
|
}
|
|
|
|
static inline struct irq_domain *
|
|
irq_remapping_get_ir_irq_domain(struct irq_alloc_info *info)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline struct irq_domain *
|
|
irq_remapping_get_irq_domain(struct irq_alloc_info *info)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#endif /* CONFIG_IRQ_REMAP */
|
|
#endif /* __X86_IRQ_REMAPPING_H */
|