| /* |
| * Author(s): wang.yuesheng |
| * Date: 2009-02-26 |
| * Purpose: |
| * Description: bootË«°æ±¾ËÑË÷¼°Æô¶¯Ö§³Ö |
| */ |
| |
| #include <config.h> |
| |
| |
| |
| #ifndef _CMD_DOWNVER_H_ |
| #define _CMD_DOWNVER_H_ |
| |
| |
| /* °æ±¾×´Ì¬±êÖ¾²âÊÔλ */ |
| #define CFG_TB_LATELY 0x01 /* °æ±¾Ð¾ÉÐÔ±ê־λ */ |
| #define CFG_TB_INTACT 0x02 /* °æ±¾ÍêÕûÐÔ±ê־λ */ |
| #define CFG_TB_KERNEL 0x04 /* ÄÚºËÍêÕûÐÔ±ê־λ */ |
| #define CFG_TB_ROOTFS 0x08 /* ÎļþϵͳÍêÕûÐÔ±ê־λ */ |
| #define CFG_TB_SYNCED 0x10 /* °æ±¾À´Ô´±ê־λ */ |
| #define CFG_TB_HEADER 0x80 /* °æ±¾Í·ÍêÕûÐÔ±ê־λ */ |
| |
| /* ¸ùÎļþϵͳÀàÐͶ¨Òå */ |
| #define CFG_FS_NONE 0x00 /* none */ |
| #define CFG_FS_INITRAM 0x01 /* initramfs */ |
| #define CFG_FS_JFFS2 0x02 /* jffs2 */ |
| #define CFG_FS_SQUASH 0x04 /* squashfs */ |
| |
| /* ¸ùÎļþϵͳ»ÃÊý */ |
| #define SQUASHFS_MAGIC 0x73717368 |
| #define SQUASHFS_MAGIC_SWAP 0x68737173 |
| #ifdef __BIG_ENDIAN |
| #define JFFS2_DIRENT_MAGIC 0x1985E001 |
| #define JFFS2_INODE_MAGIC 0x1985E002 |
| #define JFFS2_CLEANMARKER_MAGIC 0x19852003 |
| #define JFFS2_PADDING_MAGIC 0x19852004 |
| #define JFFS2_SUMMARY_MAGIC 0x19852006 |
| #define JFFS2_RWDELETE_MAGIC 0x19850003 |
| #else |
| #define JFFS2_DIRENT_MAGIC 0xE0011985 |
| #define JFFS2_INODE_MAGIC 0xE0021985 |
| #define JFFS2_CLEANMARKER_MAGIC 0x20031985 |
| #define JFFS2_PADDING_MAGIC 0x20041985 |
| #define JFFS2_SUMMARY_MAGIC 0x20061985 |
| #define JFFS2_RWDELETE_MAGIC 0x00031985 |
| #endif |
| #define CFG_EMPTY_BITMASK 0xFFFFFFFF |
| #define CFG_IMAGE_OKAY 0x00000000 |
| |
| #define MAGIC_MAX 4 // »ÃÊý¸öÊý |
| #define DESC_LEN 32 // °æ±¾ÃèÊö³¤¶È |
| #define RESV_LEN 16 // ±£Áô×ֶγ¤¶È |
| #define CSP_HEADER_LEN 256 // °æ±¾Í·³¤¶È |
| #define CFG_ALLIGN_SIZE 16 |
| |
| /* °æ±¾Í·»ÃÊý */ |
| #define CSP_MAGIC0 0x99999999 |
| #define CSP_MAGIC1 0x44444444 |
| #define CSP_MAGIC2 0x55555555 |
| #define CSP_MAGIC3 0xaaaaaaaa |
| |
| #define IMAGE_BAD 0xffffffff // °æ±¾Ë𻵠|
| #define IMAGE_OKAY 0x00000000 // °æ±¾ÍêÕû |
| #define IMAGE_NEW 0xffffffff // а汾 |
| #define IMAGE_OLD 0x00000000 // ¾É°æ±¾ |
| #define IMAGE_UPGRADE 0xffffffff // À´Ô´ÓÚÉý¼¶ |
| #define IMAGE_SYNCED 0x00000000 // À´Ô´ÓÚͬ²½ |
| |
| /* ÓïÒôÐÒéÀàÐÍ */ |
| #define VOIP_PROTO_NULL 0 |
| #define VOIP_PROTO_H248 1 |
| #define VOIP_PROTO_SIP 2 |
| #define VOIP_PROTO_MGCP 3 |
| #define VOIP_PROTO_UNKNOWN 0xffff |
| |
| #define IH_HCRC_OFFSET (unsigned int)(&((hd_contend_desc*)0)->ih_hcrc) |
| #define ALIGN_SIZE16(x) (((x)/16+(((x)%16)?1:0))*16) |
| |
| typedef enum |
| { |
| FLASH_TYPE_NAND = 1, |
| FLASH_TYPE_NOR = 2, |
| FLASH_TYPE_INVALID = 255 |
| }FLASH_TYPE_E; |
| |
| |
| typedef enum VersionType |
| { |
| VERTYPE_BOOT = 1, |
| VERTYPE_KERNEL, |
| VERTYPE_ROOTFS, |
| VERTYPE_VERSION, |
| VERTYPE_INVALID = 255 |
| }VERSION_TYPE_E; |
| |
| |
| /* ƽ̨°æ±¾ÖвúÆ·´óÀà */ |
| typedef enum { |
| PRODUCT_SERIES_DHOME = 0, |
| PRODUCT_SERIES_XPON = 1, |
| PRODUCT_SERIES_STB = 2, |
| PRODUCT_SERIES_RFID = 3 |
| } PRODUCT_SERIES_ID; |
| |
| /* °æ±¾ÀàÐÍ: µ¥£¬Ë«£¬´óС */ |
| typedef enum { |
| VERSION_TYPE_SINGLE = 0, /* µ¥°æ±¾ */ |
| VERSION_TYPE_DOUBLE = 1, /* Ë«°æ±¾ */ |
| VERSION_TYPE_BIGSMALL= 2 /* ´óС°æ±¾ */ |
| } VERSION_TYPE_ID; |
| |
| |
| /* °æ±¾À´Ô´: δ֪£¬Éý¼¶¡¢Í¬²½ */ |
| typedef enum { |
| VERSION_FROM_UPGRAGE = 0, /* Éý¼¶°æ±¾ */ |
| VERSION_FROM_SYNC = 1 /* ͬ²½°æ±¾ */ |
| } VERSION_FROM_ID; |
| |
| |
| typedef struct { |
| short flags; /* °æ±¾×´Ì¬±ê־λ×é */ |
| short fstype; /* ¸ùÎļþϵͳµÄÀàÐÍ */ |
| long entry; /* °æ±¾Òýµ¼Èë¿ÚµØÖ· */ |
| unsigned int ih_size; /* Äں˴óС */ |
| } vstat_t; |
| |
| typedef struct { |
| int total; /* ËÑË÷µ½µÄ°æ±¾¸öÊý */ |
| vstat_t result[2]; /* ÓÐЧ°æ±¾µÄ״̬ */ |
| } search_desc; |
| |
| |
| typedef struct { |
| unsigned int ih_magic[MAGIC_MAX];/* °æ±¾Í·»ÃÊý */ |
| unsigned int ih_signatureSize; /* Ç©ÃûÇø´óС */ |
| char pSignature[0]; /* Ç©ÃûÇøÄÚÈÝ */ |
| } hd_magic_desc; |
| |
| typedef struct { |
| unsigned int productType; /* ²úÆ·´óÀà£DHome£¬STB£¬RFID£¬... */ |
| unsigned int firewareType; /* ¹Ì¼þÀàÐÍ£°æ±¾Îļþ£¬bootÎļþ£¬ÅäÖÃÎļþ£¬Ö¤ÊéÎļþ */ |
| unsigned int upgradeKey1; /* ͬһÀàCPEµ¥°åµÄ±àÂ룬Æä½â¾ö·½°¸Ïàͬ¡¢»ù±¾Ó²¼þÅäÖÃÏàͬ£¬¿ÉÔËÐжà¸ö²úÆ·µÄ°æ±¾ */ |
| unsigned int upgradeKey2; /* ͬһÀàCPEµ¥°å¶ÔÓ¦µÄÓжÀÁ¢°æ±¾µÄ²»Í¬²úÆ·±àÂë */ |
| char serialNum[16]; /* °æ±¾ºÅ */ |
| unsigned int headerVersion; /* Í·°æ±¾ºÅ£¬Ä¿Ç°±£Áô */ |
| unsigned int isExpanded; /* ÊÇ·ñʹÓø½¼Ó°æ±¾Í·£¬¸½¼Ó°æ±¾Í·ÔÙÀ©Õ¹256 ×Ö½Ú */ |
| unsigned int firewareSize; /* ¹Ì¼þ´óС£¬Ä¿Ç°±£Áô */ |
| }hd_general_desc; |
| |
| typedef struct { |
| unsigned int btMagic[4]; /* BOOT°æ±¾Í·»ÃÊý */ |
| char btNumbers[16]; /* BOOTÈí¼þ°æ±¾ºÅ */ |
| char btCtime[20]; /* BOOT°æ±¾µÄʱ¼ä */ |
| unsigned int btVerSize; /* BOOT°æ±¾µÄ³¤¶È */ |
| unsigned int btFlashOffset; /* BOOT°æ±¾FlashÆ«ÒÆµØÖ· */ |
| unsigned int btFlashSize; /* BOOT°æ±¾Flash·ÖÇø´óС */ |
| } hd_boot_file; |
| |
| |
| /* °æ±¾Í·ÄÚÈÝ */ |
| typedef struct { |
| unsigned short ih_form; /* °æ±¾ÐÎʽ£µ¥¡¢Ë«¡¢´óС°æ±¾ */ |
| unsigned short ih_type; /* °æ±¾ÀàÐÍ£°æ±¾¡¢Äںˡ¢Îļþϵͳ¡¢Ð¡°æ±¾¡¢´ó°æ±¾*/ |
| unsigned int ih_size; /* °æ±¾³¤¶È */ |
| |
| unsigned int ih_kern_size; /* Äں˴óС */ |
| unsigned int ih_kern_offset; /* ÄÚºËÔÚflashÖÐµÄÆ«ÒÆ */ |
| unsigned int ih_kern_dcrc; /* ÄÚºËУÑéºÍ */ |
| unsigned int ih_fs_size; /* ¸ùÎļþϵͳ´óС */ |
| unsigned int ih_fs_offset; /* ¸ùÎļþϵͳÔÚflashÖÐµÄÆ«ÒÆ*/ |
| unsigned int ih_fs_dcrc; /* ¸ùÎļþϵͳУÑéºÍ */ |
| |
| unsigned int ih_im0_offset; /* °æ±¾0ÔÚflashÖÐµÄÆ«ÒÆ */ |
| unsigned int ih_im0_size; /* °æ±¾0´óС */ |
| unsigned int ih_fs0_offset; /* Îļþϵͳ0ÔÚflashÖÐµÄÆ«ÒÆ */ |
| unsigned int ih_fs0_size; /* Îļþϵͳ0´óС */ |
| unsigned int ih_im1_offset; /* °æ±¾1ÔÚflashÖÐµÄÆ«ÒÆ */ |
| unsigned int ih_im1_size; /* °æ±¾1´óС */ |
| unsigned int ih_fs1_offset; /* Îļþϵͳ1ÔÚflashÖÐµÄÆ«ÒÆ */ |
| unsigned int ih_fs1_size; /* Îļþϵͳ1´óС */ |
| |
| char ih_desc[DESC_LEN]; /* °æ±¾ÎļþÃèÊö */ |
| |
| /* 2010/03/18, wys, boot°æ±¾ÃèÊö£¬¹²16×Ö½Ú */ |
| unsigned short ih_boot_included; /* ÊÇ·ñ°üº¬boot°æ±¾ */ |
| unsigned short ih_boot_upgrade; /* Ç¿ÖÆÉý¼¶bootʹÄÜ */ |
| unsigned int ih_boot_size; /* boot°æ±¾Êý¾Ý³¤¶È */ |
| unsigned int ih_boot_offset; /* boot°æ±¾Êý¾ÝÆ«ÒÆ */ |
| unsigned int ih_boot_dcrc; /* boot°æ±¾Êý¾ÝУÑé */ |
| /* 2010/03/18, wys, end */ |
| |
| unsigned int ih_isdefault; /* Éý¼¶ºóÊÇ·ñʹÓÃÔ°æ±¾µÄĬÈÏÅäÖà */ |
| unsigned int ih_endiantype; /* ´óСÐò */ |
| |
| unsigned int ih_hcrc; /* °æ±¾Í·Ð£ÑéºÍ£¬Ö®Ç°µÄÓò»á²Î¼ÓУÑé */ |
| |
| char ih_time[16]; /* °æ±¾´´½¨Ê±¼ä */ |
| unsigned int ih_isfull; /* °æ±¾ÊÇ·ñÍêÕû */ |
| unsigned int ih_isnewly; /* ÊÇ·ñΪ×îа汾 */ |
| unsigned int ih_fromsync; /* °æ±¾À´Ô´£Éý¼¶»òͬ²½ */ |
| unsigned int ih_flashsize; /* FlashÈÝÁ¿´óС */ |
| unsigned short ih_protocol; /* 0-NULL, 1-H248, 2-SIP, 3-MGCP */ |
| unsigned short ih_compatible; /* 32MB CSP2102/1027°æ±¾·ÖÇøÊÇ·ñ¼æÈÝ */ |
| char ih_csp_version[8]; /* CSPƽ̨°æ±¾ºÅ£¬ÀýÈ磺V1.0.27 */ |
| char ih_vidmask[24]; /*Ö§³ÖVIDµÄÑÚÂë*/ |
| } hd_contend_desc; |
| |
| typedef struct { |
| unsigned int ih_upgradetimes; |
| unsigned int ih_flashtimes; |
| } hd_config_file; |
| |
| typedef struct { |
| hd_general_desc general; |
| hd_contend_desc contend; |
| } header_version; |
| |
| typedef struct { |
| hd_general_desc general; |
| hd_config_file config; |
| } header_config; |
| |
| |
| |
| /* function declarations */ |
| int do_search (unsigned int start, unsigned int end, unsigned int step, search_desc *search); |
| int do_startup (search_desc *search); |
| int do_settings (int num, const search_desc *search); |
| |
| #endif /* _CMD_DOWNVER_H_ */ |
| |