linux/arch/sh/kernel/irq_32.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * SHcompact irqflags support
   4 *
   5 * Copyright (C) 2006 - 2009 Paul Mundt
   6 */
   7#include <linux/irqflags.h>
   8#include <linux/module.h>
   9
  10void notrace arch_local_irq_restore(unsigned long flags)
  11{
  12        unsigned long __dummy0, __dummy1;
  13
  14        if (flags == ARCH_IRQ_DISABLED) {
  15                __asm__ __volatile__ (
  16                        "stc    sr, %0\n\t"
  17                        "or     #0xf0, %0\n\t"
  18                        "ldc    %0, sr\n\t"
  19                        : "=&z" (__dummy0)
  20                        : /* no inputs */
  21                        : "memory"
  22                );
  23        } else {
  24                __asm__ __volatile__ (
  25                        "stc    sr, %0\n\t"
  26                        "and    %1, %0\n\t"
  27#ifdef CONFIG_CPU_HAS_SR_RB
  28                        "stc    r6_bank, %1\n\t"
  29                        "or     %1, %0\n\t"
  30#endif
  31                        "ldc    %0, sr\n\t"
  32                        : "=&r" (__dummy0), "=r" (__dummy1)
  33                        : "1" (~ARCH_IRQ_DISABLED)
  34                        : "memory"
  35                );
  36        }
  37}
  38EXPORT_SYMBOL(arch_local_irq_restore);
  39
  40unsigned long notrace arch_local_save_flags(void)
  41{
  42        unsigned long flags;
  43
  44        __asm__ __volatile__ (
  45                "stc    sr, %0\n\t"
  46                "and    #0xf0, %0\n\t"
  47                : "=&z" (flags)
  48                : /* no inputs */
  49                : "memory"
  50        );
  51
  52        return flags;
  53}
  54EXPORT_SYMBOL(arch_local_save_flags);
  55