drivers/net/wireless/ath/ath12k/wifi7/pci.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/ath/ath12k/wifi7/pci.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/ath/ath12k/wifi7/pci.c
Extension
.c
Size
5863 bytes
Lines
216
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

switch (soc_hw_version_major) {
		case ATH12K_PCI_W7_SOC_HW_VERSION_2:
			ab->hw_rev = ATH12K_HW_QCN9274_HW20;
			break;
		case ATH12K_PCI_W7_SOC_HW_VERSION_1:
			ab->hw_rev = ATH12K_HW_QCN9274_HW10;
			break;
		default:
			dev_err(&pdev->dev,
				"Unknown hardware version found for QCN9274: 0x%x\n",
				soc_hw_version_major);
			return -EOPNOTSUPP;
		}
		break;
	case WCN7850_DEVICE_ID:
		ab->id.bdf_search = ATH12K_BDF_SEARCH_BUS_AND_BOARD;
		ab_pci->msi_config = &ath12k_wifi7_msi_config[0];
		ab->static_window_map = false;
		ab_pci->pci_ops = &ath12k_wifi7_pci_ops_wcn7850;
		/*
		 * init window reg addr before reading hardware version
		 * as it will be used there
		 */
		ab_pci->window_reg_addr = WINDOW_REG_ADDRESS;
		ath12k_wifi7_pci_read_hw_version(ab, &soc_hw_version_major,
						 &soc_hw_version_minor);
		ab->target_mem_mode = ATH12K_QMI_MEMORY_MODE_DEFAULT;
		switch (soc_hw_version_major) {
		case ATH12K_PCI_W7_SOC_HW_VERSION_2:
			ab->hw_rev = ATH12K_HW_WCN7850_HW20;
			break;
		default:
			dev_err(&pdev->dev,
				"Unknown hardware version found for WCN7850: 0x%x\n",
				soc_hw_version_major);
			return -EOPNOTSUPP;
		}
		break;
	case QCC2072_DEVICE_ID:
		ab->id.bdf_search = ATH12K_BDF_SEARCH_BUS_AND_BOARD;
		ab_pci->msi_config = &ath12k_wifi7_msi_config[0];
		ab->static_window_map = false;
		ab_pci->pci_ops = &ath12k_wifi7_pci_ops_wcn7850;
		ab_pci->window_reg_addr = WINDOW_REG_ADDRESS_QCC2072;
		ab->target_mem_mode = ATH12K_QMI_MEMORY_MODE_DEFAULT;
		/* there is only one version till now */
		ab->hw_rev = ATH12K_HW_QCC2072_HW10;
		break;
	default:
		dev_err(&pdev->dev, "Unknown Wi-Fi 7 PCI device found: 0x%x\n",
			pci_dev->device);
		return -EOPNOTSUPP;
	}

	ret = ath12k_wifi7_hw_init(ab);
	if (ret) {
		dev_err(&pdev->dev, "WiFi-7 hw_init for PCI failed: %d\n", ret);
		return ret;
	}

	return 0;
}

static const struct ath12k_pci_reg_base ath12k_wifi7_reg_base = {
	.umac_base = HAL_SEQ_WCSS_UMAC_OFFSET,
	.ce_reg_base = HAL_CE_WFSS_CE_REG_BASE,
};

static struct ath12k_pci_driver ath12k_wifi7_pci_driver = {
	.name = "ath12k_wifi7_pci",
	.id_table = ath12k_wifi7_pci_id_table,
	.ops.probe = ath12k_wifi7_pci_probe,
	.reg_base = &ath12k_wifi7_reg_base,
	.ops.arch_init = ath12k_wifi7_arch_init,
	.ops.arch_deinit = ath12k_wifi7_arch_deinit,
};

int ath12k_wifi7_pci_init(void)
{
	int ret;

	ret = ath12k_pci_register_driver(ATH12K_DEVICE_FAMILY_WIFI7,
					 &ath12k_wifi7_pci_driver);
	if (ret) {
		pr_err("Failed to register ath12k Wi-Fi 7 driver: %d\n",
		       ret);
		return ret;
	}

	return 0;

Annotation

Implementation Notes