15229e87dSLen BrownWhat: /sys/firmware/acpi/interrupts/ 25229e87dSLen BrownDate: February 2008 35229e87dSLen BrownContact: Len Brown <lenb@kernel.org> 45229e87dSLen BrownDescription: 55229e87dSLen Brown All ACPI interrupts are handled via a single IRQ, 65229e87dSLen Brown the System Control Interrupt (SCI), which appears 75229e87dSLen Brown as "acpi" in /proc/interrupts. 85229e87dSLen Brown 95229e87dSLen Brown However, one of the main functions of ACPI is to make 105229e87dSLen Brown the platform understand random hardware without 115229e87dSLen Brown special driver support. So while the SCI handles a few 125229e87dSLen Brown well known (fixed feature) interrupts sources, such 135229e87dSLen Brown as the power button, it can also handle a variable 145229e87dSLen Brown number of a "General Purpose Events" (GPE). 155229e87dSLen Brown 165229e87dSLen Brown A GPE vectors to a specified handler in AML, which 175229e87dSLen Brown can do a anything the BIOS writer wants from 185229e87dSLen Brown OS context. GPE 0x12, for example, would vector 195229e87dSLen Brown to a level or edge handler called _L12 or _E12. 205229e87dSLen Brown The handler may do its business and return. 215229e87dSLen Brown Or the handler may send send a Notify event 225229e87dSLen Brown to a Linux device driver registered on an ACPI device, 235229e87dSLen Brown such as a battery, or a processor. 245229e87dSLen Brown 255229e87dSLen Brown To figure out where all the SCI's are coming from, 265229e87dSLen Brown /sys/firmware/acpi/interrupts contains a file listing 275229e87dSLen Brown every possible source, and the count of how many 285229e87dSLen Brown times it has triggered. 295229e87dSLen Brown 305229e87dSLen Brown $ cd /sys/firmware/acpi/interrupts 315229e87dSLen Brown $ grep . * 325229e87dSLen Brown error: 0 3371b58cbbSZhang Rui ff_gbl_lock: 0 enable 3471b58cbbSZhang Rui ff_pmtimer: 0 invalid 3571b58cbbSZhang Rui ff_pwr_btn: 0 enable 3671b58cbbSZhang Rui ff_rt_clk: 2 disable 3771b58cbbSZhang Rui ff_slp_btn: 0 invalid 3871b58cbbSZhang Rui gpe00: 0 invalid 3971b58cbbSZhang Rui gpe01: 0 enable 4071b58cbbSZhang Rui gpe02: 108 enable 4171b58cbbSZhang Rui gpe03: 0 invalid 4271b58cbbSZhang Rui gpe04: 0 invalid 4371b58cbbSZhang Rui gpe05: 0 invalid 4471b58cbbSZhang Rui gpe06: 0 enable 4571b58cbbSZhang Rui gpe07: 0 enable 4671b58cbbSZhang Rui gpe08: 0 invalid 4771b58cbbSZhang Rui gpe09: 0 invalid 4871b58cbbSZhang Rui gpe0A: 0 invalid 4971b58cbbSZhang Rui gpe0B: 0 invalid 5071b58cbbSZhang Rui gpe0C: 0 invalid 5171b58cbbSZhang Rui gpe0D: 0 invalid 5271b58cbbSZhang Rui gpe0E: 0 invalid 5371b58cbbSZhang Rui gpe0F: 0 invalid 5471b58cbbSZhang Rui gpe10: 0 invalid 5571b58cbbSZhang Rui gpe11: 0 invalid 5671b58cbbSZhang Rui gpe12: 0 invalid 5771b58cbbSZhang Rui gpe13: 0 invalid 5871b58cbbSZhang Rui gpe14: 0 invalid 5971b58cbbSZhang Rui gpe15: 0 invalid 6071b58cbbSZhang Rui gpe16: 0 invalid 6171b58cbbSZhang Rui gpe17: 1084 enable 6271b58cbbSZhang Rui gpe18: 0 enable 6371b58cbbSZhang Rui gpe19: 0 invalid 6471b58cbbSZhang Rui gpe1A: 0 invalid 6571b58cbbSZhang Rui gpe1B: 0 invalid 6671b58cbbSZhang Rui gpe1C: 0 invalid 6771b58cbbSZhang Rui gpe1D: 0 invalid 6871b58cbbSZhang Rui gpe1E: 0 invalid 6971b58cbbSZhang Rui gpe1F: 0 invalid 7071b58cbbSZhang Rui gpe_all: 1192 7171b58cbbSZhang Rui sci: 1194 725229e87dSLen Brown 735229e87dSLen Brown sci - The total number of times the ACPI SCI 745229e87dSLen Brown has claimed an interrupt. 755229e87dSLen Brown 765229e87dSLen Brown gpe_all - count of SCI caused by GPEs. 775229e87dSLen Brown 785229e87dSLen Brown gpeXX - count for individual GPE source 795229e87dSLen Brown 805229e87dSLen Brown ff_gbl_lock - Global Lock 815229e87dSLen Brown 825229e87dSLen Brown ff_pmtimer - PM Timer 835229e87dSLen Brown 845229e87dSLen Brown ff_pwr_btn - Power Button 855229e87dSLen Brown 865229e87dSLen Brown ff_rt_clk - Real Time Clock 875229e87dSLen Brown 885229e87dSLen Brown ff_slp_btn - Sleep Button 895229e87dSLen Brown 905229e87dSLen Brown error - an interrupt that can't be accounted for above. 915229e87dSLen Brown 92ed206facSZhang Rui invalid: it's either a GPE or a Fixed Event that 9371b58cbbSZhang Rui doesn't have an event handler. 9471b58cbbSZhang Rui 9571b58cbbSZhang Rui disable: the GPE/Fixed Event is valid but disabled. 9671b58cbbSZhang Rui 9771b58cbbSZhang Rui enable: the GPE/Fixed Event is valid and enabled. 9871b58cbbSZhang Rui 995229e87dSLen Brown Root has permission to clear any of these counters. Eg. 1005229e87dSLen Brown # echo 0 > gpe11 1015229e87dSLen Brown 1025229e87dSLen Brown All counters can be cleared by clearing the total "sci": 1035229e87dSLen Brown # echo 0 > sci 1045229e87dSLen Brown 1055229e87dSLen Brown None of these counters has an effect on the function 1065229e87dSLen Brown of the system, they are simply statistics. 10771b58cbbSZhang Rui 10871b58cbbSZhang Rui Besides this, user can also write specific strings to these files 10971b58cbbSZhang Rui to enable/disable/clear ACPI interrupts in user space, which can be 11071b58cbbSZhang Rui used to debug some ACPI interrupt storm issues. 11171b58cbbSZhang Rui 11271b58cbbSZhang Rui Note that only writting to VALID GPE/Fixed Event is allowed, 11371b58cbbSZhang Rui i.e. user can only change the status of runtime GPE and 11471b58cbbSZhang Rui Fixed Event with event handler installed. 11571b58cbbSZhang Rui 11671b58cbbSZhang Rui Let's take power button fixed event for example, please kill acpid 11771b58cbbSZhang Rui and other user space applications so that the machine won't shutdown 11871b58cbbSZhang Rui when pressing the power button. 11971b58cbbSZhang Rui # cat ff_pwr_btn 120ed206facSZhang Rui 0 enabled 12171b58cbbSZhang Rui # press the power button for 3 times; 12271b58cbbSZhang Rui # cat ff_pwr_btn 123ed206facSZhang Rui 3 enabled 12471b58cbbSZhang Rui # echo disable > ff_pwr_btn 12571b58cbbSZhang Rui # cat ff_pwr_btn 126ed206facSZhang Rui 3 disabled 12771b58cbbSZhang Rui # press the power button for 3 times; 12871b58cbbSZhang Rui # cat ff_pwr_btn 129ed206facSZhang Rui 3 disabled 13071b58cbbSZhang Rui # echo enable > ff_pwr_btn 13171b58cbbSZhang Rui # cat ff_pwr_btn 132ed206facSZhang Rui 4 enabled 13371b58cbbSZhang Rui /* 13471b58cbbSZhang Rui * this is because the status bit is set even if the enable bit is cleared, 13571b58cbbSZhang Rui * and it triggers an ACPI fixed event when the enable bit is set again 13671b58cbbSZhang Rui */ 13771b58cbbSZhang Rui # press the power button for 3 times; 13871b58cbbSZhang Rui # cat ff_pwr_btn 139ed206facSZhang Rui 7 enabled 14071b58cbbSZhang Rui # echo disable > ff_pwr_btn 14171b58cbbSZhang Rui # press the power button for 3 times; 14271b58cbbSZhang Rui # echo clear > ff_pwr_btn /* clear the status bit */ 14371b58cbbSZhang Rui # echo disable > ff_pwr_btn 14471b58cbbSZhang Rui # cat ff_pwr_btn 145ed206facSZhang Rui 7 enabled 14671b58cbbSZhang Rui 147