続々 vge(4)

Linux のソースを参考にしながらテストしてみたところ、足りないのはこんだけかな。
テストしたのは VT6130 なんで VT6122 等で必要かは不明。

diff --exclude=CVS -uNr src.orig/sys/dev/pci/if_vge.c src/sys/dev/pci/if_vge.c
--- src.orig/sys/dev/pci/if_vge.c	2008-12-07 01:00:25.000000000 +0900
+++ src/sys/dev/pci/if_vge.c	2009-02-08 22:10:37.000000000 +0900
@@ -967,6 +967,9 @@
 	}
 	aprint_normal_dev(&sc->sc_dev, "interrupting at %s\n", intrstr);
 
+	/* Clear sticky bits */
+	CSR_CLRBIT_1(sc, VGE_PWRSTAT, VGE_PWRSTAT_DS0|VGE_PWRSTAT_DS1);
+
 	/* Reset the adapter. */
 	vge_reset(sc);
 
diff --exclude=CVS -uNr src.orig/sys/dev/pci/if_vgereg.h src/sys/dev/pci/if_vgereg.h
--- src.orig/sys/dev/pci/if_vgereg.h	2006-10-31 23:13:30.000000000 +0900
+++ src/sys/dev/pci/if_vgereg.h	2009-02-08 22:10:50.000000000 +0900
@@ -540,6 +540,10 @@
 #define VGE_TXBLOCK_128PKTS	0x08
 #define VGE_TXBLOCK_8PKTS	0x0C
 
+/* power state shadow register */
+#define VGE_PWRSTAT_DS0		0x01
+#define VGE_PWRSTAT_DS1		0x02
+
 /* EEPROM control/status register */
 
 #define VGE_EECSR_EDO		0x01	/* data out pin */