--------------------------------------------------------------------------- IBM Smart Capture Card device driver for FreeBSD (Ver.0.34) 大橋 健 九州工業大学 ohashi@mickey.ai.kyutech.ac.jp 96/08/11 --------------------------------------------------------------------------- 0. IBM Smart Capture Card について PCMCIA typeII のビデオキャプチャカードです. 最大640x480(実際は縦240ま で)の静止画または動画を入力できます. 標準ではNTSCのビデオ信号から入力 できますが, オプションのTVチューナと組み合せてテレビ信号からも入力で きます. この場合チャンネルはソフトで変更可能です. また, 同じくオプショ ンのクリップオンカメラと組み合せると電源をPC-Cardから取れるのでデジタ ルビデオカメラとして利用可能です. Smart Capture Card と Smart Capture Card II があり, 以下SCCとSCC2とし ます. IIにはハードウェア・ディザー機能が追加されるなどの変更がありま すが基本的にはほぼ同等な機能を持っていますのでSCCといえば両方を表わす ことにします. Smart Capture Card の製品情報 http://www.ibm.co.jp/pc/prod/hb/0485.html Win95用のドライバーについて他 http://web.kyoto-inet.or.jp/people/yozaki/scc95p10.html 1. このパッケージについて このパッケージはFreeBSDとPAOに対するSCCのデバイスドライバーです. PAOについて http://www.mt.cs.keio.ac.jp/person/hosokawa/PAO/ 以下の組み合せに対して動作確認しています. FreeBSD-2.2-960612-SNAP + PAO-960731 FreeBSD-2.1.5-RELEASE + PAO-960731 FreeBSD-2.1.0-RELEASE + (PAO-960731相当) 以下簡潔にするため 22SNAP, 215R, 210Rとします. 最新バージョンは以下のURLより入手できます. ftp://at_ohasi.mickey.ai.kyutech.ac.jp/pub/mc/scc/driver/FreeBSD/ Linux版も神戸大学の岡村さん(oka@kobe-u.ac.jp)によって開発されています. ftp://ftp.kobe-u.ac.jp/pub/mc/scc/driver/linux/ 2. ドライバーのインストール 2.1 カーネルに scc を組み込む 2.1.1 ドラーバーのソースをカーネルソースツリーにコピーしてしてください. # cp scc.c /sys/i386/isa/scc.c # cp scc_cs.h /sys/i386/isa/scc_cs.h # cp scc_subr.c /sys/i386/isa/scc_subr.c # cp scc.h /sys/i386/include/scc.h また, /usr/include/machine にも scc.h をコピーしてください. # cp /sys/i386/include/scc.h /usr/include/machine/scc.h 2.1.2 /sys/i386/isa/scc.c を編集します. 配布バージョンは, 22SNAP用になっています. 215Rと210Rのときは, scc.cの FREEBSD210R を有効(define)にしてください. 22SNAPのときは無効(undef)にしてください. その他, 5.FAQを参考に編集してください. 2.1.2 /sys/i386/conf/ 以下のファイルを編集します. /sys/i386/conf/files.i386 に以下を追加します. i386/isa/scc.c optional scc device-driver i386/isa/scc_subr.c optional scc device-driver /sys/i386/conf/PAO などのコンフィグファイルに以下を追加します. device scc0 at isa? port 0x240 irq 10 iomem 0xd4000 vector sccintr device scc1 at isa? port 0x244 irq 11 iomem 0xd8000 vector sccintr 2.1.3 /sys/i386/i386/ 以下のファイルを編集します. 215Rと210Rのときは, それぞれ以下のようにパッチを当ててください. (パッチは絶対パスになっています) # patch -p0 < conf.c.diff-215R (または) # patch -p0 < conf.c.diff-210R 215Rと22SNAPのときは, それぞれ以下のようにパッチを当ててください. (パッチは絶対パスになっています) 注意: 210Rのときについては未確認です. このパッチでは, device_info[]の中に以下の行を追加します. {"scc", "IBM Smart Capture Card", 0, CLS_MMEDIA}, # patch -p0 < userconfig.c.diff-22SNAP (または) # patch -p0 < userconfig.c.diff-215R 2.1.4 新しいカーネルをメイクしてインストールします. コンフィグファイルがPAOなら以下のように新しいカーネルをインスールしま す. # cd /sys/i386/conf # config PAO # cd /sys/compile/PAO # make depend # make # make install 2.2 スペシャルデバイスの作成 # cd /dev # mknod scc0 c 76 0 # mknod sccctl0 c 76 128 (2枚目も使うときは以下も) # mknod scc1 c 76 1 # mknod sccctl0 c 76 129 215Rと22SNAPのときはメジャー番号は76です. 210Rのときは, メジャー番号 を76ではなくて71にしてください. 2.3 pccardの設定 2.3.1 /etc/pccard.conf の scc のエントリーを確認します. 以下の設定がpccard.conf.sampleの標準設定です. # IBM Smart Capture Card card "IBM Corp\." "Video Capture" config default "scc0" any cardmem 0xd4000 0x0 0x8000 insert echo Smart Capture Card inserted remove echo Smart Capture Card removed 二枚以上使用する場合は以下を参考に編集してください. # IBM Smart Capture Card card "IBM Corp\." "Video Capture" config default "scc0" any cardmem 0xd4000 0x0 0x4000 config default "scc1" any cardmem 0xd9000 0x0 0x4000 insert echo Smart Capture Card inserted remove echo Smart Capture Card removed 2.4 リブートします. 2.4.1 カーネルの起動時にでる以下のメッセージを確認します. pccard driver scc added scc0 not found (2枚目も使うときは以下も) pccard driver scc added scc1 not found これは, ISAデバイスとしては見付からないけど PC-card用ドライバーは組み 込みましたという意味です. 2.4.2 SCCカードをPC-Cardに刺します scc0: init とメッセージが出力され, PC-Cardイベントビープが聞こえれば成功です. 2.4.3 SCCをPC-Cardから抜きます scc0: unload Return IRQ=10 Card removed, slot 0 stray irq 10 などと表示されればokです. 注意: アプリケーションから sccにアクセスしているときには抜かないでく ださい. 3. 変更点 Ver.0.33->Ver.0.34 (α RELEASE version) ・FreeBSD-2.1.5-RELEASEに対応しました. (大橋) ・IBM coporationをInternational Busines Machines Coporation に変更しま した. (大橋) Ver.0.3->Ver.0.33 ・2枚目以降のsccが使えるようにしました. (岡村さん, 大橋) ・/dev/sccctlで色調整などが外部から制御できるようになりました. (岡村さん, 大橋) ・scc_probe()/scc_attach()でscc_registerdev()を二重に呼ぶミスを直しま した. (ほそかわさん) ・制御用に/dev/sccctlを利用するようにしました. (大橋) ・新しいSNAPではUIOのバグが直っているようなので, バグがある場合のみ BUGGY_UIOを設定するようにしました. (大橋) Ver.0.21->Ver.0.3 ・Copyrightの記述などリリースに向けた準備をしました. (大橋) ・scc.hのioctlで使用する構造体を新しくしました. (大橋) Ver.0.2->Ver.0.21 ・nvの動作も確認しました. (大橋) ・一部バイナリーでカーネルが作れることを確認しました. (大橋) Ver.0.1->Ver.0.2 ・ioctlにチューナや色の設定ができるようにしました. (大橋) ・PAO(旧pccard-test)では, sccなどのカードでもメモリーを確保できるよう になりました. ・FreeBSD.orgに連絡して, メジャー番号 76 を正式に予約しました. (大橋) ・割り込み禁止を2種類選べるようにしました. (中川さん, 大橋) ・カードをどのスロットに挿しても大丈夫になりました. (大橋) ・vicの動作も確認しました. (大橋) ・ソースを2つに分離しました. (中川さん) Ver.0.1->Ver.0.2 ・ioctlの設定をLinuxと合せました. (中川さん) ・2.1.0-RELEASEに対応しました. (中川さん) ・scc.cのscc_readの中で強制的にメモリーウィンドウを再設定できるように しました. (大橋) ・struct scc_softc 内の maddr 周りを変更しました. (大橋) ・scctest.c をRGB565とYUV422(モノクロ)にしました. (大橋) ・FreeBSDでもキャプチャできるようになりました. (大橋) ・320x240など大きめの画像もキャプチャできるようにしました. (大橋) ・xscc,sccatなどの動作確認とFreeBSD対応をしました. (大橋) ・scctest.c -> sccsnap.c 機能拡張して変更しました. (大橋) 4. 動作確認機種 FreeBSDでアルファーテスト状況 機種 | PCIC | コメント ------------+-------------+--------------------------------------- デストップ | IBM King | REMAPありで正常(48K) FMV-450NL/S | CL-PD6710 | REMAPありで正常(80K), なし80Kまでok. FMV-450NL/T | CL-PD6710 | REMAPありで正常 TP230Cs-YB7 | VLSI 82C146 | REMAPありで正常(32K), slot1は不可 TP230Cs-FBZ | VLSI 82C146 | REMAPありで正常(32K), slot1は不可 jetmini | RF5C396L | REMAPありで正常 Power/V note| Vadem 468 | REMAPありで正常(48K) TP535 | CL-PD67?? | REMAPありで正常(大橋が借りて確認) TP530Cs | i82891A | REMAPありで正常, slot1は不可 DHU2 CTS5120| ? | 正常 Mebius (P90)| Vadem 468 | REMAPありで正常, slot1は不可 参考 Linuxでの動作状況 ThinkPad230CS ThinkPad230Cs(FBW) ThinkPad370 ToshibaT610CT Mebius(P90) ここにない機種での動作を確認されましたら, ohashi@mickey.ai.kyutech.ac.jp までご連絡ください. 5. FAQ Q1 アプリケーションを動作させるとハングアップしてしまいます. A1 /sys/i386/isa/scc.c の #define REMAP_MEM_WIN を #undef REMAP_MEM_WIN にしてください. これによりメモリーウィンドウを切り換えなくなります. これにより動作する場合は, /etc/pccard.confで設定したメモリーウィン ドウのサイズまでの画像しか表示できなくなります. Q2 取り込み速度を速くすることはできますか? A2 設定次第である程度調整できます. 1. /etc/pccard.conf で 大きめのメモリーウィンドウを取る. cardmem 0xd4000 0x0 0x8000 ^^^^^^ ここを大きくしてください. ただし, 機種により設定した大きさのメモリーウィンドウが取れない場 合があります. この場合, 大きめの画像の途中に白い部分ができます. この白い部分がでない程度の大きさにしてください. 2. 取り込みの際の割り込み禁止の方法を変える. scc.c の #undef SOFT_INTR を #define SOFT_INTR に変えてください. (SOFT_INTRが定義してない場合はハードよりの割り込み禁止をしますの で定義しない方が速いと思います) Q3 FreeBSD-2.1.0-RELEASEはサポートされていないのですか? A3 PC-CardをサポートするパッケージであるPAOがサポートしていませんので 基本的には動きません. PAOが動くようにしたシステムであれば, FreeBSD-2.1-RELEASE以降のバージョンなら動くようになります. 必ず, scc.c 中の FREEBSD210R を有効(define)にしてください. また, FreeBSD-2.1-RELEASE の UIO にはバグが含まれているようですので, BUGGY_UIOも設定してください. Q4 slot0 では動作しますが, slot1ではハングアップしてしまいます. slot1 はサポートされていないのですか? A4 ThinkPad230Csや530Csでは, slot1では動作しないと報告されています. 230Csの場合は, PCICを2つ使って2スロットを実現しているのをきちんと 対応できていいないのだと推測されています. 530Csでの原因は予想も付 いていません. slot0で動作するのであれば, それを使ってください. Q4 IBM PCMCIA Ether と同時に使用しようとするとプローブに失敗するので すが? A4 PAOに附属の pccard.conf.sample では, 0xd4000から32Kbytesのメモリー ウィンドウを取るようになっています. どちらかのメモリーをずらしてく ださい. また, Etherを先に挿して, SCCは後から挿さないとメモリーの割 り当てに失敗するようです. (ThinkPadの場合Q4も参照) probe/attachにミスがありこれを直したので直っていると思います. (未確認) 7/28 Q5 同時に2枚のSCCを使う同時に使うと画面が乱れてしまいます. A5 2枚のSCCに割り宛てるメモリー領域を少し間を空けてください. 連続して いると重なりができて画像が乱れます. また, 抜き差しすると scc0 しか 認識しなくなるので再度scc1を使うには pccarddを再起動してください. 6. 謝辞 SCC-Driver/Tester MLのみなさん, 特に, 中川好久さん,岡村耕二さん,尾崎好 均さんありがとうございました. そして, PAOの開発を中心的の行なっておら れるほそかわさん, 他BSD-nomads MLの皆さんに感謝致します.