drivers/net/wwan/iosm/iosm_ipc_protocol.h
Source file repositories/reference/linux-study-clean/drivers/net/wwan/iosm/iosm_ipc_protocol.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wwan/iosm/iosm_ipc_protocol.h- Extension
.h- Size
- 7663 bytes
- Lines
- 238
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
iosm_ipc_imem.hiosm_ipc_pm.hiosm_ipc_protocol_ops.h
Detected Declarations
struct ipc_protocol_context_infostruct ipc_protocol_device_infostruct ipc_protocol_ap_shmstruct iosm_protocolstruct ipc_call_msg_send_args
Annotated Snippet
struct ipc_protocol_context_info {
phys_addr_t device_info_addr;
phys_addr_t head_array;
phys_addr_t tail_array;
phys_addr_t msg_head;
phys_addr_t msg_tail;
phys_addr_t msg_ring_addr;
__le16 msg_ring_entries;
u8 msg_irq_vector;
u8 device_info_irq_vector;
};
/**
* struct ipc_protocol_device_info - Structure for the device information
* @execution_stage: CP execution stage
* @ipc_status: IPC states
* @device_sleep_notification: Requested device pm states
*/
struct ipc_protocol_device_info {
__le32 execution_stage;
__le32 ipc_status;
__le32 device_sleep_notification;
};
/**
* struct ipc_protocol_ap_shm - Protocol Shared Memory Structure
* @ci: Context information struct
* @device_info: Device information struct
* @msg_head: Point to msg head
* @head_array: Array of head pointer
* @msg_tail: Point to msg tail
* @tail_array: Array of tail pointer
* @msg_ring: Circular buffers for the read/tail and write/head
* indeces.
*/
struct ipc_protocol_ap_shm {
struct ipc_protocol_context_info ci;
struct ipc_protocol_device_info device_info;
__le32 msg_head;
__le32 head_array[IPC_MEM_MAX_PIPES];
__le32 msg_tail;
__le32 tail_array[IPC_MEM_MAX_PIPES];
union ipc_mem_msg_entry msg_ring[IPC_MEM_MSG_ENTRIES];
};
/**
* struct iosm_protocol - Structure for IPC protocol.
* @p_ap_shm: Pointer to Protocol Shared Memory Structure
* @pm: Instance to struct iosm_pm
* @pcie: Pointer to struct iosm_pcie
* @imem: Pointer to struct iosm_imem
* @rsp_ring: Array of OS completion objects to be triggered once CP
* acknowledges a request in the message ring
* @dev: Pointer to device structure
* @phy_ap_shm: Physical/Mapped representation of the shared memory info
* @old_msg_tail: Old msg tail ptr, until AP has handled ACK's from CP
*/
struct iosm_protocol {
struct ipc_protocol_ap_shm *p_ap_shm;
struct iosm_pm pm;
struct iosm_pcie *pcie;
struct iosm_imem *imem;
struct ipc_rsp *rsp_ring[IPC_MEM_MSG_ENTRIES];
struct device *dev;
dma_addr_t phy_ap_shm;
u32 old_msg_tail;
};
/**
* struct ipc_call_msg_send_args - Structure for message argument for
* tasklet function.
* @prep_args: Arguments for message preparation function
* @response: Can be NULL if result can be ignored
* @msg_type: Message Type
*/
struct ipc_call_msg_send_args {
union ipc_msg_prep_args *prep_args;
struct ipc_rsp *response;
enum ipc_msg_prep_type msg_type;
};
/**
* ipc_protocol_tq_msg_send - prepare the msg and send to CP
* @ipc_protocol: Pointer to ipc_protocol instance
* @msg_type: Message type
* @prep_args: Message arguments
* @response: Pointer to a response object which has a
* completion object and return code.
*
* Returns: 0 on success and failure value on error
Annotation
- Immediate include surface: `iosm_ipc_imem.h`, `iosm_ipc_pm.h`, `iosm_ipc_protocol_ops.h`.
- Detected declarations: `struct ipc_protocol_context_info`, `struct ipc_protocol_device_info`, `struct ipc_protocol_ap_shm`, `struct iosm_protocol`, `struct ipc_call_msg_send_args`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
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.