next up previous
次へ: 割り込み処理の解除 上へ: 割り込み処理の実装 戻る: 割り込み処理の実装

割り込み処理の登録

request_irqの書式は、次のようになっている(L.D.D.3 264ページ)。
int request_irq(unsigned int irq, 
                void (*handler)(int, void *, struct pt_regs *),
                unsigned long flags,
                const char *dev_name,
                void *dev_id);

割り込み処理の登録を行なうためには、割り込み番号が必要である。この番号は 「PCIリソースの取得」の実験で扱ったIRQ番号である。この割り込み番号 を指定して、上記の書式に基づき次のようにrequest_irq関数を実行する。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}ret = request_irq(current_de...
...ler,
SA_SHIRQ, DRIVERNAME, (void *)&dio_res);\end{verbatim}
\end{boxedminipage}

第1引数には対応する割り込み番号を設定する。

第2引数には割り込み発生時に呼ばれる割り込みハンドラを指定する。

第3引数には割り込みハンドラの種類を示すフラグを設定する。ここでは、共有 割り込み(SA_SHIRQ)のフラグを指定する。

第4引数には割り込みの登録を行なうドライバの名前を指定する。

第5引数には、共有割り込みを設定したり、解除するときに必要となるユニーク な識別子を指定しなければならない。共有割り込みを解除するときには、同じ割 り込み番号に対して複数の割り込みハンドラが登録されている可能性があるので、 登録時に指定したユニークな値を解除時にも指定して他のものと区別する必要が ある。

また、第5引数の値はハンドラが呼び出されたときに引数として渡される ので、このドライバではハンドラ内でPCIリソースを参照できるように PCIリソースを格納した構造体のポインタをユニークな値として渡すこと にする。



MANOME Yoichi 平成19年1月6日