[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: esp pcmcia scsi driver
筒井です。
#私も SCSI は最近触り出したので全部理解してるわけじゃないことに注意 ^^;
<009901c11bcd$092a5760$6e9d210a@de.neec.fc.nec.co.jp>の記事において
h_itoh@de.neec.fc.nec.co.jpさんは書きました。
> ただ,XS_CTL_POLLなのですが,SCSIコマンド発行後の結果を
> 割り込みではなく,ncr53c9x_poll()を使って処理するように
> ぼくには思えるのですが,発行するSCSIコマンド自体のキューイングも
> しなくなるのでしょうか
XS_CTL_POLL の場合は割り込みは一切使われず、コマンド発行後
ncr53c9x_poll() でそのコマンドが終わるのを待ってるだけだと思います。
ncr53c9x_scsipi_request() の case ADAPTER_REQ_RUN_XFER の
ところでは ready_list queue にコマンドを放り込んでいますが、
これは書き方の問題だけで、 XS_CTL_POLL の場合は直後の
ncr53c9x_poll() の呼び出しでコマンドが完了するまでは return せず
次のコマンドを受け付けませんから、 queue を使っているものの
実質一度に一つのコマンドしか処理してないと思います。
XS_CTL_POLL でない場合は
(1)上位 scsipi 層からの command を ready_list queue に放り込む
(2-1)現在 command 実行中でなければ ncr53c9x_sched() を呼ぶ →(3)へ
(2-2)実行中で busy だったら ready_list にコマンドがたまる →(4)へ
(3)ncr53c9x_sched() では ready_list からコマンドを取り出して実行開始
(4)実行中の command 終了後割り込みがかかって ncr53c9x_done() 等を処理して、
ready_list に新たな command があれば再度 ncr53c9x_sched() を呼ぶ
てな感じで、まとめると
・ESP_PCMCIA_POLL の場合は上記(4)を割り込みでする代わりに callout で
一定期間毎に ncr53c9x_intr() を呼ぶことで終了をチェックしてる
・XS_CTL_POLL の場合はコマンド発行後それが終わるまで busy loop してる
(上記で言えば (1)→(2-1)→(3)→ ncr53c9x_poll() で処理終了)
つまり
・ESP_PCMCIA_POLL は、ハード的に割り込みがない、あるいは
割り込み信号が拾えない場合に使う
・XS_CTL_POLL は、 kernel の resource の lock の関係などで
割り込みを使ってはいけない状態の時に使う (shutdown 時とか)
っていう違いですかね。
ただ、今の thorpej-scsipi だと scsipi の上位層でも下位のドライバに
どれだけ command を放り込んでよいかとか別途管理してるはずですが、
その辺はよく知りません ^^)
> あと気になっているのが,esp_pcmcia_initでチップのレジスタを
> 触っているのですが,これをncr53c9x_reset側に持っていったほうが
> 良いと思うのですけど,何か悪影響がでてしまうのですかね...
MI の ncr53c9x_reset() 側の記述が if (sc->sc_rev == ..) ばっかりに
なるのはかっこ悪いので、ちゃんとするなら glue functions に
reset する関数を足してそこに MD な reset 処理を書いて
それをncr53c9x_reset() から呼び出すべきなんでしょうが、
わりと面倒な話なので regster 設定の順序が問題にならないので
あれば今のままでもいいんじゃないでしょうか。
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp