int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)
irqflags參數(shù)說明:
一、以下標(biāo)志對應(yīng)于linux/ioport.h中定義的IORESOURCE_IRQ_*來選擇中斷行行為。當(dāng)在沒有指定IRQF_TRIGGER的情況下請求中斷時(shí),設(shè)置應(yīng)該假定為“已配置”,這可能是根據(jù)每個(gè)機(jī)器或固件初始化而設(shè)置的。
#define IRQF_TRIGGER_NONE 0x00000000
#define IRQF_TRIGGER_RISING 0x00000001上升沿觸發(fā)中斷
#define IRQF_TRIGGER_FALLING 0x00000002下降沿觸發(fā)中斷
#define IRQF_TRIGGER_HIGH 0x00000004高電平觸發(fā)中斷
#define IRQF_TRIGGER_LOW 0x00000008低電平觸發(fā)中斷
#define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
#define IRQF_TRIGGER_PROBE 0x00000010
二、以下標(biāo)志只被內(nèi)核作為irq處理程序的一部分使用。
- IRQF_SHARED -允許在多個(gè)設(shè)備之間共享irq
- IRQF_PROBE_SHARED -當(dāng)調(diào)用者期望發(fā)生共享不匹配時(shí)設(shè)置
標(biāo)記這個(gè)中斷為定時(shí)器中斷 - IRQF_PERCPU -中斷是每個(gè)cpu
- IRQF_NOBALANCING -標(biāo)志從irq平衡中排除這個(gè)中斷
- IRQF_IRQPOLL——中斷用于輪詢(只有在共享中斷中首先注冊的中斷出于性能考慮)
IRQF_ONESHOT -中斷在hardirq處理結(jié)束后沒有重新啟用。
用于線程中斷,需要保持irq行禁用,直到線程處理程序已經(jīng)運(yùn)行。 - IRQF_NO_SUSPEND -不要在掛起期間禁用IRQ。不能保證此中斷將從掛起狀態(tài)喚醒系統(tǒng)。
- IRQF_FORCE_RESUME - Force enable it on resume即使設(shè)置了IRQF_NO_SUSPEND
IRQF_NO_THREAD中斷不能被線程化 - IRQF_EARLY_RESUME -在系統(tǒng)評分期間早期恢復(fù)IRQ,而不是在設(shè)備恢復(fù)時(shí)間。
- IRQF_COND_SUSPEND -如果IRQ與NO_SUSPEND用戶共享,在掛起中斷后執(zhí)行這個(gè)中斷處理程序。對于系統(tǒng)喚醒設(shè)備,用戶需要在其中斷處理程序中實(shí)現(xiàn)喚醒檢測。