93 lines
2.3 KiB
C
Executable File
93 lines
2.3 KiB
C
Executable File
/* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
#ifndef _MHI_QCOM_
|
|
#define _MHI_QCOM_
|
|
|
|
/* iova cfg bitmask */
|
|
#define MHI_SMMU_ATTACH BIT(0)
|
|
#define MHI_SMMU_S1_BYPASS BIT(1)
|
|
#define MHI_SMMU_FAST BIT(2)
|
|
#define MHI_SMMU_ATOMIC BIT(3)
|
|
#define MHI_SMMU_FORCE_COHERENT BIT(4)
|
|
|
|
#define MHI_PCIE_VENDOR_ID (0x17cb)
|
|
#define MHI_PCIE_DEBUG_ID (0xffff)
|
|
#define MHI_RPM_SUSPEND_TMR_MS (3000)
|
|
#define MHI_PCI_BAR_NUM (0)
|
|
|
|
struct mhi_dev {
|
|
struct pci_dev *pci_dev;
|
|
u32 smmu_cfg;
|
|
int resn;
|
|
void *arch_info;
|
|
bool powered_on;
|
|
bool debug_mode;
|
|
};
|
|
|
|
void mhi_deinit_pci_dev(struct mhi_controller *mhi_cntrl);
|
|
int mhi_pci_probe(struct pci_dev *pci_dev,
|
|
const struct pci_device_id *device_id);
|
|
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION( 3,10,65 ))
|
|
static inline int dma_set_mask_and_coherent(struct device *dev, u64 mask)
|
|
{
|
|
int rc = dma_set_mask(dev, mask);
|
|
if (rc == 0)
|
|
dma_set_coherent_mask(dev, mask);
|
|
return rc;
|
|
}
|
|
#endif
|
|
|
|
static inline int mhi_arch_iommu_init(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
|
|
|
|
mhi_cntrl->dev = &mhi_dev->pci_dev->dev;
|
|
|
|
return dma_set_mask_and_coherent(mhi_cntrl->dev, DMA_BIT_MASK(64));
|
|
}
|
|
|
|
static inline void mhi_arch_iommu_deinit(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
}
|
|
|
|
static inline int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void mhi_arch_pcie_deinit(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
}
|
|
|
|
static inline int mhi_arch_platform_init(struct mhi_dev *mhi_dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void mhi_arch_platform_deinit(struct mhi_dev *mhi_dev)
|
|
{
|
|
}
|
|
|
|
static inline int mhi_arch_link_off(struct mhi_controller *mhi_cntrl,
|
|
bool graceful)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int mhi_arch_link_on(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif /* _MHI_QCOM_ */
|