Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

i386/kernel/irq.c File Reference

#include <linux/config.h>
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/timex.h>
#include <linux/malloc.h>
#include <linux/random.h>
#include <linux/smp.h>
#include <linux/tasks.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/bitops.h>
#include <asm/smp.h>
#include <asm/pgtable.h>
#include <asm/delay.h>
#include <asm/desc.h>
#include "irq.h"

Include dependency graph for i386/kernel/irq.c:

Go to the source code of this file.

Defines

#define startup_none   enable_none
#define shutdown_none   disable_none
#define startup_8259A_irq   enable_8259A_irq
#define shutdown_8259A_irq   disable_8259A_irq
#define __byte(x, y)   (((unsigned char *)&(y))[x])
#define cached_21   (__byte(0,cached_irq_mask))
#define cached_A1   (__byte(1,cached_irq_mask))
#define BI(x, y)   BUILD_IRQ(##x##y)
#define BUILD_16_IRQS(x)
#define IRQ(x, y)   IRQ##x##y##_interrupt
#define IRQLIST_16(x)

Functions

static void do_none (unsigned int irq, struct pt_regs *regs)
static void enable_none (unsigned int irq)
static void disable_none (unsigned int irq)
static void do_8259A_IRQ (unsigned int irq, struct pt_regs *regs)
static void enable_8259A_irq (unsigned int irq)
void disable_8259A_irq (unsigned int irq)
int i8259A_irq_pending (unsigned int irq)
void make_8259A_irq (unsigned int irq)
static void mask_and_ack_8259A (unsigned int irq)
void no_action (int cpl, void *dev_id, struct pt_regs *regs)
static void math_error_irq (int cpl, void *dev_id, struct pt_regs *regs)
int get_irq_list (char *buf)
int handle_IRQ_event (unsigned int irq, struct pt_regs *regs, struct irqaction *action)
void disable_irq_nosync (unsigned int irq)
void disable_irq (unsigned int irq)
void enable_irq (unsigned int irq)
asmlinkage void do_IRQ (struct pt_regs regs)
int setup_x86_irq (unsigned int irq, struct irqaction *new)
int request_irq (unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *devname, void *dev_id)
void free_irq (unsigned int irq, void *dev_id)
unsigned long probe_irq_on (void)
int probe_irq_off (unsigned long unused)
void init_ISA_irqs (void)
unsigned long __init init_IRQ (unsigned long memory)

Variables

unsigned int local_bh_count [NR_CPUS]
unsigned int local_irq_count [NR_CPUS]
atomic_t nmi_counter
spinlock_t irq_controller_lock
hw_interrupt_type no_irq_type
static struct hw_interrupt_type i8259A_irq_type
irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = { [0 ... NR_IRQS-1] = { 0, &no_irq_type, }}
static unsigned int cached_irq_mask = 0xffff
unsigned long io_apic_irqs = 0
static void(* interrupt [NR_IRQS])(void)
static struct irqaction irq13 = { math_error_irq, 0, 0, "fpu", NULL, NULL }
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}


Define Documentation

#define __byte x,
y   )     (((unsigned char *)&(y))[x])
 

Definition at line 154 of file i386/kernel/irq.c.

