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対応もできればやりたいんですがねえ。
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