[ltp] Re: T430i ac wireless card

Bjørn Mork linux-thinkpad@linux-thinkpad.org
Mon, 30 Jun 2014 10:22:19 +0200


"D. Hugh Redelmeier" <hugh@mimosa.com> writes:

> Here's an example from my ThinkPad x61t:
>
> 03:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 4965 AG=
 or AGN [Kedron] Network Connection [8086:4230] (rev 61)
> 	Subsystem: Intel Corporation Device [8086:1010]
> 	Physical Slot: 3
> 	Flags: bus master, fast devsel, latency 0, IRQ 46
> 	Memory at f7f00000 (64-bit, non-prefetchable) [size=8K]
> 	Capabilities: [c8] Power Management version 3
> 	Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
> 	Capabilities: [e0] Express Endpoint, MSI 00
> 	Capabilities: [100] Advanced Error Reporting
> 	Capabilities: [140] Device Serial Number 00-1f-3b-ff-ff-69-c8-67
> 	Kernel driver in use: iwl4965
> 	Kernel modules: iwl4965
>
> Notice that the vendor part of the PCI code seems to be Intel, not
> Lenovo.

I don't *know* this stuff, so I'm only guessing here...

But looking at the iwlwifi driver I have noted that there are *lots* of
subsystem product IDs for what seems to be identical modules.  My guess
is that Intel allocates these per vendor.

For example, there are currently 28(!) different(?) 7260 2x2 AC modules
supported by the driver (the two numbers listed are the product ID and
subsystem product ID - the IWL_PCI_DEVICE macro hardcodes 0x8086 as
vendor ID and "any" susbsystem vendor ID):

bjorn@nemi:/usr/local/src/git/linux$ git grep iwl7260_2ac_cfg drivers/net/wireless/iwlwifi/pcie/drv.c
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4072, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4170, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0x4270, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0x4272, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4470, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4472, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4870, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x486E, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4A70, iwl7260_2ac_cfg_high_temp)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4A6E, iwl7260_2ac_cfg_high_temp)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4A6C, iwl7260_2ac_cfg_high_temp)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x4570, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0x4370, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x5070, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x5072, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x5170, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0x5770, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC072, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC170, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC770, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0xC270, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0xC272, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC470, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC472, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B1, 0xC570, iwl7260_2ac_cfg)},
drivers/net/wireless/iwlwifi/pcie/drv.c:        {IWL_PCI_DEVICE(0x08B2, 0xC370, iwl7260_2ac_cfg)},

This includes both mini-PCIe and m.2 form factor modules, which of
course is one good reason to use different IDs. Maybe that's the two
product IDs?  But I cannot find any reason for the large number of
subsystem IDs.  So therefore I guess that these are allocated to
different vendors.

FWIW, my plain Intel (i.e. *not* a Lenovo FRU) mini-PCIe module matches
the first line above.


Bjørn