drivers/irqchip/irq-riscv-aplic-main.h

Source file repositories/reference/linux-study-clean/drivers/irqchip/irq-riscv-aplic-main.h

File Facts

System
Linux kernel
Corpus path
drivers/irqchip/irq-riscv-aplic-main.h
Extension
.h
Size
1735 bytes
Lines
73
Domain
Driver Families
Bucket
drivers/irqchip
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct aplic_msicfg {
	phys_addr_t		base_ppn;
	u32			hhxs;
	u32			hhxw;
	u32			lhxs;
	u32			lhxw;
};

struct aplic_src_ctrl {
	u32			sourcecfg;
	u32			target;
	u32			ie;
};

struct aplic_saved_regs {
	u32			domaincfg;
#ifdef CONFIG_RISCV_M_MODE
	u32			msiaddr;
	u32			msiaddrh;
#endif
	struct aplic_src_ctrl	*srcs;
};

struct aplic_priv {
	struct list_head	head;
	struct notifier_block	genpd_nb;
	struct aplic_saved_regs	saved_hw_regs;
	struct device		*dev;
	u32			gsi_base;
	u32			nr_irqs;
	u32			nr_idcs;
	u32			acpi_aplic_id;
	void __iomem		*regs;
	struct aplic_msicfg	msicfg;
};

void aplic_irq_unmask(struct irq_data *d);
void aplic_irq_mask(struct irq_data *d);
int aplic_irq_set_type(struct irq_data *d, unsigned int type);
int aplic_irqdomain_translate(struct irq_fwspec *fwspec, u32 gsi_base,
			      unsigned long *hwirq, unsigned int *type);
void aplic_init_hw_global(struct aplic_priv *priv, bool msi_mode);
int aplic_setup_priv(struct aplic_priv *priv, struct device *dev, void __iomem *regs);
void aplic_direct_restore_states(struct aplic_priv *priv);
int aplic_direct_setup(struct device *dev, void __iomem *regs);
#ifdef CONFIG_RISCV_APLIC_MSI
int aplic_msi_setup(struct device *dev, void __iomem *regs);
#else
static inline int aplic_msi_setup(struct device *dev, void __iomem *regs)
{
	return -ENODEV;
}
#endif

#endif

Annotation

Implementation Notes