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.

Dependency Surface

Detected Declarations

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

Implementation Notes