versadac  1
versadac - Scalable Recorder Firmware
nvol_write.h
1 /*****************************************************************************
2 * Copyright (c) 2009 Eurotherm Controls Ltd.
3 *
4 * FILENAME : nvol_write.h
5 * AUTHORS : Steve Robinson
6 * CREATED : August 2009
7 * DESCRIPTION : Non volatile write routines
8 *****************************************************************************/
9 #ifndef NVOL_WRITE_H
10 #define NVOL_WRITE_H
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
18 // Common //
20 
21 typedef struct
22 {
23  uint8 size;
24  uint8 *p_ram;
25  int16 fram_offset;
27 
28 typedef struct
29 {
30  uint32 c0sp;
31  runtime_nvol_cisp_data_t *cisp_data;
33 
34 void nvol_write_edge_m(bool z_val, edge_t* p_val, uint8 z_task);
35 
36 #ifndef M24256_EEPROM_INTERFACE_H
37 #define M24256_EEPROM_INTERFACE_H
38 
39 #define EEPROM_PAGE_SIZE 64
40 
41 extern unsigned char* eeprom_n_byte_read(unsigned long addr, unsigned int n);
42 extern unsigned char eeprom_byte_write(unsigned long addr, unsigned char data);
43 extern unsigned char eeprom_page_write(unsigned long addr, unsigned char * data, unsigned int n);
44 #endif
45 
46 #ifndef FM24CL16_FRAM_INTERFACE_H
47 #define FM24CL16_FRAM_INTERFACE_H
48 #define FM24CL16_PAGE_SIZE 256
49 
50 #define FRAM_WRITE_REC_OFFSET 0x0000
51 #define FRAM_PARAM_OFFSET 0x0100
52 #define FRAM_HFFS_DATA_OFFSET 0x7F00
53 #define FRAM_FEATURE_OFFSET 0x7FD0
54 #define FRAM_FEATURE2_OFFSET (FRAM_FEATURE_OFFSET + FRAM_FEATURE_SIZE)
55 #define FRAM_FEATURE3_OFFSET (FRAM_FEATURE2_OFFSET + FRAM_FEATURE_SIZE)
56 #define FRAM_TIME_SEG_OFFSET 0x7FE0
57 #define FRAM_POWERDOWN_OFFSET 0x7FF0
58 #define FRAM_DB_REV_OFFSET 0x7FFC
59 #define FRAM_DB_STARTUP_FLAG_OFFSET 0x7FFE
60 #define FRAM_PROCESS_BYTE_OFFSET 0x7FFF
61 
62 #define FRAM_HFFS_DATA_SIZE 28
63 #define FRAM_FEATURE_SIZE 2
64 #define FRAM_POWERDOWN_SIZE 4
65 #define FRAM_DB_REV_SIZE 2
66 #define FRAM_DB_STARTUP_FLAG_SIZE 1
67 #define FRAM_PROCESS_BYTE_SIZE 1
68 
69 enum
70 {
71  PRIMARY,
72  SECONDARY
73 };
74 
75 extern unsigned char* fram_n_byte_read(uint8 fram, unsigned int addr, unsigned char n);
76 extern unsigned char fram_n_byte_write_to(uint8 fram, unsigned int addr, unsigned char * data, unsigned char n);
77 extern unsigned char fram_n_byte_write(unsigned int addr, unsigned char * data, unsigned char n);
78 extern void fram_n_byte_write_nowait(unsigned int addr, unsigned char * data, unsigned char n);
79 
80 extern void * get_HFFS_non_vol_memory_region_addr();
81 extern void * get_mkt_nv_memory_pool_region_addr();
82 
83 
84 #endif
85 
86 #define MAX_NVOL_DATA_SIZE 4
87 
88 #ifdef WIN32
89 // IDM & Windows simulation //
92 #define nvol_write_boolean_m(z_val, p_val, z_task) (*p_val = z_val)
93 #define nvol_write_uint8_m(z_val, p_val, z_task) (*p_val = z_val)
94 #define nvol_write_uint16_m(z_val, p_val, z_task) (*p_val = z_val)
95 #define nvol_write_int16_m(z_val, p_val, z_task) (*p_val = z_val)
96 #define nvol_write_bit_m(z_val, z_mask, p_val, z_task) {if (z_val) *p_val |= z_mask; else *p_val &= ~z_mask;}
97 #define nvol_write_uint32_m(z_val, p_val, z_task) (*p_val = z_val)
98 #define nvol_write_int32_m(z_val, p_val, z_task) (*p_val = z_val)
99 #define nvol_write_time32_m(z_val, p_val, z_task) (*p_val = z_val)
100 #define nvol_write_float32_m(z_val, p_val, z_task) (*p_val = z_val)
101 #define nvol_write_f32_status_m(z_val, p_val, z_task) (*p_val = z_val)
102 #define nvol_write_string_m(z_val, p_val, z_task) {unicode_copy(p_val, z_val);}
103 #define nvol_write_unicode_char_m(z_val, p_val, z_task) (*p_val = z_val)
104 #else
105 // Target Instrument //
108 
109 #define NVOL_START ((uint32)(&nvol_start+1)) // Points to the first byte in nvol (start of nonvol)
110 #define NVOL_END ((uint32)(&nvol_end)) // Points to the first byte after the last byte in nonvol (just past the end of nonvol)
111 #define NVOL_SIZE (NVOL_END - NVOL_START)
112 #define IS_IN_NVOL(x) (((uint32)(x) >= NVOL_START) && ((uint32)(x) < NVOL_END))
113 #define EEPROM_OFFSET(x) ((uint32)x - NVOL_START)
114 #define RAM_ADDRESS(x) ((uint32)x + NVOL_START)
115 
116 // write required defines
117 #define WRITE_REQ_NONE 0x0
118 #define WRITE_REQ_COMMS 0x1
119 #define WRITE_REQ_FBLOCKS 0x2
120 #define WRITE_REQ_RUNTIME 0x3
121 #define WRITE_REQ_IMMEDIATE 0xF
122 #define NVOL_COMMS_MASK 0x11
123 #define NVOL_FBLOCKS_MASK 0x22
124 #define NVOL_RUNTIME_MASK 0x33
125 
126 // write required nibble defines
127 // (Bit3-Bit2: DataSize, Bit1: FBlocks Flag, Bit0: Comms Flag)
128 #define SIZE_MASK 0x0C
129 #define SIZE_1BYTE 0x00 //0000
130 #define SIZE_2BYTES 0x04 //0100
131 #define SIZE_4BYTES 0x08 //1000
132 #define SIZE_8BYTES 0x0C //1100
133 
134 // rtc write states
135 #define RTC_WRITE_COMPLETE 0x00
136 #define RTC_WRITE_PENDING 0x01
137 #define RTC_WRITE_STARTED 0x02
138 
139 //checksum
140 #define CSUM_SEED 0xA5
141 
142 // ram checksum sections
143 #define NVOL_CSUM_SECTION_SIZE 256
144 #define NVOL_CSUM_SECTIONS ((NVOL_SIZE/NVOL_CSUM_SECTION_SIZE)+1)
145 #define NVOL_CSUM_LAST_SECTION (NVOL_CSUM_SECTIONS-1)
146 
147 
148 typedef struct
149 {
150  uint32 addr;
151  uint8 size;
152  uint8 data[MAX_NVOL_DATA_SIZE];
153  uint8 state;
155 
156 void nvol_write_boolean_m(bool z_val, bool * p_val, uint8 z_task);
157 void nvol_write_uint8_m(uint8 z_val, uint8 * p_val, uint8 z_task);
158 void nvol_write_uint16_m(uint16 z_val, uint16 * p_val, uint8 z_task);
159 void nvol_write_int16_m(int16 z_val, int16 *p_val, uint8 z_task);
160 void nvol_write_bit_m(bool z_val, uint8 z_mask, uint8 * p_val, uint8 z_task);
161 void nvol_write_uint32_m(uint32 z_val, uint32 * p_val, uint8 z_task);
162 void nvol_write_int32_m(int32 z_val, int32 * p_val, uint8 z_task);
163 void nvol_write_time32_m(time32 z_val, time32 * p_val, uint8 z_task);
164 void nvol_write_float32_m(float32 z_val, float32 * p_val, uint8 z_task);
165 void nvol_write_f32_status_m(f32_status_t z_val, f32_status_t * p_val, uint8 z_task);
166 void nvol_write_string_m(unicode_p src_val, unicode_p dest_val, uint8 z_task);
167 void nvol_write_unicode_char_m(unicode_c z_val, unicode_p p_val, uint8 z_task);
168 
169 void nvol_populate_runtime_nvol_table(void);
170 int16 nvol_size_of_runtime_nvol_table();
171 uint8 nvol_store_coldstarted_runtime_params(void);
172 uint8 nvol_load_runtime_params(void);
173 void nvol_set_configuration_revision(void);
174 void nvol_set_rtc_write_pending(void);
175 void nvol_rtc_write_pending(void);
176 bool nvol_is_rtc_write_complete(void);
177 bool nvol_security_parameter(uint32 address);
178 void nvol_set_security_revision(void);
179 unicode_p nvol_is_coldstart_popup_required();
180 bool nvol_virgin_coldstart();
181 extern bool is_not_in_runtime_nvol_table(uint32 z_cisp);
182 extern bool is_safe_parameter(uint32 z_cisp);
183 
184 #endif
185 
186 #ifdef __cplusplus
187 }
188 #endif
189 
190 #endif
191 
192 #ifndef SYSTOMONITOR_H
193 #define SYSTOMONITOR_H
194 
195 typedef struct
196 {
197  long int conf;
198  long int security;
199  unsigned long addr;
200  unsigned char size;
201  unsigned char data[MAX_NVOL_DATA_SIZE];
202  unsigned char csum;
204 
205 #define WRITE_RECORD_SIZE (18)
206 
207 #endif
208 
209 #ifndef POWER_FAIL_H
210 #define POWER_FAIL_H
211 
212 extern void force_power_fail();
213 
214 #define POWER_FAIL_DEBUG (0)
215 
216 #endif
217 
218 #define NVRAM_MAX_SIZE 2*1024*1024;
219 
220 #define SIM_PRIM_FRAM_OFFSET 0
221 #define SIM_FRAM_SIZE 32*1024
222 #define SIM_EEPROM_OFFSET (SIM_PRIM_FRAM_OFFSET + SIM_FRAM_SIZE)
223 #define SIM_EEPROM_SIZE 512*1024
224 #define SIM_SEC_FRAM_OFFSET (SIM_EEPROM_OFFSET + SIM_EEPROM_SIZE)
225 #define SIM_SECURITY_OFFSET (SIM_SEC_FRAM_OFFSET + SIM_FRAM_SIZE)
226 #define SIM_SECURITY_SIZE 512*1024
227 
228 #define HFFS_NON_VOL_MEMORY_REGION_OFFSET (SIM_SECURITY_OFFSET + SIM_SECURITY_SIZE)
229 #define HFFS_NON_VOL_MEMORY_REGION_SIZE 500
230 
231 #define MKT_NV_MEMORY_POOL_REGION_OFFSET (HFFS_NON_VOL_MEMORY_REGION_OFFSET + HFFS_NON_VOL_MEMORY_REGION_SIZE)
232 #define MKT_NV_MEMORY_POOL_REGION_SIZE 32*1024
233 
234 
235 #define FLASH_WIRING_OFFSET 0
236 #define FLASH_WIRING_SIZE 128*1024
237 
238 
Definition: stdtypes.h:122
Definition: nvol_write.h:28
Definition: stdtypes.h:116
Definition: nvol_write.h:21
Definition: nvol_write.h:195
Definition: nvol_write.h:148