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

sparc64/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/interrupt.h>
#include <linux/malloc.h>
#include <linux/random.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/ptrace.h>
#include <asm/processor.h>
#include <asm/atomic.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/sbus.h>
#include <asm/iommu.h>
#include <asm/upa.h>
#include <asm/oplib.h>
#include <asm/timer.h>
#include <asm/smp.h>
#include <asm/hardirq.h>
#include <asm/softirq.h>

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

Go to the source code of this file.

Defines

#define SA_IMAP_MASKED   0x100
#define SA_DMA_SYNC   0x200
#define irq_work(__cpu, __pil)   &(__up_workvec[(__pil)])
#define MAX_STATIC_ALLOC   4
#define IBF_DMA_SYNC   0x01
#define IBF_PCI   0x02
#define IBF_ACTIVE   0x04
#define IBF_MULTI   0x08
#define __bucket(irq)   ((struct ino_bucket *)(unsigned long)(irq))
#define __irq(bucket)   ((unsigned int)(unsigned long)(bucket))
#define offset(x)   ((unsigned long)(&(((struct sysio_regs *)0)->x)))
#define bogon   ((unsigned long) -1)
#define NUM_SYSIO_OFFSETS   (sizeof(sysio_irq_offsets) / sizeof(sysio_irq_offsets[0]))
#define irq_enter(cpu, irq)   (local_irq_count++)
#define irq_exit(cpu, irq)   (local_irq_count--)
#define FORWARD_VOLUME   12
#define SPARC_BRANCH(dest_addr, inst_addr)   (0x10800000 | ((((dest_addr)-(inst_addr))>>2)&0x3fffff))
#define SPARC_NOP   (0x01000000)

Functions

ino_bucket ivector_table[NUM_IVECS] __attribute__ ((aligned(64)))
int get_irq_list (char *buf)
static unsigned int * sysio_imap_to_iclr (unsigned int *imap)
void enable_irq (unsigned int irq)
void disable_irq (unsigned int irq)
unsigned int build_irq (int pil, int inofixup, unsigned int *iclr, unsigned int *imap)
unsigned int sbus_build_irq (void *buscookie, unsigned int ino)
static void atomic_bucket_insert (struct ino_bucket *bucket)
int request_irq (unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *name, void *dev_id)
void free_irq (unsigned int irq, void *dev_id)
void catch_disabled_ivec (struct pt_regs *regs)
void handler_irq (int irq, struct pt_regs *regs)
static void install_fast_irq (unsigned int cpu_irq, void(*handler)(int, void *, struct pt_regs *))
int request_fast_irq (unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *name, void *dev_id)
unsigned long probe_irq_on (void)
int probe_irq_off (unsigned long mask)
void init_timers (void(*cfunc)(int, void *, struct pt_regs *), unsigned long *clock)
static void map_prom_timers (void)
static void kill_prom_timer (void)
void enable_prom_timer (void)
unsigned long __init init_IRQ (unsigned long memory)

Variables

static struct irqaction static_irqaction [MAX_STATIC_ALLOC]
static int static_irq_count = 0
irqactionirq_action [NR_IRQS+1]
unsigned char sysio_ino_to_pil []
static unsigned long sysio_irq_offsets []
static struct ino_bucket pil0_dummy_bucket
unsigned int local_irq_count
unsigned int local_bh_count
sun5_timerprom_timers
static u64 prom_limit0
static u64 prom_limit1


Define Documentation

#define __bucket irq   )     ((struct ino_bucket *)(unsigned long)(irq))
 

Definition at line 88 of file sparc64/kernel/irq.c.

Referenced by catch_disabled_ivec(), disable_irq(), enable_irq(), free_irq(), handler_irq(), request_fast_irq(), and request_irq().

#define __irq bucket   )     ((unsigned int)(unsigned long)(bucket))
 

Definition at line 89 of file sparc64/kernel/irq.c.

Referenced by atomic_bucket_insert(), build_irq(), and handler_irq().

#define bogon   ((unsigned long) -1)
 

Definition at line 158 of file sparc64/kernel/irq.c.

#define FORWARD_VOLUME   12
 

Definition at line 998 of file sparc64/kernel/irq.c.

Referenced by handler_irq().

#define IBF_ACTIVE   0x04
 

Definition at line 85 of file sparc64/kernel/irq.c.

Referenced by build_irq(), free_irq(), handler_irq(), request_fast_irq(), and request_irq().

#define IBF_DMA_SYNC   0x01
 

Definition at line 83 of file sparc64/kernel/irq.c.

Referenced by request_irq().

#define IBF_MULTI   0x08
 