#define BI x,
y   )     BUILD_IRQ(##x##y)
 

Definition at line 280 of file i386/kernel/irq.c.

Referenced by hpdca_ser_interrupt(), imsttfbcon_clear(), and ser_interrupt().

#define BUILD_16_IRQS x   ) 
 

Value:

BI(x,0) BI(x,1) BI(x,2) BI(x,3) \
        BI(x,4) BI(x,5) BI(x,6) BI(x,7) \
        BI(x,8) BI(x,9) BI(x,a) BI(x,b) \
        BI(x,c) BI(x,d) BI(x,e) BI(x,f)

Definition at line 283 of file i386/kernel/irq.c.

#define cached_21   (__byte(0,cached_irq_mask))
 

Definition at line 155 of file i386/kernel/irq.c.

Referenced by __initfunc(), disable_8259A_irq(), enable_8259A_irq(), i8259_init(), i8259_irq(), i8259_mask_and_ack_irq(), i8259_mask_irq(), i8259_set_irq_mask(), i8259_unmask_irq(), mask_and_ack_8259A(), mask_irq(), and unmask_irq().

#define cached_A1   (__byte(1,cached_irq_mask))
 

Definition at line 156 of file i386/kernel/irq.c.

Referenced by __initfunc(), disable_8259A_irq(), enable_8259A_irq(), i8259_init(), i8259_irq(), i8259_mask_and_ack_irq(), i8259_mask_irq(), i8259_set_irq_mask(), i8259_unmask_irq(), mask_and_ack_8259A(), mask_irq(), and unmask_irq().

#define IRQ x,
y   )     IRQ##x##y##_interrupt
 

Definition at line 339 of file i386/kernel/irq.c.

Referenced by lp486e_probe(), and mcdx_intr().

#define IRQLIST_16 x   ) 
 

Value:

IRQ(x,0), IRQ(x,1), IRQ(x,2), IRQ(x,3), \
        IRQ(x,4), IRQ(x,5), IRQ(x,6), IRQ(x,7), \
        IRQ(x,8), IRQ(x,9), IRQ(x,a), IRQ(x,b), \
        IRQ(x,c), IRQ(x,d), IRQ(x,e), IRQ(x,f)

Definition at line 342 of file i386/kernel/irq.c.

#define shutdown_8259A_irq   disable_8259A_irq
 

Definition at line 128 of file i386/kernel/irq.c.

#define shutdown_none   disable_none
 

Definition at line 106 of file i386/kernel/irq.c.

#define startup_8259A_irq   enable_8259A_irq
 

Definition at line 127 of file i386/kernel/irq.c.

#define startup_none   enable_none
 

Definition at line 105 of file i386/kernel/irq.c.


Function Documentation

void disable_8259A_irq unsigned int  irq  ) 
 

Definition at line 173 of file i386/kernel/irq.c.

References cached_21, cached_A1, cached_irq_mask, mask, and outb.

Referenced by init_IO_APIC_traps(), and startup_edge_ioapic_irq().

void disable_irq unsigned int  irq  ) 
 

Definition at line 773 of file i386/kernel/irq.c.

References disable_irq_nosync, irq_desc, IRQ_INPROGRESS, local_irq_count, smp_processor_id, and status.

void disable_irq_nosync unsigned int  irq  ) 
 

Definition at line 757 of file i386/kernel/irq.c.

References depth, irq_desc, IRQ_DISABLED, spin_lock_irqsave, and spin_unlock_irqrestore.

static void disable_none unsigned int  irq  )  [static]
 

Definition at line 102 of file i386/kernel/irq.c.

Referenced by s390_free_irq().

static void do_8259A_IRQ unsigned int  irq,
struct pt_regs regs
[static]
 

Definition at line 233 of file i386/kernel/irq.c.

References irq_desc_t::action, enable_8259A_irq(), handle_IRQ_event(), irq_desc, IRQ_DISABLED, IRQ_INPROGRESS, IRQ_REPLAY, IRQ_WAITING, mask_and_ack_8259A(), NULL, spin_lock, spin_unlock, irq_desc_t::status, and status.

Here is the call graph for this function:

asmlinkage void do_IRQ struct pt_regs  regs  ) 
 

Definition at line 809 of file i386/kernel/irq.c.

References bh_active, bh_mask, do_bottom_half(), irq, irq_desc, kernel_stat::irqs, kstat, pt_regs::orig_eax, and smp_processor_id.

Here is the call graph for this function:

static void do_none unsigned int  irq,
struct pt_regs regs
[static]
 

Definition at line 76 of file i386/kernel/irq.c.

References ack_APIC_irq(), printk, and smp_processor_id.

Here is the call graph for this function:

