1 /* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /** 33 * @defgroup los_config System configuration items 34 */ 35 36 #ifndef _LOS_CONFIG_H 37 #define _LOS_CONFIG_H 38 39 #include "los_tick.h" 40 #include "los_vm_zone.h" 41 42 #ifdef __cplusplus 43 #if __cplusplus 44 extern "C" { 45 #endif /* __cplusplus */ 46 #endif /* __cplusplus */ 47 48 /** 49 * @ingroup los_config 50 * int stack start addr 51 */ 52 extern CHAR __int_stack_start; 53 extern CHAR __rodata_start; 54 extern CHAR __rodata_end; 55 extern CHAR __bss_start; 56 extern CHAR __bss_end; 57 extern CHAR __text_start; 58 extern CHAR __text_end; 59 extern CHAR __ram_data_start; 60 extern CHAR __ram_data_end; 61 extern UINT32 __heap_start; 62 extern UINT32 __heap_end; 63 64 /****************************** System clock module configuration ****************************/ 65 /** 66 * @ingroup los_config 67 * System clock (unit: HZ) 68 */ 69 #ifndef OS_SYS_CLOCK 70 #define OS_SYS_CLOCK (get_bus_clk()) 71 #endif 72 /** 73 * @ingroup los_config 74 * time timer clock (unit: HZ) 75 */ 76 #ifndef OS_TIME_TIMER_CLOCK 77 #define OS_TIME_TIMER_CLOCK OS_SYS_CLOCK 78 #endif 79 80 /** 81 * @ingroup los_config 82 * limit addr range when search for 'func local(frame pointer)' or 'func name' 83 */ 84 #ifndef OS_SYS_FUNC_ADDR_START 85 #define OS_SYS_FUNC_ADDR_START ((UINTPTR)&__int_stack_start) 86 #endif 87 #ifndef OS_SYS_FUNC_ADDR_END 88 #define OS_SYS_FUNC_ADDR_END (KERNEL_VMM_BASE + SYS_MEM_SIZE_DEFAULT) 89 #endif 90 91 /** 92 * @ingroup los_config 93 * Number of Ticks in one second 94 */ 95 #ifndef LOSCFG_BASE_CORE_TICK_PER_SECOND 96 #define LOSCFG_BASE_CORE_TICK_PER_SECOND 1000 /* 1ms per tick */ 97 #endif 98 99 /** 100 * @ingroup los_config 101 * Minimum response error accuracy of tick interrupts, number of ticks in one second 102 */ 103 #ifndef LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI 104 #define LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI 1000UL /* 1ms */ 105 #endif 106 107 #if (LOSCFG_BASE_CORE_TICK_PER_SECOND > LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI) 108 #error "LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI must be greater than LOSCFG_BASE_CORE_TICK_PER_SECOND" 109 #endif 110 111 #if (LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI > 1000UL) 112 #error "LOSCFG_BASE_CORE_TICK_PER_SECOND_MINI must be less than or equal to 1000" 113 #endif 114 115 /** 116 * @ingroup los_config 117 * Microseconds of adjtime in one second 118 */ 119 #ifndef LOSCFG_BASE_CORE_ADJ_PER_SECOND 120 #define LOSCFG_BASE_CORE_ADJ_PER_SECOND 500 121 #endif 122 123 /** 124 * @ingroup los_config 125 * Sched clock interval 126 */ 127 #define SCHED_CLOCK_INTETRVAL_TICKS LOSCFG_BASE_CORE_TICK_PER_SECOND 128 129 /** 130 * @ingroup los_config 131 * External configuration item for timer tailoring 132 */ 133 #if defined(LOSCFG_BASE_CORE_TICK_HW_TIME) && (LOSCFG_BASE_CORE_TICK_HW_TIME == 0) 134 #undef LOSCFG_BASE_CORE_TICK_HW_TIME 135 #endif 136 /****************************** Hardware interrupt module configuration ******************************/ 137 /** 138 * @ingroup los_config 139 * Configuration item for hardware interrupt tailoring 140 */ 141 #ifndef LOSCFG_PLATFORM_HWI 142 #define LOSCFG_PLATFORM_HWI 143 #endif 144 145 /** 146 * @ingroup los_config 147 * Maximum number of used hardware interrupts, including Tick timer interrupts. 148 */ 149 #ifndef LOSCFG_PLATFORM_HWI_LIMIT 150 #define LOSCFG_PLATFORM_HWI_LIMIT 96 151 #endif 152 153 /** 154 * @ingroup los_config 155 * The binary point value decide the maximum preemption level. 156 * If preemption supported, the config value is [0, 1, 2, 3, 4, 5, 6], 157 * to the corresponding preemption level value is [128, 64, 32, 16, 8, 4, 2]. 158 */ 159 #ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION 160 #ifndef MAX_BINARY_POINT_VALUE 161 #define MAX_BINARY_POINT_VALUE 4 162 #endif 163 #endif 164 165 /****************************** Task module configuration ********************************/ 166 /** 167 * @ingroup los_config 168 * Minimum stack size. 169 * 170 * 0x800 bytes, aligned on a boundary of 8. 171 * 0x800 bytes, aligned on a boundary of 4. 172 */ 173 #ifndef LOS_TASK_MIN_STACK_SIZE 174 #ifdef __LP64__ 175 #define LOS_TASK_MIN_STACK_SIZE (ALIGN(0x800, 8)) 176 #else 177 #define LOS_TASK_MIN_STACK_SIZE (ALIGN(0x800, 4)) 178 #endif 179 #endif 180 181 /** 182 * @ingroup los_config 183 * Default task priority 184 */ 185 #ifndef LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO 186 #define LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO 10 187 #endif 188 189 /** 190 * @ingroup los_config 191 * Maximum supported number of tasks except the idle task rather than the number of usable tasks 192 */ 193 #ifndef LOSCFG_BASE_CORE_TSK_LIMIT 194 #define LOSCFG_BASE_CORE_TSK_LIMIT 128 195 #endif 196 197 /** 198 * @ingroup los_config 199 * Maximum supported number of process rather than the number of usable processes. 200 */ 201 #ifndef LOSCFG_BASE_CORE_PROCESS_LIMIT 202 #define LOSCFG_BASE_CORE_PROCESS_LIMIT 64 203 #endif 204 205 #if (LOSCFG_BASE_CORE_TSK_LIMIT < LOSCFG_BASE_CORE_PROCESS_LIMIT) 206 #error "The number of tasks must be greater than or equal to the number of processes!" 207 #endif 208 209 /** 210 * @ingroup los_config 211 * Size of the idle task stack 212 */ 213 #ifndef LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE 214 #define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE SIZE(0x800) 215 #endif 216 217 /** 218 * @ingroup los_config 219 * Default task stack size 220 */ 221 #ifndef LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE 222 #define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE SIZE(0x4000) 223 #endif 224 225 /** 226 * @ingroup los_config 227 * Longest execution time of tasks with the same priorities 228 */ 229 #ifndef LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 230 #define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 20000 /* 20ms */ 231 #endif 232 233 /** 234 * @ingroup los_config 235 * Configuration item for task (stack) monitoring module tailoring 236 */ 237 #ifndef LOSCFG_BASE_CORE_TSK_MONITOR 238 #define LOSCFG_BASE_CORE_TSK_MONITOR 239 #endif 240 241 /****************************** Semaphore module configuration ******************************/ 242 /** 243 * @ingroup los_config 244 * Configuration item for semaphore module tailoring 245 */ 246 #ifndef LOSCFG_BASE_IPC_SEM 247 #define LOSCFG_BASE_IPC_SEM 248 #endif 249 250 /** 251 * @ingroup los_config 252 * Maximum supported number of semaphores 253 */ 254 #ifndef LOSCFG_BASE_IPC_SEM_LIMIT 255 #define LOSCFG_BASE_IPC_SEM_LIMIT 1024 256 #endif 257 258 /** 259 * @ingroup los_config 260 * Maximum number of semaphores. 261 */ 262 #ifndef OS_SEM_COUNT_MAX 263 #define OS_SEM_COUNT_MAX 0xFFFE 264 #endif 265 266 /****************************** Mutex module configuration ******************************/ 267 /** 268 * @ingroup los_config 269 * Configuration item for mutex module tailoring 270 */ 271 #ifndef LOSCFG_BASE_IPC_MUX 272 #define LOSCFG_BASE_IPC_MUX 273 #endif 274 275 /****************************** rwlock module configuration ******************************/ 276 /** 277 * @ingroup los_config 278 * Configuration item for rwlock module tailoring 279 */ 280 #ifndef LOSCFG_BASE_IPC_RWLOCK 281 #define LOSCFG_BASE_IPC_RWLOCK 282 #endif 283 284 /****************************** Queue module configuration ********************************/ 285 /** 286 * @ingroup los_config 287 * Configuration item for queue module tailoring 288 */ 289 #ifndef LOSCFG_BASE_IPC_QUEUE 290 #define LOSCFG_BASE_IPC_QUEUE 291 #endif 292 293 /** 294 * @ingroup los_config 295 * Maximum supported number of queues rather than the number of usable queues 296 */ 297 #ifndef LOSCFG_BASE_IPC_QUEUE_LIMIT 298 #define LOSCFG_BASE_IPC_QUEUE_LIMIT 1024 299 #endif 300 /****************************** Software timer module configuration **************************/ 301 #ifdef LOSCFG_BASE_IPC_QUEUE 302 303 /** 304 * @ingroup los_config 305 * Configuration item for software timer module tailoring 306 */ 307 #ifndef LOSCFG_BASE_CORE_SWTMR_ENABLE 308 #define LOSCFG_BASE_CORE_SWTMR_ENABLE 309 #endif 310 311 #ifdef LOSCFG_BASE_CORE_SWTMR_ENABLE 312 #define LOSCFG_BASE_CORE_SWTMR 1 313 #else 314 #define LOSCFG_BASE_CORE_SWTMR 0 315 #endif 316 317 /** 318 * @ingroup los_config 319 * Maximum supported number of software timers rather than the number of usable software timers 320 */ 321 #ifndef LOSCFG_BASE_CORE_SWTMR_LIMIT 322 #define LOSCFG_BASE_CORE_SWTMR_LIMIT 1024 323 #endif 324 /** 325 * @ingroup los_config 326 * Max number of software timers ID 327 * 328 * 0xFFFF: max number of all software timers 329 */ 330 #ifndef OS_SWTMR_MAX_TIMERID 331 #define OS_SWTMR_MAX_TIMERID ((0xFFFF / LOSCFG_BASE_CORE_SWTMR_LIMIT) * LOSCFG_BASE_CORE_SWTMR_LIMIT) 332 #endif 333 /** 334 * @ingroup los_config 335 * Maximum size of a software timer queue 336 */ 337 #ifndef OS_SWTMR_HANDLE_QUEUE_SIZE 338 #define OS_SWTMR_HANDLE_QUEUE_SIZE LOSCFG_BASE_CORE_SWTMR_LIMIT 339 #endif 340 #endif 341 342 343 /****************************** Memory module configuration **************************/ 344 /** 345 * @ingroup los_config 346 * Starting address of the system memory 347 */ 348 #ifndef OS_SYS_MEM_ADDR 349 #define OS_SYS_MEM_ADDR (&m_aucSysMem1[0]) 350 #endif 351 352 /** 353 * @ingroup los_config 354 * Memory size 355 */ 356 #ifndef OS_SYS_MEM_SIZE 357 #define OS_SYS_MEM_SIZE \ 358 ((OS_SYS_FUNC_ADDR_END) - (((UINTPTR)&__bss_end + (64 - 1)) & ~(64 - 1))) 359 #endif 360 361 /****************************** SMP module configuration **************************/ 362 #ifdef LOSCFG_KERNEL_SMP 363 #define LOSCFG_KERNEL_CORE_NUM LOSCFG_KERNEL_SMP_CORE_NUM 364 #else 365 #define LOSCFG_KERNEL_CORE_NUM 1 366 #endif 367 368 #define LOSCFG_KERNEL_CPU_MASK ((1 << LOSCFG_KERNEL_CORE_NUM) - 1) 369 370 /** 371 * @ingroup los_config 372 * Version number 373 */ 374 #define _T(x) x 375 #define KERNEL_NAME "Huawei LiteOS" 376 #define KERNEL_NODE_NAME "hisilicon" 377 #define KERNEL_SEP " " 378 #define _V(v) _T(KERNEL_NAME)_T(KERNEL_SEP)_T(v) 379 380 /** 381 * @ingroup los_config 382 * The Version number of Public 383 */ 384 #define KERNEL_MAJOR 2 385 #define KERNEL_MINOR 0 386 #define KERNEL_PATCH 0 387 #define KERNEL_ITRE 37 388 389 #define VERSION_NUM(a, b, c, d) (((a) << 24) | ((b) << 16) | (c) << 8 | (d)) 390 #define KERNEL_OPEN_VERSION_NUM VERSION_NUM(KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE) 391 392 /** 393 * @ingroup los_config 394 * The container limit 395 */ 396 #ifndef LOSCFG_KERNEL_CONTAINER_DEFAULT_LIMIT 397 #define LOSCFG_KERNEL_CONTAINER_DEFAULT_LIMIT 10 398 #endif 399 400 /****************************** Exception information configuration ******************************/ 401 #ifdef LOSCFG_SAVE_EXCINFO 402 /** 403 * @ingroup los_config 404 * the size of space for recording exception information 405 */ 406 #define EXCINFO_RECORD_BUF_SIZE (16 * 1024) 407 408 /** 409 * @ingroup los_config 410 * the address of space for recording exception information 411 * @attention 412 * <ul> 413 * <li> if uses, the address must be valid in flash, and it should not overlap with other addresses 414 * used to store valid information. </li> 415 * </ul> 416 * 417 */ 418 #define EXCINFO_RECORD_ADDR (0xffffffff) 419 420 /** 421 * @ingroup los_config 422 * @brief define the type of functions for reading or writing exception information. 423 * 424 * @par Description: 425 * <ul> 426 * <li>This definition is used to declare the type of functions for reading or writing exception information</li> 427 * </ul> 428 * @attention 429 * <ul> 430 * <li> "startAddr" must be left to save the exception address space, the size of "buf" is "space" </li> 431 * </ul> 432 * 433 * @param startAddr [IN] Address of storage ,its must be left to save the exception address space 434 * @param space [IN] size of storage.its is also the size of "buf" 435 * @param rwFlag [IN] writer-read flag, 0 for writing,1 for reading, other number is to do nothing. 436 * @param buf [IN] the buffer of storing data. 437 * 438 * @retval none. 439 * @par Dependency: 440 * <ul><li>los_config.h: the header file that contains the type definition.</li></ul> 441 * @see 442 */ 443 typedef VOID (*log_read_write_fn)(UINT32 startAddr, UINT32 space, UINT32 rwFlag, CHAR *buf); 444 445 /** 446 * @ingroup los_config 447 * @brief Register recording exception information function. 448 * 449 * @par Description: 450 * <ul> 451 * <li>This API is used to Register recording exception information function, 452 * and specify location and space and size</li> 453 * </ul> 454 * @attention 455 * <ul> 456 * <li> "startAddr" must be left to save the exception address space, the size of "buf" is "space", 457 * the space of "buf" is malloc or free in user's code </li> 458 * </ul> 459 * 460 * @param startAddr [IN] Address of storage, it must be left to save the exception address space 461 * @param space [IN] size of storage space, it is also the size of "buf" 462 * @param buf [IN] the buffer of storing exception information, the space of "buf" is malloc or free 463 in user's code 464 * @param hook [IN] the function for reading or writing exception information. 465 * 466 * @retval none. 467 * @par Dependency: 468 * <ul><li>los_config.h: the header file that contains the API declaration.</li></ul> 469 * @see 470 */ 471 VOID LOS_ExcInfoRegHook(UINT32 startAddr, UINT32 space, CHAR *buf, log_read_write_fn hook); 472 #endif 473 474 extern UINT32 OsMain(VOID); 475 476 typedef VOID (*SystemRebootFunc)(VOID); 477 VOID OsSetRebootHook(SystemRebootFunc func); 478 SystemRebootFunc OsGetRebootHook(VOID); 479 480 #ifdef __cplusplus 481 #if __cplusplus 482 } 483 #endif /* __cplusplus */ 484 #endif /* __cplusplus */ 485 486 #endif /* _LOS_CONFIG_H */ 487