| /linux/drivers/net/ipa/ | 
| H A D | ipa_main.c | 20 #include "ipa.h"39  * This driver supports the Qualcomm IP Accelerator (IPA), which is a
 40  * networking component found in many Qualcomm SoCs.  The IPA is connected
 44  * The IPA is the conduit between the AP and the modem that carries network
 48  * The IPA provides protocol checksum calculation, offloading this work
 49  * from the AP.  The IPA offers additional functionality, including routing,
 55  * There are two distinct layers that implement the IPA hardware, and this
 57  * interface (GSI) is an integral component of the IPA, providing a
 58  * well-defined communication layer between the AP subsystem and the IPA
 60  * between the AP and the IPA.
 [all …]
 
 | 
| H A D | ipa_interrupt.c | 7 /* DOC: IPA Interrupts9  * The IPA has an interrupt line distinct from the interrupt used by the GSI
 11  * transfer completions), IPA interrupts are related to other events related
 12  * to the IPA.  Some of the IPA interrupts come from a microcontroller
 13  * embedded in the IPA.  Each IPA interrupt type can be both masked and
 16  * Two of the IPA interrupts are initiated by the microcontroller.  A third
 17  * can be generated to signal the need for a wakeup/resume when an IPA
 18  * endpoint has been suspended.  There are other IPA events, but at this
 28 #include "ipa.h"
 36  * struct ipa_interrupt - IPA interrupt information
 [all …]
 
 | 
| H A D | ipa_reg.h | 13 struct ipa;16  * DOC: IPA Registers
 18  * IPA registers are located within the "ipa-reg" address space defined by
 22  * All IPA registers are 32 bits wide.
 25  * instances of something.  For example, each IPA endpoint has an set of
 33  * Each version of IPA implements an array of ipa_reg structures indexed
 36  * of IPA define all registers.  The offset for a register is returned by
 53 /* enum ipa_reg_id - IPA register IDs */
 61 	FILT_ROUT_HASH_EN,				/* IPA v4.2 */
 62 	FILT_ROUT_HASH_FLUSH,			/* Not IPA v4.2 nor IPA v5.0+ */
 [all …]
 
 | 
| H A D | ipa_interrupt.h | 13 struct ipa;20  * @interrupt:		IPA interrupt structure
 23  * Note:  The "TX" in the name is from the perspective of the IPA hardware.
 33  * @interrupt:		IPA interrupt structure
 40  * ipa_interrupt_simulate_suspend() - Simulate TX_SUSPEND IPA interrupt
 41  * @interrupt:	IPA interrupt structure
 51  * ipa_interrupt_enable() - Enable an IPA interrupt type
 52  * @ipa:	IPA pointer
 53  * @ipa_irq:	IPA interrupt ID
 55 void ipa_interrupt_enable(struct ipa *ipa, enum ipa_irq_id ipa_irq);
 [all …]
 
 | 