Definition at line 86 of file sparc64/kernel/irq.c.

Referenced by free_irq(), handler_irq(), and request_irq().

#define IBF_PCI   0x02
 

Definition at line 84 of file sparc64/kernel/irq.c.

Referenced by request_irq().

#define irq_enter cpu,
irq   )     (local_irq_count++)
 

Definition at line 802 of file sparc64/kernel/irq.c.

#define irq_exit cpu,
irq   )     (local_irq_count--)
 

Definition at line 803 of file sparc64/kernel/irq.c.

#define irq_work __cpu,
__pil   )     &(__up_workvec[(__pil)])
 

Definition at line 64 of file sparc64/kernel/irq.c.

Referenced by atomic_bucket_insert(), catch_disabled_ivec(), and handler_irq().

#define MAX_STATIC_ALLOC   4
 

Definition at line 72 of file sparc64/kernel/irq.c.

#define NUM_SYSIO_OFFSETS   (sizeof(sysio_irq_offsets) / sizeof(sysio_irq_offsets[0]))
 

Definition at line 181 of file sparc64/kernel/irq.c.

#define offset x   )     ((unsigned long)(&(((struct sysio_regs *)0)->x)))
 

Definition at line 157 of file sparc64/kernel/irq.c.

#define SA_DMA_SYNC   0x200
 

Definition at line 41 of file sparc64/kernel/irq.c.

Referenced by request_irq().

#define SA_IMAP_MASKED   0x100
 

Definition at line 40 of file sparc64/kernel/irq.c.

Referenced by free_irq(), request_fast_irq(), and request_irq().

#define SPARC_BRANCH dest_addr,
inst_addr   )     (0x10800000 | ((((dest_addr)-(inst_addr))>>2)&0x3fffff))
 

Definition at line 1118 of file sparc64/kernel/irq.c.

Referenced by exceptionHandler(), and install_fast_irq().

#define SPARC_NOP   (0x01000000)
 

Definition at line 1121 of file sparc64/kernel/irq.c.

Referenced by exceptionHandler(), and install_fast_irq().


Function Documentation

struct ino_bucket ivector_table [NUM_IVECS] __attribute__ (aligned(64))   ) 
 

static void atomic_bucket_insert struct ino_bucket bucket  )  [static]
 

Definition at line 490 of file sparc64/kernel/irq.c.

References __asm__(), __irq, ino_bucket::irq_chain, irq_work, ino_bucket::pil, pstate, PSTATE_IE, and smp_processor_id.

Referenced by request_irq().

Here is the call graph for this function:

unsigned int build_irq int  pil,
int  inofixup,
unsigned int *  iclr,
unsigned int *  imap
 

Definition at line 309 of file sparc64/kernel/irq.c.

References __irq, ino_bucket::flags, IBF_ACTIVE, ino_bucket::iclr, ino_bucket::imap, ino_bucket::irq_info, ino_bucket::pil, prom_halt(), prom_printf, SYSIO_IMAP_IGN, and SYSIO_IMAP_INO.

Referenced by init_timers(), and sbus_build_irq().

Here is the call graph for this function:

void catch_disabled_ivec struct pt_regs regs  ) 
 

Definition at line 976 of file sparc64/kernel/irq.c.

References __bucket, irq_work, ino_bucket::pending, printk, smp_processor_id, and pt_regs::tpc.

void disable_irq unsigned int  irq  ) 
 

Definition at line 278 of file sparc64/kernel/irq.c.

References __bucket, disable_irq_nosync, ino_bucket::imap, and SYSIO_IMAP_VALID.

void enable_irq unsigned int  irq  ) 
 

Definition at line 242 of file sparc64/kernel/irq.c.

References __asm__(), __bucket, ASI_UPA_CONFIG, current, ino_bucket::imap, restore_flags, save_and_cli, starfire_translate(), SYSIO_IMAP_TID, SYSIO_IMAP_VALID, this_is_starfire, unmask_irq, and UPA_CONFIG_MID.

Here is the call graph for this function:

void enable_prom_timer void   ) 
 

Definition at line 1418 of file sparc64/kernel/irq.c.

References sun5_timer::count0, sun5_timer::count1, sun5_timer::limit0, and sun5_timer::limit1.

void free_irq unsigned int  irq,
void *  dev_id
 

Definition at line 683 of file sparc64/kernel/irq.c.

References __asm__(), __bucket, bp, caller, irqaction::dev_id, disable_irq, ino_bucket::flags, irqaction::flags, irqaction::handler, IBF_ACTIVE, IBF_MULTI, ino_bucket::imap, ino_bucket::irq_info, KERN_CRIT, kfree(), irqaction::name, irqaction::next, out, ino_bucket::pil, printk, restore_flags, SA_IMAP_MASKED, SA_SHIRQ, save_and_cli, and tmp.

