o termination power のセンスができないのは、きっと線が配線されていないんだろう (CardBus だから供給できないし)、ってことで気にしない方向で。
o 固定IPv4アドレスをGET。これで一時的に PPPoE セッション切れても TCP 切れない…かどうかは微妙か。
o うーん、Data In が動かない…。
cardbus_read_exrom: bad header signature in ROM image 0: 0x0000 cardbus_attach_card: failed to read CIS nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32UDE DualEdge SCSI adapter nsp0: interrupting at 10 scsibus0 at nsp0: 8 targets, 8 luns per target scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 6 lun 0: <, , > disk fixed sd0: fabricating a geometry sd0: 1062 GB, 1088010 cyl, 64 head, 32 sec, 512 bytes/sect x 2228246209 sectors sd0: async, 8-bit transfers sd0 detached scsibus0 detached nsp0 detached
こんなディスクがあったら欲しいが、つながっているのは CD-ROM ドライブ。 inquiry データが読めてない。
o Status byte を読むようにしたら全部 0x02 (Check Condition)。むむ?
ふとコマンドまわりをチェックしたら、CDB をポインタで持ってくる所に余計な
&
があった(汗)。取ってみた。
nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32UDE DualEdge SCSI adapter nsp0: interrupting at 10 scsibus0 at nsp0: 8 targets, 8 luns per target scsibus0: waiting 2 seconds for devices to settle... cd0 at scsibus0 target 6 lun 0: <PIONEER, CD-ROM DR-U24X, 1.01> cdrom removable cd0: async, 8-bit transfers
おおっ?
o 自転車の虫ゴムを、この間買ったやつに替える。生ゴムのやつはすぐダメになるな…。
o 買い出し。暑い。
o SCSI いじり。disconnect → reconnect した後が動かない…。 このへん仕様分かんないよう。
梅雨入りらしい。
o あやめ池遊園地閉園かー。結局行かなかったなあ…(笑)。
o
gqmpeg の skin をいじって helvetica
や lucida
を
*
に書き換えて日本語が出るように……タイトルだけ出ない。なんでや。
o SCSI いじり。あ、リコネクトまわりのコード書いてないや。てへっ(←…)。
o リコネクトした後動かないよう…。
o
gqmpeg の skin いじり。さらに bold
を *
を書き換えたらタイトルも読めるようになった。
o なんとなく分かった。COMMAND_CONTROL のレジスタと、auto param の DMA で読ませる該当フィールドとは、どっちかを使うようにしないとダメらしい。
つうわけで、とりあえず常に auto param を使うようにしてみた。
わーい、リコネクト後も動くようになった。 試しに CD-ROM を mount してみたら見えた。まだ未実装部分がいっぱいあるけど…。
o 展示会の粗品で折畳み傘をGET。しょぼいけど軽いのでかばんに入れとくか。
o 6連装 CD-ROM ドライブを試してみたら Check Condition 喰らいまくりで動かん。
o あぶく銭GET。しぶちん。
o
scsipi(9) 層のソースを調べる。
xs->status
が SCSI_CHECK
で
xs->error
が XS_BUSY
だと、ドライバ側で
Request Sense しなくても
scsipi が自動的に Request Sense を発行してくれるらしい。
んなもん分かるカー。確かにマニュアルにあるんだが、XS_BUSY
って名前では…。
6連装 CD-ROM ドライブも動くようになった。
CD-ROM ドライブ(連装でない)で cdparanoia で吸い出すとぷちぷちノイズが乗るが、これはドライブのせい?
o がーそ、追い出されX。けちー。
o なんかデータ化けすると思ったら、DMA の scatter/gather テーブルを Save Pointers で更新するときに、バイトカウントだけ更新していてアドレスを更新してない…。
…修正。DA 吸い出しのぷちぷちノイズも消えた。疑ってごめん >ドライブ。
o 反応があったので hp700 の sdboot いじり。
o 8byte 削れることが分かったので日刊 sdboot (アナウンスしてないが)。
o 『SCSI-2 詳細解説』を見つつ SCSI ポインタまわりを書き直し。ふむふむ。
つかこの本、絶版かよ。これが無かったらどうやって SCSI ドライバを書けと……え、もう書きませんかそうですか。
o I-O DATA の TX86 (6連装CD-ROMドライブ)って、disconnect しないみたいなんだが SCSI デバイスとしてどうかと…。 CD を交換している間もバス占有…。
今日は日の出の時刻が一番早い日らしい。
o 整合性チェックコードを入れておいたらいろいろバグが露見したので修正(汗)。
o ちょっとだけ boot いじり。
o なんか左腕(の一部)の感覚が変。
o hp700 の primary boot を commit。 このへんのコードもちょっと残ってる(笑)。
o 左腕はだいたい治ったみたい。
特に意味はないが前にてけとーに登録していたので休み。
o バスリセットまわりを書く。 自分でバスリセットしたときにはバスリセット検出の割込みは来ないらしい。
パリティエラーまわりをちょっと書いてみるが、 入力側だけでパリティエラーを起こすのが難しいのでテストできん…。
次は AutoSCSI の restart 関連かな…。
o 最初にコマンドを投入するときとリコネクト時とで auto param を使って、 それ以外はふつうに restart するようにすればいいんかなあ…。
o AutoSCSI の restart まわりをいじる。
o テスト用のマシンが ifconfig up で落ちまくるので試しに cvs update してみたら直った。pool まわりがバグってたか。
o CLEAR_CDB_FIFO_PTR のフラグは auto param で読ますだけだとダメなときがあるようだ(よう分からん)。 レジスタと両方に付けてみる。
o ふと Sun の HDD をつないでみる。phase 遷移がおかしい…。 ……これは、ロジアナの出番てやつ? (汗)
o あきらめてロジアナ出動。
うーむ、なんか Message In での ACK の返送がうまくいってないような気分…。
o あう、未テストだった tagged queueing のコードが発動している模様。
o むむ、2byte 以上の Message In が読めないみたい。 Identify だけだったのでなんとなく動いていた模様。
夕方には曇。ニイニイゼミが鳴いてるな…。
o Message In フェーズ中はずっと連続して処理するようにしてみた。 おっ、なんとなくタグ付きキューイングができてるな。
デバッグ用の printf(9) を外したら動かなくなった………。
o Workbit な SCSI いじり。 ロジアナで取得したデータを見る限り、Inquiry コマンドの コマンド発行→Disconnect→Reconnect→Data In は正常に動作しているように見えるなあ。でも Inquiry データが取れない…。
Pioneer の CD-ROM のは取れるんだが、Sun の HDD (中身は Seagate) のはダメ。
わかんないよう。うわあん。
o SCSI いじり。うーん。
o なんとなく動いたー。
nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32UDE DualEdge SCSI adapter nsp0: interrupting at 10 scsibus0 at nsp0: 8 targets, 8 luns per target scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 4 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> disk fixed sd0: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors sd0: async, 8-bit transfers, tagged queueing cd0 at scsibus0 target 6 lun 0: <PIONEER, CD-ROM DR-U24X, 1.01> cdrom removable cd0: async, 8-bit transfers
どうやら、AutoSCSI を restart する時は auto param は使えないらしい。 これって限りなくバ(略)に近い仕様? わざわざ auto param の DMA 構造体を作ってもリコネクト時に再利用できないんじゃなあ…。
あと、Message In フェーズ中はずっと連続して処理 するのはダメで、(1) メッセージは 1byte ずつ処理する、 (2) メッセージの 2byte 目以降を受けるときには 00&04 / 02 の自動処理を切る (そうでないと AutoSCSI に食われてしまう)、てな感じでいいらしい。
次は同期転送かな。
o 出入りの眼鏡屋さんにネジの取れたフレームの応急処置をしてもらった。 合うネジが無かったのでナット付き。
o 選挙の通知書が来た。
o あれー、昨日動いたのにちょっといじったら動かなくなった…。
あー、しょうもない所にバグが…(汗)。
o Message Out まわりを書き直し。割と広範囲に。
HDD と CD-ROM ドライブを同時に動かすと固まる…。ダメぢゃん。
うーん、よく分かんないなあ。
寝まくり。
o wsconsctl -w map+='keycode 58 = Cmd1 Control_L' とやって CapsLock を Control にしていたのだが、 CapsLock-Alt-Esc で ddb(4) に入れない。 なんか Esc が入らないみたいだが、これはこのマシンのキーボードの仕様?
仕方ないので keycode 219 = Cmd Meta_L として、Windowsキー-Esc で ddb に入れるようにした。便利(ぉぃ)。
o SCSI いじり。バグ見つけたー。
Arbitration に失敗した時に、cmd 構造体を リトライのためにコマンドリストに戻すんじゃなくて、空きリストに入れていた…。 直したらバッチソ。
つうわけで書き掛けドライバ。 大事なデータが入ったディスクを壊したりしないように注意。 そういや書き込みのテストってしてないなあ(マテ)。
o アクセス LED の制御めんどくさい…。 CardBus は LED 付いてないから見なかったことにするか(ぉぃ)。
o 動いている(ディスコネクト状態も含む) cmd の数を数えるようにして LED を制御するようにした。LED 付いてないので未テスト。
簡単な HDD の書き込みテストをしてみた。書けるみたい。
o N+I 2004 BSD BOF を IRC とストリーミングで。
o …見ながら SCSI いじり。 DualEdge (仕様がよく分からんのでテケトー)と同期転送まわりをふにふにと書く。
Sun の HDD を dd してみたが謎のエラー(parity error?)。 調べたら、ターゲットから返ってきた SDTR を reject していた…。 ネゴの手順からいうとこの reject は無視されるんだろうが、 無視されなくても文句言えないか…。修正。
o つうわけでこんな感じ。
nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32UDE DualEdge SCSI adapter nsp0: interrupting at 10 scsibus0 at nsp0: 8 targets, 8 luns per target scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 4 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> disk fixed sd0: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors sd0: sync (100.00ns offset 15), 8-bit (10.000MB/s) transfers, tagged queueing cd0 at scsibus0 target 6 lun 0: <PIONEER, CD-ROM DR-U24X, 1.01> cdrom removable cd0: sync (100.00ns offset 8), 8-bit (10.000MB/s) transfers
cd0 からの読み出しを見てみた(波形は正論理)。同期転送になってるぽい。 ターゲットの転送速度が 100ns よりちょっと速いように見えるのは気のせいかしらん。 イニシエータの転送能力は 250ns (4MB/s) くらいか。
うーん、Sun の HDD からたくさん転送していると固まる…。