cregit-Linux how code gets into the kernel

Release 4.14 arch/mips/dec/kn02-irq.c

Directory: arch/mips/dec
/*
 *      DECstation 5000/200 (KN02) Control and Status Register
 *      interrupts.
 *
 *      Copyright (c) 2002, 2003, 2005  Maciej W. Rozycki
 *
 *      This program is free software; you can redistribute it and/or
 *      modify it under the terms of the GNU General Public License
 *      as published by the Free Software Foundation; either version
 *      2 of the License, or (at your option) any later version.
 */

#include <linux/init.h>
#include <linux/irq.h>
#include <linux/types.h>

#include <asm/dec/kn02.h>


/*
 * Bits 7:0 of the Control Register are write-only -- the
 * corresponding bits of the Status Register have a different
 * meaning.  Hence we use a cache.  It speeds up things a bit
 * as well.
 *
 * There is no default value -- it has to be initialized.
 */

u32 cached_kn02_csr;


static int kn02_irq_base;


static void unmask_kn02_irq(struct irq_data *d) { volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE + KN02_CSR); cached_kn02_csr |= (1 << (d->irq - kn02_irq_base + 16)); *csr = cached_kn02_csr; }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle3775.51%133.33%
Thomas Gleixner612.24%133.33%
Maciej W. Rozycki612.24%133.33%
Total49100.00%3100.00%


static void mask_kn02_irq(struct irq_data *d) { volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE + KN02_CSR); cached_kn02_csr &= ~(1 << (d->irq - kn02_irq_base + 16)); *csr = cached_kn02_csr; }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle3876.00%133.33%
Maciej W. Rozycki612.00%133.33%
Thomas Gleixner612.00%133.33%
Total50100.00%3100.00%


static void ack_kn02_irq(struct irq_data *d) { mask_kn02_irq(d); iob(); }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle1473.68%150.00%
Thomas Gleixner526.32%150.00%
Total19100.00%2100.00%

static struct irq_chip kn02_irq_type = { .name = "KN02-CSR", .irq_ack = ack_kn02_irq, .irq_mask = mask_kn02_irq, .irq_mask_ack = ack_kn02_irq, .irq_unmask = unmask_kn02_irq, };
void __init init_kn02_irqs(int base) { volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE + KN02_CSR); int i; /* Mask interrupts. */ cached_kn02_csr &= ~KN02_CSR_IOINTEN; *csr = cached_kn02_csr; iob(); for (i = base; i < base + KN02_IRQ_LINES; i++) irq_set_chip_and_handler(i, &kn02_irq_type, handle_level_irq); kn02_irq_base = base; }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle5981.94%116.67%
Maciej W. Rozycki79.72%233.33%
Atsushi Nemoto56.94%233.33%
Thomas Gleixner11.39%116.67%
Total72100.00%6100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle19279.01%330.00%
Thomas Gleixner229.05%220.00%
Maciej W. Rozycki197.82%220.00%
Atsushi Nemoto104.12%330.00%
Total243100.00%10100.00%
Directory: arch/mips/dec
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.