irq.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:29k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/arch/ia64/kernel/irq.c
  3.  *
  4.  * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
  5.  *
  6.  * This file contains the code used by various IRQ handling routines:
  7.  * asking for different IRQ's should be done through these routines
  8.  * instead of just grabbing them. Thus setups with different IRQ numbers
  9.  * shouldn't result in any weird surprises, and installing new handlers
  10.  * should be easier.
  11.  */
  12. /*
  13.  * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
  14.  *
  15.  * IRQs are in fact implemented a bit like signal handlers for the kernel.
  16.  * Naturally it's not a 1:1 relation, but there are similarities.
  17.  */
  18. #include <linux/config.h>
  19. #include <linux/ptrace.h>
  20. #include <linux/errno.h>
  21. #include <linux/signal.h>
  22. #include <linux/sched.h>
  23. #include <linux/ioport.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/timex.h>
  26. #include <linux/slab.h>
  27. #include <linux/random.h>
  28. #include <linux/smp_lock.h>
  29. #include <linux/init.h>
  30. #include <linux/kernel_stat.h>
  31. #include <linux/irq.h>
  32. #include <linux/proc_fs.h>
  33. #include <asm/atomic.h>
  34. #include <asm/io.h>
  35. #include <asm/smp.h>
  36. #include <asm/system.h>
  37. #include <asm/bitops.h>
  38. #include <asm/uaccess.h>
  39. #include <asm/pgalloc.h>
  40. #include <asm/delay.h>
  41. #include <asm/irq.h>
  42. /*
  43.  * Linux has a controller-independent x86 interrupt architecture.
  44.  * every controller has a 'controller-template', that is used
  45.  * by the main code to do the right thing. Each driver-visible
  46.  * interrupt source is transparently wired to the apropriate
  47.  * controller. Thus drivers need not be aware of the
  48.  * interrupt-controller.
  49.  *
  50.  * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
  51.  * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
  52.  * (IO-APICs assumed to be messaging to Pentium local-APICs)
  53.  *
  54.  * the code is designed to be easily extended with new/different
  55.  * interrupt controllers, without having to do assembly magic.
  56.  */
  57. /*
  58.  * Controller mappings for all interrupt sources:
  59.  */
  60. irq_desc_t _irq_desc[NR_IRQS] __cacheline_aligned =
  61. { [0 ... NR_IRQS-1] = { IRQ_DISABLED, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
  62. static void register_irq_proc (unsigned int irq);
  63. /*
  64.  * Special irq handlers.
  65.  */
  66. void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
  67. /*
  68.  * Generic no controller code
  69.  */
  70. static void enable_none(unsigned int irq) { }
  71. static unsigned int startup_none(unsigned int irq) { return 0; }
  72. static void disable_none(unsigned int irq) { }
  73. static void ack_none(unsigned int irq)
  74. {
  75. /*
  76.  * 'what should we do if we get a hw irq event on an illegal vector'.
  77.  * each architecture has to answer this themselves, it doesnt deserve
  78.  * a generic callback i think.
  79.  */
  80. #if CONFIG_X86
  81. printk("unexpected IRQ trap at vector %02xn", irq);
  82. #ifdef CONFIG_X86_LOCAL_APIC
  83. /*
  84.  * Currently unexpected vectors happen only on SMP and APIC.
  85.  * We _must_ ack these because every local APIC has only N
  86.  * irq slots per priority level, and a 'hanging, unacked' IRQ
  87.  * holds up an irq slot - in excessive cases (when multiple
  88.  * unexpected vectors occur) that might lock up the APIC
  89.  * completely.
  90.  */
  91. ack_APIC_irq();
  92. #endif
  93. #endif
  94. #if CONFIG_IA64
  95. printk("Unexpected irq vector 0x%x on CPU %u!n", irq, smp_processor_id());
  96. #endif
  97. }
  98. /* startup is the same as "enable", shutdown is same as "disable" */
  99. #define shutdown_none disable_none
  100. #define end_none enable_none
  101. struct hw_interrupt_type no_irq_type = {
  102. "none",
  103. startup_none,
  104. shutdown_none,
  105. enable_none,
  106. disable_none,
  107. ack_none,
  108. end_none
  109. };
  110. atomic_t irq_err_count;
  111. #if defined(CONFIG_X86) && defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  112. atomic_t irq_mis_count;
  113. #endif
  114. /*
  115.  * Generic, controller-independent functions:
  116.  */
  117. int get_irq_list(char *buf)
  118. {
  119. int i, j;
  120. struct irqaction * action;
  121. irq_desc_t *idesc;
  122. char *p = buf;
  123. p += sprintf(p, "           ");
  124. for (j=0; j<smp_num_cpus; j++)
  125. p += sprintf(p, "CPU%d       ",j);
  126. *p++ = 'n';
  127. for (i = 0 ; i < NR_IRQS ; i++) {
  128. idesc = irq_desc(i);
  129. action = idesc->action;
  130. if (!action)
  131. continue;
  132. p += sprintf(p, "%3d: ",i);
  133. #ifndef CONFIG_SMP
  134. p += sprintf(p, "%10u ", kstat_irqs(i));
  135. #else
  136. for (j = 0; j < smp_num_cpus; j++)
  137. p += sprintf(p, "%10u ",
  138. kstat.irqs[cpu_logical_map(j)][i]);
  139. #endif
  140. p += sprintf(p, " %14s", idesc->handler->typename);
  141. p += sprintf(p, "  %s", action->name);
  142. for (action=action->next; action; action = action->next)
  143. p += sprintf(p, ", %s", action->name);
  144. *p++ = 'n';
  145. }
  146. p += sprintf(p, "NMI: ");
  147. for (j = 0; j < smp_num_cpus; j++)
  148. p += sprintf(p, "%10u ",
  149. nmi_count(cpu_logical_map(j)));
  150. p += sprintf(p, "n");
  151. #if defined(CONFIG_SMP) && defined(CONFIG_X86)
  152. p += sprintf(p, "LOC: ");
  153. for (j = 0; j < smp_num_cpus; j++)
  154. p += sprintf(p, "%10u ",
  155. apic_timer_irqs[cpu_logical_map(j)]);
  156. p += sprintf(p, "n");
  157. #endif
  158. p += sprintf(p, "ERR: %10un", atomic_read(&irq_err_count));
  159. #if defined(CONFIG_X86) && defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  160. p += sprintf(p, "MIS: %10un", atomic_read(&irq_mis_count));
  161. #endif
  162. return p - buf;
  163. }
  164. /*
  165.  * Global interrupt locks for SMP. Allow interrupts to come in on any
  166.  * CPU, yet make cli/sti act globally to protect critical regions..
  167.  */
  168. #ifdef CONFIG_SMP
  169. unsigned int global_irq_holder = NO_PROC_ID;
  170. unsigned volatile long global_irq_lock; /* pedantic: long for set_bit --RR */
  171. extern void show_stack(unsigned long* esp);
  172. static void show(char * str)
  173. {
  174. int i;
  175. int cpu = smp_processor_id();
  176. printk("n%s, CPU %d:n", str, cpu);
  177. printk("irq:  %d [",irqs_running());
  178. for(i=0;i < smp_num_cpus;i++)
  179. printk(" %d",irq_count(i));
  180. printk(" ]nbh:   %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
  181. for(i=0;i < smp_num_cpus;i++)
  182. printk(" %d",bh_count(i));
  183. printk(" ]nStack dumps:");
  184. #if defined(CONFIG_IA64)
  185. /*
  186.  * We can't unwind the stack of another CPU without access to
  187.  * the registers of that CPU.  And sending an IPI when we're
  188.  * in a potentially wedged state doesn't sound like a smart
  189.  * idea.
  190.  */
  191. #elif defined(CONFIG_X86)
  192. for(i=0;i< smp_num_cpus;i++) {
  193. unsigned long esp;
  194. if(i==cpu)
  195. continue;
  196. printk("nCPU %d:",i);
  197. esp = init_tss[i].esp0;
  198. if(esp==NULL) {
  199. /* tss->esp0 is set to NULL in cpu_init(),
  200.  * it's initialized when the cpu returns to user
  201.  * space. -- manfreds
  202.  */
  203. printk(" <unknown> ");
  204. continue;
  205. }
  206. esp &= ~(THREAD_SIZE-1);
  207. esp += sizeof(struct task_struct);
  208. show_stack((void*)esp);
  209. }
  210. #else
  211. You lose...
  212. #endif
  213. printk("nCPU %d:",cpu);
  214. show_stack(NULL);
  215. printk("n");
  216. }
  217. #define MAXCOUNT 100000000
  218. /*
  219.  * I had a lockup scenario where a tight loop doing
  220.  * spin_unlock()/spin_lock() on CPU#1 was racing with
  221.  * spin_lock() on CPU#0. CPU#0 should have noticed spin_unlock(), but
  222.  * apparently the spin_unlock() information did not make it
  223.  * through to CPU#0 ... nasty, is this by design, do we have to limit
  224.  * 'memory update oscillation frequency' artificially like here?
  225.  *
  226.  * Such 'high frequency update' races can be avoided by careful design, but
  227.  * some of our major constructs like spinlocks use similar techniques,
  228.  * it would be nice to clarify this issue. Set this define to 0 if you
  229.  * want to check whether your system freezes.  I suspect the delay done
  230.  * by SYNC_OTHER_CORES() is in correlation with 'snooping latency', but
  231.  * i thought that such things are guaranteed by design, since we use
  232.  * the 'LOCK' prefix.
  233.  */
  234. #define SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND 0
  235. #if SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND
  236. # define SYNC_OTHER_CORES(x) udelay(x+1)
  237. #else
  238. /*
  239.  * We have to allow irqs to arrive between __sti and __cli
  240.  */
  241. # ifdef CONFIG_IA64
  242. #  define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop 0")
  243. # else
  244. #  define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop")
  245. # endif
  246. #endif
  247. static inline void wait_on_irq(void)
  248. {
  249. int count = MAXCOUNT;
  250. for (;;) {
  251. /*
  252.  * Wait until all interrupts are gone. Wait
  253.  * for bottom half handlers unless we're
  254.  * already executing in one..
  255.  */
  256. if (!irqs_running())
  257. if (local_bh_count() || !spin_is_locked(&global_bh_lock))
  258. break;
  259. /* Duh, we have to loop. Release the lock to avoid deadlocks */
  260. clear_bit(0,&global_irq_lock);
  261. for (;;) {
  262. if (!--count) {
  263. show("wait_on_irq");
  264. count = ~0;
  265. }
  266. __sti();
  267. SYNC_OTHER_CORES(smp_processor_id());
  268. __cli();
  269. if (irqs_running())
  270. continue;
  271. if (global_irq_lock)
  272. continue;
  273. if (!local_bh_count() && spin_is_locked(&global_bh_lock))
  274. continue;
  275. if (!test_and_set_bit(0,&global_irq_lock))
  276. break;
  277. }
  278. }
  279. }
  280. /*
  281.  * This is called when we want to synchronize with
  282.  * interrupts. We may for example tell a device to
  283.  * stop sending interrupts: but to make sure there
  284.  * are no interrupts that are executing on another
  285.  * CPU we need to call this function.
  286.  */
  287. void synchronize_irq(void)
  288. {
  289. if (irqs_running()) {
  290. /* Stupid approach */
  291. cli();
  292. sti();
  293. }
  294. }
  295. static inline void get_irqlock(void)
  296. {
  297. if (test_and_set_bit(0,&global_irq_lock)) {
  298. /* do we already hold the lock? */
  299. if (smp_processor_id() == global_irq_holder)
  300. return;
  301. /* Uhhuh.. Somebody else got it. Wait.. */
  302. do {
  303. do {
  304. #ifdef CONFIG_X86
  305. rep_nop();
  306. #endif
  307. } while (test_bit(0,&global_irq_lock));
  308. } while (test_and_set_bit(0,&global_irq_lock));
  309. }
  310. /*
  311.  * We also to make sure that nobody else is running
  312.  * in an interrupt context.
  313.  */
  314. wait_on_irq();
  315. /*
  316.  * Ok, finally..
  317.  */
  318. global_irq_holder = smp_processor_id();
  319. }
  320. #define EFLAGS_IF_SHIFT 9
  321. /*
  322.  * A global "cli()" while in an interrupt context
  323.  * turns into just a local cli(). Interrupts
  324.  * should use spinlocks for the (very unlikely)
  325.  * case that they ever want to protect against
  326.  * each other.
  327.  *
  328.  * If we already have local interrupts disabled,
  329.  * this will not turn a local disable into a
  330.  * global one (problems with spinlocks: this makes
  331.  * save_flags+cli+sti usable inside a spinlock).
  332.  */
  333. void __global_cli(void)
  334. {
  335. unsigned int flags;
  336. #ifdef CONFIG_IA64
  337. __save_flags(flags);
  338. if (flags & IA64_PSR_I) {
  339. __cli();
  340. if (!local_irq_count())
  341. get_irqlock();
  342. }
  343. #else
  344. __save_flags(flags);
  345. if (flags & (1 << EFLAGS_IF_SHIFT)) {
  346. __cli();
  347. if (!local_irq_count())
  348. get_irqlock();
  349. }
  350. #endif
  351. }
  352. void __global_sti(void)
  353. {
  354. if (!local_irq_count())
  355. release_irqlock(smp_processor_id());
  356. __sti();
  357. }
  358. /*
  359.  * SMP flags value to restore to:
  360.  * 0 - global cli
  361.  * 1 - global sti
  362.  * 2 - local cli
  363.  * 3 - local sti
  364.  */
  365. unsigned long __global_save_flags(void)
  366. {
  367. int retval;
  368. int local_enabled;
  369. unsigned long flags;
  370. int cpu = smp_processor_id();
  371. __save_flags(flags);
  372. #ifdef CONFIG_IA64
  373. local_enabled = (flags & IA64_PSR_I) != 0;
  374. #else
  375. local_enabled = (flags >> EFLAGS_IF_SHIFT) & 1;
  376. #endif
  377. /* default to local */
  378. retval = 2 + local_enabled;
  379. /* check for global flags if we're not in an interrupt */
  380. if (!local_irq_count()) {
  381. if (local_enabled)
  382. retval = 1;
  383. if (global_irq_holder == cpu)
  384. retval = 0;
  385. }
  386. return retval;
  387. }
  388. void __global_restore_flags(unsigned long flags)
  389. {
  390. switch (flags) {
  391. case 0:
  392. __global_cli();
  393. break;
  394. case 1:
  395. __global_sti();
  396. break;
  397. case 2:
  398. __cli();
  399. break;
  400. case 3:
  401. __sti();
  402. break;
  403. default:
  404. printk("global_restore_flags: %08lx (%08lx)n",
  405. flags, (&flags)[-1]);
  406. }
  407. }
  408. #endif
  409. /*
  410.  * This should really return information about whether
  411.  * we should do bottom half handling etc. Right now we
  412.  * end up _always_ checking the bottom half, which is a
  413.  * waste of time and is not what some drivers would
  414.  * prefer.
  415.  */
  416. int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
  417. {
  418. int status;
  419. local_irq_enter(irq);
  420. status = 1; /* Force the "do bottom halves" bit */
  421. if (!(action->flags & SA_INTERRUPT))
  422. __sti();
  423. do {
  424. status |= action->flags;
  425. action->handler(irq, action->dev_id, regs);
  426. action = action->next;
  427. } while (action);
  428. if (status & SA_SAMPLE_RANDOM)
  429. add_interrupt_randomness(irq);
  430. __cli();
  431. local_irq_exit(irq);
  432. return status;
  433. }
  434. /**
  435.  * disable_irq_nosync - disable an irq without waiting
  436.  * @irq: Interrupt to disable
  437.  *
  438.  * Disable the selected interrupt line.  Disables and Enables are
  439.  * nested.
  440.  * Unlike disable_irq(), this function does not ensure existing
  441.  * instances of the IRQ handler have completed before returning.
  442.  *
  443.  * This function may be called from IRQ context.
  444.  */
  445. inline void disable_irq_nosync(unsigned int irq)
  446. {
  447. irq_desc_t *desc = irq_desc(irq);
  448. unsigned long flags;
  449. spin_lock_irqsave(&desc->lock, flags);
  450. if (!desc->depth++) {
  451. desc->status |= IRQ_DISABLED;
  452. desc->handler->disable(irq);
  453. }
  454. spin_unlock_irqrestore(&desc->lock, flags);
  455. }
  456. /**
  457.  * disable_irq - disable an irq and wait for completion
  458.  * @irq: Interrupt to disable
  459.  *
  460.  * Disable the selected interrupt line.  Enables and Disables are
  461.  * nested.
  462.  * This function waits for any pending IRQ handlers for this interrupt
  463.  * to complete before returning. If you use this function while
  464.  * holding a resource the IRQ handler may need you will deadlock.
  465.  *
  466.  * This function may be called - with care - from IRQ context.
  467.  */
  468. void disable_irq(unsigned int irq)
  469. {
  470. disable_irq_nosync(irq);
  471. #ifdef CONFIG_SMP
  472. if (!local_irq_count()) {
  473. do {
  474. barrier();
  475. } while (irq_desc(irq)->status & IRQ_INPROGRESS);
  476. }
  477. #endif
  478. }
  479. /**
  480.  * enable_irq - enable handling of an irq
  481.  * @irq: Interrupt to enable
  482.  *
  483.  * Undoes the effect of one call to disable_irq().  If this
  484.  * matches the last disable, processing of interrupts on this
  485.  * IRQ line is re-enabled.
  486.  *
  487.  * This function may be called from IRQ context.
  488.  */
  489. void enable_irq(unsigned int irq)
  490. {
  491. irq_desc_t *desc = irq_desc(irq);
  492. unsigned long flags;
  493. spin_lock_irqsave(&desc->lock, flags);
  494. switch (desc->depth) {
  495. case 1: {
  496. unsigned int status = desc->status & ~IRQ_DISABLED;
  497. desc->status = status;
  498. if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
  499. desc->status = status | IRQ_REPLAY;
  500. hw_resend_irq(desc->handler,irq);
  501. }
  502. desc->handler->enable(irq);
  503. /* fall-through */
  504. }
  505. default:
  506. desc->depth--;
  507. break;
  508. case 0:
  509. printk("enable_irq(%u) unbalanced from %pn",
  510.        irq, (void *) __builtin_return_address(0));
  511. }
  512. spin_unlock_irqrestore(&desc->lock, flags);
  513. }
  514. /*
  515.  * do_IRQ handles all normal device IRQ's (the special
  516.  * SMP cross-CPU interrupts have their own specific
  517.  * handlers).
  518.  */
  519. unsigned int do_IRQ(unsigned long irq, struct pt_regs *regs)
  520. {
  521. /*
  522.  * We ack quickly, we don't want the irq controller
  523.  * thinking we're snobs just because some other CPU has
  524.  * disabled global interrupts (we have already done the
  525.  * INT_ACK cycles, it's too late to try to pretend to the
  526.  * controller that we aren't taking the interrupt).
  527.  *
  528.  * 0 return value means that this irq is already being
  529.  * handled by some other CPU. (or is disabled)
  530.  */
  531. int cpu = smp_processor_id();
  532. irq_desc_t *desc = irq_desc(irq);
  533. struct irqaction * action;
  534. unsigned int status;
  535. kstat.irqs[cpu][irq]++;
  536. if (desc->status & IRQ_PER_CPU) {
  537. /* no locking required for CPU-local interrupts: */
  538. desc->handler->ack(irq);
  539. handle_IRQ_event(irq, regs, desc->action);
  540. desc->handler->end(irq);
  541. } else {
  542. spin_lock(&desc->lock);
  543. desc->handler->ack(irq);
  544. /*
  545.  * REPLAY is when Linux resends an IRQ that was dropped earlier
  546.  * WAITING is used by probe to mark irqs that are being tested
  547.  */
  548. status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
  549. status |= IRQ_PENDING; /* we _want_ to handle it */
  550. /*
  551.  * If the IRQ is disabled for whatever reason, we cannot
  552.  * use the action we have.
  553.  */
  554. action = NULL;
  555. if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
  556. action = desc->action;
  557. status &= ~IRQ_PENDING; /* we commit to handling */
  558. status |= IRQ_INPROGRESS; /* we are handling it */
  559. }
  560. desc->status = status;
  561. /*
  562.  * If there is no IRQ handler or it was disabled, exit early.
  563.  * Since we set PENDING, if another processor is handling
  564.  * a different instance of this same irq, the other processor
  565.  * will take care of it.
  566.  */
  567. if (!action)
  568. goto out;
  569. /*
  570.  * Edge triggered interrupts need to remember
  571.  * pending events.
  572.  * This applies to any hw interrupts that allow a second
  573.  * instance of the same irq to arrive while we are in do_IRQ
  574.  * or in the handler. But the code here only handles the _second_
  575.  * instance of the irq, not the third or fourth. So it is mostly
  576.  * useful for irq hardware that does not mask cleanly in an
  577.  * SMP environment.
  578.  */
  579. for (;;) {
  580. spin_unlock(&desc->lock);
  581. handle_IRQ_event(irq, regs, action);
  582. spin_lock(&desc->lock);
  583. if (!(desc->status & IRQ_PENDING))
  584. break;
  585. desc->status &= ~IRQ_PENDING;
  586. }
  587. desc->status &= ~IRQ_INPROGRESS;
  588.   out:
  589. /*
  590.  * The ->end() handler has to deal with interrupts which got
  591.  * disabled while the handler was running.
  592.  */
  593. desc->handler->end(irq);
  594. spin_unlock(&desc->lock);
  595. }
  596. return 1;
  597. }
  598. /**
  599.  * request_irq - allocate an interrupt line
  600.  * @irq: Interrupt line to allocate
  601.  * @handler: Function to be called when the IRQ occurs
  602.  * @irqflags: Interrupt type flags
  603.  * @devname: An ascii name for the claiming device
  604.  * @dev_id: A cookie passed back to the handler function
  605.  *
  606.  * This call allocates interrupt resources and enables the
  607.  * interrupt line and IRQ handling. From the point this
  608.  * call is made your handler function may be invoked. Since
  609.  * your handler function must clear any interrupt the board 
  610.  * raises, you must take care both to initialise your hardware
  611.  * and to set up the interrupt handler in the right order.
  612.  *
  613.  * Dev_id must be globally unique. Normally the address of the
  614.  * device data structure is used as the cookie. Since the handler
  615.  * receives this value it makes sense to use it.
  616.  *
  617.  * If your interrupt is shared you must pass a non NULL dev_id
  618.  * as this is required when freeing the interrupt.
  619.  *
  620.  * Flags:
  621.  *
  622.  * SA_SHIRQ Interrupt is shared
  623.  *
  624.  * SA_INTERRUPT Disable local interrupts while processing
  625.  *
  626.  * SA_SAMPLE_RANDOM The interrupt can be used for entropy
  627.  *
  628.  */
  629. int request_irq(unsigned int irq,
  630. void (*handler)(int, void *, struct pt_regs *),
  631. unsigned long irqflags,
  632. const char * devname,
  633. void *dev_id)
  634. {
  635. int retval;
  636. struct irqaction * action;
  637. #if 1
  638. /*
  639.  * Sanity-check: shared interrupts should REALLY pass in
  640.  * a real dev-ID, otherwise we'll have trouble later trying
  641.  * to figure out which interrupt is which (messes up the
  642.  * interrupt freeing logic etc).
  643.  */
  644. if (irqflags & SA_SHIRQ) {
  645. if (!dev_id)
  646. printk("Bad boy: %s called us without a dev_id!n", devname);
  647. }
  648. #endif
  649. if (irq >= NR_IRQS)
  650. return -EINVAL;
  651. if (!handler)
  652. return -EINVAL;
  653. action = (struct irqaction *)
  654. kmalloc(sizeof(struct irqaction), GFP_KERNEL);
  655. if (!action)
  656. return -ENOMEM;
  657. action->handler = handler;
  658. action->flags = irqflags;
  659. action->mask = 0;
  660. action->name = devname;
  661. action->next = NULL;
  662. action->dev_id = dev_id;
  663. retval = setup_irq(irq, action);
  664. if (retval)
  665. kfree(action);
  666. return retval;
  667. }
  668. /**
  669.  * free_irq - free an interrupt
  670.  * @irq: Interrupt line to free
  671.  * @dev_id: Device identity to free
  672.  *
  673.  * Remove an interrupt handler. The handler is removed and if the
  674.  * interrupt line is no longer in use by any driver it is disabled.
  675.  * On a shared IRQ the caller must ensure the interrupt is disabled
  676.  * on the card it drives before calling this function. The function
  677.  * does not return until any executing interrupts for this IRQ
  678.  * have completed.
  679.  *
  680.  * This function may be called from interrupt context. 
  681.  *
  682.  * Bugs: Attempting to free an irq in a handler for the same irq hangs
  683.  *       the machine.
  684.  */
  685. void free_irq(unsigned int irq, void *dev_id)
  686. {
  687. irq_desc_t *desc;
  688. struct irqaction **p;
  689. unsigned long flags;
  690. if (irq >= NR_IRQS)
  691. return;
  692. desc = irq_desc(irq);
  693. spin_lock_irqsave(&desc->lock,flags);
  694. p = &desc->action;
  695. for (;;) {
  696. struct irqaction * action = *p;
  697. if (action) {
  698. struct irqaction **pp = p;
  699. p = &action->next;
  700. if (action->dev_id != dev_id)
  701. continue;
  702. /* Found it - now remove it from the list of entries */
  703. *pp = action->next;
  704. if (!desc->action) {
  705. desc->status |= IRQ_DISABLED;
  706. desc->handler->shutdown(irq);
  707. }
  708. spin_unlock_irqrestore(&desc->lock,flags);
  709. #ifdef CONFIG_SMP
  710. /* Wait to make sure it's not being used on another CPU */
  711. while (desc->status & IRQ_INPROGRESS)
  712. barrier();
  713. #endif
  714. kfree(action);
  715. return;
  716. }
  717. printk("Trying to free free IRQ%dn",irq);
  718. spin_unlock_irqrestore(&desc->lock,flags);
  719. return;
  720. }
  721. }
  722. /*
  723.  * IRQ autodetection code..
  724.  *
  725.  * This depends on the fact that any interrupt that
  726.  * comes in on to an unassigned handler will get stuck
  727.  * with "IRQ_WAITING" cleared and the interrupt
  728.  * disabled.
  729.  */
  730. static DECLARE_MUTEX(probe_sem);
  731. /**
  732.  * probe_irq_on - begin an interrupt autodetect
  733.  *
  734.  * Commence probing for an interrupt. The interrupts are scanned
  735.  * and a mask of potential interrupt lines is returned.
  736.  *
  737.  */
  738. unsigned long probe_irq_on(void)
  739. {
  740. unsigned int i;
  741. irq_desc_t *desc;
  742. unsigned long val;
  743. unsigned long delay;
  744. down(&probe_sem);
  745. /*
  746.  * something may have generated an irq long ago and we want to
  747.  * flush such a longstanding irq before considering it as spurious.
  748.  */
  749. for (i = NR_IRQS-1; i > 0; i--)  {
  750. desc = irq_desc(i);
  751. spin_lock_irq(&desc->lock);
  752. if (!desc->action)
  753. desc->handler->startup(i);
  754. spin_unlock_irq(&desc->lock);
  755. }
  756. /* Wait for longstanding interrupts to trigger. */
  757. for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
  758. /* about 20ms delay */ synchronize_irq();
  759. /*
  760.  * enable any unassigned irqs
  761.  * (we must startup again here because if a longstanding irq
  762.  * happened in the previous stage, it may have masked itself)
  763.  */
  764. for (i = NR_IRQS-1; i > 0; i--) {
  765. desc = irq_desc(i);
  766. spin_lock_irq(&desc->lock);
  767. if (!desc->action) {
  768. desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
  769. if (desc->handler->startup(i))
  770. desc->status |= IRQ_PENDING;
  771. }
  772. spin_unlock_irq(&desc->lock);
  773. }
  774. /*
  775.  * Wait for spurious interrupts to trigger
  776.  */
  777. for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
  778. /* about 100ms delay */ synchronize_irq();
  779. /*
  780.  * Now filter out any obviously spurious interrupts
  781.  */
  782. val = 0;
  783. for (i = 0; i < NR_IRQS; i++) {
  784. irq_desc_t *desc = irq_desc(i);
  785. unsigned int status;
  786. spin_lock_irq(&desc->lock);
  787. status = desc->status;
  788. if (status & IRQ_AUTODETECT) {
  789. /* It triggered already - consider it spurious. */
  790. if (!(status & IRQ_WAITING)) {
  791. desc->status = status & ~IRQ_AUTODETECT;
  792. desc->handler->shutdown(i);
  793. } else
  794. if (i < 32)
  795. val |= 1 << i;
  796. }
  797. spin_unlock_irq(&desc->lock);
  798. }
  799. return val;
  800. }
  801. /**
  802.  * probe_irq_mask - scan a bitmap of interrupt lines
  803.  * @val: mask of interrupts to consider
  804.  *
  805.  * Scan the ISA bus interrupt lines and return a bitmap of
  806.  * active interrupts. The interrupt probe logic state is then
  807.  * returned to its previous value.
  808.  *
  809.  * Note: we need to scan all the irq's even though we will
  810.  * only return ISA irq numbers - just so that we reset them
  811.  * all to a known state.
  812.  */
  813. unsigned int probe_irq_mask(unsigned long val)
  814. {
  815. int i;
  816. unsigned int mask;
  817. mask = 0;
  818. for (i = 0; i < 16; i++) {
  819. irq_desc_t *desc = irq_desc(i);
  820. unsigned int status;
  821. spin_lock_irq(&desc->lock);
  822. status = desc->status;
  823. if (status & IRQ_AUTODETECT) {
  824. if (!(status & IRQ_WAITING))
  825. mask |= 1 << i;
  826. desc->status = status & ~IRQ_AUTODETECT;
  827. desc->handler->shutdown(i);
  828. }
  829. spin_unlock_irq(&desc->lock);
  830. }
  831. up(&probe_sem);
  832. return mask & val;
  833. }
  834. /**
  835.  * probe_irq_off - end an interrupt autodetect
  836.  * @val: mask of potential interrupts (unused)
  837.  *
  838.  * Scans the unused interrupt lines and returns the line which
  839.  * appears to have triggered the interrupt. If no interrupt was
  840.  * found then zero is returned. If more than one interrupt is
  841.  * found then minus the first candidate is returned to indicate
  842.  * their is doubt.
  843.  *
  844.  * The interrupt probe logic state is returned to its previous
  845.  * value.
  846.  *
  847.  * BUGS: When used in a module (which arguably shouldnt happen)
  848.  * nothing prevents two IRQ probe callers from overlapping. The
  849.  * results of this are non-optimal.
  850.  */
  851. int probe_irq_off(unsigned long val)
  852. {
  853. int i, irq_found, nr_irqs;
  854. nr_irqs = 0;
  855. irq_found = 0;
  856. for (i = 0; i < NR_IRQS; i++) {
  857. irq_desc_t *desc = irq_desc(i);
  858. unsigned int status;
  859. spin_lock_irq(&desc->lock);
  860. status = desc->status;
  861. if (status & IRQ_AUTODETECT) {
  862. if (!(status & IRQ_WAITING)) {
  863. if (!nr_irqs)
  864. irq_found = i;
  865. nr_irqs++;
  866. }
  867. desc->status = status & ~IRQ_AUTODETECT;
  868. desc->handler->shutdown(i);
  869. }
  870. spin_unlock_irq(&desc->lock);
  871. }
  872. up(&probe_sem);
  873. if (nr_irqs > 1)
  874. irq_found = -irq_found;
  875. return irq_found;
  876. }
  877. int setup_irq(unsigned int irq, struct irqaction * new)
  878. {
  879. int shared = 0;
  880. unsigned long flags;
  881. struct irqaction *old, **p;
  882. irq_desc_t *desc = irq_desc(irq);
  883. /*
  884.  * Some drivers like serial.c use request_irq() heavily,
  885.  * so we have to be careful not to interfere with a
  886.  * running system.
  887.  */
  888. if (new->flags & SA_SAMPLE_RANDOM) {
  889. /*
  890.  * This function might sleep, we want to call it first,
  891.  * outside of the atomic block.
  892.  * Yes, this might clear the entropy pool if the wrong
  893.  * driver is attempted to be loaded, without actually
  894.  * installing a new handler, but is this really a problem,
  895.  * only the sysadmin is able to do this.
  896.  */
  897. rand_initialize_irq(irq);
  898. }
  899. /*
  900.  * The following block of code has to be executed atomically
  901.  */
  902. spin_lock_irqsave(&desc->lock,flags);
  903. p = &desc->action;
  904. if ((old = *p) != NULL) {
  905. /* Can't share interrupts unless both agree to */
  906. if (!(old->flags & new->flags & SA_SHIRQ)) {
  907. spin_unlock_irqrestore(&desc->lock,flags);
  908. return -EBUSY;
  909. }
  910. /* add new interrupt at end of irq queue */
  911. do {
  912. p = &old->next;
  913. old = *p;
  914. } while (old);
  915. shared = 1;
  916. }
  917. *p = new;
  918. if (!shared) {
  919. desc->depth = 0;
  920. desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING);
  921. desc->handler->startup(irq);
  922. }
  923. spin_unlock_irqrestore(&desc->lock,flags);
  924. register_irq_proc(irq);
  925. return 0;
  926. }
  927. static struct proc_dir_entry * root_irq_dir;
  928. static struct proc_dir_entry * irq_dir [NR_IRQS];
  929. #define HEX_DIGITS 8
  930. static unsigned int parse_hex_value (const char *buffer,
  931. unsigned long count, unsigned long *ret)
  932. {
  933. unsigned char hexnum [HEX_DIGITS];
  934. unsigned long value;
  935. int i;
  936. if (!count)
  937. return -EINVAL;
  938. if (count > HEX_DIGITS)
  939. count = HEX_DIGITS;
  940. if (copy_from_user(hexnum, buffer, count))
  941. return -EFAULT;
  942. /*
  943.  * Parse the first 8 characters as a hex string, any non-hex char
  944.  * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
  945.  */
  946. value = 0;
  947. for (i = 0; i < count; i++) {
  948. unsigned int c = hexnum[i];
  949. switch (c) {
  950. case '0' ... '9': c -= '0'; break;
  951. case 'a' ... 'f': c -= 'a'-10; break;
  952. case 'A' ... 'F': c -= 'A'-10; break;
  953. default:
  954. goto out;
  955. }
  956. value = (value << 4) | c;
  957. }
  958. out:
  959. *ret = value;
  960. return 0;
  961. }
  962. #if CONFIG_SMP
  963. static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
  964. static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
  965. static int irq_affinity_read_proc (char *page, char **start, off_t off,
  966. int count, int *eof, void *data)
  967. {
  968. if (count < HEX_DIGITS+1)
  969. return -EINVAL;
  970. return sprintf (page, "%08lxn", irq_affinity[(long)data]);
  971. }
  972. static int irq_affinity_write_proc (struct file *file, const char *buffer,
  973. unsigned long count, void *data)
  974. {
  975. int irq = (long) data, full_count = count, err;
  976. unsigned long new_value;
  977. if (!irq_desc(irq)->handler->set_affinity)
  978. return -EIO;
  979. err = parse_hex_value(buffer, count, &new_value);
  980. /*
  981.  * Do not allow disabling IRQs completely - it's a too easy
  982.  * way to make the system unusable accidentally :-) At least
  983.  * one online CPU still has to be targeted.
  984.  */
  985. if (!(new_value & cpu_online_map))
  986. return -EINVAL;
  987. irq_affinity[irq] = new_value;
  988. irq_desc(irq)->handler->set_affinity(irq, new_value);
  989. return full_count;
  990. }
  991. #endif /* CONFIG_SMP */
  992. static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
  993. int count, int *eof, void *data)
  994. {
  995. unsigned long *mask = (unsigned long *) data;
  996. if (count < HEX_DIGITS+1)
  997. return -EINVAL;
  998. return sprintf (page, "%08lxn", *mask);
  999. }
  1000. static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
  1001. unsigned long count, void *data)
  1002. {
  1003. unsigned long *mask = (unsigned long *) data, full_count = count, err;
  1004. unsigned long new_value;
  1005. err = parse_hex_value(buffer, count, &new_value);
  1006. if (err)
  1007. return err;
  1008. *mask = new_value;
  1009. return full_count;
  1010. }
  1011. #define MAX_NAMELEN 10
  1012. static void register_irq_proc (unsigned int irq)
  1013. {
  1014. char name [MAX_NAMELEN];
  1015. if (!root_irq_dir || (irq_desc(irq)->handler == &no_irq_type))
  1016. return;
  1017. memset(name, 0, MAX_NAMELEN);
  1018. sprintf(name, "%d", irq);
  1019. /* create /proc/irq/1234 */
  1020. irq_dir[irq] = proc_mkdir(name, root_irq_dir);
  1021. #if CONFIG_SMP
  1022. {
  1023. struct proc_dir_entry *entry;
  1024. /* create /proc/irq/1234/smp_affinity */
  1025. entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
  1026. if (entry) {
  1027. entry->nlink = 1;
  1028. entry->data = (void *)(long)irq;
  1029. entry->read_proc = irq_affinity_read_proc;
  1030. entry->write_proc = irq_affinity_write_proc;
  1031. }
  1032. smp_affinity_entry[irq] = entry;
  1033. }
  1034. #endif
  1035. }
  1036. unsigned long prof_cpu_mask = -1;
  1037. void init_irq_proc (void)
  1038. {
  1039. struct proc_dir_entry *entry;
  1040. int i;
  1041. /* create /proc/irq */
  1042. root_irq_dir = proc_mkdir("irq", 0);
  1043. /* create /proc/irq/prof_cpu_mask */
  1044. entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
  1045. if (!entry)
  1046. return;
  1047. entry->nlink = 1;
  1048. entry->data = (void *)&prof_cpu_mask;
  1049. entry->read_proc = prof_cpu_mask_read_proc;
  1050. entry->write_proc = prof_cpu_mask_write_proc;
  1051. /*
  1052.  * Create entries for all existing IRQs.
  1053.  */
  1054. for (i = 0; i < NR_IRQS; i++) {
  1055. if (irq_desc(i)->handler == &no_irq_type)
  1056. continue;
  1057. register_irq_proc(i);
  1058. }
  1059. }