ネットワークカードを使いたい with FreeBSD 6-stable

古いノートパソコンでネットワークを使う必要性があって、pccardなネットワークカードを買ったのですが、見事に認識しませんでした。 で、もう一枚買ったカードも外れでした…

  • BUFFALO LPC-PCM-CLX
  • Corega CG-LAPCCTXD

で、動かそうと思ったのですが、4.*あたりの情報(pccarddを使う方法)は多かったのですが、6-stableでどうしたらいいかうまく見付けられなかったので、ここにまとめときます。

カード情報の確認の仕方

とりあえず、カードを差したときのdmesgを確認します。

標準的な設定だとあまり詳しい情報は出ません。

pccard0: <unknown card> (manufacturer=0xffff, product=0x1090, function_type=6) at function 0
pccard0:    CIS info: BUFFALO, LPC-PCM-CLX, , 

詳しいCIS turpleなどを得たい場合、現在は以下のようにkernel MIBで設定するようです。

surudoi [ ~ ] % sudo sysctl hw.cardbus.cis_debug=1
hw.cardbus.cis_debug: 0 -> 1
surudoi [ ~ ] % sudo sysctl hw.pccard.cis_debug=1
hw.pccard.cis_debug: 0 -> 1

すると、以下のように詳しい情報が得られます。

cis mem map 0xe7c38000 (resource: 0xe0210000)
pccard0: CIS tuple chain:
CISTPL_DEVICE type=null speed=null
 01 02 00 ff
CISTPL_VERS_1
 15 19 01 00 42 55 46 46 41 4c 4f 00 4c 50 43 2d
 50 43 4d 2d 43 4c 58 00 00 00 ff
CISTPL_MANFID
 20 04 ff ff 90 10
CISTPL_CONFIG
 1a 05 01 01 c0 03 63
CISTPL_CFTABLE_ENTRY
 1b 0b c7 81 19 07 55 4d 5d 65 30 ff ff
CISTPL_CFTABLE_ENTRY
 1b 07 07 08 ca 60 00 03 1f
CISTPL_CFTABLE_ENTRY
 1b 07 07 08 ca 60 40 03 1f
CISTPL_CFTABLE_ENTRY
 1b 07 07 08 ca 60 60 03 1f
CISTPL_CFTABLE_ENTRY
 1b 07 07 08 ca 60 00 02 1f
CISTPL_CFTABLE_ENTRY
 1b 07 07 08 ca 60 20 02 1f
CISTPL_FUNCID
 21 02 06 00
CISTPL_FUNCE
 22 02 01 02
CISTPL_FUNCE
 22 02 02 64
CISTPL_FUNCE
 22 02 03 01
CISTPL_END
 ff
cis mem map e7c38000
CISTPL_LINKTARGET expected, code 00 observed
pccard0: <unknown card> (manufacturer=0xffff, product=0x1090, function_type=6) a
t function 0
pccard0:    CIS info: BUFFALO, LPC-PCM-CLX, , 

Corega CG-LAPCCTXDの場合

dmesgでは以下のような情報が得られます。

pccard0: <unknown card> (manufacturer=0xc00f, product=0x0000, function_type=6) at function 0
pccard0:    CIS info: corega K.K., (CG-LAPCCTXD), (HardwareFirmwareVer.), (nothing)

どうも、このパターンは、CIS infoで表示されている文字列がマッチしているかどうかを調べて使えるようにしているみたいです。

で、触らないとダメなのは以下の通り。

両方のパッチから切り出しているので、オフセットがあると思います。

--- sys/dev/pccard/pccarddevs.org       Tue Aug 29 13:00:20 2006
+++ sys/dev/pccard/pccarddevs   Fri Sep  1 14:19:07 2006
@@ -672,6 +674,7 @@
 product COREGA FAST_ETHER_PCC_TX       { "corega&spK.K.", "corega&spFastEther&spPCC-TX", NULL, NULL } Corega FastEther PCC-TX
 product COREGA FETHER_PCC_TXD  { "corega&spK.K.", "corega&spFEther&spPCC-TXD", NULL, NULL } Corega FEther PCC-TXD
 product COREGA FETHER_PCC_TXF  { "corega", "FEther&spPCC-TXF", NULL, NULL } Corega FEther PCC-TXF
