drivers/net/wwan/iosm/iosm_ipc_imem.h
Source file repositories/reference/linux-study-clean/drivers/net/wwan/iosm/iosm_ipc_imem.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wwan/iosm/iosm_ipc_imem.h- Extension
.h- Size
- 18186 bytes
- Lines
- 591
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/skbuff.hiosm_ipc_mmio.hiosm_ipc_pcie.hiosm_ipc_uevent.hiosm_ipc_wwan.hiosm_ipc_task_queue.h
Detected Declarations
struct ipc_chnl_cfgstruct ipc_pipestruct ipc_mem_channelstruct iosm_imemenum ipc_mem_pipesenum ipc_channel_stateenum ipc_ctypeenum ipc_mem_pipe_direnum ipc_hp_identifierenum ipc_phase
Annotated Snippet
struct ipc_pipe {
struct ipc_protocol_td *tdr_start;
struct ipc_mem_channel *channel;
struct sk_buff **skbr_start;
dma_addr_t phy_tdr_start;
u32 old_head;
u32 old_tail;
u32 nr_of_entries;
u32 max_nr_of_queued_entries;
u32 accumulation_backoff;
u32 irq_moderation;
u32 pipe_nr;
u32 irq;
enum ipc_mem_pipe_dir dir;
u32 buf_size;
u16 nr_of_queued_entries;
u8 is_open:1;
};
/**
* struct ipc_mem_channel - Structure for Channel.
* @channel_id: Instance of the channel list and is return to the user
* at the end of the open operation.
* @ctype: Control or netif channel.
* @index: unique index per ctype
* @ul_pipe: pipe objects
* @dl_pipe: pipe objects
* @if_id: Interface ID
* @net_err_count: Number of downlink errors returned by ipc_wwan_receive
* interface at the entry point of the IP stack.
* @state: Free, reserved or busy (in use).
* @ul_sem: Needed for the blocking write or uplink transfer.
* @ul_list: Uplink accumulator which is filled by the uplink
* char app or IP stack. The socket buffer pointer are
* added to the descriptor list in the kthread context.
*/
struct ipc_mem_channel {
int channel_id;
enum ipc_ctype ctype;
int index;
struct ipc_pipe ul_pipe;
struct ipc_pipe dl_pipe;
int if_id;
u32 net_err_count;
enum ipc_channel_state state;
struct completion ul_sem;
struct sk_buff_head ul_list;
};
/**
* enum ipc_phase - Different AP and CP phases.
* The enums defined after "IPC_P_ROM" and before
* "IPC_P_RUN" indicates the operating state where CP can
* respond to any requests. So while introducing new phase
* this shall be taken into consideration.
* @IPC_P_OFF: On host PC, the PCIe device link settings are known
* about the combined power on. PC is running, the driver
* is loaded and CP is in power off mode. The PCIe bus
* driver call the device power mode D3hot. In this phase
* the driver the polls the device, until the device is in
* the power on state and signals the power mode D0.
* @IPC_P_OFF_REQ: The intermediate phase between cleanup activity starts
* and ends.
* @IPC_P_CRASH: The phase indicating CP crash
* @IPC_P_CD_READY: The phase indicating CP core dump is ready
* @IPC_P_ROM: After power on, CP starts in ROM mode and the IPC ROM
* driver is waiting 150 ms for the AP active notification
* saved in the PCI link status register.
* @IPC_P_PSI: Primary signed image download phase
* @IPC_P_EBL: Extended bootloader pahse
* @IPC_P_RUN: The phase after flashing to RAM is the RUNTIME phase.
*/
enum ipc_phase {
IPC_P_OFF,
IPC_P_OFF_REQ,
IPC_P_CRASH,
IPC_P_CD_READY,
IPC_P_ROM,
IPC_P_PSI,
IPC_P_EBL,
IPC_P_RUN,
};
/**
* struct iosm_imem - Current state of the IPC shared memory.
* @mmio: mmio instance to access CP MMIO area /
* doorbell scratchpad.
* @ipc_protocol: IPC Protocol instance
* @ipc_task: Task for entry into ipc task queue
* @wwan: WWAN device pointer
Annotation
- Immediate include surface: `linux/skbuff.h`, `iosm_ipc_mmio.h`, `iosm_ipc_pcie.h`, `iosm_ipc_uevent.h`, `iosm_ipc_wwan.h`, `iosm_ipc_task_queue.h`.
- Detected declarations: `struct ipc_chnl_cfg`, `struct ipc_pipe`, `struct ipc_mem_channel`, `struct iosm_imem`, `enum ipc_mem_pipes`, `enum ipc_channel_state`, `enum ipc_ctype`, `enum ipc_mem_pipe_dir`, `enum ipc_hp_identifier`, `enum ipc_phase`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.