static void enable_8259A_irq unsigned int  irq  )  [static]
 

Definition at line 184 of file i386/kernel/irq.c.

References cached_21, cached_A1, cached_irq_mask, mask, and outb.

Referenced by do_8259A_IRQ().

void enable_irq unsigned int  irq  ) 
 

Definition at line 784 of file i386/kernel/irq.c.

References depth, irq_desc, IRQ_DISABLED, printk, spin_lock_irqsave, and spin_unlock_irqrestore.

static void enable_none unsigned int  irq  )  [static]
 

Definition at line 101 of file i386/kernel/irq.c.

Referenced by s390_free_irq().

void free_irq unsigned int  irq,
void *  dev_id
 

Definition at line 926 of file i386/kernel/irq.c.

References irqaction::dev_id, irq_desc, IRQ_DISABLED, IRQ_INPROGRESS, kfree(), irqaction::next, NR_IRQS, NULL, out, p, printk, spin_lock_irqsave, spin_unlock_irqrestore, status, and udelay.

Here is the call graph for this function:

int get_irq_list char *  buf  ) 
 

Definition at line 403 of file i386/kernel/irq.c.

References irqdesc::action, atomic_read, cpu_logical_map, i, ipi_count, irq_desc, kernel_stat::irqs, j, kstat, kstat_irqs(), irqaction::name, irqaction::next, NR_IRQS, p, smp_num_cpus, and sprintf().

Here is the call graph for this function:

int handle_IRQ_event unsigned int  irq,
struct pt_regs regs,
struct irqaction action
 

Definition at line 724 of file i386/kernel/irq.c.

Referenced by do_8259A_IRQ(), do_cobalt_IRQ(), do_edge_ioapic_IRQ(), do_level_ioapic_IRQ(), and s390_setup_irq().

int i8259A_irq_pending unsigned int  irq  ) 
 

Definition at line 195 of file i386/kernel/irq.c.

References inb, mask, and x20.

Referenced by startup_edge_ioapic_irq().

unsigned long __init init_IRQ unsigned long  memory  ) 
 

Definition at line 1086 of file i386/kernel/irq.c.

References CALL_FUNCTION_VECTOR, FIRST_EXTERNAL_VECTOR, init_ISA_irqs(), init_VISWS_APIC_irqs(), interrupt, INVALIDATE_TLB_VECTOR, IRQ0_TRAP_VECTOR, LATCH, LOCAL_TIMER_VECTOR, NR_IRQS, outb, outb_p, request_region, RESCHEDULE_VECTOR, set_intr_gate(), setup_x86_irq(), SPURIOUS_APIC_VECTOR, STOP_CPU_VECTOR, SYSCALL_VECTOR, x20, x34, x40, x43, and xff.

Here is the call graph for this function:

void init_ISA_irqs void   ) 
 

Definition at line 1063 of file i386/kernel/irq.c.

References irqdesc::action, irq_desc, IRQ_DISABLED, and NR_IRQS.

Referenced by init_IRQ().

void make_8259A_irq unsigned int  irq  ) 
 

Definition at line 204 of file i386/kernel/irq.c.

References disable_irq_nosync, enable_irq, io_apic_irqs, and irq_desc.

Referenced by check_timer(), and init_IO_APIC_traps().

static void mask_and_ack_8259A unsigned int  irq  )  [inline, static]
 

Definition at line 218 of file i386/kernel/irq.c.

References cached_21, cached_A1, cached_irq_mask, inb, outb, x20, x60, and x62.

Referenced by do_8259A_IRQ().

static void math_error_irq int  cpl,
void *  dev_id,
struct pt_regs regs
[static]
 

Definition at line 382 of file i386/kernel/irq.c.

References boot_cpu_data, cpuinfo_x86::hard_math, ignore_irq13, math_error(), outb, and xF0.

Here is the call graph for this function:

void no_action int  cpl,
void *  dev_id,
struct pt_regs regs
 

