linux/drivers/net/wwan/iosm/iosm_ipc_flash.h

/* SPDX-License-Identifier: GPL-2.0-only
 *
 * Copyright (C) 2020-2021 Intel Corporation.
 */

#ifndef _IOSM_IPC_FLASH_H
#define _IOSM_IPC_FLASH_H

/* Buffer size used to read the fls image */
#define IOSM_FLS_BUF_SIZE
/* Full erase start address */
#define IOSM_ERASE_START_ADDR
/* Erase length for NAND flash */
#define IOSM_ERASE_LEN
/* EBL response Header size */
#define IOSM_EBL_HEAD_SIZE
/* EBL payload size */
#define IOSM_EBL_W_PAYL_SIZE
/* Total EBL pack size */
#define IOSM_EBL_W_PACK_SIZE
/* EBL payload size */
#define IOSM_EBL_DW_PAYL_SIZE
/* Total EBL pack size */
#define IOSM_EBL_DW_PACK_SIZE
/* EBL name size */
#define IOSM_EBL_NAME
/* Maximum supported error types */
#define IOSM_MAX_ERRORS
/* Read size for RPSI/EBL response */
#define IOSM_READ_SIZE
/* Link establishment response ack size */
#define IOSM_LER_ACK_SIZE
/* PSI ACK len */
#define IOSM_PSI_ACK
/* SWID capability for packed swid type */
#define IOSM_EXT_CAP_SWID_OOS_PACK
/* EBL error response buffer */
#define IOSM_EBL_RSP_BUFF
/* SWID string length */
#define IOSM_SWID_STR
/* Load EBL command size */
#define IOSM_RPSI_LOAD_SIZE
/* EBL payload checksum */
#define IOSM_EBL_CKSM
/* SWID msg len and argument */
#define IOSM_MSG_LEN_ARG
/* Data to be sent to modem */
#define IOSM_MDM_SEND_DATA
/* Data received from modem as part of erase check */
#define IOSM_MDM_ERASE_RSP
/* Bit shift to calculate Checksum */
#define IOSM_EBL_PAYL_SHIFT
/* Flag To be set */
#define IOSM_SET_FLAG
/* Set flash erase check timeout to 100 msec */
#define IOSM_FLASH_ERASE_CHECK_TIMEOUT
/* Set flash erase check interval to 20 msec */
#define IOSM_FLASH_ERASE_CHECK_INTERVAL
/* Link establishment response ack size */
#define IOSM_LER_RSP_SIZE

/**
 * enum iosm_flash_package_type -	Enum for the flashing operations
 * @FLASH_SET_PROT_CONF:	Write EBL capabilities
 * @FLASH_SEC_START:		Start writing the secpack
 * @FLASH_SEC_END:		Validate secpack end
 * @FLASH_SET_ADDRESS:		Set the address for flashing
 * @FLASH_ERASE_START:		Start erase before flashing
 * @FLASH_ERASE_CHECK:		Validate the erase functionality
 * @FLASH_OOS_CONTROL:		Retrieve data based on oos actions
 * @FLASH_OOS_DATA_READ:	Read data from EBL
 * @FLASH_WRITE_IMAGE_RAW:	Write the raw image to flash
 */
enum iosm_flash_package_type {};

/**
 * enum iosm_out_of_session_action -	Actions possible over the
 *					OutOfSession command interface
 * @FLASH_OOSC_ACTION_READ:		Read data according to its type
 * @FLASH_OOSC_ACTION_ERASE:		Erase data according to its type
 */
enum iosm_out_of_session_action {};

/**
 * enum iosm_out_of_session_type -	Data types that can be handled over the
 *					Out Of Session command Interface
 * @FLASH_OOSC_TYPE_ALL_FLASH:		The whole flash area
 * @FLASH_OOSC_TYPE_SWID_TABLE:		Read the swid table from the target
 */
enum iosm_out_of_session_type {};

/**
 * enum iosm_ebl_caps -	EBL capability settings
 * @IOSM_CAP_NOT_ENHANCED:	If capability not supported
 * @IOSM_CAP_USE_EXT_CAP:	To be set if extended capability is set
 * @IOSM_EXT_CAP_ERASE_ALL:	Set Erase all capability
 * @IOSM_EXT_CAP_COMMIT_ALL:	Set the commit all capability
 */
enum iosm_ebl_caps {};

/**
 * enum iosm_ebl_rsp -  EBL response field
 * @EBL_CAPS_FLAG:	EBL capability flag
 * @EBL_SKIP_ERASE:	EBL skip erase flag
 * @EBL_SKIP_CRC:	EBL skip wr_pack crc
 * @EBL_EXT_CAPS_HANDLED:	EBL extended capability handled flag
 * @EBL_OOS_CONFIG:	EBL oos configuration
 * @EBL_RSP_SW_INFO_VER: EBL SW info version
 */
enum iosm_ebl_rsp {};

/**
 * enum iosm_mdm_send_recv_data - Data to send to modem
 * @IOSM_MDM_SEND_2:	Send 2 bytes of payload
 * @IOSM_MDM_SEND_4:	Send 4 bytes of payload
 * @IOSM_MDM_SEND_8:	Send 8 bytes of payload
 * @IOSM_MDM_SEND_16:	Send 16 bytes of payload
 */
enum iosm_mdm_send_recv_data {};

/**
 * struct iosm_ebl_one_error -	Structure containing error details
 * @error_class:		Error type- standard, security and text error
 * @error_code:			Specific error from error type
 */
struct iosm_ebl_one_error {};

/**
 * struct iosm_ebl_error- Structure with max error type supported
 * @error:		Array of one_error structure with max errors
 */
struct iosm_ebl_error {};

/**
 * struct iosm_swid_table - SWID table data for modem
 * @number_of_data_sets:	Number of swid types
 * @sw_id_type:			SWID type - SWID
 * @sw_id_val:			SWID value
 * @rf_engine_id_type:		RF engine ID type - RF_ENGINE_ID
 * @rf_engine_id_val:		RF engine ID value
 */
struct iosm_swid_table {};

/**
 * struct iosm_flash_msg_control - Data sent to modem
 * @action:	Action to be performed
 * @type:	Type of action
 * @length:	Length of the action
 * @arguments:	Argument value sent to modem
 */
struct iosm_flash_msg_control {};

/**
 * struct iosm_flash_data -  Header Data to be sent to modem
 * @checksum:	Checksum value calculated for the payload data
 * @pack_id:	Flash Action type
 * @msg_length:	Payload length
 */
struct iosm_flash_data {};

int ipc_flash_boot_psi(struct iosm_devlink *ipc_devlink,
		       const struct firmware *fw);

int ipc_flash_boot_ebl(struct iosm_devlink *ipc_devlink,
		       const struct firmware *fw);

int ipc_flash_boot_set_capabilities(struct iosm_devlink *ipc_devlink,
				    u8 *mdm_rsp);

int ipc_flash_link_establish(struct iosm_imem *ipc_imem);

int ipc_flash_read_swid(struct iosm_devlink *ipc_devlink, u8 *mdm_rsp);

int ipc_flash_send_fls(struct iosm_devlink *ipc_devlink,
		       const struct firmware *fw, u8 *mdm_rsp);
#endif