[Q]
IRQ の変更をしたいのですが、 /etc/sysconfig/pcmcia の irq_mask の値の計算方法がわかりません。

[A]
irq_mask は割り当て可能な IRQ のビットパターンで、 ビット 0 が IRQ 0,ビット 15 が IRQ 15 に相当し、 irq_mask のビットがたっている IRQ が PCMCIA カードが使用できるものになります。
irq_mask は 16 進数で与えることになっており、 0x0e40 や 0x0c40 のはじめについている 0x が 16 進数であることをあらわしています。

さて具体例をだして説明しますと、 まずどの IRQ を使用できるようにしたいかを決めます。
次に、使用したい IRQ にビットが立っているというのを 2 進数であらわします。
IRQ との対応は、一番左が IRQ=15, 一番右が IRQ=0 というような順になりますので、
IRQ=11,10,9,6 を使用できるようにするにはこれらのビットをたてれば良く、
0000111001000000
となります。
また、IRQ=11,10,6 を使用できるようにする場合には、
0000110001000000
となります。

次に、この 2 進数を irq_mask に代入できるように 16 進数に直します。
ここでは、まずなじみのある 10 進数へ変換し、 そのあと 16 進数に直すという方法をとってみましょう。

IRQ=11,10,9,6 を使用する場合には、
0000111001000000 = 1*2^11 + 1*2^10 + 1*2^9 + 1*2^6 = 2048 + 1024 + 512 + 64 = 3648
IRQ=11,10,6 を使用する場合には
0000110001000000 = 1*2^11 + 1*2^10 + 1*2^6 = 2048 + 1024 + 64 = 3136
となります。
さて、これを 16 進数に直すわけですが、
16^0 = 1
16~1 = 16
16^2 = 256
16^3 = 4096
を使うと、
3648 = 14*16^2 + 4*16^1 = 0x0e40
3136 = 12*16^2 + 4*16^1 = 0x0c40
となります。

結局、IRQ=11,10,9,6 を使用する場合の irq_mask は
irq_mask = 0x0e40
IRQ=11,10,6 の場合は
irq_mask = 0xc40
と与えてやれば良いことになりますがいかがでしょうか?



戻る