FreeCalypso > hg > fc-tourmaline
view src/cs/system/bootloader/inc/command.h @ 222:c336ed5691a5
FCHG: clear BCICTL2 on boot for extra safety
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Apr 2021 22:04:10 +0000 |
parents | 4e78acac3d88 |
children |
line wrap: on
line source
/******************************************************************************* * * COMMAND.H * * This module contains commands structures and functions to analyze a command * received and to build a command to send (request and confirmation). * * (C) Texas Instruments 1998 * ******************************************************************************/ #ifndef __COMMAND_H__ #define __COMMAND_H__ #include "main/sys_types.h" #define COM_SERIAL_COMMAND_LENGTH (256) /* In bytes. */ #define COM_MAX_NUMBER_OF_16BITS_DATA ( 64) /* * Constants used in the confirmation of the COM_GET_MONITOR_ID command. */ enum { COM_MONITOR_STAND_ALONE, COM_MONITOR_LIBRARY, COM_BOOTLOADER }; /* * Constants used in the confirmation of the COM_GET_CHIP_ID command. */ enum { COM_POLE112LA00, COM_GEMINI_EFH, COM_CHIP_NOT_SUPPORTED }; /* * Constants used in the confirmation of the COM_GET_BOARD_ID command. */ enum { COM_A_SAMPLE_1_0, COM_A_SAMPLE_1_5, COM_EVA4, COM_GAIA_BOARD21 }; /* * Constants used in the confirmation of the COM_START_APPLICATION command. */ enum { COM_APPLICATION_IS_RUNNING, COM_MONITOR_IS_RUNNING }; /* * List of commands. */ enum { COM_GET_MONITOR_ID, COM_GET_FLASH_ID, COM_GET_CHIP_ID, COM_GET_BOARD_ID, COM_ERASE_FLASH, COM_WRITE_DATA, COM_START_APPLICATION, COM_READ_PARAMETERS, COM_WRITE_PARAMETERS, COM_LOAD_APPLICATION, COM_SEND_RUN_ADDRESS }; /* * Functions results. */ enum { COM_SUCCESS, COM_NO_EXECUTION, COM_ERASE_ERROR, COM_WRITE_ERROR, COM_PARAMETER_ERROR, COM_ADDRESS_ERROR, COM_FILE_ERROR, COM_NOT_SUPPORTED, COM_COMMAND_UNKNOWN }; /* * Constants used in the bootloader. */ enum { CMD_RAM_SUCCESS, CMD_RAM_NO_EXECUTION, CMD_RAM_WRITE_ERROR, CMD_RAM_ADDRESS_ERROR, CMD_RAM_FILE_ERROR }; /* * These macros allow to access to fields of each structure. */ #define COM_COMMAND_WORD(COMMAND) ((COMMAND)->command_word) #define COM_RESULT(COMMAND) ((COMMAND)->result) #define COM_MONITOR_ID(COMMAND) ((COMMAND)->param.monitor_id.identifier) #define COM_MONITOR_VERSION_FIRST_NBR(COMMAND) ((COMMAND)->param.monitor_id.version_first_nbr) #define COM_MONITOR_VERSION_SECOND_NBR(COMMAND) ((COMMAND)->param.monitor_id.version_second_nbr) #define COM_FLASH_ID(COMMAND) ((COMMAND)->param.flash_id.identifier) #define COM_BOARD_ID(COMMAND) ((COMMAND)->param.board_id.identifier) #define COM_FILE_CHECKSUM(COMMAND) ((COMMAND)->param.checksum.file_checksum) #define COM_FLASH_CHECKSUM(COMMAND) ((COMMAND)->param.checksum.flash_checksum) #define COM_CHIP_ID(COMMAND) ((COMMAND)->param.chip_id.identifier) #define COM_STARTING_STATE(COMMAND) ((COMMAND)->param.starting.state) #define COM_READ_PARAMS_OFFSET(COMMAND) \ ((COMMAND)->param.params_read.param_offset) #define COM_NUMBER_OF_PARAMS_READ(COMMAND) \ ((COMMAND)->param.params_read.number_of_params) #define COM_READ_PARAMS_LIST_ADDRESS(COMMAND) \ (&((COMMAND)->param.params_read.param[0])) #define COM_WRITTEN_PARAMS_OFFSET(COMMAND) \ ((COMMAND)->param.params_written.param_offset) #define COM_NUMBER_OF_PARAMS_WRITTEN(COMMAND) \ ((COMMAND)->param.params_written.number_of_params) #define COM_WRITTEN_PARAMS_LIST_ADDRESS(COMMAND) \ (&((COMMAND)->param.params_written.param[0])) #define COM_FILE_RAM_CHECKSUM(COMMAND) ((COMMAND)->param.checksum_RAM.file_checksum) #define COM_RAM_CHECKSUM(COMMAND) ((COMMAND)->param.checksum_RAM.RAM_checksum) #define COM_ADDRESS_MSB(COMMAND) \ ((COMMAND)->param.address.address_msb) #define COM_ADDRESS_LSB(COMMAND) \ ((COMMAND)->param.address.address_lsb) /* * Parameters for each command. * Get software id : no parameter. * Get flash id : no parameter. * Get chip id : no parameter. * Get board id : no parameter. * Erase flash : no parameter. * Write data : no parameter. * Start application : no parameter. */ /* * Read parameters: * - parameter offset (even), * - number of parameters to read */ typedef struct s_com_read_params_req { SYS_UWORD16 param_offset; SYS_UWORD8 number_of_params; } t_com_read_params_req; /* * Write parameters: * - parameter offset (even), * - number of parameters (16 bits) to write, * - list of parameters to write. */ typedef struct s_com_write_params_req { SYS_UWORD16 param_offset; SYS_UWORD8 number_of_params; SYS_UWORD16 param[COM_MAX_NUMBER_OF_16BITS_DATA]; } t_com_write_params_req; /* * Start application in RAM * - file checksum, * - flash checksum */ typedef struct s_com_send_run_address_req { SYS_UWORD16 address_msb; SYS_UWORD16 address_lsb; } t_com_send_run_address_req; /* * General request structure. */ typedef struct s_com_request { SYS_UWORD8 command_word; union u_req_param { t_com_read_params_req params_read; t_com_write_params_req params_written; t_com_send_run_address_req address; } param; } t_com_request; /* * Parameters for each confirmation. * Erase flash : no parameter. * Write parameters : no parameter. */ /* * Get monitor id: * - identifier, * - version. */ typedef struct s_com_get_monitor_id_cnf { SYS_UWORD8 identifier; SYS_UWORD8 version_first_nbr; SYS_UWORD8 version_second_nbr; } t_com_get_monitor_id_cnf; /* * Get flash id: * - identifier. */ typedef struct s_com_get_flash_id_cnf { SYS_UWORD8 identifier; } t_com_get_flash_id_cnf; /* * Get chip id: * - identifier. */ typedef struct s_com_get_chip_id_cnf { SYS_UWORD8 identifier; } t_com_get_chip_id_cnf; /* * Get board id: * - identifier. */ typedef struct s_com_get_board_id_cnf { SYS_UWORD8 identifier; } t_com_get_board_id_cnf; /* * Write data: * - file checksum, * - flash checksum */ typedef struct s_com_write_data_cnf { SYS_UWORD16 file_checksum; SYS_UWORD16 flash_checksum; } t_com_write_data_cnf; /* * Start application: * - state (application is running or not) */ typedef struct s_com_start_application_cnf { SYS_UWORD8 state; } t_com_start_application_cnf; /* * Read parameters: * - number of words (16 bits) read, * - list of words read. */ typedef struct s_com_read_params_cnf { SYS_UWORD8 number_of_params; SYS_UWORD16 param[COM_MAX_NUMBER_OF_16BITS_DATA]; } t_com_read_params_cnf; /* * Load application * - file checksum, * - flash checksum */ typedef struct s_com_load_appli_cnf { SYS_UWORD16 file_checksum; SYS_UWORD16 RAM_checksum; } t_com_load_appli_cnf; /* * General confirmation structure. */ typedef struct s_com_confirmation { SYS_UWORD8 command_word; SYS_UWORD8 result; union u_cnf_param { t_com_get_monitor_id_cnf monitor_id; t_com_get_flash_id_cnf flash_id; t_com_get_chip_id_cnf chip_id; t_com_get_board_id_cnf board_id; t_com_write_data_cnf checksum; t_com_start_application_cnf starting; t_com_read_params_cnf params_read; t_com_load_appli_cnf checksum_RAM; } param; } t_com_confirmation; extern long com_analyze_request (SYS_UWORD8 *request_received, t_com_request *request); extern long com_analyze_confirmation (SYS_UWORD8 *confirmation_received, t_com_confirmation *confirmation); extern long com_build_request (t_com_request *request, SYS_UWORD8 *request_to_send); extern long com_build_confirmation (t_com_confirmation *confirmation, SYS_UWORD8 *confirmation_to_send); #endif /* __COMMAND_H__ */