ATARI用 Ethernetアダプタ EtherNEC製作&ドライバ作成記

2010年のOSC神戸で展示した ATARI用Ethernet SMC_TT http://togetter.com/li/76769 の続編として作成した、ATARIマシンのROMカートリッジスロットにISA NE2000を接続するアダプタである "EtherNEC" のハード製作およびNetBSDドライバ作成関連のつぶやきアーカイブです。全然まとめになっていなくてすいません。 4月16日に迫った今年のOSC神戸のNetBSDセミナーで、このEtherNECとbus_space()の解説話ができたらな〜、と鋭意準備中です……
1
前へ 1 2 ・・ 15 次へ
Izumi Tsutsui @tsutsuii

無理矢理 useword=0 にすると MAC address が狂う。それはいいとして invalid packet length の症状は変わらず。

2010-02-22 21:01:21
Izumi Tsutsui @tsutsuii

そもそも ne2000_writemem() と ne2000_readmem() では useword 引数見てるのに ne2000_write_mbuf() では nsc->sc_type が NE2000 かどうか見てるってのも変な感じ。

2010-02-22 21:03:05
Izumi Tsutsui @tsutsuii

うーん。ソースの表面だけ読んでないで API的にどの関数がどう呼ばれるのかちゃんと読まないとダメなのか。めんどい (´・ω・`)

2010-02-22 21:04:08
Izumi Tsutsui @tsutsuii

invalid packet length ってのは dreamcast の NE2000 でもよく出てたけど、同じ原因だったりするのだろうか

2010-02-22 21:06:35
Izumi Tsutsui @tsutsuii

D8-15 に貼ってたテープをはがしても症状は同じっぽい。汚れてて接触不良かもしれないけど。

2010-02-22 21:11:23
Izumi Tsutsui @tsutsuii

実はISAのこともちゃんと調べてないのであてずっぽだけど、IOCS16Bを出さないカードに対するwordアクセスはハード側で勝手に8bit×2回のアクセスとして分割して処理されるのかしら。だったらそれなりに動くのも理解できなくもないけど。

2010-02-22 21:29:12
Izumi Tsutsui @tsutsuii

ごそごそいじって bus_space_*_1() のバイトアクセスを使うようにしても invalid packet length の症状は変わらないっぽい。うーん。よくわからん。

2010-02-22 21:57:36
Izumi Tsutsui @tsutsuii

ftp get のときの症状を見ると受信してはエラーを繰り返してる感じ。ってことはバッファメモリ量の値がおかしくてメモリのないところに受信してるときだけエラー、という仮説が成り立つ?

2010-02-22 22:03:50
Izumi Tsutsui @tsutsuii

start=16384, size=8192 にしてみたら、 invalid packet length は出なくなったけど妙に遅い。別の部分もあわせて変えないとダメなのか?

2010-02-22 22:07:58
Izumi Tsutsui @tsutsuii

まー、先にデータシート読めって話かなあ。8019の解説が載ってたトラ技記事でも探すか。

2010-02-22 22:09:12
Izumi Tsutsui @tsutsuii

トラ技2006年3月号か。最初のページに8bitアクセスで使えるうんぬん書いてあるから本文にはそういう使い方が載っている!? わざわざバックナンバー探さなくてもトラ技SPECIALで総集編が出てたりするか?

2010-02-22 22:24:04
Izumi Tsutsui @tsutsuii

NE2000での8bit modeか16bit modeかの判別はEEPROM値(かどうかは知らないけどとにかく memory領域 offset 0x1c の値)を見たほうがいいような気がするな……

2010-02-23 00:35:07
Izumi Tsutsui @tsutsuii

あと気になるのは !useword のときは ne2000_readmem() で Round up to a word をしなくてもいいんではないか? というくらいか。

2010-02-23 00:37:47
Izumi Tsutsui @tsutsuii

したからおかしくなるものでもないという気もするけど、概ね動いてて確率的におかしくなるってのはそれくらいしか思いつかない。もっとも odd byte で呼ばれることがあるのかどうかすら見てないけど。

2010-02-23 00:39:12
Izumi Tsutsui @tsutsuii

そもそも NE2000の8bit modeはともかく、NE1000ってテストされたことあるのだろうか

2010-02-23 01:09:46
Izumi Tsutsui @tsutsuii

useword判定のためにmemoryを読もうとしたらmemoryを読むのにusewordが必要だった件

2010-02-23 02:01:20
Izumi Tsutsui @tsutsuii

Round up to a word 有無は関係ないっぽい。うーむ

2010-02-23 02:03:03
Izumi Tsutsui @tsutsuii

10BASE-Tを使うとひしひしと感じる、 MONOLITHICカーネル 12MB弱ってでか過ぎるよ

2010-02-23 02:12:27
Izumi Tsutsui @tsutsuii

invalid packet length が発生するのはバッファメモリの0x3100以降がほとんどだから何かバグっているか設定の問題という気はするけど、たまに前の方でも起こる。むぅ

2010-02-23 02:18:02
Izumi Tsutsui @tsutsuii

ネットワークまわりのドライバの場合ドライバがバグってても上位層がなんとかしてしまうからバグが直接見えにくくて困るパターン。ディスクまわりは逆に誰も修正してくれずいつのまにかfile system腐っててハマるパターンだけど。

2010-02-23 02:20:06
Izumi Tsutsui @tsutsuii

まー、やっぱりマニュアルなり動いてるソースなりを確認するのが先か……

2010-02-23 02:21:01
Izumi Tsutsui @tsutsuii

RTL8019AS 8bit mode続き。Linuxのソース見てたら「RTL8019の8bitモードについてデータシートにこう書いてある」と書いてある罠 orz

2010-02-23 22:11:36
Izumi Tsutsui @tsutsuii

要するに 8bit mode のときはメモリが半分しか使えない。16bit幅で 16KBのものを 8bit幅でも 16KB使うにはハード的にかなり面倒なことしないといけないと思うので、そもそもカニチップだけの制約とも思えないけど。

2010-02-23 22:14:30
Izumi Tsutsui @tsutsuii

ま、昨日の仮説は正解だったということで、あとはなんで遅くなるのかの調査と、どう書き直すべきかの検討が必要。

2010-02-23 22:15:46
Izumi Tsutsui @tsutsuii

今のコードだとRTL8019の判定は各バスアタッチメントでやってるけど、周知の通りRTL8019はもはやISA用ではなく汎用チップと化しているので、RTL8019の判定はMIの ne2000_detect() に持っていって media関連も MI で設定すべき。

2010-02-23 22:20:02
前へ 1 2 ・・ 15 次へ