+product COREGA LAPCCTXD        { "corega&spK.K.", "(CG-LAPCCTXD)", NULL, NULL } Corega LAPCCTXD
 product COREGA WIRELESS_LAN_PCC_11     { "corega&spK.K.", "Wireless&spLAN&spPCC-11", NULL, NULL } Corega Wireless LAN PCC-11
 product COREGA WIRELESS_LAN_PCCA_11    { "corega&spK.K.", "Wireless&spLAN&spPCCA-11", NULL, NULL } Corega Wireless LAN PCCA-11
 product COREGA WIRELESS_LAN_PCCB_11    { "corega_K.K.", "Wireless_LAN_PCCB-11", NULL, NULL } Corega Wireless LAN PCCB-11
--- sys/dev/ed/if_ed_pccard.c.org       Tue Aug 29 12:56:41 2006
+++ sys/dev/ed/if_ed_pccard.c   Fri Sep  1 11:30:21 2006
@@ -154,6 +155,7 @@
        { PCMCIA_CARD(COREGA, ETHER_II_PCC_TD), 0},
        { PCMCIA_CARD(COREGA, ETHER_PCC_T), 0},
        { PCMCIA_CARD(COREGA, ETHER_PCC_TD), 0},
+       { PCMCIA_CARD(COREGA, LAPCCTXD), 0},
        { PCMCIA_CARD(COREGA, FAST_ETHER_PCC_TX), NE2000DVF_DL100XX},
        { PCMCIA_CARD(COREGA, FETHER_PCC_TXD), NE2000DVF_AX88X90},
        { PCMCIA_CARD(COREGA, FETHER_PCC_TXF), NE2000DVF_DL100XX},

あとは、カーネルを再構築してインストールします。

で、リブートした後でカードを指すとed1として見えるようになるはずです。

ed1: <corega K.K. (CG-LAPCCTXD)> at port 0x3100-0x311f irq 9 function 0 config 32 on pccard0
ed1: [GIANT-LOCKED]
ed1: Ethernet address: 00:0a:79:66:da:db
ed1: type NE2000 (16 bit) 

BUFFALO LPC-PCM-CLXの場合

こちらのdmesgは以下のような感じ。

pccard0: <unknown card> (manufacturer=0xffff, product=0x1090, function_type=6) at function 0
pccard0:    CIS info: BUFFALO, LPC-PCM-CLX, , 

こちらでは、manufacturerが0ffff(=-1)で、product=0x1090なエントリを直接指定する方法で動作させています。

変更点は以下のような感じになります。

--- sys/dev/pccard/pccarddevs.org       Tue Aug 29 13:00:20 2006
+++ sys/dev/pccard/pccarddevs   Fri Sep  1 14:19:07 2006
@@ -276,6 +276,7 @@
 product BUFFALO LPC4_CLX       0x0309  BUFFALO LPC4-CLX
 product        BUFFALO LPC3_CLT        0x030a  BUFFALO LPC3-CLT Ethernet Adapter
 product BUFFALO WLI_CF_S11G    0x030b  BUFFALO AirStation 11Mbps CF WLAN
+product BUFFALO2 LPC_PCM_CLX   0x1090  BUFFALO LPC-PCM-CLX
 
 /* Compaq Products */
 product COMPAQ NC5004          0x0002 Compaq Agency NC5004 Wireless Card
@@ -639,6 +640,7 @@
 vendor IODATA3                 -1      I-O DATA
 vendor LANTECH                 -1      Lantech Computer Company
 vendor MELCO2                  -1      Melco Corporation
+vendor BUFFALO2                        -1      BUFFALO (Melco Corporation)
 vendor NDC                     -1      NDC
 vendor NEC                     -1      NEC
 vendor OEM2                    -1      Generic OEM
--- sys/dev/ed/if_ed_pccard.c.org       Tue Aug 29 12:56:41 2006
+++ sys/dev/ed/if_ed_pccard.c   Fri Sep  1 11:30:21 2006
@@ -146,6 +146,7 @@
        { PCMCIA_CARD(BUFFALO, LPC4_TX), NE2000DVF_AX88X90},
        { PCMCIA_CARD(BUFFALO, LPC4_CLX), NE2000DVF_AX88X90},
        { PCMCIA_CARD(BUFFALO, LPC_CF_CLT), 0},
