[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bsd-nomads:15370] ThinkPad



はじめまして。時田と申します。

この前ThinkPad i1124にFreeBSD 4.2を入れたのですがWindowsを起
動した後にFreeBSDを起動するとなぜかpcicが見つからなくなって
しまい、PC-Cardが使えなくなってしまうという現象が発生しまし
た。電源を切ったあとに起動すれば、またちゃんと認識するのです
が、それではWindowsに負けたということになるので(笑)クイッ
クハックしました。
パッチの内容はpower stateを無理矢理D3からD0に変更するという
ものです。なぜそれで良いのかは分りませんが、一応治ります。

過去にもTI系のチップが乗ったマシンで同じような現象が報告され
ているので、このパッチで治るかもしれませんが、どうでしょう?

FreeBSDを4年近く使ってきて、始めてカーネルを読んだのですが、
とっても面白いですね。今までは”なんか難しそう”と思って、全
然手をつけていなかったのですが、それは単なる食わず嫌いでした。

---< ここからパッチ >------------------------------------------------------

--- pci/pcic_p.c.orig	Wed Mar 14 02:29:35 2001
+++ pci/pcic_p.c	Wed Mar 14 02:25:57 2001
@@ -320,10 +320,17 @@
 {
 	u_int32_t device_id = pci_get_devid(dev);
 	u_long command;
-
+	u_int16_t pmcs, pmcs_offset = pci_read_config(dev, CB_PCI_CAP_PTR, 1)+4;
+	
 	/* Init. CardBus/PC-card controllers as 16-bit PC-card controllers */
 
 	/* Place any per "slot" initialization here */
+
+	/* Power State change D0 */
+	pmcs = pci_read_config(dev, pmcs_offset, 2);
+	if((pmcs & 0x03) != 0){
+		pci_write_config(dev, pmcs_offset, pmcs & ~0x03, 2);
+	}	
 
 	/*
 	 * In sys/pci/pcireg.h, PCIR_COMMAND must be separated

--- pci/pcic_p.h.orig	Wed Mar 14 02:29:43 2001
+++ pci/pcic_p.h	Wed Mar 14 02:25:57 2001
@@ -131,6 +131,7 @@
 #define	CB_PCI_HEADER_TYPE	0x0e	/* PCI header type */
 #define	CB_PCI_BIST		0x0f	/* Built-in self test */
 #define	CB_PCI_SOCKET_BASE	0x10	/* Socket/ExCA base address reg. */
+#define	CB_PCI_CAP_PTR		0x14	/* Capability pointer */
 #define	CB_PCI_CB_STATUS	0x16	/* CardBus Status */
 #define	CB_PCI_PCI_BUS_NUM	0x18	/* PCI bus number */
 #define	CB_PCI_CB_BUS_NUM	0x19	/* CardBus bus number */

---< ここまで >------------------------------------------------------------

/*-------------------------------------------------------------------*
         時田  瑛紀      長野高専  情報工学科  2年       

                             <school: j99419@ei.nagano-nct.ac.jp>
 *-------------------------------------------------------------------*/