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;
 
        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;
 
 
 
        /* 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 {
 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);