Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * drivers/parisc/gsc.h
0004  * Declarations for functions in gsc.c
0005  * Copyright (c) 2000-2002 Helge Deller, Matthew Wilcox
0006  */
0007 
0008 #include <linux/interrupt.h>
0009 #include <asm/hardware.h>
0010 #include <asm/parisc-device.h>
0011 
0012 #define OFFSET_IRR 0x0000   /* Interrupt request register */
0013 #define OFFSET_IMR 0x0004   /* Interrupt mask register */
0014 #define OFFSET_IPR 0x0008   /* Interrupt pending register */
0015 #define OFFSET_ICR 0x000C   /* Interrupt control register */
0016 #define OFFSET_IAR 0x0010   /* Interrupt address register */
0017 
0018 /* PA I/O Architected devices support at least 5 bits in the EIM register. */
0019 #define GSC_EIM_WIDTH 5
0020 
0021 struct gsc_irq {
0022     unsigned long txn_addr; /* IRQ "target" */
0023     int txn_data;       /* HW "IRQ" */
0024     int irq;        /* virtual IRQ */
0025 };
0026 
0027 struct gsc_asic {
0028     struct parisc_device *gsc;
0029     unsigned long hpa;
0030     char *name;
0031     int version;
0032     int type;
0033     int eim;
0034     struct gsc_irq gsc_irq;
0035     int global_irq[32];
0036 };
0037 
0038 int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic);
0039 int gsc_alloc_irq(struct gsc_irq *dev);         /* dev needs an irq */
0040 int gsc_claim_irq(struct gsc_irq *dev, int irq);    /* dev needs this irq */
0041 int gsc_assign_irq(struct irq_chip *type, void *data);
0042 int gsc_find_local_irq(unsigned int irq, int *global_irq, int limit);
0043 void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl,
0044         void (*choose)(struct parisc_device *child, void *ctrl));
0045 void gsc_asic_assign_irq(struct gsc_asic *asic, int local_irq, int *irqp);
0046 
0047 irqreturn_t gsc_asic_intr(int irq, void *dev);