/linux/drivers/net/ipa/ |
H A D | ipa_interrupt.c | 7 /* DOC: IPA Interrupts 9 * 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_mem.c | 16 #include "ipa.h" 29 const struct ipa_mem *ipa_mem_find(struct ipa *ipa, enum ipa_mem_id mem_id) in ipa_mem_find() argument 33 for (i = 0; i < ipa->mem_count; i++) { in ipa_mem_find() 34 const struct ipa_mem *mem = &ipa->mem[i]; in ipa_mem_find() 47 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi); in ipa_mem_zero_region_add() local 48 const struct ipa_mem *mem = ipa_mem_find(ipa, mem_id); in ipa_mem_zero_region_add() 49 dma_addr_t addr = ipa->zero_addr; in ipa_mem_zero_region_add() 58 * ipa_mem_setup() - Set up IPA AP and modem shared memory areas 59 * @ipa: IPA pointer 61 * Set up the shared memory regions in IPA local memory. This involves [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_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_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_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_data.h | 16 * DOC: IPA/GSI Configuration Data 19 * IPA and GSI resources to use for a given platform. This data is supplied 25 * Resources are data structures used internally by the IPA hardware. The 29 * Endpoint configuration data defines properties of both IPA endpoints and 31 * communication path between the IPA and a particular execution environment 36 * An endpoint is an IPA construct representing a single channel anywhere 37 * in the system. An IPA endpoint ID maps directly to an (EE, channel_id) 40 * added. IPA endpoint and GSI channel configuration data are defined 44 * are common to IPA and GSI (EE ID, channel ID, endpoint ID, and direction); 46 * the IPA endpoint. [all …]
|
H A D | ipa.h | 25 * struct ipa - IPA information 27 * @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() 48 struct ipa *ipa = dev_get_drvdata(dev); in version_show() local 50 return sysfs_emit(buf, "%s\n", ipa_version_string(ipa)); in version_show() 64 static const char *ipa_offload_string(struct ipa *ipa) in ipa_offload_string() argument 66 return ipa->version < IPA_VERSION_4_5 ? "MAPv4" : "MAPv5"; in ipa_offload_string() 72 struct ipa *ipa = dev_get_drvdata(dev); in rx_offload_show() local 74 return sysfs_emit(buf, "%s\n", ipa_offload_string(ipa)); in rx_offload_show() 82 struct ipa *ipa = dev_get_drvdata(dev); in tx_offload_show() local [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 …]
|