#ifndef _IMAGE_DESC_H_ #define _IMAGE_DESC_H_ #include #define SPIDCOM_IMG_DESC_MTD_NAME_0 "/dev/mtd3" #define SPIDCOM_IMG_DESC_MTD_NAME_1 "/dev/mtd4" #define SPIDCOM_IMG_DESC_SPC200E 0x00 #define SPIDCOM_IMG_DESC_SPC200C 0x01 #define SPIDCOM_IMG_DESC_UNKNOWN 0x02 #define SPIDCOM_IMG_DESC_MAGIC "SPIDIMG\0" #define SPIDCOM_IMG_DESC_SIZE 1024 #define SPIDCOM_IMG_DESC_INVALID_INDEX 0x8fffffff #define SPIDCOM_IMG_DESC_ORIGIN_INDEX 0xffffffff #define SPIDCOM_IMG_DESC_IS_VALID(desc) (!memcmp((desc)->magic, SPIDCOM_IMG_DESC_MAGIC, 8) && (desc)->is_valid && ((desc)->index != SPIDCOM_IMG_DESC_INVALID_INDEX)) /* /!\ All values are LITTLE-ENDIAN */ typedef struct { char magic[8]; /* Magic number = "SPIDIMG\0" * = { 0x53, 0x50, 0x49, 0x44, * 0x49, 0x4d, 0x47, 0x00 } */ uint32_t index; /* The biggest one is the image to boot */ uint32_t is_valid:1; /* Is image valid (bootable ?) */ uint32_t is_1st_boot:1; /* Is first image boot ? */ uint32_t is_not_success:1; /* Is first boot successful ? */ uint32_t size; /* Firmware size (descriptor included) */ uint32_t type; /* Image type : 0 is normal image */ uint8_t md5_sum[16]; /* MD5 checksum of the whole firmware */ char version[64]; /* Image version string */ char description[64]; /* Image description string */ uint32_t archi; /* spc200e, spc200c or unknown */ char reserved[852]; char image[0]; /* Used in bootloader */ } spidcom_image_desc_t; #endif