ath11k: Add drv private for bus opaque struct
authorGovind Singh <govinds@codeaurora.org>
Fri, 8 May 2020 02:55:48 +0000 (05:55 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 11 May 2020 12:35:03 +0000 (15:35 +0300)
Add drv private opaque structure to have bus level
structure for multibus support.

Signed-off-by: Govind Singh <govinds@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200506094400.4740-3-govinds@codeaurora.org
drivers/net/wireless/ath/ath11k/ahb.c
drivers/net/wireless/ath/ath11k/core.c
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/hw.h

index eaba5a189b7facbf17f576150697a5529fc395aa..ef1038aa5692d83084eb11313f26610c8503a694 100644 (file)
@@ -932,7 +932,7 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
                return ret;
        }
 
-       ab = ath11k_core_alloc(&pdev->dev);
+       ab = ath11k_core_alloc(&pdev->dev, 0, ATH11K_BUS_AHB);
        if (!ab) {
                dev_err(&pdev->dev, "failed to allocate ath11k base\n");
                return -ENOMEM;
index 985ea3bcadb9eb3eaa496d62e962ea62c1d35da8..a91eae6a4e5745ae02ccf775130863f064767582 100644 (file)
@@ -756,11 +756,12 @@ void ath11k_core_free(struct ath11k_base *ab)
        kfree(ab);
 }
 
-struct ath11k_base *ath11k_core_alloc(struct device *dev)
+struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
+                                     enum ath11k_bus bus)
 {
        struct ath11k_base *ab;
 
-       ab = kzalloc(sizeof(*ab), GFP_KERNEL);
+       ab = kzalloc(sizeof(*ab) + priv_size, GFP_KERNEL);
        if (!ab)
                return NULL;
 
index e86513f5b757c34e57b5729bc5c99e92bcf6dcc0..e04f0e711779c59a91e095b43623f731bc635d1d 100644 (file)
@@ -667,6 +667,9 @@ struct ath11k_base {
 
        /* Round robbin based TCL ring selector */
        atomic_t tcl_ring_selector;
+
+       /* must be last */
+       u8 drv_priv[0] __aligned(sizeof(void *));
 };
 
 struct ath11k_fw_stats_pdev {
@@ -803,7 +806,8 @@ struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, int peer_id);
 int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab);
 int ath11k_core_init(struct ath11k_base *ath11k);
 void ath11k_core_deinit(struct ath11k_base *ath11k);
-struct ath11k_base *ath11k_core_alloc(struct device *dev);
+struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
+                                     enum ath11k_bus bus);
 void ath11k_core_free(struct ath11k_base *ath11k);
 int ath11k_core_fetch_bdf(struct ath11k_base *ath11k,
                          struct ath11k_board_data *bd);
index cdec95644758c3357e7d0f5bfa659bb7c3256b96..dc4434aefbbe3c868a29a114ae6efe72f9526c15 100644 (file)
@@ -99,6 +99,11 @@ enum ath11k_hw_rate_ofdm {
        ATH11K_HW_RATE_OFDM_9M,
 };
 
+enum ath11k_bus {
+       ATH11K_BUS_AHB,
+       ATH11K_BUS_PCI,
+};
+
 struct ath11k_hw_params {
        const char *name;
        struct {