| H A D | ipa_endpoint.c | 16 #include "ipa.h"40 /** enum ipa_status_opcode - IPA status opcode field hardware values */
 51 /** enum ipa_status_exception - IPA status exception field hardware values */
 67 /** enum ipa_status_mask - IPA status mask field bitmask hardware values */
 87 /* Special IPA filter/router rule field value indicating "rule miss" */
 90 /** The IPA status nat_type field uses enum ipa_nat_type hardware values */
 92 /* enum ipa_status_field_id - IPA packet status structure field identifiers */
 124 /* Size in bytes of an IPA packet status structure */
 127 /* IPA status structure decoder; looks up field values for a structure */
 128 static u32 ipa_status_extract(struct ipa *ipa, const void *data,  in ipa_status_extract()  argument
 [all …]
 
 | 
| H A D | ipa_table.h | 11 struct ipa;15  * @ipa:	IPA pointer
 20 bool ipa_filtered_valid(struct ipa *ipa, u64 filtered);
 24  * @ipa:	IPA pointer
 26 bool ipa_table_hash_support(struct ipa *ipa);
 30  * @ipa:	IPA pointer
 33 void ipa_table_reset(struct ipa *ipa, bool modem);
 37  * @ipa:	IPA pointer
 39 int ipa_table_hash_flush(struct ipa *ipa);
 43  * @ipa:	IPA pointer
 [all …]
 
 | 
| H A D | ipa_table.c | 16 #include "ipa.h"25  * DOC: IPA Filter and Route Tables
 27  * The IPA has tables defined in its local (IPA-resident) memory that define
 35  * by all IPA hardware (IPA v4.2 doesn't support hashed tables).
 38  * an object (such as a route or filter table) in IPA-resident memory must
 52  * address of a filter rule in the memory following the bitmap.  Until IPA
 58  * removed starting at IPA v5.0.  For IPA v5.0+, the endpoint bitmap
 60  * bitmap, endpoint 1 has a filter rule.  Older versions of IPA represent
 72  * endpoints they "own" directly.  Currently the AP does not use the IPA
 76  * bitmap as defined prior to IPA v5.0.
 [all …]
 
 | 
| H A D | ipa_cmd.c | 15 #include "ipa.h"23  * DOC:  IPA Immediate Commands
 25  * The AP command TX endpoint is used to issue immediate commands to the IPA.
 26  * An immediate command is generally used to request the IPA do something
 74 /* For IPA v4.0+, the pipeline clear options are encoded in the opcode */
 79 	__le16 flags;		/* Unused/reserved prior to IPA v4.0 */
 83 	__le32 clear_options;	/* Unused/reserved for IPA v4.0+ */
 87 /* The next field is present for IPA v4.0+ */
 89 /* The next field is not present for IPA v4.0+ */
 92 /* The next field and its values are not present for IPA v4.0+ */
 [all …]
 
 | 
| H A D | ipa_uc.c | 12 #include "ipa.h"19  * DOC:  The IPA embedded microcontroller
 21  * The IPA incorporates a microcontroller that is able to do some additional
 31  * A 128 byte block of structured memory within the IPA SRAM is used together
 33  * AP and the IPA microcontroller.  Each side writes data to the shared area
 66  * A shared memory area at the base of IPA resident memory is used for
 120 static struct ipa_uc_mem_area *ipa_uc_shared(struct ipa *ipa)  in ipa_uc_shared()  argument
 122 	const struct ipa_mem *mem = ipa_mem_find(ipa, IPA_MEM_UC_SHARED);  in ipa_uc_shared()
 123 	u32 offset = ipa->mem_offset + mem->offset;  in ipa_uc_shared()
 125 	return ipa->mem_virt + offset;  in ipa_uc_shared()
 [all …]
 
 | 
| H A D | ipa_modem.c | 18 #include "ipa.h"38  * struct ipa_priv - IPA network device private data
 39  * @ipa:	IPA pointer
 45 	struct ipa *ipa;  member
 55 	struct ipa *ipa = priv->ipa;  in ipa_open()  local
 59 	dev = ipa->dev;  in ipa_open()
 91 	struct ipa *ipa = priv->ipa;  in ipa_stop()  local
 95 	dev = ipa->dev;  in ipa_stop()
 128 	struct ipa *ipa = priv->ipa;  in ipa_start_xmit()  local
 136 	endpoint = ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX];  in ipa_start_xmit()
 [all …]
 
 | 
| H A D | ipa_uc.h | 9 struct ipa;12  * ipa_uc_interrupt_handler() - Handler for microcontroller IPA interrupts
 13  * @ipa:	IPA pointer
 14  * @irq_id:	IPA interrupt ID
 16 void ipa_uc_interrupt_handler(struct ipa *ipa, enum ipa_irq_id irq_id);
 19  * ipa_uc_config() - Configure the IPA microcontroller subsystem
 20  * @ipa:	IPA pointer
 22 void ipa_uc_config(struct ipa *ipa);
 26  * @ipa:	IPA pointer
 28 void ipa_uc_deconfig(struct ipa *ipa);
 [all …]
 
 | 
| H A D | ipa_smp2p.c | 16 #include "ipa.h"21  * DOC: IPA SMP2P communication with the modem
 24  * the modem.  The IPA driver uses this for two purposes:  to enable the modem
 26  * state of IPA power in the event of a crash.
 30  * latter case, the modem uses an SMP2P interrupt to tell the AP IPA driver
 33  * The modem is also able to inquire about the current state of IPA
 38  * at that time records whether the AP has IPA power enabled.
 45  * struct ipa_smp2p - IPA SMP2P information
 46  * @ipa:		IPA pointer
 52  * @clock_query_irq:	IPA interrupt triggered by modem for power query
 [all …]
 
 | 
| H A D | ipa_qmi.c | 11 #include "ipa.h"24  * complete, the AP and modem may begin IPA operation.  This occurs
 25  * only when the AP IPA driver, modem IPA driver, and IPA microcontroller
 32  * contains a success result, the AP knows the modem IPA driver is ready.
 34  * The modem is responsible for loading firmware on the IPA microcontroller.
 49  * - Whenever the AP learns the modem has booted and its IPA QMI service
 52  * - On the initial boot, the modem sets up the IPA microcontroller, and
 82 	struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi);  in ipa_server_init_complete()  local
 95 		dev_err(ipa->dev,  in ipa_server_init_complete()
 114  * We know everything (else) is ready when we know the IPA driver on
 [all …]
 
 | 
| H A D | ipa_mem.h | 13 struct ipa;17  * DOC: IPA Local Memory
 19  * The IPA has a block of shared memory, divided into regions used for
 23  * the "ipa-shared" memory range) and size found in the IPA_SHARED_MEM_SIZE
 29  * of canaries for all IPA hardware versions.  Still, the number used is
 48 /* IPA-resident memory region ids */
 66 	IPA_MEM_PDN_CONFIG,		/* 0/2 canaries (IPA v4.0+) */
 67 	IPA_MEM_STATS_QUOTA_MODEM,	/* 2/4 canaries (IPA v4.0+) */
 68 	IPA_MEM_STATS_QUOTA_AP,		/* 0 canaries, optional (IPA v4.0+) */
 69 	IPA_MEM_STATS_TETHERING,	/* 0 canaries, optional (IPA v4.0+) */
 [all …]
 
 | 
