mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-12-08 13:19:03 +00:00
Currently irq and vector numbers are used inconsistently.
* Sometimes vector or irq ids is used in bit operations, indicating
that they should be unsigned (which is required by MISRA C).
* At the same time we use -1 to indicate an unknown irq (in
common_register_handler()) or unavailable irq (in
alloc_irq()). Also (irq < 0) or (vector < 0) are used for error
checking. These indicate that irq or vector ids should be signed.
This patch converts irq and vector numbers to unsigned 32-bit integers, and
replace the previous -1 with IRQ_INVALID or VECTOR_INVALID. The branch
conditions are updated accordingly.
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
36 lines
1.0 KiB
C
36 lines
1.0 KiB
C
/*
|
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef IOAPIC_H
|
|
#define IOAPIC_H
|
|
|
|
/* IOAPIC_MAX_LINES is architecturally defined.
|
|
* The usable RTEs may be a subset of the total on a per IO APIC basis.
|
|
*/
|
|
#define IOAPIC_MAX_LINES 120
|
|
#define NR_LEGACY_IRQ 16
|
|
#define NR_LEGACY_PIN NR_LEGACY_IRQ
|
|
#define NR_MAX_GSI (CONFIG_NR_IOAPICS*IOAPIC_MAX_LINES)
|
|
|
|
#define GSI_MASK_IRQ(irq) irq_gsi_mask_unmask((irq), true)
|
|
#define GSI_UNMASK_IRQ(irq) irq_gsi_mask_unmask((irq), false)
|
|
#define GSI_SET_RTE(irq, rte) ioapic_set_rte((irq), (rte))
|
|
|
|
void setup_ioapic_irq(void);
|
|
int get_ioapic_info(char *str, int str_max_len);
|
|
|
|
bool irq_is_gsi(uint32_t irq);
|
|
uint32_t irq_gsi_num(void);
|
|
int irq_to_pin(uint32_t irq);
|
|
uint32_t pin_to_irq(int pin);
|
|
void irq_gsi_mask_unmask(uint32_t irq, bool mask);
|
|
void ioapic_set_rte(uint32_t irq, uint64_t rte);
|
|
void ioapic_get_rte(uint32_t irq, uint64_t *rte);
|
|
|
|
extern uint16_t legacy_irq_to_pin[];
|
|
extern uint16_t pic_ioapic_pin_map[];
|
|
#endif /* IOAPIC_H */
|