Files
firmware/right/src/buspal/property.h
2017-04-11 23:20:43 +02:00

97 lines
5.8 KiB
C

#ifndef __PROPERTY_H__
#define __PROPERTY_H__
enum _property_constants {
kProperty_ReservedRegionsCount = 2,
kProperty_FlashReservedRegionIndex = 0,
kProperty_RamReservedRegionIndex = 1,
kProperty_FlashVersionIdSizeInBytes = 8,
};
typedef struct BootloaderConfigurationData {
uint32_t tag; // [00:03] Tag value used to validate the bootloader configuration data. Must be set to 'kcfg'.
uint32_t crcStartAddress; // [04:07]
uint32_t crcByteCount; // [08:0b]
uint32_t crcExpectedValue; // [0c:0f]
uint8_t enabledPeripherals; // [10:10]
uint8_t i2cSlaveAddress; // [11:11]
uint16_t peripheralDetectionTimeoutMs; // [12:13] Timeout in milliseconds for peripheral detection before jumping to application code
uint16_t usbVid; // [14:15]
uint16_t usbPid; // [16:17]
uint32_t usbStringsPointer; // [18:1b]
uint8_t clockFlags; // [1c:1c] High Speed and other clock options
uint8_t clockDivider; // [1d:1d] One's complement of clock divider, zero divider is divide by 1
uint8_t bootFlags; // [1e:1e] One's complemnt of direct boot flag, 0xFE represents direct boot
uint8_t pad0; // [1f:1f] Reserved, set to 0xFF
uint32_t mmcauConfigPointer; // [20:23] Holds a pointer value to the MMCAU configuration
uint32_t keyBlobPointer; // [24:27] Holds a pointer value to the key blob array used to configure OTFAD
uint8_t pad1; // [28:28] reserved
uint8_t canConfig1; // [29:29] ClkSel[1], PropSeg[3], SpeedIndex[4]
uint16_t canConfig2; // [2a:2b] Pdiv[8], Pseg1[3], Pseg2[3], rjw[2]
uint16_t canTxId; // [2c:2d] txId
uint16_t canRxId; // [2e:2f] rxId
uint32_t qspi_config_block_pointer; // [30:33] QSPI config block pointer.
} bootloader_configuration_data_t;
typedef struct ReservedRegion {
uint32_t startAddress;
uint32_t endAddress;
} reserved_region_t;
typedef struct UniqueDeviceId {
uint32_t uidl;
uint32_t uidml;
uint32_t uidmh;
uint32_t uidh;
} unique_device_id_t;
typedef struct {
uint32_t availableAttributesFlag; // Available Atrributes, bit map
uint32_t startAddress; // start Address of external memory
uint32_t flashSizeInKB; // flash size of external memory
uint32_t pageSize; // page size of external memory
uint32_t sectorSize; // sector size of external memory
uint32_t blockSize; // block size of external memory
} external_memory_property_store_t;
enum _ram_constants {
kRAMCount = 1,
};
typedef struct PropertyStore {
standard_version_t bootloaderVersion; // Current bootloader version.
standard_version_t serialProtocolVersion; // Serial protocol version number.
standard_version_t targetVersion; // Target version number.
uint32_t availablePeripherals; // The set of peripherals supported available on this chip. See enum _peripheral_types in bl_peripheral.h.
uint32_t flashStartAddress; // Start address of program flash.
uint32_t flashSizeInBytes; // Size in bytes of program flash.
uint32_t flashSectorSize; // The size in bytes of one sector of program flash. This is the minimum erase size.
uint32_t flashBlockSize; // The size in bytes of one block of program flash.
uint32_t flashBlockCount; // Number of blocks in the flash array.
uint32_t ramStartAddress[kRAMCount]; // Start address of RAM
uint32_t ramSizeInBytes[kRAMCount]; // Size in bytes of RAM
uint32_t crcCheckStatus; // Status code from the last CRC check operation.
uint32_t verifyWrites; // Boolean controlling whether the bootloader will verify writes to flash. Non-zero enables verificaton. Writable by host.
uint32_t availableCommands; // Bit mask of the available commands.
unique_device_id_t UniqueDeviceId; // Unique identification for the device.
uint32_t flashFacSupport; // Boolean indicating whether the FAC feature is supported
uint32_t flashAccessSegmentSize; // The size in bytes of one segment of flash
uint32_t flashAccessSegmentCount; // The count of flash access segment within flash module
uint32_t flashReadMargin; // The margin level setting for flash erase and program Verify CMDs
uint32_t qspiInitStatus; // Result of QSPI+OTFAD init during bootloader startup
reserved_region_t reservedRegions[kProperty_ReservedRegionsCount]; // Flash and Ram reserved regions.
bootloader_configuration_data_t configurationData; // Configuration data from flash address 0x3c0-0x3ff in sector 0 (64 bytes max)
external_memory_property_store_t externalMemoryPropertyStore; // Property store for external memory
uint32_t reliableUpdateStatus; // Status of reliable update
} property_store_t;
typedef struct PropertyInterface {
status_t (*load_user_config)(void); // Load the user configuration data
status_t (*init)(void); // Initialize
status_t (*get)(uint8_t tag, uint8_t id, const void **value, uint32_t *valueSize); // Get property
status_t (*set_uint32)(uint8_t tag, uint32_t value); // Set uint32_t property
property_store_t *store; // The property store
} property_interface_t;
#endif