CoregaのNIC(CG-LAPCIGT)とNetBSD

  • 投稿日:
  • by
  • カテゴリ:

引越をした頃から、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.hpcidevs_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のソース読めないので(ぉ。