| H A D | ipa_endpoint.h | 19 struct ipa;70  * With each packet it transfers, the IPA hardware can perform certain
 99  * struct ipa_endpoint_config - IPA endpoint hardware configuration
 138  * struct ipa_endpoint - IPA endpoint information
 139  * @ipa:		IPA pointer
 142  * @endpoint_id:	IPA endpoint number
 153 	struct ipa *ipa;  member
 172 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa);
 174 void ipa_endpoint_modem_pause_all(struct ipa *ipa, bool enable);
 176 int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa);
 [all …]
 
 | 
| H A D | ipa_resource.c | 9 #include "ipa.h"15  * DOC: IPA Resources
 17  * The IPA manages a set of resources internally for various purposes.
 18  * A given IPA version has a fixed number of resource types, and a fixed
 22  * Each version of IPA also has some number of resource groups.  Each
 28 static bool ipa_resource_limits_valid(struct ipa *ipa,  in ipa_resource_limits_valid()  argument
 71 ipa_resource_config_common(struct ipa *ipa, u32 resource_type,  in ipa_resource_config_common()  argument
 85 	iowrite32(val, ipa->reg_virt + reg_n_offset(reg, resource_type));  in ipa_resource_config_common()
 88 static void ipa_resource_config_src(struct ipa *ipa, u32 resource_type,  in ipa_resource_config_src()  argument
 98 	reg = ipa_reg(ipa, SRC_RSRC_GRP_01_RSRC_TYPE);  in ipa_resource_config_src()
 [all …]
 
 | 
| H A D | ipa_power.c | 15 #include "ipa.h"23  * DOC: IPA Power Management
 25  * The IPA hardware is enabled when the IPA core clock and all the
 38  * struct ipa_power - IPA power management information
 39  * @dev:		IPA device pointer
 40  * @core:		IPA core clock
 53 /* Initialize interconnects required for IPA operation */
 94 /* Enable IPA power, enabling interconnects and the core clock */
 95 static int ipa_power_enable(struct ipa *ipa)  in ipa_power_enable()  argument
 97 	struct ipa_power *power = ipa->power;  in ipa_power_enable()
 [all …]
 
 | 
| H A D | ipa_cmd.h | 13 struct ipa;17  * enum ipa_cmd_opcode:	IPA immediate commands
 23  * @IPA_CMD_HDR_INIT_LOCAL:	Initialize IPA-local header memory
 24  * @IPA_CMD_REGISTER_WRITE:	Register write performed by IPA
 26  * @IPA_CMD_DMA_SHARED_MEM:	DMA command performed by IPA
 47  * @ipa:	- IPA pointer
 48  * @mem:	- IPA memory region descriptor
 53 bool ipa_cmd_table_init_valid(struct ipa *ipa, const struct ipa_mem *mem,
 58  * @channel:	AP->IPA command TX GSI channel pointer
 67  * @channel:	AP->IPA command TX GSI channel pointer
 [all …]
 
 | 
| H A D | ipa_smp2p.h | 13 struct ipa;16  * ipa_smp2p_init() - Initialize the IPA SMP2P subsystem
 17  * @ipa:	IPA pointer
 23 int ipa_smp2p_init(struct ipa *ipa, struct platform_device *pdev,
 28  * @ipa:	IPA pointer
 30 void ipa_smp2p_exit(struct ipa *ipa);
 34  * @ipa:	IPA pointer
 36  * Disable the "ipa-setup-ready" interrupt from the modem.
 38 void ipa_smp2p_irq_disable_setup(struct ipa *ipa);
 42  * @ipa:	IPA pointer
 [all …]
 
 | 
| H A D | ipa.h | 25  * struct ipa - IPA information27  * @version:		IPA hardware version
 28  * @dev:		IPA device pointer
 33  * @power:		IPA power information
 39  * @interrupt:		IPA Interrupt information
 42  * @reg_virt:		Virtual address used for IPA register access
 43  * @regs:		IPA register definitions
 44  * @mem_addr:		DMA address of IPA-local memory space
 45  * @mem_virt:		Virtual address of IPA-local memory space
 46  * @mem_offset:		Offset from @mem_virt used for access to IPA memory
 [all …]
 
 | 
| H A D | ipa_reg.c | 10 #include "ipa.h"13 /* Is this register ID valid for the current IPA version? */
 14 static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)  in ipa_reg_id_valid()  argument
 16 	enum ipa_version version = ipa->version;  in ipa_reg_id_valid()
 102 const struct reg *ipa_reg(struct ipa *ipa, enum ipa_reg_id reg_id)  in ipa_reg()  argument
 104 	if (WARN(!ipa_reg_id_valid(ipa, reg_id), "invalid reg %u\n", reg_id))  in ipa_reg()
 107 	return reg(ipa->regs, reg_id);  in ipa_reg()
 136 int ipa_reg_init(struct ipa *ipa, struct platform_device *pdev)  in ipa_reg_init()  argument
 142 	regs = ipa_regs(ipa->version);  in ipa_reg_init()
 149 	/* Setup IPA register memory  */  in ipa_reg_init()
 [all …]
 
 | 
| H A D | ipa_gsi.c | 10 #include "ipa.h"18 	struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);  in ipa_gsi_trans_complete()  local
 20 	ipa_endpoint_trans_complete(ipa->channel_map[trans->channel_id], trans);  in ipa_gsi_trans_complete()
 25 	struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);  in ipa_gsi_trans_release()  local
 27 	ipa_endpoint_trans_release(ipa->channel_map[trans->channel_id], trans);  in ipa_gsi_trans_release()
 33 	struct ipa *ipa = container_of(gsi, struct ipa, gsi);  in ipa_gsi_channel_tx_queued()  local
 36 	endpoint = ipa->channel_map[channel_id];  in ipa_gsi_channel_tx_queued()
 44 	struct ipa *ipa = container_of(gsi, struct ipa, gsi);  in ipa_gsi_channel_tx_completed()  local
 47 	endpoint = ipa->channel_map[channel_id];  in ipa_gsi_channel_tx_completed()
 
 | 
| H A D | ipa_sysfs.c | 9 #include "ipa.h"13 static const char *ipa_version_string(struct ipa *ipa)  in ipa_version_string()  argument
 15 	switch (ipa->version) {  in ipa_version_string()
 52 	struct ipa *ipa = dev_get_drvdata(dev);  in version_show()  local
 54 	return sysfs_emit(buf, "%s\n", ipa_version_string(ipa));  in version_show()
 68 static const char *ipa_offload_string(struct ipa *ipa)  in ipa_offload_string()  argument
 70 	return ipa->version < IPA_VERSION_4_5 ? "MAPv4" : "MAPv5";  in ipa_offload_string()
 76 	struct ipa *ipa = dev_get_drvdata(dev);  in rx_offload_show()  local
 78 	return sysfs_emit(buf, "%s\n", ipa_offload_string(ipa));  in rx_offload_show()
 86 	struct ipa *ipa = dev_get_drvdata(dev);  in tx_offload_show()  local
 [all …]
 
 | 
| /linux/Documentation/devicetree/bindings/net/ | 
| H A D | qcom,ipa.yaml | 4 $id: http://devicetree.org/schemas/net/qcom,ipa.yaml#7 title: Qualcomm IP Accelerator (IPA)
 13   This binding describes the Qualcomm IPA.  The IPA is capable of offloading
 17   The IPA sits between multiple independent "execution environments,"
 18   including the Application Processor (AP) and the modem.  The IPA presents
 20   The GSI is an integral part of the IPA, but it is logically isolated
 40             |    IPA    |
 48           - qcom,msm8998-ipa
 49           - qcom,sc7180-ipa
 50           - qcom,sc7280-ipa
 [all …]
 
 | 
| /linux/Documentation/ABI/testing/ | 
| H A D | sysfs-devices-platform-soc-ipa | 1 What:		/sys/devices/platform/soc@X/XXXXXXX.ipa/6 		The /sys/devices/platform/soc@X/XXXXXXX.ipa/ directory
 8 		an IPA device.  The X values could vary, but are typically
 9 		"soc@0/1e40000.ipa".
 11 What:		.../XXXXXXX.ipa/version
 16 		The .../XXXXXXX.ipa/version file contains the IPA hardware
 20 What:		.../XXXXXXX.ipa/feature/
 25 		The .../XXXXXXX.ipa/feature/ directory contains a set of
 26 		attributes describing features implemented by the IPA
 29 What:		.../XXXXXXX.ipa/feature/rx_offload
 [all …]
 
 |