Linux SDK (lite-fw)  MBPL_SDK_R25_ENG3
lite-fw.h
Go to the documentation of this file.
1 
13 #ifndef _LITE_FW_H_
14 #define _LITE_FW_H_
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 /* Pragmas */
21 #pragma once
22 #include <limits.h>
23 #include <string.h>
24 #include <unistd.h>
25 #include <syslog.h>
26 #include "qmerrno.h"
27 #include "fms.h"
28 #include "dms.h"
29 #include "dev_util.h"
30 #include <stdbool.h>
31 
32 #define IMG_MASK_MDM (1<<0)
33 #define IMG_MASK_PRI (1<<1)
34 #define IMG_MASK_CLEAR (0x000)
35 #define IMG_MASK_GENERIC (0xFFFF)
36 #define IMG_MASK_ALL (0xFFFFFFF)
37 
38 // Carrier package SKU Info
39 #define LITEFW_CARRIER_PACKAGE_SKU "9999999"
40 #define LITEFW_SKU_STRING_LENGTH 7
41 
42 // Fimware Info String size
43 #define FIRMWARE_INFO_STRING_SIZE 20
44 #define NULL_TERMINATOR_CHAR_SIZE 1
45 
46 #define DEV_MODE_STR_LEN 8
47 
48 #define MAX_USB_PATH_LEN 512
49 #define USB_PATH_LEN 16
50 
51 #define DEFAULT_DL_MODE_WAIT_TIME 60 // 60 seconds
52 #define DEFAULT_APP_MODE_WAIT_TIME 240 // 240 seconds
53 
54 #define MILLISECOND 1000
55 #define HALF_A_SECOND (500*MILLISECOND)
56 #define SECOND (1000*MILLISECOND)
57 
58 #define MAX_POWER_REQUEST_RETRY 3
59 
60 #define DEFAULT_DEV_CONN_RETRY_INTERVAL 5 // Retry interval 5 seconds
61 #define DEFAULT_DEV_CONN_RETRIES 48 // Default retry 48 times, which is 4 minutes
62 
63 #define FW_UPDATE_STATUS_SUCCESSFUL 1
64 #define FW_UPDATE_STATUS_UNKNOWN 0xFFFFFFFF
65 
66 #define SH_RESP_BUF_LEN 512
67 
68 #define PCIE_QDL_PORT "/dev/mhiqdl0"
69 
81 typedef struct image_node
82 {
83  char * full_file_name;
84  struct image_node * next;
85 } image_node_t;
86 
93 {
123  eReserved,
142  eSDP_FWDWL_ERR_END
143 };
144 
152  eFW_TYPE_MBN_GOBI, // Not supported in litefw
153  eFW_TYPE_MBN, // Not supported in litefw
164 };
165 
184 };
185 
186 /* QDL mode */
196 };
197 
198 /* QDL mode Hardware flow control */
208 };
209 
216 {
225 };
226 
233 {
235  eLITE_MODEM_MODE_QMI=1, // modem is in QMI mode
237  eLITE_MODEM_MODE_MBIM, // modem is in MBIM mode
238 };
239 
246 {
297 };
298 
305 {
307  eFWDWL_TYPE_UNSPECIFIED, // Download type not specified
309  eFWDWL_TYPE_IMG_SWITCH, // Image switch scenario, set images preference (0x0048)
311  eFWDWL_TYPE_REG_DWLD, // Non image switch scenario, plain switch to B&H mode (0x003E)
312 };
313 
403 {
404  bool is_pcie_dev;
405  char dev_mode_str[DEV_MODE_STR_LEN];
406  char qdl_dev_path[MAX_PATH_LEN];
407  char dev_path[MAX_PATH_LEN];
408  char dm_path[MAX_PATH_LEN];
409  char fw_image_path[MAX_PATH_LEN];
410  char log_file_path[MAX_PATH_LEN];
411  char qdl_usb_path[MAX_USB_PATH_LEN];
412  char cwe_image_pref[NAME_MAX];
413  char nvu_image_pref[NAME_MAX];
414  char usb_path[USB_PATH_LEN];
415  int num_of_dev_retries;
416  int modelfamily;
417  int download_type;
418  bool force_download;
419  bool show_img_info;
420  unsigned long lBlockSize;
421  bool enable_auto_sim;
422  bool is_openwrt; // OpenWrt platforms have limited resources, and many commands are not supported.
423  // We will have to trim down unsupported commands.
424  unsigned char sync_delay; // Number of seconds to delay after a CTL_SYNC_REQ/RESP exchange
425  usb_dev_loc_info usb_dev_loc;
426  pcie_dev_loc_info pcie_dev_loc;
427 };
428 
445 void print_hex(void * pBuffer, int bufSize, bool read );
446 
455 void litefw_logsenable(int log_en);
456 
481 typedef struct _litefw_FirmwareInfo_
482 {
483  char szModelid_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
484  char szFwversion_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
485  char szSku_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
486  char szPackageid_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
487  char szCarrier_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
488  char szCarrierPriversion_str[FIRMWARE_INFO_STRING_SIZE+NULL_TERMINATOR_CHAR_SIZE];
490 
506 
523 int litefw_ExtractFirmwareParametersByFile(char * fw, char * pri, litefw_FirmwareInfo * info);
524 
541 int litefw_ExtractFirmwareParametersByPath(char *pImagePath, litefw_FirmwareInfo *info, bool * bIsSpkImg);
542 
562 
574 
587 
598 int litefw_getFileType(char* szPath);
599 
610 int litefw_getFwDownloadType(char* szPath);
611 
643 unsigned int litefw_DownloadFW(char *pImagePath,char *szTTYPath,int iFWImageType, int image_mask, int iModelFamily, int img_list_size, image_node_t * img_list);
644 
655 int litefw_GetModelFamily(char *pModelString);
656 
668 
676 char* litefw_GetVersion();
677 
691 typedef void (* litefwlogger)(uint8_t lvl, const char* buff);
692 
703 int litefw_set_log_func(logger func);
704 
715 void litefw_SetReadBlockSize(unsigned long lBlockSize);
716 
727 int litefw_switch_9x07_to_downloadmode(char *szTTYPath);
728 
729 
740 int litefw_switch_to_BootHoldMode(char *szTTYPath);
741 
753 int litefw_SetQTLDownloadMode(int iMode);
754 
763 
774 int litefw_SetQTLHWFlowControl(int iMode);
775 
785 
803  struct _userOptions * pUserOption);
804 
815 int SetFirmwarePref(unpack_dms_SetFirmwarePreference_t * pSetFirmwarePref);
816 
824 int ResetModem();
825 
837 int FWVersionAfterDownload(struct _userOptions * user_options);
838 
850 int VerifyAutoSimImageSwitch(struct _userOptions * user_options);
851 
863 bool locate_adapter_path(struct _userOptions * user_opt_data);
864 
876 bool locate_qdl_path(struct _userOptions * user_opt_data);
877 
889 bool find_adapter_path(struct _userOptions * user_opt_data);
890 
914 bool get_image_list(struct _userOptions * pUserOptData, int * num_of_images, image_node_t ** image_list, bool no_check);
915 
927 bool litefw_cfg_dev_mode(struct _userOptions * pUserOptData);
928 
940 int check_dev_family(struct _userOptions * pUserOption);
941 
953 int litefw_download(struct _userOptions userOptData);
954 
955 #define libSDP_GetVersion litefw_GetVersion
956 #define libSDP_CalculateImageMask litefw_CalculateImageMask
957 #define libSDP_getFileType litefw_getFileType
958 #define libSDP_ExtractFirmwareParametersByPath litefw_ExtractFirmwareParametersByPath
959 #define libSDP_GetModelFamily litefw_GetModelFamily
960 #define libSDP_CheckValidFirmwareInfo litefw_CheckValidFirmwareInfo
961 #define libSDP_BuildImagesPreferenceRequest litefw_BuildImagesPreferenceRequest
962 #define libSDP_DownloadFW litefw_DownloadFW
963 #define libsdp_set_log_func litefw_set_log_func
964 #define libsdp_SetReadBlockSize litefw_SetReadBlockSize
965 #define LIBSDP_CARRIER_PACKAGE_SKU LITEFW_CARRIER_PACKAGE_SKU
966 #define LIBSDP_SKU_STRING_LENGTH LITEFW_SKU_STRING_LENGTH
968 typedef litefwlogger libsdplogger;
969 
970 #ifdef __cplusplus
971 } /* extern "C" { */
972 #endif
973 
974 #endif // _LITE_FW_H_
975 
litefw_QDL_FLOW_CONTROLs
Definition: lite-fw.h:199
Definition: lite-fw.h:307
Definition: lite-fw.h:309
Definition: lite-fw.h:101
Definition: lite-fw.h:235
int litefw_CheckValidFirmwareInfo(litefw_FirmwareInfo info)
Definition: lite-fw.c:3096
bool find_adapter_path(struct _userOptions *user_opt_data)
Definition: lite-fw.c:3640
fwdwl_modem_mode
Definition: lite-fw.h:232
fwdwl_type
Definition: lite-fw.h:304
int FWVersionAfterDownload(struct _userOptions *user_options)
Definition: utils.c:817
Definition: lite-fw.h:118
Definition: lite-fw.h:95
int litefw_GetModelFamily(char *pModelString)
Definition: lite-fw.c:3039
Definition: lite-fw.h:292
int litefw_ExtractFirmwareParametersByFile(char *fw, char *pri, litefw_FirmwareInfo *info)
Definition: lite-fw.c:814
void litefw_SetReadBlockSize(unsigned long lBlockSize)
Definition: lite-fw.c:3149
Definition: lite-fw.h:254
int litefw_GetQTLHWFlowControl()
Definition: lite-fw.c:3231
Definition: lite-fw.h:133
bool get_image_list(struct _userOptions *pUserOptData, int *num_of_images, image_node_t **image_list, bool no_check)
Definition: lite-fw.c:3254
Definition: lite-fw.h:205
int litefw_set_log_func(logger func)
Definition: lite-fw.c:3124
Definition: lite-fw.h:175
Definition: lite-fw.h:177
Definition: lite-fw.h:108
Definition: lite-fw.h:159
Definition: lite-fw.h:183
Definition: lite-fw.h:220
int litefw_CalculateImageMask(unpack_fms_SetImagesPreference_t SetPrefRspFromModem)
Definition: lite-fw.c:758
int litefw_ExtractImageParamsByFile(char *img, litefw_FirmwareInfo *info)
Definition: lite-fw.c:784
Definition: lite-fw.h:116
Definition: lite-fw.h:311
bool locate_qdl_path(struct _userOptions *user_opt_data)
Definition: lite-fw.c:3592
int ResetModem()
Definition: utils.c:473
Definition: lite-fw.h:224
Definition: lite-fw.h:97
Definition: lite-fw.h:195
Definition: lite-fw.h:193
Definition: lite-fw.h:191
Definition: lite-fw.h:127
Definition: lite-fw.h:114
unsigned int litefw_DownloadFW(char *pImagePath, char *szTTYPath, int iFWImageType, int image_mask, int iModelFamily, int img_list_size, image_node_t *img_list)
Definition: lite-fw.c:2805
int litefw_getFwDownloadType(char *szPath)
Definition: lite-fw.c:2978
int litefw_BuildImagesPreferenceRequest(litefw_FirmwareInfo info, pack_fms_SetImagesPreference_t *pack, bool force)
Definition: lite-fw.c:977
litefw_Fw_Type
Definition: lite-fw.h:151
Definition: lite-fw.h:112
int litefw_BuildAutoSimImgPrefRequest(pack_fms_SetImagesPreference_t *pack)
Definition: lite-fw.c:946
void litefw_logsenable(int log_en)
Definition: lite-fw.c:276
Definition: lite-fw.h:481
Definition: lite-fw.h:163
bool litefw_cfg_dev_mode(struct _userOptions *pUserOptData)
Definition: lite-fw.c:3999
Definition: lite-fw.h:201
litefw_fwdwl_error_codes
Definition: lite-fw.h:92
Definition: lite-fw.h:222
Definition: lite-fw.h:129
Definition: lite-fw.h:125
Definition: lite-fw.h:264
Definition: lite-fw.h:402
struct _litefw_FirmwareInfo_ litefw_FirmwareInfo
Definition: lite-fw.h:296
Definition: lite-fw.h:120
Definition: lite-fw.h:141
char * litefw_GetVersion()
Definition: lite-fw.c:3109
int litefw_SetQTLDownloadMode(int iMode)
Definition: lite-fw.c:3174
void print_hex(void *pBuffer, int bufSize, bool read)
Definition: lite-fw.c:294
int litefw_getFileType(char *szPath)
Definition: lite-fw.c:2859
litefw_app_error_code
Definition: lite-fw.h:245
int VerifyAutoSimImageSwitch(struct _userOptions *user_options)
Definition: utils.c:498
void(* litefwlogger)(uint8_t lvl, const char *buff)
Definition: lite-fw.h:691
fwdwl_modem_states
Definition: lite-fw.h:215
struct image_node image_node_t
int litefw_switch_9x07_to_downloadmode(char *szTTYPath)
Definition: lite-fw.c:3156
Definition: lite-fw.h:250
int litefw_ExtractFirmwareParametersByPath(char *pImagePath, litefw_FirmwareInfo *info, bool *bIsSpkImg)
Definition: lite-fw.c:849
Definition: lite-fw.h:181
Definition: lite-fw.h:237
Definition: lite-fw.h:157
int litefw_download(struct _userOptions userOptData)
Definition: lite-fw.c:4187
int litefw_switch_to_BootHoldMode(char *szTTYPath)
Definition: lite-fw.c:356
Definition: lite-fw.h:99
Definition: fms.h:384
int litefw_SetQTLHWFlowControl(int iMode)
Definition: lite-fw.c:3216
Definition: lite-fw.h:173
int litefw_GetQTLDownloadMode()
Definition: lite-fw.c:3193
Definition: lite-fw.h:131
Definition: lite-fw.h:110
Definition: lite-fw.h:218
Definition: lite-fw.h:256
Definition: lite-fw.h:103
Definition: lite-fw.h:179
Definition: lite-fw.h:161
Definition: lite-fw.h:284
litefw_QDL_MODEs
Definition: lite-fw.h:187
bool locate_adapter_path(struct _userOptions *user_opt_data)
Definition: lite-fw.c:3689
Definition: lite-fw.h:207
Definition: lite-fw.h:252
Definition: lite-fw.h:203
litefw_Models
Definition: lite-fw.h:171
int check_dev_family(struct _userOptions *pUserOption)
Definition: utils.c:949
Definition: lite-fw.h:248
int SendImagesPreference(pack_fms_SetImagesPreference_t pack_request, unpack_fms_SetImagesPreference_t *pSetPrefRspFromModem, struct _userOptions *pUserOption)
Definition: utils.c:431
Definition: lite-fw.h:189
Definition: lite-fw.h:105
Definition: lite-fw.h:155
Definition: lite-fw.h:137
Definition: lite-fw.h:81
int SetFirmwarePref(unpack_dms_SetFirmwarePreference_t *pSetFirmwarePref)
Definition: utils.c:855
Definition: lite-fw.h:135
Definition: lite-fw.h:258
Definition: lite-fw.h:122
Definition: lite-fw.h:266