cregit-Linux how code gets into the kernel

Release 4.14 arch/sh/kernel/cpu/irq/imask.c

// SPDX-License-Identifier: GPL-2.0
/*
 * arch/sh/kernel/cpu/irq/imask.c
 *
 * Copyright (C) 1999, 2000  Niibe Yutaka
 *
 * Simple interrupt handling using IMASK of SR register.
 *
 */
/* NOTE: Will not work on level 15 */
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/bitops.h>
#include <linux/spinlock.h>
#include <linux/cache.h>
#include <linux/irq.h>
#include <linux/bitmap.h>
#include <asm/irq.h>

/* Bitmap of IRQ masked */

#define IMASK_PRIORITY	15

static DECLARE_BITMAP(imask_mask, IMASK_PRIORITY);

static int interrupt_priority;


static inline void set_interrupt_registers(int ip) { unsigned long __dummy; asm volatile( #ifdef CONFIG_CPU_HAS_SR_RB "ldc %2, r6_bank\n\t" #endif "stc sr, %0\n\t" "and #0xf0, %0\n\t" "shlr2 %0\n\t" "cmp/eq #0x3c, %0\n\t" "bt/s 1f ! CLI-ed\n\t" " stc sr, %0\n\t" "and %1, %0\n\t" "or %2, %0\n\t" "ldc %0, sr\n" "1:" : "=&z" (__dummy) : "r" (~0xf0), "r" (ip << 4) : "t"); }

Contributors

PersonTokensPropCommitsCommitProp
Paul Mundt1666.67%266.67%
Yoshinori Sato833.33%133.33%
Total24100.00%3100.00%


static void mask_imask_irq(struct irq_data *data) { unsigned int irq = data->irq; clear_bit(irq, imask_mask); if (interrupt_priority < IMASK_PRIORITY - irq) interrupt_priority = IMASK_PRIORITY - irq; set_interrupt_registers(interrupt_priority); }

Contributors

PersonTokensPropCommitsCommitProp
Paul Mundt45100.00%3100.00%
Total45100.00%3100.00%


static void unmask_imask_irq(struct irq_data *data) { unsigned int irq = data->irq; set_bit(irq, imask_mask); interrupt_priority = IMASK_PRIORITY - find_first_zero_bit(imask_mask, IMASK_PRIORITY); set_interrupt_registers(interrupt_priority); }

Contributors

PersonTokensPropCommitsCommitProp
Paul Mundt42100.00%3100.00%
Total42100.00%3100.00%

static struct irq_chip imask_irq_chip = { .name = "SR.IMASK", .irq_mask = mask_imask_irq, .irq_unmask = unmask_imask_irq, .irq_mask_ack = mask_imask_irq, };
void make_imask_irq(unsigned int irq) { irq_set_chip_and_handler_name(irq, &imask_irq_chip, handle_level_irq, "level"); }

Contributors

PersonTokensPropCommitsCommitProp
Paul Mundt2095.24%266.67%
Thomas Gleixner14.76%133.33%
Total21100.00%3100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Paul Mundt20694.50%444.44%
Yoshinori Sato83.67%111.11%
Thomas Gleixner20.92%222.22%
Adrian Bunk10.46%111.11%
Greg Kroah-Hartman10.46%111.11%
Total218100.00%9100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.