[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