Last-modified: Thu, 27 Jan 2000 05:32:42 JST
[static,style:furuta,jconv:jcode,cache:on]
powered by tds-Tomsoft Diary System 1.01-beta0
皆様、明けましておめでとうございます。 今年もよろしくお願いします。
今年は Y2K 関連で帰省できないので、近場で済ますことにする。 朝霞台からバスで平林寺へ。 そこそこ有名な寺で、臨済宗妙心寺派なので、宗派的にも問題ないぞ。 参拝して、境内を散策する。境内を一周するだけで小一時間ほどかかった。 これだけ広大な雑木林が住宅地(いや、市街地かも。新座市役所の対面にあります) の真中にあるのは、相当貴重なのではないかと思います。 その後、甘酒と山菜そばを食べて、帰宅。
初詣から帰宅後は教育 TV 三昧。 午後5時ごろから、終日教育 TV だけを見ていた。 これも正月ならではと言えましょう。
うう、他人事ではなかった。 某 ML の実装に使っている自作プログラムに千年虫が発覚する。 まあ、日付の表示がおかしいだけで あまり実害は無さそうなんですが、恥かしいのでさっそく修正。
そうそう、 そういうふうに何やってもマザーボードが起動しなくなった時には、 普通 CMOS をディスチャージするもんだと takehiro さんからツッコミ。 あぅ、知りませんでした。 結構馬鹿。ちょっと想像力を働かせれば容易に想像できようというもの。
入院前に unsubscribe していたら、 世界の様子がさっぱりわからなくなっているので、 いろいろ subscribe した。 うーむ、また多量のメールに追い回されるのか。
junichi さんの AM53C974 CAM ドライバをベースに、 PAO3 に移植してみる。 ncv 系と AM53C974 は NCR53C9x 系の上位互換チップなので、 バス依存部分だけごしごし書いて、 バス独立部分は共通に使えるハズなのだが... AM53C974 CAM ドライバはバス依存部分とバス独立部分が 一つのファイルにしてある。 まず、これをきちんと分離するところから始める。:-p PAO2 の ncv (いやあ、完璧に忘れてるなぁ)を参考にしつつ、 aic_pccard.c の土台に、 NCR53C500 依存の部分をこねこねする。
とりあえず probe/attach は成功しているように見えるが (というか、無理矢理成功させた?)
$ camcontrol reset esp0 $ camcontrol rescan esp0
でプロセス固まってお亡くなり。はやや。 rescan せずに抜くと問題なく抜けるし、 bus reset はうまくいってるっぽいけど、原因究明はこれから。 なんかまだ全然っぽい。
232C クロスケーブルを引っ張り出して、remote GDB 環境を作る。 いやぁ、素晴しい環境だわ。
ちなみに、ブツは ここ(esp-cam-20000104.tar.gz)。まだ動くシロモノじゃないから、持っていっても意味ないのだ。 ドキュメントも何にもないから、 どうやってコンパイルしたら良いのかもわかんないぞ。 その辺は動き出してからでもいいっしょ。 いや、scsi_low が CAM 化されれば、 多分不要になるものなので、 ドキュメントも書かない可能性大だけどもね。
以前 qlogic から取り寄せた FAS408 のマニュアルをにらめっこしつつ、 ncr53c9x.c と格闘。 ncr53c9x.c を読む限り、ESP406 と FAS408 はかなり近いのだが、 これと NCR53C500 は微妙に隔たりがあるみたい。 ncv は NCR53C406 と NCR53C500 のドライバで、 型番やら以前 SYMBIOS から入手した資料から想像する限り、 NCR53C406 は ESP406 のセカンドソースと見て問題なさそうだが、 NCR53C500 はちょっと違うような気がする。
remote gdb で CAM のコードを追いかけて、 camcontrol の rescan の死因を追及する。 単純に割り込みを拾えていないような気がする。 esp0 の initialize で SCSI の bus reset コマンドを行っているのだが、 bus reset 終了の割り込みが拾えていないので、 ドライバはまだ SCSI bus が reset phase (って言うんだっけ) 中 だと思い込んでいて、bus idle でないので、 probe の為の selection phase に入ろうとしない、ようである。 とりあえず、割り込み回りを重点的に攻撃してみよう。
scsi_low の CAM 化は、おそらく FreeBSD(98) サイドよりも PAO サイドの方が深刻でしょうね。 とりあえず、現状でも bs は何とか動作はしている訳ですし。 まぁ、CAM まわりの経験値を積むためにとりあえずは esp の作業をしているのですが。 きっと、今月中に手をつけるのは絶対に無理です。\
「アクマくんにお願い」の公式ページを (http://angel.bsdclub.org/d/)へ移行します。最新版は (http://angel.bsdclub.org/d/recent.html)です。 旧 URL (http://www.but-b.or.jp/~furuta/d/)の方も当面、ミラーとして残しますが、bookmark や日記更新エージェント等 常用するリンクはできましたら修正してもらえると助かります。
とりあえず、日記更新エージェントの管理者の方々にメールを書いた。
で修正されているのを確認しました。 お手数をおかけしました。 どうもありがとうございます。
ところで、 日記猫で更新時刻が「0000/00/00 00:00:00」になっちゃってるみたいなのですが、 何かマズかったでしょうか?
何か参考になる資料がないかいろいろ探すが、 あまりめぼしいものは見つからず。 Symbios が LSI Logicに買収されてしまったのが痛い。 (http://www.symbios.com/)も (ftp://ftp.symbios.com/)も使えない。 以下、特に (ftp://ftp.symbios.com/pub/standards/io/)は資料の宝庫だったんですが、もはや後の祭りですな。
何かの参考になるかもしれないので、 Linux の sym53c500_cs-0.2.tar.gz を拾ってくる。
さて、問題の一つは割り込みにあるようなので、 割り込み関係の設定を調べる。 手元の FAS408 の資料によると、 Configuration 5 register の bit2 が SCSI Interrupt Enable なので これが怪しい。しかし、esp のコードを読んでみてもちゃんと 設定しているようにしか見えない。 (あと、bit1 の INT Polarity も怪しい) このあたり、いろいろ試してみても全然割り込みがかかってくれない様子。 変だなあ。
ncv の方のコードを読んでみると、もっと謎。 flag の 32bit 中、上位 8 bit が Configuration 5 register に設定されるコードになってるんですが、 MIRACLE SCSI II などほとんどのカードでこの値が 0 なんですよ。 これで何故割り込みがかかる? なぜ PAO2 時代には ncv が動いてたんでしょうかね?
sym53c500_cs-0.2 の方も読んでみよう。 こっちは Configuration 5 register に 0xa4 を入れてるから 割り込みかかるはずだね.... ふうん、Configuration 7 register まであるのか。 増えた分はどこに置いておくんだろうね... ちょっと待て。 この Configuration 7 register のアドレスは Configuration 5 register のアドレスじゃない!?
いや、そうじゃない。 ncv と sym53c500_cs-0.2 とで Configuration 5 register のアドレスが違う!? ncv は baseaddr+0x0d (これは FAS408 の資料の通り) だが、 sym53c500_cs-0.2 のコードは baseaddr+0x09 だと言ってるよ。なにこれ?
うむむ、53c406 と 53c500 は同じだと思ってたんですが、 sym53c500_cs-0.2 のネーミングが正しいとすると Configuration 5 register は 53c406 -> 53c500 で 移動した、つーことかいな? そう思って ncv のコードを読んでみると、 baseaddr+0x09 (ATA Command register) に 0x24 を放りこんでるな。何これ? sym53c500_cs-0.2 とは最上位ビット以外同じですね。 試しに、チップリセット後に baseaddr+0x09 に 0x24 を 放りこむようにしてみる... 一発大正解。
以下、script と /var/log/messages を元に編集したもの。
bash-2.02# camcontrol devlist -v scbus-1 on xpt0 bus 0: < > at scbus-1 target -1 lun -1 (xpt0) bash-2.02# Card inserted, slot 0 pccardd[59]: Card "MACNICA"("MIRACLE SCSI-II mPS110") [A.0.0.0] [(null)] \ matched "MACNICA" ("MIRACLE SCSI-II mPS110") [(null)] [(null)] card0: assign esp0 iobase 0x330 irq 10 esp0: no sync, parity : NCR53C500, 24MHz, SCSI ID 7 MACNICA Miracle SCSI-II inserted bash-2.02# camcontrol reset esp0 Reset of bus 0 was successful bash-2.02# camcontrol rescan esp0 (da0:esp0:0:2:0): got CAM status 0x11 (da0:esp0:0:2:0): fatal error, failed to attach to device (da0:esp0:0:2:0): lost device (da0:esp0:0:2:0): removing device entry Re-scan of bus 0 was successful bash-2.02# camcontrol devlist -v scbus-1 on xpt0 bus 0: < > at scbus-1 target -1 lun -1 (xpt0) scbus0 on esp0 bus 0: <iomega jaz 1GB G.60> at scbus0 target 2 lun 0 (pass0) < > at scbus0 target -1 lun -1 () bash-2.02# esp0: unload Return IRQ=10 Card removed, slot 0 Slot 0, unfielded interrupt (0) MACNICA Miracle SCSI-II removed bash-2.02# camcontrol devlist -v scbus-1 on xpt0 bus 0: < > at scbus-1 target -1 lun -1 (xpt0) bash-2.02# exit
jaz のプローブに失敗しているのは、 メディアが入れてないからかなぁ。 とりあえず、camcontrol devlist で見えるから INQUIRE に成功しているのは間違いない。パチパチ。 コーディング2日、デバッグ2日です。
とりあえず、ブツは ここ(esp-cam-20000107.tar.gz)に置きました。 多分、3.4 の PAO3 で動くと思いますが、説明、ドキュメント等全くありません。 持っていく人は AS IS でね。 不特定多数に配ったり、 公の場所でアナウンスしたり、 公の場所に commit したりするのは待って下さい。
しかし、baseaddr+0x09 の謎はまだ解けておりません。 本多さんとか知ってるんだろうか? 聞いてみる必要あり。
げげ、もうこんな時間(30:02)。眠いよぅ。お休みなさい。