[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

esp pcmcia scsi driver



こんにちは 伊藤です
2001/07/16にtar_filesからとってきたi386の-currentを
使っています

# もう2,3日悩んだ結果なので,長くなってます すいません
# 夏休みまであと1日しかないのでちょっとあせってます

手元にMELCOのBUFFALO IFC-DCがあったので,CISを見てみたら
RATOC REX-9530で,こいつを調べてみるとFAS408らしいので,
esp_pcmciaでさくっと動くと思っていました...しかし,それほど甘くはなかった

このカードはManufacture code:0xc015,Product:0x1なので,
RATOC REX-R280にmatchしてしまいます
なので,これらのカードを共存させるためにはリテラルでmatchさせる
必要があるようです
この部分の修正をして,RATOC REX-9530を認識できるようにしました

# この部分は,ソースをもう少し整理できたらsend-prしようと思ってます

それで,
esp_pcmcia_attach -> ncr53c9x_attach -> (config_found) -> scsibusattach
-> (config_interrupts) -> scsibus_config_interrupts -> scsi_probe_bus
-> scsi_probe_device -> scsipi_test_unit_readyの順で動作するのを確認できた
のですが,target=0,lun=0のtest unit readyを出したところで止まってしまいます
割り込みが出てないのかと思い,FreeBSD,Linuxのソースを見ながら調べてみたの
ですが,特にchipからの *割り込みに関わる部分* での相違は見当たらなかったです
# 少しFreeBSDを参考にして手を入れてみましたが...
事実,オシロで見てみるとchipからの割り込みは出ているようです

割り込みが出ている前提で,あらためてscsipiのソースを追いかけたのですが,
scsi_probe_bus -> scsipi_adapter_addref
-> (adapt->adapt_enableがあれば,それを実行) -> (return to scsi_probe_bus)
-> scsi_probe_device -> scsipi_test_unit_ready -> scsipi_command ->
・・途中省略(笑)・・
-> (sc_adapter.adapter_requestで指定された)ncr53c9x_scsipi_request
-> ncr53c9x_sched -> ncr53c9x_select
となったあとに,
ncr53c9x_intr,ncr53c9x_poll,もしくはesp_pcmcia_pollにでも入って処理
が続くのでしょうが,どちらにも処理がこないでそのままだんまりになってしまいます
chipから割込みが出ているにも関わらずにです
interrupt handlerの登録あたりを調べてみると esp_pcmcia_enable で
処理しているようなのですが,こいつが誰からも呼ばれていません
scsipi_adapter_addref から adapt->adapt_enableとして呼び出される
とつじつまがあうので,
esp_pcmcia_attach で,sc->sc_adapter.adapt_enable = esp_pcmcia_enable;
を追加してみたら,deviceのprobeまで成功してようやく立ち上がりました

ここからが質問なのですが,
1. cvsで最新のソースを確認しても,adapt_enableは設定されていないのですが,
   espがもともと対象にしているPanasonic KXLC002は,-currentで動作している
   のでしょうか
2. 動作しているとしたらpollingになっているのでしょうか
   たとえpollingだとしても,以下の点が分からないです
    ・esp_pcmcia.c で #ifdef ESP_PCMCIA_POLL されていれそれっぽい
      のですが,これはタイムアウトを監視できるようにするだけだと思われます
    ・ncr53c9x_pollが呼ばれるとしたら,XS_CTL_POLLのフラグが立っている
      必要があり,このためには,
      adapt->adapt_flags |= SCSIPI_ADAPT_POLL_ONLY; となっている必要
      があると思うのですが,このフラグもセットされていません
      また,scsipi_get_xsでcold boot時(cold == 1)であれば,XS_CTL_POLL
      を立てているのですが,pcmcia_attach時点で既に cold == 0 になって
      しまっています まあ,それ以前に起動後PC Cardを挿したりした場合は,
      cold は絶対 0 になってると思われます

esp_pcmcia.cから
sc->sc_adapter.adapt_enable = esp_pcmcia_enable;
が抜けているだけだとしたら,3ヶ月も放置されているはずも無いので,
根本的に何か大きな勘違いをしているのでしょうか...

NetBSDのドライバを追いかけるのは初めてなので,宜しくお願いします
# いちおう 逃げをうっておきます(笑)