74 lines
1.6 KiB
C
74 lines
1.6 KiB
C
|
|
||
|
#ifndef CYIMG_H_
|
||
|
#define CYIMG_H_
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
//#ifdef __LITTLE_ENDIAN__
|
||
|
#define CYIMG_MAGIC ('C'|(((uint16_t)'Y')<<8))
|
||
|
//#else
|
||
|
//#define CYIMG_MAGIC ((((uint16_t)'C')<<8)|'Y')
|
||
|
//#endif
|
||
|
|
||
|
#define CYIMG_R32(d) (((uint32_t)(d)[0]<<0)|((uint32_t)(d)[1]<<8)|((uint32_t)(d)[2]<<16)|((uint32_t)(d)[3]<<24))
|
||
|
|
||
|
#define CYIMG_IMAGECTL_EXECUTABLE_MASK (1<<0)
|
||
|
#define CYIMG_IMAGECTL_EXECUTABLE_LSB ( 0)
|
||
|
|
||
|
#define CYIMG_IMAGECTL_I2CROMSIZE_MASK (7<<1)
|
||
|
#define CYIMG_IMAGECTL_I2CROMSIZE_LSB ( 1)
|
||
|
|
||
|
#define CYIMG_IMAGECTL_SPISPEED_MASK (3<<4)
|
||
|
#define CYIMG_IMAGECTL_SPISPEED_LSB ( 4)
|
||
|
|
||
|
#define CYIMG_IMAGETYPE_REGULAR 0xB0
|
||
|
#define CYIMG_IMAGETYPE_USBIDS 0xB2
|
||
|
|
||
|
struct cyimg_section {
|
||
|
uint32_t dLength; // in 32-bit units
|
||
|
uint32_t dAddress; // aligned to 32 bits
|
||
|
// data follows immediately after
|
||
|
};
|
||
|
|
||
|
struct cyimg_hdr {
|
||
|
uint16_t wSignature;
|
||
|
|
||
|
uint8_t bImageCTL;
|
||
|
// bit 0: executable?
|
||
|
// bit 1..3: I2C EEPROM size
|
||
|
// bit 4..5: SPI speed (10/20/30/reserved MHz) OR I2C speed (100/400/1000/reserved kHz)
|
||
|
// bit 6..7: reserved (zero)
|
||
|
|
||
|
uint8_t bImageType;
|
||
|
// 0xB0: regular firmware image
|
||
|
// 0xB2: firmware image with VID/PID in 1st section
|
||
|
|
||
|
struct cyimg_section usb_info; // optional (see bImageType)
|
||
|
};
|
||
|
|
||
|
struct cyimg_footer {
|
||
|
struct cyimg_section entry;
|
||
|
uint32_t dChecksum;
|
||
|
};
|
||
|
|
||
|
#define CYIMG_CHECKSUM_INIT 0
|
||
|
|
||
|
static inline uint32_t cyimg_checksum_calc(uint32_t init, size_t length,
|
||
|
const uint8_t* data) {
|
||
|
uint32_t v = init;
|
||
|
|
||
|
for (size_t i = 0; i < length; ++i) v += CYIMG_R32(&data[i]);
|
||
|
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
// ---
|
||
|
|
||
|
#define ELF_FX3_NOTE_NAME "FX3"
|
||
|
#define ELF_FX3_NOTE_TYPE_IMAGECTLTYPE 1
|
||
|
#define ELF_FX3_NOTE_TYPE_USBVIDPID 2
|
||
|
|
||
|
#endif
|
||
|
|