Cardbusデバイスの認識


ポイントイネーブラ

Cardbusに挿したeSATAカードやIEEE1394カードをPCIデバイスとして認識させて、適当というかいい加減にカード検知と一部のリソース割り当てを行うプログラムです。以下のPCILISTの結果では本体が山猫なので、パリティエラーが出てます(^^;たぶんソースを見ていただいたほうが何すればカードバスのPCカードがPCIデバイスとしてアクセスできるようになるか分かりやすいのではないかと考えます。fwcbena.asm

ノート機への対応

Ratoc REX-CBS52では電源供給だけでカードバスのカードが見えるようになるのに対し、98ノートではあれこれやってもカードが見えるようにならなかったので結構悩みました。まず、カードバス搭載機ではI/Oアドレス03E0h、03E1hでPower ControlおよびInterrupt and General Controlをしないといけないということのようです。また、TiのPCI1131はConfiguration registerの3Ehに40hを書き込んでから00hに戻す操作、つまりCardbus resetをかけないと駄目だということのようです。また、ノート機のPCI-BIOSは特殊で、PCI拡張ROMも読みに行かないし、最大バス番号0固定で設定不能なので、カードバスに挿したカードについてはINT 1Ah function 03hによるデバイス検索が不可能ということも分かりました。よって、場当たり的ではあるものの、INT 1Ahの引数BXを/P:0203のように指定できるようにしました。IEEE1394ASPIは割り込みを使わない仕様なので対応が楽だったので、こちらから先に公開します。なお、デバッグの都合があったのでDC00からカードバスのMMIO、DD00からIEEE1394OHCIのMMIOが出てきます。他のBIOSと被った場合動かない可能性があります。

ある種言い訳ですが、ノート機の場合起動デバイスとしてSATAが使えないこともあり、内蔵CD-ROMを換装する際にオンボードIDEに高性能なDVDマルチドライブを繋ぐのもオーバースペックなので、カードバス上段にUSBとIEEE1394コンボカード、下段にLANアダプタを繋いで使う、というのが結晶化の一つの形なんではと思っています。SATA対応もできればやりたいんですがねえ。

使用デバイス

cbenableで変更された点

PCILIST出力
[0]:[14]:[0] Cardbus-B  RICOH      3 [A] Yes Yes Yes Yes  No Yes  -   -   -   -
[1]:[ 0]     Storage    SiI.(CMD)  3 [A] Yes Yes Yes Yes  No Yes  -   -   -   8
PCILIST/B出力
[0]:[14]:[0] Cardbus-B   MEM=10000000h-240FFFFFh   I/O=0000h-0FFFh 
  ==> bus[1]             MEM=F0000000h-FFFFFFFFh (Prefetchable)
[0]:[14]:[1] Cardbus-B   MEM=00000000h-000FFFFFh   I/O=0000h-0FFFh 
  ==> bus[2]             MEM=00000000h-000FFFFFh (Prefetchable)
[1]:[ 0]     Storage     6810h  6820h  6818h  6824h  6800h  24000000h

INTLINEに書きこむ値はとりあえず決め打ちで3としたものですが、これを決め打ちではなく、システム側から受けられるようにしたいと言うもので、ご相談に伺いました。この場合はたまたまSLOT#1にIFC-PCI7ESAU2が挿さっているのでPIRQ#1とPIRQ#2とも割り当てられていますが、通常はPIRQ#3のように未割り当ての場合もままあります(特にノート機)。カードバスブリッヂは一本しか割りこみ線を持たないため、ブリッヂとそこに挿さるcardbusデバイスは必然的に同じIRQを使います。以下のように、REX-CBS52の一つ目のスロットであるFunction0がPIRQ#1を使い、そこに挿さるSATAE2-CBもPIRQ#1を使います。2つ目のスロットであるFunction1はPIRQ#2ですので、そこにSATAE2-CBを挿した場合はPIRQ#2を使います。なお、玄人志向のUSBとIEEE1394コンボのUSB2.0+1394a-CBはVIAのVT6214とVT6306の複合機能デバイスだということのようですが、その場合すべての機能番号でcardbus-bridgeに割り当てられたIRQをシェアすることになります。

適用前

PCILIST出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=0, Configuration mechanism #1 

Bus Dev Func Class      Vendor   IRQ INT B/M P/E I/O MEM MWI SER PED DPD SED CL
[0]:[ 0]     PCI--HOST  VLSI tech --     Yes  No  No Yes  No Yes  o   -   -   -
[0]:[ 5]     98C-Bus B  NEC       --      No  No Yes Yes  No Yes  -   -   -   -
[0]:[ 6]     98C-Bus B  NEC       --     Yes  No Yes Yes  No Yes  -   -   -   -
[0]:[ 7]     98 VIDEO   NEC       --      No  No Yes Yes  No  No  -   -   -   -
[0]:[13]:[0] USB        VIA        3 [A] Yes Yes Yes  No Yes Yes  -   -   -   -
[0]:[13]:[1] USB        VIA        6 [B] Yes Yes Yes  No Yes Yes  -   -   -   -
[0]:[13]:[2] USB        VIA       10 [C] Yes Yes  No Yes Yes Yes  -   -   -   -
[0]:[13]:[3] Storage    SiI.(CMD)  3 [A] Yes Yes Yes Yes  No Yes  -   -   -   -
[0]:[14]:[0] Cardbus-B  RICOH     -- [A]  No  No  No  No  No  No  -   -   -   -
[0]:[14]:[1] Cardbus-B  RICOH     -- [B]  No  No  No  No  No  No  -   -   -   -
PCILIST/B出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=0, Configuration mechanism #1 

Bus Dev Func  Class      Base address
[0]:[ 0]     PCI--HOST 
[0]:[ 5]     98C-Bus B 
[0]:[ 6]     98C-Bus B 
[0]:[ 7]     98 VIDEO  
[0]:[13]:[0] USB         6000h
[0]:[13]:[1] USB         6020h
[0]:[13]:[2] USB         20000000h
[0]:[13]:[3] Storage     6040h  6048h  6050h  604Ch  C000h  20001000h  ROM(21000000h)
[0]:[14]:[0] Cardbus-B   MEM=00000000h-000FFFFFh   I/O=0000h-0FFFh 
  ==> bus[0]             MEM=00000000h-000FFFFFh (Prefetchable)
[0]:[14]:[1] Cardbus-B   MEM=00000000h-000FFFFFh   I/O=0000h-0FFFh 
  ==> bus[0]             MEM=00000000h-000FFFFFh (Prefetchable)
PCILIST/R出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=0, Configuration mechanism #1 

[ IRQ routing by PCI-C(ISA) bridge ]
PIRQ#0 ==> IRQ 3 
PIRQ#1 ==> IRQ 6 
PIRQ#2 ==> IRQ 10 
PIRQ#3 ==> ***

Bus :Device   Class    IRQ   INT#A    INT#B    INT#C    INT#D    SLOT
[ 0]:[ 8]    ***        **   PIRQ#0    ---      ---      ---     Onboard
[ 0]:[13]   USB          3   PIRQ#0   PIRQ#1   PIRQ#2   PIRQ#3   PCI SLOT#1
[ 0]:[14]   Cardbus-B   --   PIRQ#1   PIRQ#2   PIRQ#3   PIRQ#0   PCI SLOT#2

適用後

PCILIST出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=2, Configuration mechanism #1 

Bus Dev Func Class      Vendor   IRQ INT B/M P/E I/O MEM MWI SER PED DPD SED CL
[0]:[ 0]     PCI--HOST  VLSI tech --     Yes  No  No Yes  No Yes  o   -   -   -
[0]:[ 5]     98C-Bus B  NEC       --      No  No Yes Yes  No Yes  -   -   -   -
[0]:[ 6]     98C-Bus B  NEC       --     Yes  No Yes Yes  No Yes  -   -   -   -
[0]:[ 7]     98 VIDEO   NEC       --      No  No Yes Yes  No  No  -   -   -   -
[0]:[13]:[0] USB        VIA        3 [A] Yes Yes Yes  No Yes Yes  -   -   -   -
[0]:[13]:[1] USB        VIA        6 [B] Yes Yes Yes  No Yes Yes  -   -   -   -
[0]:[13]:[2] USB        VIA       10 [C] Yes Yes  No Yes Yes Yes  -   -   -   -
[0]:[13]:[3] Storage    SiI.(CMD)  3 [A] Yes Yes Yes Yes  No Yes  -   -   -   -
[0]:[14]:[0] Cardbus-B  RICOH      3 [A] Yes Yes Yes Yes  No Yes  -   -   -   -
[0]:[14]:[1] Cardbus-B  RICOH     -- [B]  No  No  No Yes  No  No  -   -   -   -
[1]:[ 0]     Storage    SiI.(CMD)  3 [A] Yes Yes Yes Yes  No Yes  -   -   -   8
PCILIST/B出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=2, Configuration mechanism #1 

Bus Dev Func  Class      Base address
[0]:[ 0]     PCI--HOST 
[0]:[ 5]     98C-Bus B 
[0]:[ 6]     98C-Bus B 
[0]:[ 7]     98 VIDEO  
[0]:[13]:[0] USB         6000h
[0]:[13]:[1] USB         6020h
[0]:[13]:[2] USB         20000000h
[0]:[13]:[3] Storage     6040h  6048h  6050h  604Ch  C000h  20001000h  ROM(21000000h)
[0]:[14]:[0] Cardbus-B   MEM=10000000h-240FFFFFh   I/O=0000h-0FFFh 
  ==> bus[1]             MEM=F0000000h-FFFFFFFFh (Prefetchable)
[0]:[14]:[1] Cardbus-B   MEM=00000000h-000FFFFFh   I/O=0000h-0FFFh 
  ==> bus[2]             MEM=00000000h-000FFFFFh (Prefetchable)
[1]:[ 0]     Storage     6810h  6820h  6818h  6824h  6800h  24000000h
PCILIST/R出力
PC-9821 PCI device list  [ PCIlist ] Version 1.33   Copyright(C) 2003-05 まりも 
PCI BIOS Version 2.0,  Last bus number(BIOS)=2, Configuration mechanism #1 

[ IRQ routing by PCI-C(ISA) bridge ]
PIRQ#0 ==> IRQ 3 
PIRQ#1 ==> IRQ 6 
PIRQ#2 ==> IRQ 10 
PIRQ#3 ==> ***

Bus :Device   Class    IRQ   INT#A    INT#B    INT#C    INT#D    SLOT
[ 0]:[ 8]    ***        **   PIRQ#0    ---      ---      ---     Onboard
[ 0]:[13]   USB          3   PIRQ#0   PIRQ#1   PIRQ#2   PIRQ#3   PCI SLOT#1
[ 0]:[14]   Cardbus-B    3   PIRQ#1   PIRQ#2   PIRQ#3   PIRQ#0   PCI SLOT#2

Valid HTML 4.01 Strict