/* SPDX-License-Identifier: BSD-3-Clause-Clear */ /* * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef ATH11K_CE_H #define ATH11K_CE_H
#define CE_COUNT_MAX 12
/* Byte swap data words */ #define CE_ATTR_BYTE_SWAP_DATA 2
/* no interrupt on copy completion */ #define CE_ATTR_DIS_INTR 8
/* Threshold to poll for tx completion in case of Interrupt disabled CE's */ #define ATH11K_CE_USAGE_THRESHOLD 32
void ath11k_ce_byte_swap(void *mem, u32 len);
/* * Directions for interconnect pipe configuration. * These definitions may be used during configuration and are shared * between Host and Target. * * Pipe Directions are relative to the Host, so PIPEDIR_IN means * "coming IN over air through Target to Host" as with a WiFi Rx operation. * Conversely, PIPEDIR_OUT means "going OUT from Host through Target over air" * as with a WiFi Tx operation. This is somewhat awkward for the "middle-man" * Target since things that are "PIPEDIR_OUT" are coming IN to the Target * over the interconnect.
*/ #define PIPEDIR_NONE 0 #define PIPEDIR_IN 1 /* Target-->Host, WiFi Rx direction */ #define PIPEDIR_OUT 2 /* Host->Target, WiFi Tx direction */ #define PIPEDIR_INOUT 3 /* bidirectional */ #define PIPEDIR_INOUT_H2H 4 /* bidirectional, host to host */
/* CE IE registers are different for IPQ5018 */ #define CE_HOST_IPQ5018_IE_ADDRESS 0x0841804C #define CE_HOST_IPQ5018_IE_2_ADDRESS 0x08418050 #define CE_HOST_IPQ5018_IE_3_ADDRESS CE_HOST_IPQ5018_IE_ADDRESS
/* * Establish a mapping between a service/direction and a pipe. * Configuration information for a Copy Engine pipe and services. * Passed from Host to Target through QMI message and must be in * little endian format.
*/ struct service_to_pipe {
__le32 service_id;
__le32 pipedir;
__le32 pipenum;
};
/* * Configuration information for a Copy Engine pipe. * Passed from Host to Target through QMI message during startup (one per CE). * * NOTE: Structure is shared between Host software and Target firmware!
*/ struct ce_pipe_config {
__le32 pipenum;
__le32 pipedir;
__le32 nentries;
__le32 nbytes_max;
__le32 flags;
__le32 reserved;
};
struct ath11k_ce_ring { /* Number of entries in this ring; must be power of 2 */ unsignedint nentries; unsignedint nentries_mask;
/* For dest ring, this is the next index to be processed * by software after it was/is received into. * * For src ring, this is the last descriptor that was sent * and completion processed by software. * * Regardless of src or dest ring, this is an invariant * (modulo ring size): * write index >= read index >= sw_index
*/ unsignedint sw_index; /* cached copy */ unsignedint write_index;
/* Start of DMA-coherent area reserved for descriptors */ /* Host address space */ void *base_addr_owner_space_unaligned; /* CE address space */
dma_addr_t base_addr_ce_space_unaligned;
/* Actual start of descriptors. * Aligned to descriptor-size boundary. * Points into reserved DMA-coherent area, above.
*/ /* Host address space */ void *base_addr_owner_space;
/* CE address space */
dma_addr_t base_addr_ce_space;
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.