+       { PCMCIA_CARD(BUFFALO2, LPC_PCM_CLX), 0},
        { PCMCIA_CARD(CNET, NE2000), 0},
        { PCMCIA_CARD(COMPEX, AX88190), NE2000DVF_AX88X90},
        { PCMCIA_CARD(COMPEX, LANMODEM), 0},

で、動作しているときのdmesgは以下の様になります。

ed1: <BUFFALO LPC-PCM-CLX> at port 0x300-0x31f irq 9 function 0 config 7 on pccard0
ed1: [GIANT-LOCKED]
ed1: Ethernet address: 00:0d:0b:78:21:ce
ed1: type NE2000 (16 bit) 

別解: productを文字列で指定する

Corega CG-LAPCCTXDと同じように、productをIDで指定するのでは無く、文字列で指定する場合は以下のような感じになります。

--- sys/dev/pccard/pccarddevs.orig      Sat Nov  5 03:11:23 2005
+++ sys/dev/pccard/pccarddevs   Fri Sep  1 19:58:48 2006
@@ -276,6 +276,8 @@
 product BUFFALO LPC4_CLX       0x0309  BUFFALO LPC4-CLX
 product        BUFFALO LPC3_CLT        0x030a  BUFFALO LPC3-CLT Ethernet Adapte
r
 product BUFFALO WLI_CF_S11G    0x030b  BUFFALO AirStation 11Mbps CF WLAN
+/* product BUFFALO2 LPC_PCM_CLX        0x1090  BUFFALO LPC-PCM-CLX */
+product BUFFALO2 LPC_PCM_CLX   { "BUFFALO", "LPC-PCM-CLX", NULL, NULL } BUFFALO
 LPC-PCM-CLX
 
 /* Compaq Products */
 product COMPAQ NC5004          0x0002 Compaq Agency NC5004 Wireless Card
@@ -639,6 +641,7 @@
 vendor IODATA3                 -1      I-O DATA
 vendor LANTECH                 -1      Lantech Computer Company
 vendor MELCO2                  -1      Melco Corporation
+vendor BUFFALO2                        -1      BUFFALO (Melco Corporation)
 vendor NDC                     -1      NDC
 vendor NEC                     -1      NEC
 vendor OEM2                    -1      Generic OEM

これらの使い分けは、同じプロダクト文字列は返すけど、マイナーバージョンアップなどでproduct IDが変わったりする場合は、こちらの方法を使うってことだと思います。

この場合も、manufacturerが0xffff(=-1)のBUFFFALOは現状では存在していないので、追加してあげてます。

パッチ

両方のカードのパッチをまとめたものです。

疑問など

  • NDISって無線LANカードでは使っている人多いですが、普通のネットワークカードは動かせないの?
    • (手順間違っていた可能性もありますが)LPC-PCM-CLXでうまく動かせませんでした(;-;)
  • カーネル再構築以外に手は無いの?
    • 昔みたいに/etc/pccard.confへの追記だけではうまくいかないのかなぁ…
    • 某友人からのコメントですが、やっぱりモジュール化してそこだけコンパイルって手段かなと
 # カード差す
surudoi [ ~ ] % dmesg
  (snip)
pccard0: <unknown card> (manufacturer=0xc00f, product=0x0000, function_type=6) at function 0
pccard0:    CIS info: corega K.K., (CG-LAPCCTXD), (HardwareFirmwareVer.), (nothing)
  (snip)
 # カード抜く
surudoi [ ~ ] % sudo kldload if_ed.ko  
 # カード差す
surudoi [ ~ ] % dmesg
  (snip)
ed1: <corega K.K. (CG-LAPCCTXD)> at port 0x3100-0x311f irq 9 function 0 config 3
2 on pccard0
ed1: [GIANT-LOCKED]
ed1: Ethernet address: 00:0a:79:66:da:db
ed1: type NE2000 (16 bit) 
  (snip)
 # カード抜く
surudoi [ ~ ] % sudo kldunload if_ed.ko
 # カード差す
surudoi [ ~ ] % dmesg
  (snip)
pccard0: <unknown card> (manufacturer=0xc00f, product=0x0000, function_type=6) at function 0
pccard0:    CIS info: corega K.K., (CG-LAPCCTXD), (HardwareFirmwareVer.), (nothing)
  (snip)

コメントをどうぞ

User
Message
Last modified: 2006-09-06
Post-it: New Post-it (help)

Text color: [_][_][_][_]

Background: [_][_][_][_][_][_]

Draw Line:

x: y: