RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Прикручиваем сетевуху D-Link DGE530T rev-B1 под FreeBSD 6.1-RELEASE-p10 [2008]
Прикупили в сервак сетевуху - D-Link DGE530T. В списке поддерживаемого железа она была. Тока вот определяться не захотела :).
/usr/home/lissyara/>dmesg | grep "ethernet"
pci5: <network, ethernet> at device 0.0 (no driver attached)
/usr/home/lissyara/>
/usr/home/lissyara/>pciconf -lv | \
? grep --after-context=2 --before-context=1 "D-Link System Inc"
none5@pci5:1:0: class=0x020000 card=0x4b011186
chip=0x4b011186 rev=0x11 hdr=0x00
vendor = 'D-Link System Inc'
class = network
subclass = ethernet
/usr/home/lissyara/>
Негусто. Неизвестный науке девайс... Почему - понял довольно быстро, поддержка была для D-Link DGE530T, а у меня была D-Link DGE530T rev-B1. Гугление и яндексение дало ссылку. Правда патч не подходил. У меня была:
/usr/home/lissyara/>uname -a
FreeBSD router.local 6.1-RELEASE-p10 FreeBSD 6.1-RELEASE-p10
#0: Fri Oct 27 19:06:39 MSD 2006
root@router.local:/usr/obj/usr/src/sys/main-smp i386
/usr/home/lissyara/>
а там был первый релиз. Файлики успели поменяться. Поэтому пришлось сделать тоже самое руками, итог такой:
/usr/src/sys/pci/>diff -Naur if_sk.c.orig if_sk.c
--- if_sk.c.orig Mon Oct 3010:17:352006
+++ if_sk.c Mon Oct 3010:23:062006
@@ -175,6 +175,11 @@
DEVICEID_DLINK_DGE530T,
"D-Link DGE-530T Gigabit Ethernet"
},
+ {
+ VENDORID_DLINK,
+ DEVICEID_DLINK_DGE530T_B1,
+ "D-Link DGE-530T Gigabit Ethernet, Rev.B1"
+ },
{ 0, 0, NULL }
};
@@ -1723,6 +1728,9 @@
case SK_PMD_1000BASETX:
sc->sk_pmd = IFM_1000_T;
break;
+ case DLGE_PMD_1000BASETX:
+ sc->sk_pmd = IFM_1000_T;
+ break;
default:
printf("skc%d: unknown media type: 0x%x\n",
sc->sk_unit, sk_win_read_1(sc, SK_PMDTYPE));
@@ -1738,6 +1746,7 @@
case DEVICEID_3COM_3C940:
case DEVICEID_LINKSYS_EG1032:
case DEVICEID_DLINK_DGE530T:
+ case DEVICEID_DLINK_DGE530T_B1:
/* Stay with VPD PN. */
pname = sc->sk_vpd_prodname;
break;
/usr/src/sys/pci/>
/usr/src/sys/pci/>diff -Naur if_skreg.h.orig if_skreg.h
--- if_skreg.h.orig Sun Nov 619:00:542005
+++ if_skreg.h Mon Oct 3010:41:032006
@@ -117,7 +117,7 @@
* D-Link gigabit ethernet device ID
*/
#define DEVICEID_DLINK_DGE530T 0x4c00
-
+#define DEVICEID_DLINK_DGE530T_B1 0x4b01
/*
* GEnesis registers. The GEnesis chip has a 256-byte I/O window
* but internally it has a 16K register space. This 16K space is
@@ -427,6 +427,8 @@
#define SK_PMD_1000BASESX 0x53
#define SK_PMD_1000BASECX 0x43
#define SK_PMD_1000BASETX 0x54
+#define DLGE_PMD_1000BASETX 0x31
+
/* GPIO bits */
#define SK_GPIO_DAT0 0x00000001
/usr/src/sys/pci/>
После пересборки ядра (он у меня не модулем, а в ядре) и перезагрузки, обнаружился новый девайс:
/usr/home/lissyara/>dmesg | grep --after-context=6 "D-Link DGE-530T"
skc0: <D-Link DGE-530T Gigabit Ethernet, Rev.B1> port 0x8000-0x80ff
mem 0xf0400000-0xf0403fff irq 22 at device 1.0 on pci5
skc0: DGE-530T Gigabit Ethernet Adapter rev. (0x9)
sk0: <Marvell Semiconductor, Inc. Yukon> on skc0
sk0: Ethernet address: 00:17:9a:06:0a:36
miibus2: <MII bus> on sk0
e1000phy0: <Marvell 88E1000 Gigabit PHY> on miibus2
e1000phy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
1000baseTX-FDX, auto
/usr/home/lissyara/>
/usr/home/lissyara/>pciconf -lv | \
? grep --after-context=2 --before-context=1 "D-Link System Inc"
skc0@pci5:1:0: class=0x020000 card=0x4b011186 chip=0x4b011186
rev=0x11 hdr=0x00
vendor = 'D-Link System Inc'
class = network
subclass = ethernet
/usr/home/lissyara/>
/usr/home/lissyara/>ifconfig sk0
sk0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
ether 00:17:9a:06:0a:36
media: Ethernet autoselect (none)
status: no carrier
/usr/home/lissyara/>
Ну и всё :) Будем надеяться, что поддержку скоро добавят в драйвер официально.