1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_INTERRUPT_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_INTERRUPT_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/kernel.h>
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/linkage.h>
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/bitops.h>
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/preempt.h>
19951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/cpumask.h>
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/irqreturn.h>
21951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/hardirq.h>
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/sched.h>
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/irqflags.h>
24951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/atomic.h>
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/ptrace.h>
26951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/system.h>
27951a39d68df598db08dfced8b4707755864a0492Ying Wang
28951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_NONE 0x00000000
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_RISING 0x00000001
30951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_FALLING 0x00000002
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_HIGH 0x00000004
32951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_LOW 0x00000008
33951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW |   IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TRIGGER_PROBE 0x00000010
35951a39d68df598db08dfced8b4707755864a0492Ying Wang
36951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_DISABLED 0x00000020
37951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_SAMPLE_RANDOM 0x00000040
38951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_SHARED 0x00000080
39951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_PROBE_SHARED 0x00000100
40951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_TIMER 0x00000200
41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IRQF_PERCPU 0x00000400
42951a39d68df598db08dfced8b4707755864a0492Ying Wang
43951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_INTERRUPT IRQF_DISABLED
44951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_SAMPLE_RANDOM IRQF_SAMPLE_RANDOM
45951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_SHIRQ IRQF_SHARED
46951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_PROBEIRQ IRQF_PROBE_SHARED
47951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_PERCPU IRQF_PERCPU
48951a39d68df598db08dfced8b4707755864a0492Ying Wang
49951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_TRIGGER_LOW IRQF_TRIGGER_LOW
50951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_TRIGGER_HIGH IRQF_TRIGGER_HIGH
51951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_TRIGGER_FALLING IRQF_TRIGGER_FALLING
52951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_TRIGGER_RISING IRQF_TRIGGER_RISING
53951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SA_TRIGGER_MASK IRQF_TRIGGER_MASK
54951a39d68df598db08dfced8b4707755864a0492Ying Wang
55951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct irqaction {
56951a39d68df598db08dfced8b4707755864a0492Ying Wang irqreturn_t (*handler)(int, void *, struct pt_regs *);
57951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned long flags;
58951a39d68df598db08dfced8b4707755864a0492Ying Wang cpumask_t mask;
59951a39d68df598db08dfced8b4707755864a0492Ying Wang const char *name;
60951a39d68df598db08dfced8b4707755864a0492Ying Wang void *dev_id;
61951a39d68df598db08dfced8b4707755864a0492Ying Wang struct irqaction *next;
62951a39d68df598db08dfced8b4707755864a0492Ying Wang int irq;
63951a39d68df598db08dfced8b4707755864a0492Ying Wang struct proc_dir_entry *dir;
64951a39d68df598db08dfced8b4707755864a0492Ying Wang};
65951a39d68df598db08dfced8b4707755864a0492Ying Wang
66951a39d68df598db08dfced8b4707755864a0492Ying Wang#define local_irq_enable_in_hardirq() local_irq_enable()
67951a39d68df598db08dfced8b4707755864a0492Ying Wang
68951a39d68df598db08dfced8b4707755864a0492Ying Wang#define disable_irq_nosync_lockdep(irq) disable_irq_nosync(irq)
69951a39d68df598db08dfced8b4707755864a0492Ying Wang#define disable_irq_lockdep(irq) disable_irq(irq)
70951a39d68df598db08dfced8b4707755864a0492Ying Wang#define enable_irq_lockdep(irq) enable_irq(irq)
71951a39d68df598db08dfced8b4707755864a0492Ying Wang
72951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef __ARCH_SET_SOFTIRQ_PENDING
73951a39d68df598db08dfced8b4707755864a0492Ying Wang#define set_softirq_pending(x) (local_softirq_pending() = (x))
74951a39d68df598db08dfced8b4707755864a0492Ying Wang#define or_softirq_pending(x) (local_softirq_pending() |= (x))
75951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
76951a39d68df598db08dfced8b4707755864a0492Ying Wang
77951a39d68df598db08dfced8b4707755864a0492Ying Wang#define save_flags(x) save_flags(&x)
78951a39d68df598db08dfced8b4707755864a0492Ying Wang#define save_and_cli(x) save_and_cli(&x)
79951a39d68df598db08dfced8b4707755864a0492Ying Wang
80951a39d68df598db08dfced8b4707755864a0492Ying Wangenum
81951a39d68df598db08dfced8b4707755864a0492Ying Wang{
82951a39d68df598db08dfced8b4707755864a0492Ying Wang HI_SOFTIRQ=0,
83951a39d68df598db08dfced8b4707755864a0492Ying Wang TIMER_SOFTIRQ,
84951a39d68df598db08dfced8b4707755864a0492Ying Wang NET_TX_SOFTIRQ,
85951a39d68df598db08dfced8b4707755864a0492Ying Wang NET_RX_SOFTIRQ,
86951a39d68df598db08dfced8b4707755864a0492Ying Wang BLOCK_SOFTIRQ,
87951a39d68df598db08dfced8b4707755864a0492Ying Wang TASKLET_SOFTIRQ
88951a39d68df598db08dfced8b4707755864a0492Ying Wang};
89951a39d68df598db08dfced8b4707755864a0492Ying Wang
90951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct softirq_action
91951a39d68df598db08dfced8b4707755864a0492Ying Wang{
92951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*action)(struct softirq_action *);
93951a39d68df598db08dfced8b4707755864a0492Ying Wang void *data;
94951a39d68df598db08dfced8b4707755864a0492Ying Wang};
95951a39d68df598db08dfced8b4707755864a0492Ying Wang
96951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
97951a39d68df598db08dfced8b4707755864a0492Ying Wang
98951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct tasklet_struct
99951a39d68df598db08dfced8b4707755864a0492Ying Wang{
100951a39d68df598db08dfced8b4707755864a0492Ying Wang struct tasklet_struct *next;
101951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned long state;
102951a39d68df598db08dfced8b4707755864a0492Ying Wang atomic_t count;
103951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*func)(unsigned long);
104951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned long data;
105951a39d68df598db08dfced8b4707755864a0492Ying Wang};
106951a39d68df598db08dfced8b4707755864a0492Ying Wang
107951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DECLARE_TASKLET(name, func, data)  struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data }
108951a39d68df598db08dfced8b4707755864a0492Ying Wang
109951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DECLARE_TASKLET_DISABLED(name, func, data)  struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data }
110951a39d68df598db08dfced8b4707755864a0492Ying Wang
111951a39d68df598db08dfced8b4707755864a0492Ying Wangenum
112951a39d68df598db08dfced8b4707755864a0492Ying Wang{
113951a39d68df598db08dfced8b4707755864a0492Ying Wang TASKLET_STATE_SCHED,
114951a39d68df598db08dfced8b4707755864a0492Ying Wang TASKLET_STATE_RUN
115951a39d68df598db08dfced8b4707755864a0492Ying Wang};
116951a39d68df598db08dfced8b4707755864a0492Ying Wang
117951a39d68df598db08dfced8b4707755864a0492Ying Wang#define tasklet_trylock(t) 1
118951a39d68df598db08dfced8b4707755864a0492Ying Wang#define tasklet_unlock_wait(t) do { } while (0)
119951a39d68df598db08dfced8b4707755864a0492Ying Wang#define tasklet_unlock(t) do { } while (0)
120951a39d68df598db08dfced8b4707755864a0492Ying Wang
121951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
122