116 lines
3.6 KiB
C
116 lines
3.6 KiB
C
#ifndef __FIRMWARE_H__
|
|
#define __FIRMWARE_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stddef.h>
|
|
#include "Typedef.h"
|
|
|
|
|
|
/* refer .\bsp\firmware\inc\uuid_sys.h */
|
|
|
|
/* Length of a node address (an IEEE 802 address). */
|
|
#define _UUID_NODE_LEN 6
|
|
|
|
/* Length of UUID string including dashes. */
|
|
#define _UUID_STR_LEN 36
|
|
|
|
/*
|
|
* See also:
|
|
* http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
|
|
* http://www.opengroup.org/onlinepubs/009629399/apdxa.htm
|
|
*
|
|
* A DCE 1.1 compatible source representation of UUIDs.
|
|
*/
|
|
struct uuid {
|
|
unsigned char time_low[4];
|
|
unsigned char time_mid[2];
|
|
unsigned char time_hi_and_version[2];
|
|
unsigned char clock_seq_hi_and_reserved;
|
|
unsigned char clock_seq_low;
|
|
unsigned char node[_UUID_NODE_LEN];
|
|
};
|
|
|
|
/* XXX namespace pollution? */
|
|
typedef struct uuid uuid_t;
|
|
|
|
/* refer .\bsp\firmware\inc\firmware_image_package.h */
|
|
|
|
/* This is used as a signature to validate the blob header */
|
|
#define TOC_HEADER_NAME 0xAA640001
|
|
|
|
#define UUID_NON_TRUSTED_OS_USER1 \
|
|
{ { 0x8e, 0x24, 0x91, 0xf2 }, { 0x74, 0x09 }, { 0x11, 0xea }, 0xa9, 0xd0, { 0x8b, 0x58, 0xbb, 0x47, 0x65, 0x30 } }
|
|
#define UUID_NON_TRUSTED_OS_USER2 \
|
|
{ { 0xde, 0x29, 0x85, 0x86 }, { 0x74, 0x09 }, { 0x11, 0xea }, 0xb4, 0x57, { 0x73, 0x85, 0x08, 0xd6, 0xf2, 0x9a } }
|
|
#define UUID_NON_TRUSTED_OS_USER3 \
|
|
{ {0x1d, 0x7f, 0x4d, 0x92 }, { 0x74, 0x0a }, { 0x11, 0xea }, 0xb1, 0x75, { 0x5f, 0xe0, 0xb3, 0x0b, 0xa5, 0x71 } }
|
|
#define UUID_NON_TRUSTED_OS_USER4 \
|
|
{ {0xe6, 0x45, 0xe4, 0x11 }, { 0xeb, 0x9c }, { 0x4e, 0x2a }, 0xbb, 0xce, { 0x5c, 0x21, 0x29, 0x0d, 0x6d, 0x8a } }
|
|
#define UUID_NON_TRUSTED_OS_USER5 \
|
|
{ {0xc9, 0x09, 0x83, 0x1a }, { 0x9e, 0x8e }, { 0x41, 0x32 }, 0x9a, 0x60, { 0xb9, 0xd3, 0x26, 0x86, 0x24, 0x20 } }
|
|
#define UUID_NON_TRUSTED_OS_USER6 \
|
|
{ {0xb1, 0x40, 0xd4, 0x42 }, { 0xf0, 0xf8 }, { 0x4a, 0x09 }, 0x8f, 0x9d, { 0x9f, 0x31, 0x7c, 0x31, 0x84, 0xdb } }
|
|
#define UUID_NON_TRUSTED_OS_USER7 \
|
|
{ {0x4a, 0xd8, 0x56, 0x0e }, { 0x4c, 0x06 }, { 0x48, 0xcb }, 0xb5, 0x9b, { 0xb7, 0x5a, 0xfa, 0x69, 0x9c, 0x9b } }
|
|
#define UUID_NON_TRUSTED_OS_USER8 \
|
|
{ {0x38, 0x40, 0x34, 0xc4 }, { 0x41, 0xa7 }, { 0x48, 0x6d }, 0xb3, 0xa8, { 0x20, 0x0f, 0x3b, 0x27, 0x1d, 0x03 } }
|
|
#define UUID_NON_TRUSTED_OS_USER9 \
|
|
{ {0x55, 0x65, 0x1b, 0xc1 }, { 0x41, 0xe2 }, { 0x45, 0xd4 }, 0xb3, 0xbf, { 0x44, 0x61, 0x95, 0x30, 0x9d, 0x2c } }
|
|
|
|
typedef struct fip_toc_header {
|
|
unsigned int name;
|
|
unsigned int serial_number;
|
|
unsigned long long flags;
|
|
} fip_toc_header_t;
|
|
|
|
typedef struct fip_toc_entry {
|
|
uuid_t uuid;
|
|
unsigned long long offset_address;
|
|
unsigned long long size;
|
|
unsigned long long flags;
|
|
} fip_toc_entry_t;
|
|
|
|
|
|
|
|
/* .\bsp\firmware\inc\firmware.h */
|
|
#define PTABLE_NAME_MAX 32
|
|
|
|
/**
|
|
* @brief Firmware load information structure
|
|
* @partition_name Partition name where firmware stored
|
|
* @offset Firmware offset bytes from the partition base vaddr
|
|
* @size Firmware size in bytes
|
|
*/
|
|
typedef struct {
|
|
char partition_name[PTABLE_NAME_MAX];
|
|
unsigned offset;
|
|
unsigned size;
|
|
} firmware_load_info_t;
|
|
|
|
/**
|
|
* @brief Firmware identity define
|
|
*/
|
|
typedef enum {
|
|
FIRMWARE_WCN_HERON_CALIFW,
|
|
FIRMWARE_WCN_HERON_FMACFW,
|
|
FIRMWARE_WCN_BT_BTBIN,
|
|
FIRMWARE_WCN_BT_BTLST,
|
|
FIRMWARE_WCN_GNSS_JACANA,
|
|
} firmware_identity_t;
|
|
|
|
int firmware_get_load_info(firmware_identity_t id, firmware_load_info_t *info);
|
|
|
|
int firmware_load_gnss(void);
|
|
int pvt_load_gnss(void);
|
|
int firmware_load_btdm(void);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __FIRMWARE_H__ */
|