/* Device ID */ #define INTEL_CP_DEVICE_7560_ID 0x7560 #define INTEL_CP_DEVICE_7360_ID 0x7360
/* Define for BAR area usage */ #define IPC_DOORBELL_BAR0 0 #define IPC_SCRATCHPAD_BAR2 2
/* Defines for DOORBELL registers information */ #define IPC_DOORBELL_CH_OFFSET BIT(5) #define IPC_WRITE_PTR_REG_0 BIT(4) #define IPC_CAPTURE_PTR_REG_0 BIT(3)
/* Number of MSI used for IPC */ #define IPC_MSI_VECTORS 1
/* Total number of Maximum IPC IRQ vectors used for IPC */ #define IPC_IRQ_VECTORS IPC_MSI_VECTORS
/** * enum ipc_pcie_sleep_state - Enum type to different sleep state transitions * @IPC_PCIE_D0L12: Put the sleep state in D0L12 * @IPC_PCIE_D3L2: Put the sleep state in D3L2
*/ enum ipc_pcie_sleep_state {
IPC_PCIE_D0L12,
IPC_PCIE_D3L2,
};
/** * struct iosm_pcie - IPC_PCIE struct. * @pci: Address of the device description * @dev: Pointer to generic device structure * @ipc_regs: Remapped CP doorbell address of the irq register * set, to fire the doorbell irq. * @scratchpad: Remapped CP scratchpad address, to send the * configuration. tuple and the IPC descriptors * to CP in the ROM phase. The config tuple * information are saved on the MSI scratchpad. * @imem: Pointer to imem data struct * @ipc_regs_bar_nr: BAR number to be used for IPC doorbell * @scratchpad_bar_nr: BAR number to be used for Scratchpad * @nvec: number of requested irq vectors * @doorbell_reg_offset: doorbell_reg_offset * @doorbell_write: doorbell write register * @doorbell_capture: doorbell capture resgister * @suspend: S2IDLE sleep/active * @d3l2_support: Read WWAN RTD3 BIOS setting for D3L2 support
*/ struct iosm_pcie { struct pci_dev *pci; struct device *dev; void __iomem *ipc_regs; void __iomem *scratchpad; struct iosm_imem *imem; int ipc_regs_bar_nr; int scratchpad_bar_nr; int nvec;
u32 doorbell_reg_offset;
u32 doorbell_write;
u32 doorbell_capture; unsignedlong suspend; enum ipc_pcie_sleep_state d3l2_support;
};
/** * struct ipc_skb_cb - Struct definition of the socket buffer which is mapped to * the cb field of sbk * @mapping: Store physical or IOVA mapped address of skb virtual add. * @direction: DMA direction * @len: Length of the DMA mapped region * @op_type: Expected values are defined about enum ipc_ul_usr_op.
*/ struct ipc_skb_cb {
dma_addr_t mapping; int direction; int len;
u8 op_type;
};
/** * enum ipc_ul_usr_op - Control operation to execute the right action on * the user interface. * @UL_USR_OP_BLOCKED: The uplink app was blocked until CP confirms that the * uplink buffer was consumed triggered by the IRQ. * @UL_MUX_OP_ADB: In MUX mode the UL ADB shall be addedd to the free list. * @UL_DEFAULT: SKB in non muxing mode
*/ enum ipc_ul_usr_op {
UL_USR_OP_BLOCKED,
UL_MUX_OP_ADB,
UL_DEFAULT,
};
/** * ipc_pcie_addr_map - Maps the kernel's virtual address to either IOVA * address space or Physical address space, the mapping is * stored in the skb's cb. * @ipc_pcie: Pointer to struct iosm_pcie * @data: Skb mem containing data * @size: Data size * @mapping: Dma mapping address * @direction: Data direction * * Returns: 0 on success and failure value on error
*/ int ipc_pcie_addr_map(struct iosm_pcie *ipc_pcie, unsignedchar *data,
size_t size, dma_addr_t *mapping, int direction);
/** * ipc_pcie_addr_unmap - Unmaps the skb memory region from IOVA address space * @ipc_pcie: Pointer to struct iosm_pcie * @size: Data size * @mapping: Dma mapping address * @direction: Data direction
*/ void ipc_pcie_addr_unmap(struct iosm_pcie *ipc_pcie, size_t size,
dma_addr_t mapping, int direction);
/** * ipc_pcie_alloc_skb - Allocate an uplink SKB for the given size. * @ipc_pcie: Pointer to struct iosm_pcie * @size: Size of the SKB required. * @flags: Allocation flags * @mapping: Copies either mapped IOVA add. or converted Phy address * @direction: DMA data direction * @headroom: Header data offset * * Returns: Pointer to ipc_skb on Success, NULL on failure.
*/ struct sk_buff *ipc_pcie_alloc_skb(struct iosm_pcie *ipc_pcie, size_t size,
gfp_t flags, dma_addr_t *mapping, int direction, size_t headroom);
/** * ipc_pcie_alloc_local_skb - Allocate a local SKB for the given size. * @ipc_pcie: Pointer to struct iosm_pcie * @flags: Allocation flags * @size: Size of the SKB required. * * Returns: Pointer to ipc_skb on Success, NULL on failure.
*/ struct sk_buff *ipc_pcie_alloc_local_skb(struct iosm_pcie *ipc_pcie,
gfp_t flags, size_t size);
/** * ipc_pcie_kfree_skb - Free skb allocated by ipc_pcie_alloc_*_skb(). * @ipc_pcie: Pointer to struct iosm_pcie * @skb: Pointer to the skb
*/ void ipc_pcie_kfree_skb(struct iosm_pcie *ipc_pcie, struct sk_buff *skb);
/** * ipc_pcie_check_data_link_active - Check Data Link Layer Active * @ipc_pcie: Pointer to struct iosm_pcie * * Returns: true if active, otherwise false
*/ bool ipc_pcie_check_data_link_active(struct iosm_pcie *ipc_pcie);
/** * ipc_pcie_suspend - Callback invoked by pm_runtime_suspend. It decrements * the device's usage count then, carry out a suspend, * either synchronous or asynchronous. * @ipc_pcie: Pointer to struct iosm_pcie * * Returns: 0 on success and failure value on error
*/ int ipc_pcie_suspend(struct iosm_pcie *ipc_pcie);
/** * ipc_pcie_resume - Callback invoked by pm_runtime_resume. It increments * the device's usage count then, carry out a resume, * either synchronous or asynchronous. * @ipc_pcie: Pointer to struct iosm_pcie * * Returns: 0 on success and failure value on error
*/ int ipc_pcie_resume(struct iosm_pcie *ipc_pcie);
/** * ipc_pcie_check_aspm_enabled - Check if ASPM L1 is already enabled * @ipc_pcie: Pointer to struct iosm_pcie * @parent: True if checking ASPM L1 for parent else false * * Returns: true if ASPM is already enabled else false
*/ bool ipc_pcie_check_aspm_enabled(struct iosm_pcie *ipc_pcie, bool parent); /** * ipc_pcie_config_aspm - Configure ASPM L1 * @ipc_pcie: Pointer to struct iosm_pcie
*/ void ipc_pcie_config_aspm(struct iosm_pcie *ipc_pcie);
#endif
Messung V0.5
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.