Quelle iosm_ipc_protocol_ops.h
Sprache: C
/* SPDX-License-Identifier: GPL-2.0-only
*
* Copyright ( C ) 2020 - 21 Intel Corporation .
*/
#ifndef IOSM_IPC_PROTOCOL_OPS_H
#define IOSM_IPC_PROTOCOL_OPS_H
#define SIZE_MASK 0 x00FFFFFF
#define COMPLETION_STATUS 24
#define RESET_BIT 7
/**
* enum ipc_mem_td_cs - Completion status of a TD
* @ IPC_MEM_TD_CS_INVALID : Initial status - td not yet used .
* @ IPC_MEM_TD_CS_PARTIAL_TRANSFER : More data pending - > next TD used for this
* @ IPC_MEM_TD_CS_END_TRANSFER : IO transfer is complete .
* @ IPC_MEM_TD_CS_OVERFLOW : IO transfer to small for the buff to write
* @ IPC_MEM_TD_CS_ABORT : TD marked as abort and shall be discarded
* by AP .
* @ IPC_MEM_TD_CS_ERROR : General error .
*/
enum ipc_mem_td_cs {
IPC_MEM_TD_CS_INVALID,
IPC_MEM_TD_CS_PARTIAL_TRANSFER,
IPC_MEM_TD_CS_END_TRANSFER,
IPC_MEM_TD_CS_OVERFLOW,
IPC_MEM_TD_CS_ABORT,
IPC_MEM_TD_CS_ERROR,
};
/**
* enum ipc_mem_msg_cs - Completion status of IPC Message
* @ IPC_MEM_MSG_CS_INVALID : Initial status .
* @ IPC_MEM_MSG_CS_SUCCESS : IPC Message completion success .
* @ IPC_MEM_MSG_CS_ERROR : Message send error .
*/
enum ipc_mem_msg_cs {
IPC_MEM_MSG_CS_INVALID,
IPC_MEM_MSG_CS_SUCCESS,
IPC_MEM_MSG_CS_ERROR,
};
/**
* struct ipc_msg_prep_args_pipe - struct for pipe args for message preparation
* @ pipe : Pipe to open / close
*/
struct ipc_msg_prep_args_pipe {
struct ipc_pipe *pipe;
};
/**
* struct ipc_msg_prep_args_sleep - struct for sleep args for message
* preparation
* @ target : 0 = host , 1 = device
* @ state : 0 = enter sleep , 1 = exit sleep
*/
struct ipc_msg_prep_args_sleep {
unsigned int target;
unsigned int state;
};
/**
* struct ipc_msg_prep_feature_set - struct for feature set argument for
* message preparation
* @ reset_enable : 0 = out - of - band , 1 = in - band - crash notification
*/
struct ipc_msg_prep_feature_set {
u8 reset_enable;
};
/**
* struct ipc_msg_prep_map - struct for map argument for message preparation
* @ region_id : Region to map
* @ addr : Pcie addr of region to map
* @ size : Size of the region to map
*/
struct ipc_msg_prep_map {
unsigned int region_id;
unsigned long addr;
size_t size;
};
/**
* struct ipc_msg_prep_unmap - struct for unmap argument for message preparation
* @ region_id : Region to unmap
*/
struct ipc_msg_prep_unmap {
unsigned int region_id;
};
/**
* struct ipc_msg_prep_args - Union to handle different message types
* @ pipe_open : Pipe open message preparation struct
* @ pipe_close : Pipe close message preparation struct
* @ sleep : Sleep message preparation struct
* @ feature_set : Feature set message preparation struct
* @ map : Memory map message preparation struct
* @ unmap : Memory unmap message preparation struct
*/
union ipc_msg_prep_args {
struct ipc_msg_prep_args_pipe pipe_open;
struct ipc_msg_prep_args_pipe pipe_close;
struct ipc_msg_prep_args_sleep sleep;
struct ipc_msg_prep_feature_set feature_set;
struct ipc_msg_prep_map map;
struct ipc_msg_prep_unmap unmap;
};
/**
* enum ipc_msg_prep_type - Enum for message prepare actions
* @ IPC_MSG_PREP_SLEEP : Sleep message preparation type
* @ IPC_MSG_PREP_PIPE_OPEN : Pipe open message preparation type
* @ IPC_MSG_PREP_PIPE_CLOSE : Pipe close message preparation type
* @ IPC_MSG_PREP_FEATURE_SET : Feature set message preparation type
* @ IPC_MSG_PREP_MAP : Memory map message preparation type
* @ IPC_MSG_PREP_UNMAP : Memory unmap message preparation type
*/
enum ipc_msg_prep_type {
IPC_MSG_PREP_SLEEP,
IPC_MSG_PREP_PIPE_OPEN,
IPC_MSG_PREP_PIPE_CLOSE,
IPC_MSG_PREP_FEATURE_SET,
IPC_MSG_PREP_MAP,
IPC_MSG_PREP_UNMAP,
};
/**
* struct ipc_rsp - Response to sent message
* @ completion : For waking up requestor
* @ status : Completion status
*/
struct ipc_rsp {
struct completion completion;
enum ipc_mem_msg_cs status;
};
/**
* enum ipc_mem_msg - Type - definition of the messages .
* @ IPC_MEM_MSG_OPEN_PIPE : AP - > CP : Open a pipe
* @ IPC_MEM_MSG_CLOSE_PIPE : AP - > CP : Close a pipe
* @ IPC_MEM_MSG_ABORT_PIPE : AP - > CP : wait for completion of the
* running transfer and abort all pending
* IO - transfers for the pipe
* @ IPC_MEM_MSG_SLEEP : AP - > CP : host enter or exit sleep
* @ IPC_MEM_MSG_FEATURE_SET : AP - > CP : Intel feature configuration
*/
enum ipc_mem_msg {
IPC_MEM_MSG_OPEN_PIPE = 0 x01,
IPC_MEM_MSG_CLOSE_PIPE = 0 x02,
IPC_MEM_MSG_ABORT_PIPE = 0 x03,
IPC_MEM_MSG_SLEEP = 0 x04,
IPC_MEM_MSG_FEATURE_SET = 0 xF0,
};
/**
* struct ipc_mem_msg_open_pipe - Message structure for open pipe
* @ tdr_addr : Tdr address
* @ tdr_entries : Tdr entries
* @ pipe_nr : Pipe number
* @ type_of_message : Message type
* @ irq_vector : MSI vector number
* @ accumulation_backoff : Time in usec for data accumalation
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_open_pipe {
__le64 tdr_addr;
__le16 tdr_entries;
u8 pipe_nr;
u8 type_of_message;
__le32 irq_vector;
__le32 accumulation_backoff;
__le32 completion_status;
};
/**
* struct ipc_mem_msg_close_pipe - Message structure for close pipe
* @ reserved1 : Reserved
* @ reserved2 : Reserved
* @ pipe_nr : Pipe number
* @ type_of_message : Message type
* @ reserved3 : Reserved
* @ reserved4 : Reserved
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_close_pipe {
__le32 reserved1[2 ];
__le16 reserved2;
u8 pipe_nr;
u8 type_of_message;
__le32 reserved3;
__le32 reserved4;
__le32 completion_status;
};
/**
* struct ipc_mem_msg_abort_pipe - Message structure for abort pipe
* @ reserved1 : Reserved
* @ reserved2 : Reserved
* @ pipe_nr : Pipe number
* @ type_of_message : Message type
* @ reserved3 : Reserved
* @ reserved4 : Reserved
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_abort_pipe {
__le32 reserved1[2 ];
__le16 reserved2;
u8 pipe_nr;
u8 type_of_message;
__le32 reserved3;
__le32 reserved4;
__le32 completion_status;
};
/**
* struct ipc_mem_msg_host_sleep - Message structure for sleep message .
* @ reserved1 : Reserved
* @ target : 0 = host , 1 = device , host or EP devie
* is the message target
* @ state : 0 = enter sleep , 1 = exit sleep ,
* 2 = enter sleep no protocol
* @ reserved2 : Reserved
* @ type_of_message : Message type
* @ reserved3 : Reserved
* @ reserved4 : Reserved
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_host_sleep {
__le32 reserved1[2 ];
u8 target;
u8 state;
u8 reserved2;
u8 type_of_message;
__le32 reserved3;
__le32 reserved4;
__le32 completion_status;
};
/**
* struct ipc_mem_msg_feature_set - Message structure for feature_set message
* @ reserved1 : Reserved
* @ reserved2 : Reserved
* @ reset_enable : 0 = out - of - band , 1 = in - band - crash notification
* @ type_of_message : Message type
* @ reserved3 : Reserved
* @ reserved4 : Reserved
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_feature_set {
__le32 reserved1[2 ];
__le16 reserved2;
u8 reset_enable;
u8 type_of_message;
__le32 reserved3;
__le32 reserved4;
__le32 completion_status;
};
/**
* struct ipc_mem_msg_common - Message structure for completion status update .
* @ reserved1 : Reserved
* @ reserved2 : Reserved
* @ type_of_message : Message type
* @ reserved3 : Reserved
* @ reserved4 : Reserved
* @ completion_status : Message Completion Status
*/
struct ipc_mem_msg_common {
__le32 reserved1[2 ];
u8 reserved2[3 ];
u8 type_of_message;
__le32 reserved3;
__le32 reserved4;
__le32 completion_status;
};
/**
* union ipc_mem_msg_entry - Union with all possible messages .
* @ open_pipe : Open pipe message struct
* @ close_pipe : Close pipe message struct
* @ abort_pipe : Abort pipe message struct
* @ host_sleep : Host sleep message struct
* @ feature_set : Featuer set message struct
* @ common : Used to access msg_type and to set the completion status
*/
union ipc_mem_msg_entry {
struct ipc_mem_msg_open_pipe open_pipe;
struct ipc_mem_msg_close_pipe close_pipe;
struct ipc_mem_msg_abort_pipe abort_pipe;
struct ipc_mem_msg_host_sleep host_sleep;
struct ipc_mem_msg_feature_set feature_set;
struct ipc_mem_msg_common common;
};
/* Transfer descriptor definition. */
struct ipc_protocol_td {
union {
/* 0 : 63 - 64-bit address of a buffer in host memory. */
dma_addr_t address;
struct {
/* 0 : 31 - 32 bit address */
__le32 address;
/* 32 : 63 - corresponding descriptor */
__le32 desc;
} __packed shm;
} buffer;
/* 0 - 2nd byte - Size of the buffer.
* The host provides the size of the buffer queued .
* The EP device reads this value and shall update
* it for downlink transfers to indicate the
* amount of data written in buffer .
* 3 rd byte - This field provides the completion status
* of the TD . When queuing the TD , the host sets
* the status to 0 . The EP device updates this
* field when completing the TD .
*/
__le32 scs;
/* 0th - nr of following descriptors
* 1 - 3 rd byte - reserved
*/
__le32 next;
} __packed;
/**
* ipc_protocol_msg_prep - Prepare message based upon message type
* @ ipc_imem : iosm_protocol instance
* @ msg_type : message prepare type
* @ args : message arguments
*
* Return : 0 on success and failure value on error
*/
int ipc_protocol_msg_prep(struct iosm_imem *ipc_imem,
enum ipc_msg_prep_type msg_type,
union ipc_msg_prep_args *args);
/**
* ipc_protocol_msg_hp_update - Function for head pointer update
* of message ring
* @ ipc_imem : iosm_protocol instance
*/
void ipc_protocol_msg_hp_update(struct iosm_imem *ipc_imem);
/**
* ipc_protocol_msg_process - Function for processing responses
* to IPC messages
* @ ipc_imem : iosm_protocol instance
* @ irq : IRQ vector
*
* Return : True on success , false if error
*/
bool ipc_protocol_msg_process(struct iosm_imem *ipc_imem, int irq);
/**
* ipc_protocol_ul_td_send - Function for sending the data to CP
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe instance
* @ p_ul_list : uplink sk_buff list
*
* Return : true in success , false in case of error
*/
bool ipc_protocol_ul_td_send(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe,
struct sk_buff_head *p_ul_list);
/**
* ipc_protocol_ul_td_process - Function for processing the sent data
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe instance
*
* Return : sk_buff instance
*/
struct sk_buff *ipc_protocol_ul_td_process(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe);
/**
* ipc_protocol_dl_td_prepare - Function for providing DL TDs to CP
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe instance
*
* Return : true in success , false in case of error
*/
bool ipc_protocol_dl_td_prepare(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe);
/**
* ipc_protocol_dl_td_process - Function for processing the DL data
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe instance
*
* Return : sk_buff instance
*/
struct sk_buff *ipc_protocol_dl_td_process(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe);
/**
* ipc_protocol_get_head_tail_index - Function for getting Head and Tail
* pointer index of given pipe
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe Instance
* @ head : head pointer index of the given pipe
* @ tail : tail pointer index of the given pipe
*/
void ipc_protocol_get_head_tail_index(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe, u32 *head,
u32 *tail);
/**
* ipc_protocol_get_ipc_status - Function for getting the IPC Status
* @ ipc_protocol : iosm_protocol instance
*
* Return : Returns IPC State
*/
enum ipc_mem_device_ipc_state ipc_protocol_get_ipc_status(struct iosm_protocol
*ipc_protocol);
/**
* ipc_protocol_pipe_cleanup - Function to cleanup pipe resources
* @ ipc_protocol : iosm_protocol instance
* @ pipe : Pipe instance
*/
void ipc_protocol_pipe_cleanup(struct iosm_protocol *ipc_protocol,
struct ipc_pipe *pipe);
/**
* ipc_protocol_get_ap_exec_stage - Function for getting AP Exec Stage
* @ ipc_protocol : pointer to struct iosm protocol
*
* Return : returns BOOT Stages
*/
enum ipc_mem_exec_stage
ipc_protocol_get_ap_exec_stage(struct iosm_protocol *ipc_protocol);
/**
* ipc_protocol_pm_dev_get_sleep_notification - Function for getting Dev Sleep
* notification
* @ ipc_protocol : iosm_protocol instance
*
* Return : Returns dev PM State
*/
u32 ipc_protocol_pm_dev_get_sleep_notification(struct iosm_protocol
*ipc_protocol);
#endif
Messung V0.5 in Prozent C=93 H=93 G=92
¤ Dauer der Verarbeitung: 0.8 Sekunden
¤
*© Formatika GbR, Deutschland
2026-10-11
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=1127926
#Domains=2039723