root/arch/powerpc/sysdev/ipic.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * IPIC private definitions and structure.
 *
 * Maintainer: Kumar Gala <galak@kernel.crashing.org>
 *
 * Copyright 2005 Freescale Semiconductor, Inc
 */
#ifndef __IPIC_H__
#define __IPIC_H__

#include <asm/ipic.h>

#define NR_IPIC_INTS 128

/* External IRQS */
#define IPIC_IRQ_EXT0 48
#define IPIC_IRQ_EXT1 17
#define IPIC_IRQ_EXT7 23

/* Default Priority Registers */
#define IPIC_PRIORITY_DEFAULT 0x05309770

/* System Global Interrupt Configuration Register */
#define SICFR_IPSA      0x00010000
#define SICFR_IPSB      0x00020000
#define SICFR_IPSC      0x00040000
#define SICFR_IPSD      0x00080000
#define SICFR_MPSA      0x00200000
#define SICFR_MPSB      0x00400000

/* System External Interrupt Mask Register */
#define SEMSR_SIRQ0     0x00008000

/* System Error Control Register */
#define SERCR_MCPR      0x00000001

struct ipic {
        volatile u32 __iomem    *regs;

        /* The remapper for this IPIC */
        struct irq_domain               *irqhost;
};

struct ipic_info {
        u8      ack;            /* pending register offset from base if the irq
                                   supports ack operation */
        u8      mask;           /* mask register offset from base */
        u8      prio;           /* priority register offset from base */
        u8      force;          /* force register offset from base */
        u8      bit;            /* register bit position (as per doc)
                                   bit mask = 1 << (31 - bit) */
        u8      prio_mask;      /* priority mask value */
};

#endif /* __IPIC_H__ */