引越をした頃から、tlp0
が、tlp0: receive error: CRC error
などとエラーを吐くようになっていて、どうも気になってしょうがなかったので、ヨドバシ・ドットコムから、コレガのCG-LAPCIGTとバッファローのギガビット対応スイッチングハブLSW-GT-8NSRを買ったわけです。
このNICは、RealTekのRTL8169Sという石をつかっているので、NetBSDだと、reとして、利用できるはずです。
で、今日、届いたので、さっそくNetBSDの鯖に取り付けたわけです。ところが、
Corega product 0xc107 (ethernet network, revision 0x10) at pci1 dev 9 function 0 not configured
と言われてしまって、使えないわけです。たぶん、石は対応しているので、このカードをその石のドライバが認識するようにしてやればいいはずだよな。と、いうことで、いろいろ調べたりしたわけです。
まずは、/sys/dev/pci/pcidevs
を以下のように修正して、0xc107
に名前をつけてあげるわけです。
*** /sys/dev/pci/pcidevs Wed May 4 14:49:57 2005 --- /sys/dev/pci/pcidevs.new Wed May 4 11:57:23 2005 *************** *** 1314,1319 **** --- 1314,1321 ---- /* Corega products */ product COREGA CB_TXD 0xa117 FEther CB-TXD 10/100 Ethernet product COREGA 2CB_TXD 0xa11e FEther II CB-TXD 10/100 Ethernet + product COREGA LAPCIGT 0xc107 CG-LAPCIGT + /* Corollary Products */ product COROLLARY CBUSII_PCIB 0x0014 \"C-Bus II\"-PCI Bridge
そして、awk -f devlist2h.awk < pcidevs
で、pcidevs.h
とpcidevs_data.h
を生成します。このとき、生成されたPCI_PRODUCT_??
という名前を後で使うので覚えておきます。
このカードの名前がができたわけで、この名前をre
のドライバが認識できるよう修正してあげるわけです。
*** /sys/dev/pci/if_re_pci.c Wed May 4 14:49:56 2005 --- /sys/dev/pci/if_re_pci.c.new Wed May 4 12:46:02 2005 *************** *** 106,111 **** --- 106,113 ---- "RealTek 8169 Gigabit Ethernet" }, { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8169, RTK_HWREV_8169S, "RealTek 8169S Single-chip Gigabit Ethernet" }, + { PCI_VENDOR_COREGA, PCI_PRODUCT_COREGA_LAPCIGT, RTK_HWREV_8169S, + "Corega CG-LAPCIGT Gigabit Ethernet" }, { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8169, RTK_HWREV_8110S, "RealTek 8110S Single-chip Gigabit Ethernet" }, { 0, 0, 0, NULL }と、こんな感じで追加します。そして、カーネルを作り直して(
./build.sh kernel=GENERIC
)、そのカーネルで起動するわけです。そうすると、re0 at pci1 dev 9 function 0: Corega CG-LAPCIGT Gigabit Ethernet re0: interrupting at irq 11 re0: Ethernet address 00:0a:79:69:e0:6b re0: using 256 tx descriptors ukphy1 at re0 phy 7: Generic IEEE 802.3u media interface ukphy1: RTL8169S/8110S 1000BASE-T media interface (OUI 0x00e04c, model 0x0011),rev. 0 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
という感じで認識されるです。
ただ、よくわからかったのは、if_re_pci.c
にこんな感じで追加していいのかどうか、だったりするわけで……。個人的には、問題なく使えているので、いいんですが、お作法として、ここでいいのかどうか?ってのが、よくわからないんですよね。そもそも、Cのソース読めないので(ぉ。