return 0;
 
 out_free_trans:
-       iwl_trans_free(iwl_trans);
+       iwl_trans_pcie_free(iwl_trans);
        pci_set_drvdata(pdev, NULL);
        return -EFAULT;
 }
        struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
 
        iwl_drv_stop(trans_pcie->drv);
-       iwl_trans_free(trans);
+       iwl_trans_pcie_free(trans);
 
        pci_set_drvdata(pdev, NULL);
 }
 
        trans_pcie->command_names = trans_cfg->command_names;
 }
 
-static void iwl_trans_pcie_free(struct iwl_trans *trans)
+void iwl_trans_pcie_free(struct iwl_trans *trans)
 {
        struct iwl_trans_pcie *trans_pcie =
                IWL_TRANS_GET_PCIE_TRANS(trans);
 
 #endif /*CONFIG_IWLWIFI_DEBUGFS */
 
-const struct iwl_trans_ops trans_ops_pcie = {
+static const struct iwl_trans_ops trans_ops_pcie = {
        .start_hw = iwl_trans_pcie_start_hw,
        .stop_hw = iwl_trans_pcie_stop_hw,
        .fw_alive = iwl_trans_pcie_fw_alive,
        .tx_agg_disable = iwl_trans_pcie_tx_agg_disable,
        .tx_agg_setup = iwl_trans_pcie_tx_agg_setup,
 
-       .free = iwl_trans_pcie_free,
-
        .dbgfs_register = iwl_trans_pcie_dbgfs_register,
 
        .wait_tx_queue_empty = iwl_trans_pcie_wait_tx_queue_empty,
 
  *     May sleep
  * @tx_agg_disable: de-configure a Tx queue to send AMPDUs
  *     Must be atomic
- * @free: release all the ressource for the transport layer itself such as
- *     irq, tasklet etc... From this point on, the device may not issue
- *     any interrupt (incl. RFKILL).
- *     May sleep
  * @wait_tx_queue_empty: wait until all tx queues are empty
  *     May sleep
  * @dbgfs_register: add the dbgfs files under this directory. Files will be
                             int sta_id, int tid, int frame_limit, u16 ssn);
        void (*tx_agg_disable)(struct iwl_trans *trans, int queue);
 
-       void (*free)(struct iwl_trans *trans);
-
        int (*dbgfs_register)(struct iwl_trans *trans, struct dentry* dir);
        int (*wait_tx_queue_empty)(struct iwl_trans *trans);
 #ifdef CONFIG_PM_SLEEP
                                 frame_limit, ssn);
 }
 
-static inline void iwl_trans_free(struct iwl_trans *trans)
-{
-       trans->ops->free(trans);
-}
-
 static inline int iwl_trans_wait_tx_queue_empty(struct iwl_trans *trans)
 {
        WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
 }
 
 /*****************************************************
-* Transport layers implementations + their allocation function
+* driver (transport) register/unregister functions
 ******************************************************/
-struct pci_dev;
-struct pci_device_id;
-extern const struct iwl_trans_ops trans_ops_pcie;
-struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
-                                      const struct pci_device_id *ent,
-                                      const struct iwl_cfg *cfg);
 int __must_check iwl_pci_register_driver(void);
 void iwl_pci_unregister_driver(void);
 
-extern const struct iwl_trans_ops trans_ops_idi;
-struct iwl_trans *iwl_trans_idi_alloc(void *pdev_void,
-                                     const void *ent_void,
-                                     const struct iwl_cfg *cfg);
 #endif /* __iwl_trans_h__ */