8139too.c (5)

現実トウヒベースで適当に進めます。

「PCI ID」テーブル

pci_device_id でタグを検索したら tag not found との事。find|xargs grep したら include/linux/mod_devicetable.h との事。

struct pci_device_id {
	__u32 vendor, device;		/* Vendor and device ID or PCI_ANY_ID*/
	__u32 subvendor, subdevice;	/* Subsystem ID's or PCI_ANY_ID */
	__u32 class, class_mask;	/* (class,subclass,prog-if) triplet */
	kernel_ulong_t driver_data;	/* Data private to the driver */
};

あら? なんか違うな。と思ったらフィールド横書きになってるや。上から

  • vendor ID
  • devide ID
  • subvendor ID
  • subdevice ID
  • class
  • class_mask
  • ドライバ毎のプライベートな属性

うーん、_(class, subclass, prog-if) triplet_って記述が微妙ですが、8139too.c の場合はどちらも 0 だけにここはスルー。

ちなみに

8139too.c では以下なカンジで定義されてて

static struct pci_device_id rtl8139_pci_tbl[] = {
	{0x10ec, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },

pci_driver 構造体の id_table 属性にセットされてます。

static struct pci_driver rtl8139_pci_driver = {
	.name		= DRV_NAME,
	.id_table	= rtl8139_pci_tbl,
	.probe		= rtl8139_init_one,
	.remove		= __devexit_p(rtl8139_remove_one),
#ifdef CONFIG_PM
	.suspend	= rtl8139_suspend,
	.resume		= rtl8139_resume,
#endif /* CONFIG_PM */
};

この構造体は rtl8139_init_module 手続きにて pci_register_driver に渡されているので、その中で何らかの登録処理が行なわれているのだろうと思われますが、ここもスルー。

あら?

「PCI ID」ってどうやって分かったんだろ。
って事でテキスト (Linux デバイスドライバプログラミング) を見てみたら The Linux PCI ID Repository にて情報がメンテされているとの事にて、上記引用しているソレを探してみると 0x10ec は Realtek Semiconductor Co., Ltd. 向けとの事で、0x8139 というエントリもあり。

これ、同じ chip (RTL8139D) 使ってるデバイスを探してるのか、それとも指摘が入って追加してるのかどうか。

とりあえづ

今日は早く寝る方向にてこれで止めて件の本に目を通しマース。