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

Re: please review the diff against SMC 91Cxx driver



Izumi Tsutsui <tsutsui@ceres.dti.ne.jp> wrote:

Izumi> 先ほど subscribe した筒井です。

こんにちは。お返事ありがとうございます。

Izumi> このときの結論としては、 atari のように bus_space(9) 
Izumi> のbus_space_tag 中に stride の値を設定して sparse な
Izumi> アドレス空間を持つ bus の場合はそれを使う、ということ
Izumi> になり、最初提示した reg_map[] を使う案はボツになりま
Izumi> した。

なるほど、そうでしたか。

Izumi> なので mac68k でも同じように bus_space(9) に stride の
Izumi> support を追加するのが consistent な気がします。たぶん
Izumi> MI wdc を使う場合にも必要だと思いますし。

mac68kのNuBusの場合はlong wordの各バイトプレーン毎にメモリー
やレジスターを割り付けるかどうかが選べるので(この設定はカー
ドの設定ROMに書いてあります)、面倒なことになっています。

実際にはそういうカードは見たことがありませんが、たとえばアド
レスの下4ビットが0x0、0x1、0x3の番地にカードのメモリーをマッ
プすることもできます。strideの方法では1バイトおき、2バイトお
き、…のマップにしか対応ませんよね。

Izumi> dp8390.c の場合はアドレス間隔が違うだけでなく
Izumi> アドレスの並びが逆になっているものがありますので、
Izumi> (mac68k/nubus/if_ae_nubus.c の一部)
Izumi> これは reg_map[] で対処しないとどうしようもないです。
Izumi> #if_sm_nubus.c がどうなのかはわかりませんが。

>> ○mac68kはbig endianなので、レジスターのアクセスにle16toh()、
>> htole16()を使うようにした

Izumi> endian の差異については bus_space(9) の中で吸収される
Izumi> べきで、bus_space(9) の入出力をさらに bswap するのは
Izumi> よろしくないでしょう。MI のドライバ中で endian をひっ
Izumi> くり返してるのは DMA bus master がhost の endian を無
Izumi> 条件に仮定していてメモリ上に特定の endian でデータを
Izumi> 用意する必要がある場合だけだと思います。

SMC91Cxxの場合はパケットのデータもレジスター経由でやりとりす
るのですが、このレジスターがlittle endianになっています。

Izumi> これも atari のように各 endian に対応する bus_space 
Izumi> 関数群を用意してやるのが正しい対処に思えます。

最初やりかけて挫折したのでした^^;)

Izumi> ただ mac68k の場合、同じバスでもデバイスによって CPU 
Izumi> バスとデバイスのバスのビットの対応が違うという話も聞
Izumi> いているので簡単にはいかないのかもしれません。

Izumi> (if_sn_nubus.c を見ると上位 word と下位 word とを入れ
Izumi> 換えてはいるがbus_space_{read,write}_2() についてはそ
Izumi> のまま使っているように見える)

はい。上に書いた通りです。

>> ○起動時にNICのROMからMAC addressを読み込んでレジスターに書
>> き込む機能を追加した

Izumi> これってすべて MD 側に処理を移動してしまってもよい
Izumi> ように見えますが、 MI に置いた方がよいでしょうか?

コメントにShould get Ethernet address from EEPROM!!とあった
のでそのまま突っ込んでみましたが、前述のような話がありますか
ら、MDの方がいいようですね。

--
SUNAGAWA Keiki <Keiki_SUNAGAWA@yokogawa.co.jp>