irq.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:30k
源码类别:

Linux/Unix编程

开发平台:

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