hv:Rename ptdev to ptirq for some variables and structures
ptdev_remapping_info --> ptirq_remapping_info ptdev_msi_info --> ptirq_msi_info ptdev_vpin_source --> ptirq_vpin_source ptdev_irq_entries --> ptirq_entries ptdev_entry_bitmaps --> ptirq_entry_bitmaps v1-->v2: still use ptdev_lock instead of ptirq_lock Tracked-On: #861 Signed-off-by: Mingqiang Chi <mingqiang.chi@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
10afa9bbbf
commit
5b43aa8a65
|
@ -15,15 +15,15 @@
|
|||
* @pre: vm must be NULL when lookup by physical sid, otherwise,
|
||||
* vm must not be NULL when lookup by virtual sid.
|
||||
*/
|
||||
static inline struct ptdev_remapping_info *
|
||||
static inline struct ptirq_remapping_info *
|
||||
ptdev_lookup_entry_by_sid(uint32_t intr_type,
|
||||
const union source_id *sid,const struct acrn_vm *vm)
|
||||
{
|
||||
uint16_t idx;
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
|
||||
for (idx = 0U; idx < CONFIG_MAX_PT_IRQ_ENTRIES; idx++) {
|
||||
entry = &ptdev_irq_entries[idx];
|
||||
entry = &ptirq_entries[idx];
|
||||
if (!is_entry_active(entry)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -39,10 +39,10 @@ ptdev_lookup_entry_by_sid(uint32_t intr_type,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct ptdev_remapping_info *
|
||||
static inline struct ptirq_remapping_info *
|
||||
ptdev_lookup_entry_by_vpin(struct acrn_vm *vm, uint8_t virt_pin, bool pic_pin)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
|
||||
if (pic_pin) {
|
||||
entry = vm->arch_vm.vpic.vpin_to_pt_entry[virt_pin];
|
||||
|
@ -79,7 +79,7 @@ static uint64_t calculate_logical_dest_mask(uint64_t pdmask)
|
|||
return dest_mask;
|
||||
}
|
||||
|
||||
static void ptdev_build_physical_msi(struct acrn_vm *vm, struct ptdev_msi_info *info,
|
||||
static void ptdev_build_physical_msi(struct acrn_vm *vm, struct ptirq_msi_info *info,
|
||||
uint32_t vector)
|
||||
{
|
||||
uint64_t vdmask, pdmask, dest_mask;
|
||||
|
@ -116,7 +116,7 @@ static void ptdev_build_physical_msi(struct acrn_vm *vm, struct ptdev_msi_info *
|
|||
}
|
||||
|
||||
static union ioapic_rte
|
||||
ptdev_build_physical_rte(struct acrn_vm *vm, struct ptdev_remapping_info *entry)
|
||||
ptdev_build_physical_rte(struct acrn_vm *vm, struct ptirq_remapping_info *entry)
|
||||
{
|
||||
union ioapic_rte rte;
|
||||
uint32_t phys_irq = entry->allocated_pirq;
|
||||
|
@ -199,10 +199,10 @@ ptdev_build_physical_rte(struct acrn_vm *vm, struct ptdev_remapping_info *entry)
|
|||
* - if the entry already be added by vm0, then change the owner to current vm
|
||||
* - if the entry already be added by other vm, return NULL
|
||||
*/
|
||||
static struct ptdev_remapping_info *add_msix_remapping(struct acrn_vm *vm,
|
||||
static struct ptirq_remapping_info *add_msix_remapping(struct acrn_vm *vm,
|
||||
uint16_t virt_bdf, uint16_t phys_bdf, uint32_t entry_nr)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
DEFINE_MSI_SID(phys_sid, phys_bdf, entry_nr);
|
||||
DEFINE_MSI_SID(virt_sid, virt_bdf, entry_nr);
|
||||
|
||||
|
@ -252,7 +252,7 @@ static struct ptdev_remapping_info *add_msix_remapping(struct acrn_vm *vm,
|
|||
static void
|
||||
remove_msix_remapping(const struct acrn_vm *vm, uint16_t virt_bdf, uint32_t entry_nr)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
DEFINE_MSI_SID(virt_sid, virt_bdf, entry_nr);
|
||||
|
||||
entry = ptdev_lookup_entry_by_sid(PTDEV_INTR_MSI, &virt_sid, vm);
|
||||
|
@ -279,11 +279,11 @@ remove_msix_remapping(const struct acrn_vm *vm, uint16_t virt_bdf, uint32_t entr
|
|||
* - if the entry already be added by vm0, then change the owner to current vm
|
||||
* - if the entry already be added by other vm, return NULL
|
||||
*/
|
||||
static struct ptdev_remapping_info *add_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin,
|
||||
static struct ptirq_remapping_info *add_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin,
|
||||
uint8_t phys_pin, bool pic_pin)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
enum ptdev_vpin_source vpin_src = pic_pin ? PTDEV_VPIN_PIC : PTDEV_VPIN_IOAPIC;
|
||||
struct ptirq_remapping_info *entry;
|
||||
enum ptirq_vpin_source vpin_src = pic_pin ? PTDEV_VPIN_PIC : PTDEV_VPIN_IOAPIC;
|
||||
DEFINE_IOAPIC_SID(phys_sid, phys_pin, 0);
|
||||
DEFINE_IOAPIC_SID(virt_sid, virt_pin, vpin_src);
|
||||
uint32_t phys_irq = pin_to_irq(phys_pin);
|
||||
|
@ -346,7 +346,7 @@ static struct ptdev_remapping_info *add_intx_remapping(struct acrn_vm *vm, uint8
|
|||
static void remove_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin, bool pic_pin)
|
||||
{
|
||||
uint32_t phys_irq;
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
|
||||
if ((!pic_pin && virt_pin >= vioapic_pincount(vm))
|
||||
|| (pic_pin && virt_pin >= vpic_pincount())) {
|
||||
|
@ -382,7 +382,7 @@ static void remove_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin, bool pic
|
|||
}
|
||||
|
||||
static void ptdev_intr_handle_irq(struct acrn_vm *vm,
|
||||
const struct ptdev_remapping_info *entry)
|
||||
const struct ptirq_remapping_info *entry)
|
||||
{
|
||||
const union source_id *virt_sid = &entry->virt_sid;
|
||||
switch (virt_sid->intx_id.src) {
|
||||
|
@ -452,8 +452,8 @@ void ptdev_softirq(uint16_t pcpu_id)
|
|||
struct acrn_vm *vm = vcpu->vm;
|
||||
|
||||
while (1) {
|
||||
struct ptdev_remapping_info *entry = ptdev_dequeue_softirq(vm);
|
||||
struct ptdev_msi_info *msi;
|
||||
struct ptirq_remapping_info *entry = ptdev_dequeue_softirq(vm);
|
||||
struct ptirq_msi_info *msi;
|
||||
|
||||
if (entry == NULL) {
|
||||
break;
|
||||
|
@ -489,10 +489,10 @@ void ptdev_softirq(uint16_t pcpu_id)
|
|||
}
|
||||
|
||||
void ptdev_intx_ack(struct acrn_vm *vm, uint8_t virt_pin,
|
||||
enum ptdev_vpin_source vpin_src)
|
||||
enum ptirq_vpin_source vpin_src)
|
||||
{
|
||||
uint32_t phys_irq;
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
bool pic_pin = (vpin_src == PTDEV_VPIN_PIC);
|
||||
|
||||
entry = ptdev_lookup_entry_by_vpin(vm, virt_pin, pic_pin);
|
||||
|
@ -536,9 +536,9 @@ void ptdev_intx_ack(struct acrn_vm *vm, uint8_t virt_pin,
|
|||
* user must provide bdf and entry_nr
|
||||
*/
|
||||
int ptdev_msix_remap(struct acrn_vm *vm, uint16_t virt_bdf,
|
||||
uint16_t entry_nr, struct ptdev_msi_info *info)
|
||||
uint16_t entry_nr, struct ptirq_msi_info *info)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
DEFINE_MSI_SID(virt_sid, virt_bdf, entry_nr);
|
||||
|
||||
/*
|
||||
|
@ -591,7 +591,7 @@ END:
|
|||
}
|
||||
|
||||
static void activate_physical_ioapic(struct acrn_vm *vm,
|
||||
struct ptdev_remapping_info *entry)
|
||||
struct ptirq_remapping_info *entry)
|
||||
{
|
||||
union ioapic_rte rte;
|
||||
uint32_t phys_irq = entry->allocated_pirq;
|
||||
|
@ -624,9 +624,9 @@ static void activate_physical_ioapic(struct acrn_vm *vm,
|
|||
* or vPIC
|
||||
*/
|
||||
int ptdev_intx_pin_remap(struct acrn_vm *vm, uint8_t virt_pin,
|
||||
enum ptdev_vpin_source vpin_src)
|
||||
enum ptirq_vpin_source vpin_src)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
bool need_switch_vpin_src = false;
|
||||
DEFINE_IOAPIC_SID(virt_sid, virt_pin, vpin_src);
|
||||
bool pic_pin = (vpin_src == PTDEV_VPIN_PIC);
|
||||
|
@ -732,7 +732,7 @@ END:
|
|||
int ptdev_add_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin, uint8_t phys_pin,
|
||||
bool pic_pin)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
|
||||
spinlock_obtain(&ptdev_lock);
|
||||
entry = add_intx_remapping(vm, virt_pin, phys_pin, pic_pin);
|
||||
|
@ -759,7 +759,7 @@ void ptdev_remove_intx_remapping(struct acrn_vm *vm, uint8_t virt_pin, bool pic_
|
|||
int ptdev_add_msix_remapping(struct acrn_vm *vm, uint16_t virt_bdf,
|
||||
uint16_t phys_bdf, uint32_t vector_count)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0U; i < vector_count; i++) {
|
||||
|
|
|
@ -8,31 +8,31 @@
|
|||
#include <softirq.h>
|
||||
#include <ptdev.h>
|
||||
|
||||
#define PTDEV_BITMAP_ARRAY_SIZE INT_DIV_ROUNDUP(CONFIG_MAX_PT_IRQ_ENTRIES, 64U)
|
||||
struct ptdev_remapping_info ptdev_irq_entries[CONFIG_MAX_PT_IRQ_ENTRIES];
|
||||
static uint64_t ptdev_entry_bitmaps[PTDEV_BITMAP_ARRAY_SIZE];
|
||||
#define PTIRQ_BITMAP_ARRAY_SIZE INT_DIV_ROUNDUP(CONFIG_MAX_PT_IRQ_ENTRIES, 64U)
|
||||
struct ptirq_remapping_info ptirq_entries[CONFIG_MAX_PT_IRQ_ENTRIES];
|
||||
static uint64_t ptirq_entry_bitmaps[PTIRQ_BITMAP_ARRAY_SIZE];
|
||||
spinlock_t ptdev_lock;
|
||||
|
||||
bool is_entry_active(const struct ptdev_remapping_info *entry)
|
||||
bool is_entry_active(const struct ptirq_remapping_info *entry)
|
||||
{
|
||||
return atomic_load32(&entry->active) == ACTIVE_FLAG;
|
||||
}
|
||||
|
||||
static inline uint16_t alloc_ptdev_entry_id(void)
|
||||
{
|
||||
uint16_t id = (uint16_t)ffz64_ex(ptdev_entry_bitmaps, CONFIG_MAX_PT_IRQ_ENTRIES);
|
||||
uint16_t id = (uint16_t)ffz64_ex(ptirq_entry_bitmaps, CONFIG_MAX_PT_IRQ_ENTRIES);
|
||||
|
||||
while (id < CONFIG_MAX_PT_IRQ_ENTRIES) {
|
||||
if (!bitmap_test_and_set_lock((id & 0x3FU), &ptdev_entry_bitmaps[id >> 6U])) {
|
||||
if (!bitmap_test_and_set_lock((id & 0x3FU), &ptirq_entry_bitmaps[id >> 6U])) {
|
||||
return id;
|
||||
}
|
||||
id = (uint16_t)ffz64_ex(ptdev_entry_bitmaps, CONFIG_MAX_PT_IRQ_ENTRIES);
|
||||
id = (uint16_t)ffz64_ex(ptirq_entry_bitmaps, CONFIG_MAX_PT_IRQ_ENTRIES);
|
||||
}
|
||||
|
||||
return INVALID_PTDEV_ENTRY_ID;
|
||||
}
|
||||
|
||||
static void ptdev_enqueue_softirq(struct ptdev_remapping_info *entry)
|
||||
static void ptdev_enqueue_softirq(struct ptirq_remapping_info *entry)
|
||||
{
|
||||
uint64_t rflags;
|
||||
|
||||
|
@ -50,23 +50,23 @@ static void ptdev_enqueue_softirq(struct ptdev_remapping_info *entry)
|
|||
|
||||
static void ptdev_intr_delay_callback(void *data)
|
||||
{
|
||||
struct ptdev_remapping_info *entry =
|
||||
(struct ptdev_remapping_info *) data;
|
||||
struct ptirq_remapping_info *entry =
|
||||
(struct ptirq_remapping_info *) data;
|
||||
|
||||
ptdev_enqueue_softirq(entry);
|
||||
}
|
||||
|
||||
struct ptdev_remapping_info*
|
||||
struct ptirq_remapping_info*
|
||||
ptdev_dequeue_softirq(struct acrn_vm *vm)
|
||||
{
|
||||
uint64_t rflags;
|
||||
struct ptdev_remapping_info *entry = NULL;
|
||||
struct ptirq_remapping_info *entry = NULL;
|
||||
|
||||
spinlock_irqsave_obtain(&vm->softirq_dev_lock, &rflags);
|
||||
|
||||
while (!list_empty(&vm->softirq_dev_entry_list)) {
|
||||
entry = get_first_item(&vm->softirq_dev_entry_list,
|
||||
struct ptdev_remapping_info, softirq_node);
|
||||
struct ptirq_remapping_info, softirq_node);
|
||||
|
||||
list_del_init(&entry->softirq_node);
|
||||
|
||||
|
@ -85,10 +85,10 @@ ptdev_dequeue_softirq(struct acrn_vm *vm)
|
|||
return entry;
|
||||
}
|
||||
|
||||
struct ptdev_remapping_info *
|
||||
struct ptirq_remapping_info *
|
||||
alloc_entry(struct acrn_vm *vm, uint32_t intr_type)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
uint16_t ptdev_id = alloc_ptdev_entry_id();
|
||||
|
||||
if (ptdev_id >= CONFIG_MAX_PT_IRQ_ENTRIES) {
|
||||
|
@ -96,8 +96,8 @@ alloc_entry(struct acrn_vm *vm, uint32_t intr_type)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
entry = &ptdev_irq_entries[ptdev_id];
|
||||
(void)memset((void *)entry, 0U, sizeof(struct ptdev_remapping_info));
|
||||
entry = &ptirq_entries[ptdev_id];
|
||||
(void)memset((void *)entry, 0U, sizeof(struct ptirq_remapping_info));
|
||||
entry->ptdev_entry_id = ptdev_id;
|
||||
entry->intr_type = intr_type;
|
||||
entry->vm = vm;
|
||||
|
@ -114,7 +114,7 @@ alloc_entry(struct acrn_vm *vm, uint32_t intr_type)
|
|||
}
|
||||
|
||||
void
|
||||
release_entry(struct ptdev_remapping_info *entry)
|
||||
release_entry(struct ptirq_remapping_info *entry)
|
||||
{
|
||||
uint64_t rflags;
|
||||
|
||||
|
@ -126,17 +126,17 @@ release_entry(struct ptdev_remapping_info *entry)
|
|||
list_del_init(&entry->softirq_node);
|
||||
spinlock_irqrestore_release(&entry->vm->softirq_dev_lock, rflags);
|
||||
atomic_clear32(&entry->active, ACTIVE_FLAG);
|
||||
bitmap_clear_nolock((entry->ptdev_entry_id) & 0x3FU, &ptdev_entry_bitmaps[(entry->ptdev_entry_id) >> 6U]);
|
||||
bitmap_clear_nolock((entry->ptdev_entry_id) & 0x3FU, &ptirq_entry_bitmaps[(entry->ptdev_entry_id) >> 6U]);
|
||||
}
|
||||
|
||||
static void
|
||||
release_all_entries(const struct acrn_vm *vm)
|
||||
{
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
uint16_t idx;
|
||||
|
||||
for (idx = 0U; idx < CONFIG_MAX_PT_IRQ_ENTRIES; idx++) {
|
||||
entry = &ptdev_irq_entries[idx];
|
||||
entry = &ptirq_entries[idx];
|
||||
if (entry->vm == vm) {
|
||||
release_entry(entry);
|
||||
}
|
||||
|
@ -146,8 +146,8 @@ release_all_entries(const struct acrn_vm *vm)
|
|||
/* interrupt context */
|
||||
static void ptdev_interrupt_handler(__unused uint32_t irq, void *data)
|
||||
{
|
||||
struct ptdev_remapping_info *entry =
|
||||
(struct ptdev_remapping_info *) data;
|
||||
struct ptirq_remapping_info *entry =
|
||||
(struct ptirq_remapping_info *) data;
|
||||
|
||||
/*
|
||||
* "interrupt storm" detection & delay intr injection just for UOS
|
||||
|
@ -169,7 +169,7 @@ static void ptdev_interrupt_handler(__unused uint32_t irq, void *data)
|
|||
}
|
||||
|
||||
/* active intr with irq registering */
|
||||
int32_t ptdev_activate_entry(struct ptdev_remapping_info *entry, uint32_t phys_irq)
|
||||
int32_t ptdev_activate_entry(struct ptirq_remapping_info *entry, uint32_t phys_irq)
|
||||
{
|
||||
int32_t retval;
|
||||
|
||||
|
@ -187,7 +187,7 @@ int32_t ptdev_activate_entry(struct ptdev_remapping_info *entry, uint32_t phys_i
|
|||
}
|
||||
|
||||
void
|
||||
ptdev_deactivate_entry(struct ptdev_remapping_info *entry)
|
||||
ptdev_deactivate_entry(struct ptirq_remapping_info *entry)
|
||||
{
|
||||
uint64_t rflags;
|
||||
|
||||
|
@ -226,10 +226,10 @@ uint32_t get_vm_ptdev_intr_data(const struct acrn_vm *target_vm, uint64_t *buffe
|
|||
{
|
||||
uint32_t index = 0U;
|
||||
uint16_t i;
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
|
||||
for (i = 0U; i < CONFIG_MAX_PT_IRQ_ENTRIES; i++) {
|
||||
entry = &ptdev_irq_entries[i];
|
||||
entry = &ptirq_entries[i];
|
||||
if (!is_entry_active(entry)) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -902,7 +902,7 @@ static int shell_show_cpu_int(__unused int argc, __unused char **argv)
|
|||
}
|
||||
|
||||
#define PTDEV_INVALID_PIN 0xffU
|
||||
static void get_entry_info(const struct ptdev_remapping_info *entry, char *type,
|
||||
static void get_entry_info(const struct ptirq_remapping_info *entry, char *type,
|
||||
uint32_t *irq, uint32_t *vector, uint64_t *dest, bool *lvl_tm,
|
||||
uint8_t *pin, uint8_t *vpin, uint32_t *bdf, uint32_t *vbdf)
|
||||
{
|
||||
|
@ -958,7 +958,7 @@ static void get_entry_info(const struct ptdev_remapping_info *entry, char *type,
|
|||
static void get_ptdev_info(char *str_arg, size_t str_max)
|
||||
{
|
||||
char *str = str_arg;
|
||||
struct ptdev_remapping_info *entry;
|
||||
struct ptirq_remapping_info *entry;
|
||||
uint16_t idx;
|
||||
size_t len, size = str_max;
|
||||
uint32_t irq, vector;
|
||||
|
@ -976,7 +976,7 @@ static void get_ptdev_info(char *str_arg, size_t str_max)
|
|||
str += len;
|
||||
|
||||
for (idx = 0U; idx < CONFIG_MAX_PT_IRQ_ENTRIES; idx++) {
|
||||
entry = &ptdev_irq_entries[idx];
|
||||
entry = &ptirq_entries[idx];
|
||||
if (is_entry_active(entry)) {
|
||||
get_entry_info(entry, type, &irq, &vector,
|
||||
&dest, &lvl_tm, &pin, &vpin,
|
||||
|
|
|
@ -44,7 +44,7 @@ static inline bool msicap_access(struct pci_vdev *vdev, uint32_t offset)
|
|||
|
||||
static int32_t vmsi_remap(struct pci_vdev *vdev, bool enable)
|
||||
{
|
||||
struct ptdev_msi_info info;
|
||||
struct ptirq_msi_info info;
|
||||
union pci_bdf pbdf = vdev->pdev.bdf;
|
||||
struct acrn_vm *vm = vdev->vpci->vm;
|
||||
uint32_t capoff = vdev->msi.capoff;
|
||||
|
|
|
@ -51,7 +51,7 @@ static inline bool msixtable_access(struct pci_vdev *vdev, uint32_t offset)
|
|||
static int vmsix_remap_entry(struct pci_vdev *vdev, uint32_t index, bool enable)
|
||||
{
|
||||
struct msix_table_entry *pentry;
|
||||
struct ptdev_msi_info info;
|
||||
struct ptirq_msi_info info;
|
||||
uint64_t hva;
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
* @pre vm != NULL
|
||||
*
|
||||
*/
|
||||
void ptdev_intx_ack(struct acrn_vm *vm, uint8_t virt_pin, enum ptdev_vpin_source vpin_src);
|
||||
void ptdev_intx_ack(struct acrn_vm *vm, uint8_t virt_pin, enum ptirq_vpin_source vpin_src);
|
||||
|
||||
/**
|
||||
* @brief MSI/MSI-x remapping for passthrough device.
|
||||
|
@ -59,7 +59,7 @@ void ptdev_intx_ack(struct acrn_vm *vm, uint8_t virt_pin, enum ptdev_vpin_source
|
|||
* @pre info != NULL
|
||||
*
|
||||
*/
|
||||
int ptdev_msix_remap(struct acrn_vm *vm, uint16_t virt_bdf, uint16_t entry_nr, struct ptdev_msi_info *info);
|
||||
int ptdev_msix_remap(struct acrn_vm *vm, uint16_t virt_bdf, uint16_t entry_nr, struct ptirq_msi_info *info);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -81,7 +81,7 @@ int ptdev_msix_remap(struct acrn_vm *vm, uint16_t virt_bdf, uint16_t entry_nr, s
|
|||
* @pre vm != NULL
|
||||
*
|
||||
*/
|
||||
int ptdev_intx_pin_remap(struct acrn_vm *vm, uint8_t virt_pin, enum ptdev_vpin_source vpin_src);
|
||||
int ptdev_intx_pin_remap(struct acrn_vm *vm, uint8_t virt_pin, enum ptirq_vpin_source vpin_src);
|
||||
|
||||
/**
|
||||
* @brief Add an interrupt remapping entry for INTx as pre-hold mapping.
|
||||
|
|
|
@ -56,7 +56,7 @@ struct acrn_vioapic {
|
|||
union ioapic_rte rtbl[REDIR_ENTRIES_HW];
|
||||
/* pin_state status bitmap: 1 - high, 0 - low */
|
||||
uint64_t pin_state[STATE_BITMAP_SIZE];
|
||||
struct ptdev_remapping_info *vpin_to_pt_entry[VIOAPIC_MAX_PIN];
|
||||
struct ptirq_remapping_info *vpin_to_pt_entry[VIOAPIC_MAX_PIN];
|
||||
};
|
||||
|
||||
void vioapic_init(struct acrn_vm *vm);
|
||||
|
|
|
@ -128,7 +128,7 @@ struct acrn_vpic {
|
|||
struct acrn_vm *vm;
|
||||
spinlock_t lock;
|
||||
struct i8259_reg_state i8259[2];
|
||||
struct ptdev_remapping_info *vpin_to_pt_entry[NR_VPIC_PINS_TOTAL];
|
||||
struct ptirq_remapping_info *vpin_to_pt_entry[NR_VPIC_PINS_TOTAL];
|
||||
};
|
||||
|
||||
void vpic_init(struct acrn_vm *vm);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#define INVALID_PTDEV_ENTRY_ID 0xffffU
|
||||
|
||||
enum ptdev_vpin_source {
|
||||
enum ptirq_vpin_source {
|
||||
PTDEV_VPIN_IOAPIC,
|
||||
PTDEV_VPIN_PIC,
|
||||
};
|
||||
|
@ -39,7 +39,7 @@ union source_id {
|
|||
};
|
||||
|
||||
/* entry per guest virt vector */
|
||||
struct ptdev_msi_info {
|
||||
struct ptirq_msi_info {
|
||||
uint64_t vmsi_addr; /* virt msi_addr */
|
||||
uint32_t vmsi_data; /* virt msi_data */
|
||||
uint64_t pmsi_addr; /* phys msi_addr */
|
||||
|
@ -52,7 +52,7 @@ struct ptdev_msi_info {
|
|||
* information related with its vm and msi/intx mapping & interaction nodes
|
||||
* with interrupt handler and softirq.
|
||||
*/
|
||||
struct ptdev_remapping_info {
|
||||
struct ptirq_remapping_info {
|
||||
uint16_t ptdev_entry_id;
|
||||
uint32_t intr_type;
|
||||
union source_id phys_sid;
|
||||
|
@ -62,25 +62,25 @@ struct ptdev_remapping_info {
|
|||
uint32_t allocated_pirq;
|
||||
uint32_t polarity; /* 0=active high, 1=active low*/
|
||||
struct list_head softirq_node;
|
||||
struct ptdev_msi_info msi;
|
||||
struct ptirq_msi_info msi;
|
||||
|
||||
uint64_t intr_count;
|
||||
struct hv_timer intr_delay_timer; /* used for delay intr injection */
|
||||
};
|
||||
|
||||
extern struct ptdev_remapping_info ptdev_irq_entries[];
|
||||
extern struct ptirq_remapping_info ptirq_entries[];
|
||||
extern spinlock_t ptdev_lock;
|
||||
|
||||
bool is_entry_active(const struct ptdev_remapping_info *entry);
|
||||
bool is_entry_active(const struct ptirq_remapping_info *entry);
|
||||
void ptdev_softirq(uint16_t pcpu_id);
|
||||
void ptdev_init(void);
|
||||
void ptdev_release_all_entries(const struct acrn_vm *vm);
|
||||
|
||||
struct ptdev_remapping_info *ptdev_dequeue_softirq(struct acrn_vm *vm);
|
||||
struct ptdev_remapping_info *alloc_entry(struct acrn_vm *vm, uint32_t intr_type);
|
||||
void release_entry(struct ptdev_remapping_info *entry);
|
||||
int32_t ptdev_activate_entry(struct ptdev_remapping_info *entry, uint32_t phys_irq);
|
||||
void ptdev_deactivate_entry(struct ptdev_remapping_info *entry);
|
||||
struct ptirq_remapping_info *ptdev_dequeue_softirq(struct acrn_vm *vm);
|
||||
struct ptirq_remapping_info *alloc_entry(struct acrn_vm *vm, uint32_t intr_type);
|
||||
void release_entry(struct ptirq_remapping_info *entry);
|
||||
int32_t ptdev_activate_entry(struct ptirq_remapping_info *entry, uint32_t phys_irq);
|
||||
void ptdev_deactivate_entry(struct ptirq_remapping_info *entry);
|
||||
|
||||
uint32_t get_vm_ptdev_intr_data(const struct acrn_vm *target_vm, uint64_t *buffer, uint32_t buffer_cnt);
|
||||
|
||||
|
|
Loading…
Reference in New Issue