Definition at line 367 of file i386/kernel/irq.c.

Referenced by i8259_init(), and openpic_init().

int probe_irq_off unsigned long  unused  ) 
 

Definition at line 1032 of file i386/kernel/irq.c.

References IRQ_AUTODETECT, irq_desc, IRQ_WAITING, NR_IRQS, printk, spin_lock_irq, spin_unlock_irq, and status.

unsigned long probe_irq_on void   ) 
 

Definition at line 972 of file i386/kernel/irq.c.

References delay, HZ, IRQ_AUTODETECT, irq_desc, IRQ_WAITING, jiffies, NR_IRQS, spin_lock_irq, spin_unlock_irq, status, synchronize_irq, and time_after.

int request_irq unsigned int  irq,
void(*)(int, void *, struct pt_regs *)  handler,
unsigned long  irqflags,
const char *  devname,
void *  dev_id
 

Definition at line 893 of file i386/kernel/irq.c.

References irqaction::dev_id, EINVAL, ENOMEM, irqaction::flags, irqaction::handler, kfree(), kmalloc(), irqaction::mask, irqaction::name, irqaction::next, NR_IRQS, NULL, and setup_x86_irq().

Here is the call graph for this function:

int setup_x86_irq unsigned int  irq,
struct irqaction new
 

Definition at line 839 of file i386/kernel/irq.c.

References irqdesc::action, EBUSY, irqaction::flags, irq_desc, IRQ_DISABLED, irqaction::next, NULL, p, rand_initialize_irq(), SA_SHIRQ, spin_lock_irqsave, and spin_unlock_irqrestore.

Referenced by __initfunc(), init_IRQ(), init_VISWS_APIC_irqs(), and request_irq().

Here is the call graph for this function:


Variable Documentation

irq_desc_t irq_desc [NR_IRQS] __cacheline_aligned = { [0 ... NR_IRQS-1] = { 0, &no_irq_type, }}
 

Definition at line 142 of file i386/kernel/irq.c.

unsigned int cached_irq_mask = 0xffff [static]
 

Definition at line 152 of file i386/kernel/irq.c.

Referenced by disable_8259A_irq(), enable_8259A_irq(), i8259_mask_and_ack_irq(), mask_and_ack_8259A(), mask_irq(), probe_irq_off(), probe_irq_on(), and unmask_irq().

struct hw_interrupt_type i8259A_irq_type [static]
 

Initial value:

Definition at line 130 of file i386/kernel/irq.c.

void(* interrupt[NR_IRQS])(void) [static]
 

Initial value:

 {
        IRQLIST_16(0x0),







}

Definition at line 348 of file i386/kernel/irq.c.

Referenced by advansys_interrupt(), cm206_interrupt(), do_int(), init_IRQ(), port_detect(), sc_exit(), sc_init(), setup_ports(), and ultrastor_14f_detect().

unsigned long io_apic_irqs = 0
 

Definition at line 167 of file i386/kernel/irq.c.

Referenced by make_8259A_irq(), setup_IO_APIC(), and smp_boot_cpus().

struct irqaction irq13 = { math_error_irq, 0, 0, "fpu", NULL, NULL } [static]
 

Definition at line 390 of file i386/kernel/irq.c.

struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL} [static]
 

Definition at line 396 of file i386/kernel/irq.c.

Referenced by __initfunc().

spinlock_t irq_controller_lock
 

Definition at line 71 of file i386/kernel/irq.c.

unsigned int local_bh_count[NR_CPUS]
 

Definition at line 45 of file i386/kernel/irq.c.

unsigned int local_irq_count[NR_CPUS]
 

Definition at line 46 of file i386/kernel/irq.c.

atomic_t nmi_counter
 

Definition at line 48 of file i386/kernel/irq.c.

Referenced by do_nmi().

struct hw_interrupt_type no_irq_type
 

Initial value:

Definition at line 108 of file i386/kernel/irq.c.

Referenced by init_IO_APIC_traps().