VMWareのPCIデバイスをリストしてみた

Cyber PeripheralsのPCI Configurationページや、OS WikiのPCIに関するページを参考にして、VMWare仮想マシンPCIバス0のデバイスを列挙しています。

TOPPERS/JSP Kernel Release 1.4 (patchlevel = 3) for IA-32(PC/AT) (Sep 21 2008, 10:02:51)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

System logging task is started on port 1.
-- buffered messages --
Sample program starts (exinf = 0).
Found 8086, 7190.
Found 8086, 7191.
Found 8086, 7110.
Found 15ad, 0405.
Found 1000, 0030.
Found 1022, 2000.
Found 1274, 1371.
Sample program ends.

よく知られているように、VMWareの仮想チップセット440BX( 8086 7190 )です。古い。一番最後の行(1274, 1371)はEnsoniqのオーディオカードです。列挙に使ったPCI Config レジスタの読み取り関数はこんな感じ。

unsigned int getPCIConfigData( unsigned int command )
{
	unsigned int retVal;
	
	asm volatile(
			"mov $0xcf8,%%dx;"	// DXにPCI config コマンド・レジスタのアドレスをセット
			"out %0,%%dx;" 		// PCIコマンドを発行
			 : 
			 :"a"(command)
			 :"%dx"  );
			 
	asm volatile(
			"mov $0xcfc,%%dx;"	// DXに PCI Config データ・レジスタのアドレスをセット
			"in %%dx,%0;"		// PCI config データを読み取り
			:"=a"(retVal)
			:
			: "%dx"
			);
	return retVal;
}