X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Bootloader%2Fftfl.h;h=9543d92844075e6160c9a0cc7483bbaf91d01038;hb=5f262ea4b68a07e9b94ce0a49c0f7196e5f32b3b;hp=b35bcca94d56aa66005ba974f736537f6ae19778;hpb=41025125796f2f167d7f2a8c82aac712da1aa1b1;p=kiibohd-controller.git diff --git a/Bootloader/ftfl.h b/Bootloader/ftfl.h index b35bcca..9543d92 100644 --- a/Bootloader/ftfl.h +++ b/Bootloader/ftfl.h @@ -1,5 +1,5 @@ /* Copyright (c) 2011,2012 Simon Schubert <2@0x2c.org>. - * Modifications by Jacob Alexander 2014 + * Modifications by Jacob Alexander 2014-2015 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,8 +15,7 @@ * along with this program. If not, see . */ -#ifndef __FTFL_H -#define __FTFL_H +#pragma once // ----- Local Includes ----- @@ -27,60 +26,60 @@ // ----- Structs ----- struct FTFL_FSTAT_t { - UNION_STRUCT_START(8); - uint8_t mgstat0 : 1; - uint8_t _rsvd0 : 3; - uint8_t fpviol : 1; - uint8_t accerr : 1; - uint8_t rdcolerr : 1; - uint8_t ccif : 1; - UNION_STRUCT_END; + UNION_STRUCT_START(8); + uint8_t mgstat0 : 1; + uint8_t _rsvd0 : 3; + uint8_t fpviol : 1; + uint8_t accerr : 1; + uint8_t rdcolerr : 1; + uint8_t ccif : 1; + UNION_STRUCT_END; }; CTASSERT_SIZE_BIT(struct FTFL_FSTAT_t, 8); struct FTFL_FCNFG_t { - UNION_STRUCT_START(8); - uint8_t eeerdy : 1; - uint8_t ramrdy : 1; - uint8_t pflsh : 1; - uint8_t _rsvd0 : 1; - uint8_t erssusp : 1; - uint8_t ersareq : 1; - uint8_t rdcollie : 1; - uint8_t ccie : 1; - UNION_STRUCT_END; + UNION_STRUCT_START(8); + uint8_t eeerdy : 1; + uint8_t ramrdy : 1; + uint8_t pflsh : 1; + uint8_t _rsvd0 : 1; + uint8_t erssusp : 1; + uint8_t ersareq : 1; + uint8_t rdcollie : 1; + uint8_t ccie : 1; + UNION_STRUCT_END; }; CTASSERT_SIZE_BIT(struct FTFL_FCNFG_t, 8); struct FTFL_FSEC_t { - UNION_STRUCT_START(8); - enum { - FTFL_FSEC_SEC_UNSECURE = 2, - FTFL_FSEC_SEC_SECURE = 3 - } sec : 2; - enum { - FTFL_FSEC_FSLACC_DENY = 1, - FTFL_FSEC_FSLACC_GRANT = 3 - } fslacc : 2; - enum { - FTFL_FSEC_MEEN_DISABLE = 2, - FTFL_FSEC_MEEN_ENABLE = 3 - } meen : 2; - enum { - FTFL_FSEC_KEYEN_DISABLE = 1, - FTFL_FSEC_KEYEN_ENABLE = 2 - } keyen : 2; - UNION_STRUCT_END; + UNION_STRUCT_START(8); + enum { + FTFL_FSEC_SEC_UNSECURE = 2, + FTFL_FSEC_SEC_SECURE = 3 + } sec : 2; + enum { + FTFL_FSEC_FSLACC_DENY = 1, + FTFL_FSEC_FSLACC_GRANT = 3 + } fslacc : 2; + enum { + FTFL_FSEC_MEEN_DISABLE = 2, + FTFL_FSEC_MEEN_ENABLE = 3 + } meen : 2; + enum { + FTFL_FSEC_KEYEN_DISABLE = 1, + FTFL_FSEC_KEYEN_ENABLE = 2 + } keyen : 2; + UNION_STRUCT_END; }; CTASSERT_SIZE_BIT(struct FTFL_FSEC_t, 8); struct FTFL_FOPT_t { - UNION_STRUCT_START(8); - uint8_t lpboot : 1; - uint8_t ezport_dis : 1; - uint8_t nmi_dis : 1; - uint8_t _rsvd0 : 5; - UNION_STRUCT_END; + UNION_STRUCT_START(8); + uint8_t lpboot : 1; + uint8_t ezport_dis : 1; + uint8_t nmi_dis : 1; + uint8_t _rsvd0 : 5; + UNION_STRUCT_END; }; CTASSERT_SIZE_BIT(struct FTFL_FOPT_t, 8); @@ -90,151 +89,151 @@ CTASSERT_SIZE_BIT(struct FTFL_FOPT_t, 8); * some that is little endian. */ union FTFL_FCCOB_t { - struct ftfl_generic { - uint32_t addr : 24; - enum FTFL_FCMD { - FTFL_FCMD_READ_1s_BLOCK = 0x00, - FTFL_FCMD_READ_1s_SECTION = 0x01, - FTFL_FCMD_PROGRAM_CHECK = 0x02, - FTFL_FCMD_READ_RESOURCE = 0x03, - FTFL_FCMD_PROGRAM_LONGWORD = 0x06, - FTFL_FCMD_ERASE_BLOCK = 0x08, - FTFL_FCMD_ERASE_SECTOR = 0x09, - FTFL_FCMD_PROGRAM_SECTION = 0x0b, - FTFL_FCMD_READ_1s_ALL_BLOCKS = 0x40, - FTFL_FCMD_READ_ONCE = 0x41, - FTFL_FCMD_PROGRAM_ONCE = 0x43, - FTFL_FCMD_ERASE_ALL_BLOCKS = 0x44, - FTFL_FCMD_VERIFY_KEY = 0x45, - FTFL_FCMD_PROGRAM_PARTITION = 0x80, - FTFL_FCMD_SET_FLEXRAM = 0x81 - } fcmd : 8; - uint8_t data_be[8]; - } generic; - struct { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - uint8_t _rsvd0[3]; - enum FTFL_MARGIN_CHOICE { - FTFL_MARGIN_NORMAL = 0x00, - FTFL_MARGIN_USER = 0x01, - FTFL_MARGIN_FACTORY = 0x02 - } margin : 8; - } read_1s_block; - struct ftfl_data_num_words { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - uint8_t _rsvd0; - enum FTFL_MARGIN_CHOICE margin : 8; - uint16_t num_words; - } read_1s_section; - struct { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - uint8_t _rsvd0[3]; - enum FTFL_MARGIN_CHOICE margin : 8; - uint8_t data_be[4]; - } program_check; - struct { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - uint32_t data; - uint8_t _rsvd0[3]; - enum FTFL_RESOURCE_SELECT { - FTFL_RESOURCE_IFR = 0x00, - FTFL_RESOURCE_VERSION = 0x01 - } resource_select : 8; - } read_resource; - struct { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - uint8_t data_be[4]; - } program_longword; - struct { - uint32_t addr : 24; - enum FTFL_FCMD fcmd : 8; - } erase; - struct ftfl_data_num_words program_section; - struct { - uint8_t _rsvd0[2]; - enum FTFL_MARGIN_CHOICE margin : 8; - enum FTFL_FCMD fcmd : 8; - } read_1s_all_blocks; - struct ftfl_cmd_once { - uint8_t _rsvd0[2]; - uint8_t idx; - enum FTFL_FCMD fcmd : 8; - uint8_t data_be[4]; - } read_once; - struct ftfl_cmd_once program_once; - struct { - uint8_t _rsvd0[3]; - enum FTFL_FCMD fcmd : 8; - } erase_all; - struct { - uint8_t _rsvd0[3]; - enum FTFL_FCMD fcmd : 8; - uint8_t key_be[8]; - } verify_key; - struct { - uint8_t _rsvd0[3]; - enum FTFL_FCMD fcmd : 8; - uint8_t _rsvd1[2]; - - /* the following enum is analogous to enum - * SIM_FLEXNVM_PARTITION in sim.h, but this one is padded - * with four 1-bits to make an 8-bit value. - */ - - enum FTFL_FLEXNVM_PARTITION { - FTFL_FLEXNVM_DATA_32_EEPROM_0 = 0xF0, - FTFL_FLEXNVM_DATA_24_EEPROM_8 = 0xF1, - FTFL_FLEXNVM_DATA_16_EEPROM_16 = 0xF2, - FTFL_FLEXNVM_DATA_8_EEPROM_24 = 0xF9, - FTFL_FLEXNVM_DATA_0_EEPROM_32 = 0xF3 - } flexnvm_partition : 8; - enum FTFL_EEPROM_SIZE { - FTFL_EEPROM_SIZE_0 = 0x3f, - FTFL_EEPROM_SIZE_32 = 0x39, - FTFL_EEPROM_SIZE_64 = 0x38, - FTFL_EEPROM_SIZE_128 = 0x37, - FTFL_EEPROM_SIZE_256 = 0x36, - FTFL_EEPROM_SIZE_512 = 0x35, - FTFL_EEPROM_SIZE_1024 = 0x34, - FTFL_EEPROM_SIZE_2048 = 0x33 - } eeprom_size : 8; - } program_partition; - struct { - uint8_t _rsvd0[2]; - enum FTFL_FLEXRAM_FUNCTION { - FTFL_FLEXRAM_EEPROM = 0x00, - FTFL_FLEXRAM_RAM = 0xff - } flexram_function : 8; - enum FTFL_FCMD fcmd : 8; - } set_flexram; + struct ftfl_generic { + uint32_t addr : 24; + enum FTFL_FCMD { + FTFL_FCMD_READ_1s_BLOCK = 0x00, + FTFL_FCMD_READ_1s_SECTION = 0x01, + FTFL_FCMD_PROGRAM_CHECK = 0x02, + FTFL_FCMD_READ_RESOURCE = 0x03, + FTFL_FCMD_PROGRAM_LONGWORD = 0x06, + FTFL_FCMD_ERASE_BLOCK = 0x08, + FTFL_FCMD_ERASE_SECTOR = 0x09, + FTFL_FCMD_PROGRAM_SECTION = 0x0b, + FTFL_FCMD_READ_1s_ALL_BLOCKS = 0x40, + FTFL_FCMD_READ_ONCE = 0x41, + FTFL_FCMD_PROGRAM_ONCE = 0x43, + FTFL_FCMD_ERASE_ALL_BLOCKS = 0x44, + FTFL_FCMD_VERIFY_KEY = 0x45, + FTFL_FCMD_PROGRAM_PARTITION = 0x80, + FTFL_FCMD_SET_FLEXRAM = 0x81 + } fcmd : 8; + uint8_t data_be[8]; + } generic; + struct { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + uint8_t _rsvd0[3]; + enum FTFL_MARGIN_CHOICE { + FTFL_MARGIN_NORMAL = 0x00, + FTFL_MARGIN_USER = 0x01, + FTFL_MARGIN_FACTORY = 0x02 + } margin : 8; + } read_1s_block; + struct ftfl_data_num_words { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + uint8_t _rsvd0; + enum FTFL_MARGIN_CHOICE margin : 8; + uint16_t num_words; + } read_1s_section; + struct { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + uint8_t _rsvd0[3]; + enum FTFL_MARGIN_CHOICE margin : 8; + uint8_t data_be[4]; + } program_check; + struct { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + uint32_t data; + uint8_t _rsvd0[3]; + enum FTFL_RESOURCE_SELECT { + FTFL_RESOURCE_IFR = 0x00, + FTFL_RESOURCE_VERSION = 0x01 + } resource_select : 8; + } read_resource; + struct { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + uint8_t data_be[4]; + } program_longword; + struct { + uint32_t addr : 24; + enum FTFL_FCMD fcmd : 8; + } erase; + struct ftfl_data_num_words program_section; + struct { + uint8_t _rsvd0[2]; + enum FTFL_MARGIN_CHOICE margin : 8; + enum FTFL_FCMD fcmd : 8; + } read_1s_all_blocks; + struct ftfl_cmd_once { + uint8_t _rsvd0[2]; + uint8_t idx; + enum FTFL_FCMD fcmd : 8; + uint8_t data_be[4]; + } read_once; + struct ftfl_cmd_once program_once; + struct { + uint8_t _rsvd0[3]; + enum FTFL_FCMD fcmd : 8; + } erase_all; + struct { + uint8_t _rsvd0[3]; + enum FTFL_FCMD fcmd : 8; + uint8_t key_be[8]; + } verify_key; + struct { + uint8_t _rsvd0[3]; + enum FTFL_FCMD fcmd : 8; + uint8_t _rsvd1[2]; + + /* the following enum is analogous to enum + * SIM_FLEXNVM_PARTITION in sim.h, but this one is padded + * with four 1-bits to make an 8-bit value. + */ + + enum FTFL_FLEXNVM_PARTITION { + FTFL_FLEXNVM_DATA_32_EEPROM_0 = 0xF0, + FTFL_FLEXNVM_DATA_24_EEPROM_8 = 0xF1, + FTFL_FLEXNVM_DATA_16_EEPROM_16 = 0xF2, + FTFL_FLEXNVM_DATA_8_EEPROM_24 = 0xF9, + FTFL_FLEXNVM_DATA_0_EEPROM_32 = 0xF3 + } flexnvm_partition : 8; + enum FTFL_EEPROM_SIZE { + FTFL_EEPROM_SIZE_0 = 0x3f, + FTFL_EEPROM_SIZE_32 = 0x39, + FTFL_EEPROM_SIZE_64 = 0x38, + FTFL_EEPROM_SIZE_128 = 0x37, + FTFL_EEPROM_SIZE_256 = 0x36, + FTFL_EEPROM_SIZE_512 = 0x35, + FTFL_EEPROM_SIZE_1024 = 0x34, + FTFL_EEPROM_SIZE_2048 = 0x33 + } eeprom_size : 8; + } program_partition; + struct { + uint8_t _rsvd0[2]; + enum FTFL_FLEXRAM_FUNCTION { + FTFL_FLEXRAM_EEPROM = 0x00, + FTFL_FLEXRAM_RAM = 0xff + } flexram_function : 8; + enum FTFL_FCMD fcmd : 8; + } set_flexram; }; CTASSERT_SIZE_BYTE(union FTFL_FCCOB_t, 12); struct FTFL_t { - struct FTFL_FSTAT_t fstat; - struct FTFL_FCNFG_t fcnfg; - struct FTFL_FSEC_t fsec; - struct FTFL_FOPT_t fopt; - union FTFL_FCCOB_t fccob; - uint8_t fprot_be[4]; - uint8_t feprot; - uint8_t fdprot; + struct FTFL_FSTAT_t fstat; + struct FTFL_FCNFG_t fcnfg; + struct FTFL_FSEC_t fsec; + struct FTFL_FOPT_t fopt; + union FTFL_FCCOB_t fccob; + uint8_t fprot_be[4]; + uint8_t feprot; + uint8_t fdprot; }; CTASSERT_SIZE_BYTE(struct FTFL_t, 0x18); /* Flash Configuration Field, see Sub-Family Reference Manual, section 28.3.1 */ struct FTFL_CONFIG_t { - uint8_t key[8]; - uint8_t fprot[4]; - struct FTFL_FSEC_t fsec; - struct FTFL_FOPT_t fopt; - uint8_t feprot; - uint8_t fdprot; + uint8_t key[8]; + uint8_t fprot[4]; + struct FTFL_FSEC_t fsec; + struct FTFL_FOPT_t fopt; + uint8_t feprot; + uint8_t fdprot; }; CTASSERT_SIZE_BYTE(struct FTFL_CONFIG_t, 16); @@ -242,5 +241,3 @@ extern volatile struct FTFL_t FTFL; extern char FlexRAM[]; extern struct FTFL_CONFIG_t FTFL_CONFIG; -#endif -