Len Brown | 5229e87 | 2008-02-06 01:26:55 -0500 | [diff] [blame] | 1 | What: /sys/firmware/acpi/interrupts/ |
| 2 | Date: February 2008 |
| 3 | Contact: Len Brown <lenb@kernel.org> |
| 4 | Description: |
| 5 | All ACPI interrupts are handled via a single IRQ, |
| 6 | the System Control Interrupt (SCI), which appears |
| 7 | as "acpi" in /proc/interrupts. |
| 8 | |
| 9 | However, one of the main functions of ACPI is to make |
| 10 | the platform understand random hardware without |
| 11 | special driver support. So while the SCI handles a few |
| 12 | well known (fixed feature) interrupts sources, such |
| 13 | as the power button, it can also handle a variable |
| 14 | number of a "General Purpose Events" (GPE). |
| 15 | |
| 16 | A GPE vectors to a specified handler in AML, which |
| 17 | can do a anything the BIOS writer wants from |
| 18 | OS context. GPE 0x12, for example, would vector |
| 19 | to a level or edge handler called _L12 or _E12. |
| 20 | The handler may do its business and return. |
| 21 | Or the handler may send send a Notify event |
| 22 | to a Linux device driver registered on an ACPI device, |
| 23 | such as a battery, or a processor. |
| 24 | |
| 25 | To figure out where all the SCI's are coming from, |
| 26 | /sys/firmware/acpi/interrupts contains a file listing |
| 27 | every possible source, and the count of how many |
| 28 | times it has triggered. |
| 29 | |
| 30 | $ cd /sys/firmware/acpi/interrupts |
| 31 | $ grep . * |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 32 | error: 0 |
| 33 | ff_gbl_lock: 0 enable |
| 34 | ff_pmtimer: 0 invalid |
| 35 | ff_pwr_btn: 0 enable |
| 36 | ff_rt_clk: 2 disable |
| 37 | ff_slp_btn: 0 invalid |
| 38 | gpe00: 0 invalid |
| 39 | gpe01: 0 enable |
| 40 | gpe02: 108 enable |
| 41 | gpe03: 0 invalid |
| 42 | gpe04: 0 invalid |
| 43 | gpe05: 0 invalid |
| 44 | gpe06: 0 enable |
| 45 | gpe07: 0 enable |
| 46 | gpe08: 0 invalid |
| 47 | gpe09: 0 invalid |
| 48 | gpe0A: 0 invalid |
| 49 | gpe0B: 0 invalid |
| 50 | gpe0C: 0 invalid |
| 51 | gpe0D: 0 invalid |
| 52 | gpe0E: 0 invalid |
| 53 | gpe0F: 0 invalid |
| 54 | gpe10: 0 invalid |
| 55 | gpe11: 0 invalid |
| 56 | gpe12: 0 invalid |
| 57 | gpe13: 0 invalid |
| 58 | gpe14: 0 invalid |
| 59 | gpe15: 0 invalid |
| 60 | gpe16: 0 invalid |
| 61 | gpe17: 1084 enable |
| 62 | gpe18: 0 enable |
| 63 | gpe19: 0 invalid |
| 64 | gpe1A: 0 invalid |
| 65 | gpe1B: 0 invalid |
| 66 | gpe1C: 0 invalid |
| 67 | gpe1D: 0 invalid |
| 68 | gpe1E: 0 invalid |
| 69 | gpe1F: 0 invalid |
| 70 | gpe_all: 1192 |
| 71 | sci: 1194 |
Len Brown | 5229e87 | 2008-02-06 01:26:55 -0500 | [diff] [blame] | 72 | |
| 73 | sci - The total number of times the ACPI SCI |
| 74 | has claimed an interrupt. |
| 75 | |
| 76 | gpe_all - count of SCI caused by GPEs. |
| 77 | |
| 78 | gpeXX - count for individual GPE source |
| 79 | |
| 80 | ff_gbl_lock - Global Lock |
| 81 | |
| 82 | ff_pmtimer - PM Timer |
| 83 | |
| 84 | ff_pwr_btn - Power Button |
| 85 | |
| 86 | ff_rt_clk - Real Time Clock |
| 87 | |
| 88 | ff_slp_btn - Sleep Button |
| 89 | |
| 90 | error - an interrupt that can't be accounted for above. |
| 91 | |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 92 | invalid: it's either a GPE or a Fixed Event that |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 93 | doesn't have an event handler. |
| 94 | |
| 95 | disable: the GPE/Fixed Event is valid but disabled. |
| 96 | |
| 97 | enable: the GPE/Fixed Event is valid and enabled. |
| 98 | |
Len Brown | 5229e87 | 2008-02-06 01:26:55 -0500 | [diff] [blame] | 99 | Root has permission to clear any of these counters. Eg. |
| 100 | # echo 0 > gpe11 |
| 101 | |
| 102 | All counters can be cleared by clearing the total "sci": |
| 103 | # echo 0 > sci |
| 104 | |
| 105 | None of these counters has an effect on the function |
| 106 | of the system, they are simply statistics. |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 107 | |
| 108 | Besides this, user can also write specific strings to these files |
| 109 | to enable/disable/clear ACPI interrupts in user space, which can be |
| 110 | used to debug some ACPI interrupt storm issues. |
| 111 | |
| 112 | Note that only writting to VALID GPE/Fixed Event is allowed, |
| 113 | i.e. user can only change the status of runtime GPE and |
| 114 | Fixed Event with event handler installed. |
| 115 | |
| 116 | Let's take power button fixed event for example, please kill acpid |
| 117 | and other user space applications so that the machine won't shutdown |
| 118 | when pressing the power button. |
| 119 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 120 | 0 enabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 121 | # press the power button for 3 times; |
| 122 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 123 | 3 enabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 124 | # echo disable > ff_pwr_btn |
| 125 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 126 | 3 disabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 127 | # press the power button for 3 times; |
| 128 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 129 | 3 disabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 130 | # echo enable > ff_pwr_btn |
| 131 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 132 | 4 enabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 133 | /* |
| 134 | * this is because the status bit is set even if the enable bit is cleared, |
| 135 | * and it triggers an ACPI fixed event when the enable bit is set again |
| 136 | */ |
| 137 | # press the power button for 3 times; |
| 138 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 139 | 7 enabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 140 | # echo disable > ff_pwr_btn |
| 141 | # press the power button for 3 times; |
| 142 | # echo clear > ff_pwr_btn /* clear the status bit */ |
| 143 | # echo disable > ff_pwr_btn |
| 144 | # cat ff_pwr_btn |
Zhang Rui | ed206fa | 2008-10-27 14:01:02 -0700 | [diff] [blame] | 145 | 7 enabled |
Zhang Rui | 71b58cb | 2008-06-20 09:42:47 +0800 | [diff] [blame] | 146 | |