/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __LINUX_IRQCHIP_ARM_GIC_V3_PRIO_H
#define __LINUX_IRQCHIP_ARM_GIC_V3_PRIO_H
/*
* GIC priorities from the view of the PMR / RPR .
*
* These values are chosen to be valid in either the absolute priority space or
* the NS view of the priority space . The value programmed into the distributor
* and ITS will be chosen at boot time such that these values appear in the
* PMR / RPR .
*
* GICV3_PRIO_UNMASKED is the PMR view of the priority to use to permit both
* IRQs and pseudo - NMIs .
*
* GICV3_PRIO_IRQ is the PMR view of the priority of regular interrupts . This
* can be written to the PMR to mask regular IRQs .
*
* GICV3_PRIO_NMI is the PMR view of the priority of pseudo - NMIs . This can be
* written to the PMR to mask pseudo - NMIs .
*
* On arm64 some code sections either automatically switch back to PSR . I or
* explicitly require to not use priority masking . If bit GICV3_PRIO_PSR_I_SET
* is included in the priority mask , it indicates that PSR . I should be set and
* interrupt disabling temporarily does not rely on IRQ priorities .
*/
#define GICV3_PRIO_UNMASKED 0 xe0
#define GICV3_PRIO_IRQ 0 xc0
#define GICV3_PRIO_NMI 0 x80
#define GICV3_PRIO_PSR_I_SET (1 << 4 )
#ifndef __ASSEMBLER__
#define __gicv3_prio_to_ns(p) (0 xff & ((p) << 1 ))
#define __gicv3_ns_to_prio(ns) (0 x80 | ((ns) >> 1 ))
#define __gicv3_prio_valid_ns(p) \
(__gicv3_ns_to_prio(__gicv3_prio_to_ns(p)) == (p))
static_assert(__gicv3_prio_valid_ns(GICV3_PRIO_NMI));
static_assert(__gicv3_prio_valid_ns(GICV3_PRIO_IRQ));
static_assert(GICV3_PRIO_NMI < GICV3_PRIO_IRQ);
static_assert(GICV3_PRIO_IRQ < GICV3_PRIO_UNMASKED);
static_assert(GICV3_PRIO_IRQ < (GICV3_PRIO_IRQ | GICV3_PRIO_PSR_I_SET));
#endif /* __ASSEMBLER */
#endif /* __LINUX_IRQCHIP_ARM_GIC_V3_PRIO_H */
Messung V0.5 in Prozent C=95 H=95 G=94
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland