cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dn_ints.c (1080B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/interrupt.h>
      3#include <linux/irq.h>
      4
      5#include <asm/traps.h>
      6#include <asm/apollohw.h>
      7
      8unsigned int apollo_irq_startup(struct irq_data *data)
      9{
     10	unsigned int irq = data->irq;
     11
     12	if (irq < 8)
     13		*(volatile unsigned char *)(pica+1) &= ~(1 << irq);
     14	else
     15		*(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
     16	return 0;
     17}
     18
     19void apollo_irq_shutdown(struct irq_data *data)
     20{
     21	unsigned int irq = data->irq;
     22
     23	if (irq < 8)
     24		*(volatile unsigned char *)(pica+1) |= (1 << irq);
     25	else
     26		*(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
     27}
     28
     29void apollo_irq_eoi(struct irq_data *data)
     30{
     31	*(volatile unsigned char *)(pica) = 0x20;
     32	*(volatile unsigned char *)(picb) = 0x20;
     33}
     34
     35static struct irq_chip apollo_irq_chip = {
     36	.name           = "apollo",
     37	.irq_startup    = apollo_irq_startup,
     38	.irq_shutdown   = apollo_irq_shutdown,
     39	.irq_eoi	= apollo_irq_eoi,
     40};
     41
     42
     43void __init dn_init_IRQ(void)
     44{
     45	m68k_setup_user_interrupt(VEC_USER + 96, 16);
     46	m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq,
     47				  IRQ_APOLLO, 16);
     48}