Here is the call graph for this function:

int get_irq_list char *  buf  ) 
 

Definition at line 91 of file sparc64/kernel/irq.c.

References cpu_logical_map, irqaction::flags, i, kernel_stat::irqs, j, kstat, kstat_irqs(), len, irqaction::name, irqaction::next, NR_IRQS, p, SA_INTERRUPT, smp_num_cpus, and sprintf().

Here is the call graph for this function:

void handler_irq int  irq,
struct pt_regs regs
 

Definition at line 1000 of file sparc64/kernel/irq.c.

References __bucket, __irq, bp, clear_softint(), cpu_data, cpu_logical_map, cpu_number_map, current, irqaction::dev_id, ino_bucket::flags, FORWARD_VOLUME, get_softint(), irqaction::handler, IBF_ACTIVE, IBF_MULTI, ino_bucket::iclr, ino_bucket::imap, ino_bucket::irq_chain, irq_enter, irq_exit, ino_bucket::irq_info, irq_work, kernel_stat::irqs, kstat, NR_CPUS, ino_bucket::pending, ino_bucket::pil, smp_processor_id, SYSIO_ICLR_IDLE, SYSIO_IMAP_VALID, this_is_starfire, and xchg32().

Here is the call graph for this function:

unsigned long __init init_IRQ unsigned long  memory  ) 
 

Definition at line 1430 of file sparc64/kernel/irq.c.

References __asm__(), alpha_using_srm, clear_softint(), entInt, get_softint(), kill_prom_timer(), map_prom_timers(), memset, PSTATE_IE, srmcons_output, unregister_srm_console(), and wrent.

Here is the call graph for this function:

void init_timers void(*)(int, void *, struct pt_regs *)  cfunc,
unsigned long clock
 

Definition at line 1232 of file sparc64/kernel/irq.c.

References __asm__(), build_irq(), HZ, linux_cpus, prom_getint(), prom_halt(), prom_cpuinfo::prom_node, prom_printf, pstate, PSTATE_IE, request_irq(), SA_INTERRUPT, sti, and timer_tick_offset.

Here is the call graph for this function:

static void install_fast_irq unsigned int  cpu_irq,
void(*)(int, void *, struct pt_regs *)  handler
[static]
 

Definition at line 1123 of file sparc64/kernel/irq.c.

References __asm__(), long, sparc64_ttable_tl0, SPARC_BRANCH, and SPARC_NOP.

Referenced by request_fast_irq().

Here is the call graph for this function:

static void kill_prom_timer void   )  [static]
 

Definition at line 1391 of file sparc64/kernel/irq.c.

References __asm__(), ASI_INTR_RECEIVE, ASI_UDB_INTR_R, sun5_timer::limit0, and sun5_timer::limit1.

Referenced by init_IRQ().

Here is the call graph for this function:

static void map_prom_timers void   )  [static]
 

Definition at line 1365 of file sparc64/kernel/irq.c.

References long, prom_finddevice(), prom_getproperty(), and prom_printf.

Referenced by init_IRQ().

Here is the call graph for this function:

int probe_irq_off unsigned long  mask  ) 
 

Definition at line 1226 of file sparc64/kernel/irq.c.

References alpha_irq_mask, and ffz().

Here is the call graph for this function:

unsigned long probe_irq_on void   ) 
 

Definition at line 1221 of file sparc64/kernel/irq.c.

References ACTUAL_NR_IRQS, alpha_irq_mask, delay, enable_irq, HZ, irqs, jiffies, PROBE_MASK, and time_before.

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

Definition at line 1139 of file sparc64/kernel/irq.c.

References __asm__(), __bucket, caller, irqaction::dev_id, EBUSY, EINVAL, enable_irq, ENOMEM, ino_bucket::flags, irqaction::flags, irqaction::handler, IBF_ACTIVE, install_fast_irq(), ino_bucket::irq_info, KERN_CRIT, kmalloc(), long, irqaction::mask, irqaction::name, irqaction::next, panic(), ino_bucket::pil, printk, restore_flags, SA_IMAP_MASKED, SA_SHIRQ, and save_and_cli.

Here is the call graph for this function:

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

Definition at line 504 of file sparc64/kernel/irq.c.

References __asm__(), __bucket, atomic_bucket_insert(), caller, irqaction::dev_id, EBUSY, EINVAL, enable_irq, ENOMEM, irqaction::flags, ino_bucket::flags, irqaction::handler, IBF_ACTIVE, IBF_DMA_SYNC, IBF_MULTI, IBF_PCI, ino_bucket::irq_info, KERN_CRIT, kfree(), kmalloc(), long, irqaction::mask, irqaction::name, irqaction::next, ino_bucket::pending, ino_bucket::pil, printk, restore_flags, SA_DMA_SYNC, SA_IMAP_MASKED, SA_INTERRUPT, SA_SHIRQ, save_and_cli, set_softint(), and tmp.

Here is the call graph for this function:

unsigned int sbus_build_irq void *  buscookie,
unsigned int  ino
 

Definition at line 362 of file sparc64/kernel/irq.c.

References build_irq(), sysio_regs::iclr_slot0, sysio_regs::iclr_slot1, sysio_regs::iclr_slot2, sysio_regs::iclr_slot3, linux_sbus::iommu, long, offset, panic(), printk, sysio_imap_to_iclr(), and iommu_struct::sysio_regs.

Referenced by __initfunc().

Here is the call graph for this function:

static unsigned int* sysio_imap_to_iclr unsigned int *  imap  )  [static]
 

Definition at line 186 of file sparc64/kernel/irq.c.

References diff, long, and offset.

Referenced by sbus_build_irq().


Variable Documentation

struct irqaction* irq_action[NR_IRQS+1]
 

Initial value:

 {
          NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL,
          NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL
}

Definition at line 77 of file sparc64/kernel/irq.c.

unsigned int local_bh_count
 

Definition at line 800 of file sparc64/kernel/irq.c.

unsigned int local_irq_count
 

Definition at line 799 of file sparc64/kernel/irq.c.

struct ino_bucket pil0_dummy_bucket [static]
 

Initial value:

 {
        0,      
        0,      
        0,      
        0,      
        0,      
        NULL,   
        NULL,   
        NULL,   
}

Definition at line 298 of file sparc64/kernel/irq.c.

u64 prom_limit0 [static]
 

Definition at line 1363 of file sparc64/kernel/irq.c.

u64 prom_limit1 [static]
 

Definition at line 1363 of file sparc64/kernel/irq.c.

struct sun5_timer* prom_timers
 

Definition at line 1362 of file sparc64/kernel/irq.c.

int static_irq_count = 0 [static]
 

Definition at line 74 of file sparc64/kernel/irq.c.

struct irqaction static_irqaction[MAX_STATIC_ALLOC] [static]
 

Definition at line 73 of file sparc64/kernel/irq.c.

unsigned char sysio_ino_to_pil[]
 

Initial value:

 {
        0, 1, 2, 7, 5, 7, 8, 9,         
        0, 1, 2, 7, 5, 7, 8, 9,         
        0, 1, 2, 7, 5, 7, 8, 9,         
        0, 1, 2, 7, 5, 7, 8, 9,         
        3, 
        5, 
        8, 
        0, 
       13, 
15, 
        0, 
        0, 
       12, 
       11, 
        0, 
        0, 
        0, 
        0, 
     0, 0, 
       10, 
       11, 
     0, 0, 
       15, 
       15, 
       15, 
 0, 
}

Definition at line 124 of file sparc64/kernel/irq.c.

unsigned long sysio_irq_offsets[] [static]
 

Initial value:

 {

offset(imap_slot0),offset(imap_slot0),offset(imap_slot0),offset(imap_slot0),
offset(imap_slot0),offset(imap_slot0),offset(imap_slot0),offset(imap_slot0),
offset(imap_slot1),offset(imap_slot1),offset(imap_slot1),offset(imap_slot1),
offset(imap_slot1),offset(imap_slot1),offset(imap_slot1),offset(imap_slot1),
offset(imap_slot2),offset(imap_slot2),offset(imap_slot2),offset(imap_slot2),
offset(imap_slot2),offset(imap_slot2),offset(imap_slot2),offset(imap_slot2),
offset(imap_slot3),offset(imap_slot3),offset(imap_slot3),offset(imap_slot3),
offset(imap_slot3),offset(imap_slot3),offset(imap_slot3),offset(imap_slot3),

offset(imap_scsi), offset(imap_eth), offset(imap_bpp), bogon,
offset(imap_audio), offset(imap_pfail), bogon, bogon,
offset(imap_kms), offset(imap_flpy), offset(imap_shw),
offset(imap_kbd), offset(imap_ms), offset(imap_ser), bogon, bogon,
offset(imap_tim0), offset(imap_tim1), bogon, bogon,
offset(imap_ue), offset(imap_ce), offset(imap_sberr),
offset(imap_pmgmt),
}

Definition at line 159 of file sparc64/kernel/irq.c.