blob: 836aeb386901a1950b80adac4f196630b3a0bf20 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/**
2 * @file oss_sup.h
3 * @brief ossÄ£¿é¸½¼Ó¹¦ÄÜ
4 *
5 * Copyright (C) 2017 Sanechips Technology Co., Ltd.
6 *
7 *
8 */
9
10#ifndef _OSS_SUP_H
11#define _OSS_SUP_H
12
13/*******************************************************************************
14 * Include header files *
15 ******************************************************************************/
16#include "ramdump.h"
17#ifdef __cplusplus
18extern "C"
19{
20#endif
21
22
23/*******************************************************************************
24 * Macro definitions *
25 ******************************************************************************/
26#ifndef DOXYGEN_SHOULD_SKIP_THIS
27/* ÉèÖûò»ñȡʼþÊôÐÔ */
28#define ZOSS_EVENTS_OR 0x00
29#define ZOSS_EVENTS_AND 0x01
30#define ZOSS_EVENTS_OR_CLEAR 0x02
31#define ZOSS_EVENTS_AND_CLEAR 0x03
32
33/* ÉèÖûص÷º¯ÊýÀàÐÍ */
34#define ZOSS_SETHOOKFLAG_MONI 0x01 /* ÏûÏ¢¼à¿Ø */
35#define ZOSS_SETHOOKFLAG_TRACK 0x02 /* ÏßÐÔ¸ú×Ù */
36#define ZOSS_SETHOOKFLAG_INTER 0x03 /* ÏûÏ¢½Ø»ñ */
37#define ZOSS_SETHOOK_SEND 0x01 /* zOss_SendMsgÏûÏ¢À©Õ¹ */
38#define ZOSS_SETHOOK_SEND_DATA 0x02 /* zOss_SendMsgÏûÏ¢À©Õ¹ */
39#define ZOSS_SETHOOK_GET_ALL_ID 0x03 /* zOss_GetAllTaskIDÀ©Õ¹ */
40#define ZOSS_SETHOOK_GET_ID 0x04 /* zOss_GetTaskIDÀ©Õ¹ */
41#define ZOSS_SETHOOK_GET_NAME 0x05 /* zOss_GetTaskNameÀ©Õ¹ */
42
43/* ÈÎÎñÏûϢ״̬ */
44#define ZOSS_MSGSENDTYPE_MSG 0x01 /* ·¢ËÍÏûÏ¢ */
45#define ZOSS_MSGSENDTYPE_DATA 0x02 /* ·¢ËÍÊý¾Ý */
46#define ZOSS_MSGSENDTYPE_INTER 0x03 /* ÔÚÖжÏÖз¢ËÍ */
47#define ZOSS_MSGSENDTYPE_TIMER 0x04 /* ¶¨Ê±Æ÷ÏûÏ¢ */
48
49/* ÈÎÎñ״̬»ú */
50#define ZOSS_STATUS_INIT 0x01 /* ³õʼ̬ */
51#define ZOSS_STATUS_WORK 0x02 /* ¹¤×÷̬ */
52#define ZOSS_STATUS_IDLE 0x03 /* ¿ÕÏÐ̬ */
53#define ZOSS_STATUS_USERBASE 0x04 /* Óû§×´Ì¬×Ô¶¨Òå */
54
55/* ÈÎÎñÔËÐÐ״̬ */
56#define ZOSS_STATE_STOPPED 0x01 /* ÈÎÎñÔÝÍ£ */
57#define ZOSS_STATE_IDLE 0x02 /* ÈÎÎñ¿ÕÏÐ */
58#define ZOSS_STATE_READY 0x03 /* ÈÎÎñ¾ÍÐ÷ */
59#define ZOSS_STATE_RUN 0x04 /* ÈÎÎñÔËÐÐ */
60
61/* ÏûÏ¢²¶»ñ·½Ïò */
62#define ZOSS_MSGDIRE_IN 0x01 /* ÊäÈëÏûÏ¢²¶»ñ */
63#define ZOSS_MSGDIRE_OUT 0x02 /* Êä³öÏûÏ¢²¶»ñ */
64#define ZOSS_MSGDIRE_INOUT 0x03 /* Ë«Ïò²¶»ñ */
65
66/* ÏûÏ¢·¢ËÍÓÅÏȼ¶ */
67#define ZOSS_QUEUE_MSG_PRI_NORMAL 0x00 /* normal priority message£¬¼´·Åµ½ÏûÏ¢¶ÓÁÐβ */
68#define ZOSS_QUEUE_MSG_PRI_URGENT 0x01 /* urgent priority message£¬¼´·Åµ½ÏûÏ¢¶ÓÁÐÊ× */
69
70/* ÅäÖòÎÊý×î´ó³¤¶È */
71#define MAX_EVENTNAME_LEN 63 /* ʼþ×éÃû³Æ×î´ó³¤¶È */
72#define MAX_QUEUENAME_LEN 63 /* ×î´óÏûÏ¢¶ÓÁÐÃû³¤¶È */
73#define ZOSS_MAX_TASKNAME_LEN 63 /* ÈÎÎñÃû³¤¶È */
74#define SHELL_CMD_LENGTH 31 /* shellÃüÁîµÄ×î´ó³¤¶È */
75#define SHELL_CMD_PARAM_NUM 12 /* shellÃüÁî²ÎÊýµÄ×î´ó¸öÊý */
76#define SHELL_CMD_PARAM_LENGTH 23 /* shellÃüÁî²ÎÊýµÄ×î´ó³¤¶È */
77
78/* ´òÓ¡ */
79#define zOss_Printf zTools_Printf
80#define PRINT_LEVEL_ALLWAYS 0x00 /* ±¾¼¶±ð×ÜÊÇ´òÓ¡ */
81#define PRINT_LEVEL_DEBUG 0x01 /* µ÷ÊÔ¼¶±ð */
82#define PRINT_LEVEL_NORMAL 0x02 /* ÆÕͨ¼¶±ð */
83#define PRINT_LEVEL_SEVERE 0x03 /* ÑÏÖØ¼¶±ð */
84#define PRINT_LEVEL_ABNORMAL 0x04 /* Òì³£¼¶±ð */
85#define PRINT_LEVEL_RAM 0x05 /* ´òÓ¡µ½ÄÚ´æ,½öÔÚ´òÓ¡´úÀíÖÐʹÓà */
86#define PRINT_LEVEL_FORBID 0xff /* ²»´òÓ¡ */
87
88/* NV ECC*/
89#define ZOSS_NV_ECC_LOG_NR (6)
90#define ZOSS_NV_ECC_WORK (1)
91#define ZOSS_NV_ECC_BACKUP (2)
92#define ZOSS_NV_ECC_BOTH (3)
93#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
94
95/*******************************************************************************
96 * Type definitions *
97 ******************************************************************************/
98#ifndef DOXYGEN_SHOULD_SKIP_THIS
99/* Ë«ÏòÁ´±íÄ£¿é */
100typedef struct tag_NODE
101{
102 struct tag_NODE *next;
103 struct tag_NODE *previous;
104}T_ZOss_Node;
105
106typedef struct
107{
108 SINT32 count;
109 T_ZOss_Node *HEAD;
110 T_ZOss_Node *TAIL;
111}T_ZOss_List;
112
113/* »·Ðλº³åÄ£¿é */
114typedef struct
115{
116 SINT32 pToBuf; /* offset from start of buffer where to write next */
117 SINT32 pFromBuf; /* offset from start of buffer where to read next */
118 SINT32 bufSize; /* size of ring in bytes */
119 CHAR *buf; /* pointer to start of buffer */
120}T_ZOss_Ring, *T_ZOss_RingId;
121
122/* ¶¨Ê±Æ÷¹ÜÀíÄ£¿é 20130415ÒÆÖÁosa.h*/
123
124/* ITCÄ£¿é 20130523 ɾ³ý*/
125
126/* ramdump ¹Ò½Óº¯ÊýÀàÐÍ */
127typedef VOID (*T_zOss_RamdumpHookFunc)(VOID);
128
129/* ÏûÏ¢¹ÜÀíÄ£¿é */
130typedef struct
131{
132 T_ZOss_Node node;
133 ZOSS_TASK_ID t_task_id; /* Ä¿±êÈÎÎñID */
134 ZOSS_TASK_ID s_task_id; /* Ô´ÈÎÎñID */
135 UINT32 msgID; /* ÏûÏ¢ID */
136 UINT16 msgLen; /* ÏûÏ¢Ì峤¶È */
137 UINT8 send_state; /* ÏûÏ¢·¢ËÍ״̬ */
138}T_ZOss_TaskMsgHead; /* ÏûϢͷ */
139
140typedef struct
141{
142 VOID *msgbuf;
143 UINT16 msgLenEX;
144}T_ZOss_TaskMsg; /* ÏûÏ¢Ìå */
145
146typedef UINT32 (*TASK_SEND_HOOK)(T_ZOss_TaskMsgHead *buf, UINT8 dire);
147
148/* ÈÎÎñ¹ÜÀíÄ£¿é */
149typedef VOID (*FUNC_TASKENTRY)(UINT8 state, UINT32 msg_id, UINT8 *buf, UINT16 msg_len, UINT8 *private_data);
150
151typedef struct struTCB
152{
153 T_ZOss_Node node; /* Ë«ÏòÁ´±í½áµã */
154 UINT32 type; /* Çø·ÖÊÇ·ñSDLÈÎÎñ */
155 UINT32 count; /* ÈÎÎñÖ´ÐеĴÎÊý */
156 CHAR task_name[ZOSS_MAX_TASKNAME_LEN + 1]; /* ÈÎÎñÃû,³¤¶È×î´ó63 */
157 FUNC_TASKENTRY taskEntry; /* ÈÎÎñÈë¿Ú */
158 TASK_SEND_HOOK HookEntry[3]; /* »Øµ÷º¯Êý */
159 ZOSS_TASK_ID task_id; /* ÈÎÎñID */
160 ZOSS_TASK_ID sender_task_id; /* ÏûÏ¢Ô´ÈÎÎñID */
161 ZOSS_THREAD_ID thread_id; /* ËùÔÚÏß³ÌID */
162 T_ZOss_List msg_queue; /* ÈÎÎñÏûÏ¢¶ÓÁÐÁ´±í */
163 UINT32 stack_size; /* ¶ÑÕ»´óС */
164 UINT32 priority; /* ÈÎÎñÓÅÏȼ¶(0-31) */
165 UINT32 private_data_len; /* ˽ÓÐÊý¾Ý³¤¶È */
166 UINT32 time; /* ÈÎÎñ´´½¨Ê±¼ä */
167 UINT32 stack_used; /* ÒÑÓöÑÕ»´óС */
168 UINT32 task_time; /* ÈÎÎñ¿ªÊ¼Ê±¼ä */
169 UINT32 msg_id; /* µ±Ç°ÈÎÎñÏûÏ¢ID */
170 UINT8 dire[4]; /* ÏûÏ¢²¶»ñ·½Ïò */
171 UINT8 thread_no; /* Ï̺߳Š*/
172 UINT8 run_status; /* ÔËÐÐ×´¿ö */
173 UINT8 state; /* ÈÎÎñ״̬ */
174 UINT8 *taskData; /* ÈÎÎñÊý¾ÝÇøÖ¸Õë */
175 struct struTCB *next;
176 UINT32 cputime; /* ÈÎÎñÔËÐÐcpuʱ¼ä */
177 FLOAT cpupercent; /* ÈÎÎñcpuÕ¼ÓÃÂÊ */
178 UINT32 runtime; /* ÈÎÎñÔËÐÐʱ¼ä */
179 UINT32 malloc_size; /* ÈÎÎñËùÓÃmalloc´óС */
180 UINT32 ub_size; /* ÈÎÎñËùÓÃÄÚ´æ³Ø´óС */
181 UINT8 reserved[4]; /* ±£Áô룬µÚÒ»¸ö×Ö½ÚΪϵͳ¾²Ì¬ÈÎÎñ±ê־λ */
182}T_ZOss_TCB; /* ÈÎÎñ¿ØÖÆ¿é */
183
184typedef struct
185{
186 UINT8 is_use;
187 CHAR task_name[ZOSS_MAX_TASKNAME_LEN + 1];
188 FUNC_TASKENTRY task_entry;
189 UINT32 priority;
190 UINT32 stack_size;
191 UINT32 private_data_len;
192 UINT8 process_no;
193 UINT8 ack_flag;
194#ifdef _USE_HAL_HRDTST
195 BOOL hardTestFlag;
196#endif
197}T_ZOss_TaskTabItem; /* ÈÎÎñµÇ¼Ç±í */
198
199/* SDLÈÎÎñ */
200typedef struct
201{
202 T_ZOss_Node node; /* ±£Áô */
203 UINT32 type; /* Çø·ÖÊÇ·ñSDLÈÎÎñ */
204 SINT32 index; /* Ë÷Òý */
205 UINT32 self_id;
206 ZOSS_THREAD_ID thread_id; /* ËùÔÚÏß³ÌID */
207 VOID *self;
208 TASK_SEND_HOOK HookEntry[3]; /* »Øµ÷º¯Êý */
209 UINT8 dire[4]; /* ÏûÏ¢²¶»ñ·½Ïò */
210}T_ZOss_SDLTCB; /* SDLÈÎÎñ¿ØÖÆ¿é */
211
212typedef struct signalcode_desc
213{
214 UINT32 selfid;
215 CHAR task_name[ZOSS_MAX_TASKNAME_LEN + 1];
216} T_ZOss_SignalCode_Desc;
217
218typedef struct
219{
220 UINT32 selfid;
221 ZOSS_TASK_ID task_id;
222}tasksdl_desc;
223/* shellÃüÁî */
224typedef struct
225{
226 CHAR cmd[SHELL_CMD_LENGTH + 1]; /* ÃüÁî×Ö·û´®³¤¶È */
227 CHAR para[SHELL_CMD_PARAM_NUM][SHELL_CMD_PARAM_LENGTH + 1]; /* ²ÎÊý */
228 UINT32 paraCount; /* ²ÎÊý¸öÊý */
229}T_Shell_CommandMessage; /* sehllÃüÁîÏûÏ¢½á¹¹Ìå */
230
231typedef VOID (*Shell_Func)(T_Shell_CommandMessage *CmdMsg); /* shellÃüÁîʵÏÖº¯ÊýÖ¸Õë */
232
233/* ¶¯Ì¬ÅäÖÃÀàÐͶ¨Òå */
234typedef struct
235{
236 UINT8 (*pPrioMap)[32];
237}T_OSA_PARAM;
238
239typedef struct
240{
241 UINT32 ub_pool_num; /* ÄÚ´æ³Ø¸öÊý, ×î´ó²»Äܳ¬¹ý255 */
242 T_ZOss_UBPOOL *UBPool; /* ÄÚ´æ³ØÅäÖñíÖ¸Õë */
243}T_MEM_PARAM; /* ÄÚ´æÄ£¿é */
244
245typedef struct
246{
247 UINT32 max_task_num; /* ×î´óÈÎÎñÊý */
248 UINT32 max_schthread_num; /* µ÷¶ÈÏß³ÌÊý£¬×î¶à10 */
249 UINT32 max_msg_queue_len; /* ÈÎÎñÏûÏ¢¶ÓÁг¤¶È */
250 UINT32 deadloop_time; /* ËÀÑ­»·ÅжÏʱ¼ä, µ¥Î»s */
251}T_TASK_PARAM; /* ÈÎÎñÄ£¿é */
252
253typedef struct
254{
255 UINT32 SchPrio; /* ¶¨Ê±Æ÷µ÷¶ÈÏß³ÌÓÅÏȼ¶0-9 */
256 UINT32 CallBackStack; /* ¶¨Ê±Æ÷»Øµ÷º¯ÊýÏ̶߳ÑÕ» */
257 UINT32 CallBackPrio; /* ¶¨Ê±Æ÷»Øµ÷º¯ÊýÏß³ÌÓÅÏȼ¶£¬±ØÐëµÍÓÚµ÷¶ÈÏß³ÌÓÅÏȼ¶£¬Ò»°ãΪSchPrio+1 */
258 UINT32 MinTimeLen; /* ¶¨Ê±Æ÷×îСµÄ³¬Ê±Ê±¼ä,µ¥Î»ºÁÃë */
259 UINT32 MaxTimeNum; /* ×î´ó¶¨Ê±Æ÷¸öÊý */
260}T_TIMER_PARAM; /* ¶¨Ê±Æ÷Ä£¿é */
261
262typedef struct
263{
264 UINT32 DeadLoopCheckTime; /* ËÀÑ­»·¼ì²éʱ¼ä */
265 UINT32 UpdateCPUTime; /* Ë¢ÐÂCPUʹÓÃÂÊʱ¼ä */
266 UINT32 DeamonStartTime; /* ϵͳ³õʼ»¯ºóExcepÈÎÎñÆô¶¯µÄʱ¼ä */
267}T_EXCEP_PARAM; /* Ò쳣ģ¿é */
268
269typedef struct
270{
271 T_ZOss_TaskTabItem *pSysm_TaskItemTab;
272 UINT32 task_num;
273}T_SYSM_PARAM; /* sysmÄ£¿é */
274
275typedef struct
276{
277 UINT32 *pNvAddrCfg;
278 UINT32 addrCfgNum;
279 VOID *pRevNvCfg;
280 UINT32 revNvCfgNum;
281 UINT32 NV_Work_Area_Base_Addr; /* NV¹¤×÷Çø»ùµØÖ· */
282 UINT32 NV_Start_Backup_Base_Addr; /* ±¸·Ý¿éµÄÆðʼµØÖ· */
283 UINT32 NV_Backup_Area_Base_Addr; /* NV±¸·ÝÇø»ùµØÖ· */
284 UINT32 NV_Backup_Area_Size; /* NV±¸·ÝÇø´óС */
285 UINT32 NV_Factory_Area_Base_Addr; /* NV³ö³§Çø»ùµØÖ· */
286 UINT32 NV_Factory_Area_Size; /* NV³ö³§Çø´óС */
287 UINT32 NV_Work_Area_Symbol_Addr; /* ¹¤×÷ÇøÐ´±ê־λµØÖ· */
288 UINT32 NV_Backup_Area_Symbol_Addr; /* ±¸·ÝÇøÐ´±ê־λµØÖ· */
289 UINT32 NV_Factory_Area_Symbol_Addr; /* ³ö³§Çø±ê־λµØÖ· */
290 UINT32 NV_Reset_Factory_Symbol_Addr; /* »Ö¸´³ö³§ÉèÖñêÖ¾µØÖ· */
291 UINT32 NV_Ecc_log_Addr; /* Ecc Log¹¤×÷ÇøµØÖ· */
292 UINT32 NV_Block_Size; /* ¿é´óС */
293}T_NVRAM_PARAM; /* NVRAMÇøÓòµØÖ·ÐÅÏ¢ */
294
295typedef struct
296{
297 UINT8 count;
298 UINT8 index;
299 UINT8 type[ZOSS_NV_ECC_LOG_NR];
300 UINT32 tick[ZOSS_NV_ECC_LOG_NR];
301 UINT32 addr[ZOSS_NV_ECC_LOG_NR];
302}T_ZOss_NvEccLog;
303
304typedef struct
305{
306 UINT32 Work_Area_Base_Addr; /* vSIM¹¤×÷Çø»ùµØÖ· */
307 UINT32 Backup_Area_Base_Addr; /* vSIM±¸·ÝÇø»ùµØÖ· */
308 UINT32 Factory_Area_Base_Addr; /* vSIM³ö³§Çø»ùµØÖ· */
309 UINT32 Area_Size; /* vSIMµ¥¸öÇø´óС */
310 UINT32 Work_Area_Symbol_Addr; /* ¹¤×÷ÇøÐ´±ê־λµØÖ· */
311 UINT32 Backup_Area_Symbol_Addr; /* ±¸·ÝÇøÐ´±ê־λµØÖ· */
312 UINT32 Factory_Area_Symbol_Addr; /* ³ö³§Çø±ê־λµØÖ· */
313}T_vSIM_PARAM;
314
315typedef struct
316{
317 CHAR WinDisk[4]; /* windowsÅÌ·û */
318 CHAR LinuxPath[20]; /* ÀàlinuxÉ豸Ãû */
319 CHAR Format[20]; /* ÎļþϵͳÀàÐÍ */
320 CHAR Device[20]; /* É豸Ãû */
321 CHAR Params[100]; /* Ïà¹Ø²ÎÊý */
322 CHAR Manager[40]; /* ¹ÜÀíÏß³ÌÃû */
323}T_OSA_DISKMAP;
324
325typedef struct
326{
327 T_OSA_DISKMAP *diskMap;
328 UINT32 diskNum;
329}T_DISK_PARAM;
330
331typedef VOID (*ramdump_Hook)(VOID);
332
333typedef struct
334{
335 ramdump_Hook ramdump_Process_PreHook;
336 ramdump_Hook ramdump_Process_AftHook;
337}T_zOss_RamdumpOpt;
338
339
340typedef VOID (*ramdump_IoInit)(VOID);
341typedef VOID (*ramdump_IoReadData)(UINT8 *buffer, UINT32 size);
342typedef VOID (*ramdump_IoWriteData)(UINT8 *buffer, UINT32 size);
343typedef VOID (*ramdump_IoFinish)(VOID);
344
345typedef struct
346{
347 ramdump_IoInit init;
348 ramdump_IoReadData read;
349 ramdump_IoWriteData write;
350 ramdump_IoFinish finish;
351} T_zOss_RamdumpIoOpt;
352
353typedef struct
354{
355 UINT32 baseForServer;
356 UINT32 baseForSelf;
357 UINT32 baseForCopy;
358 UINT32 size;
359} T_zOss_RamdumpRegion;
360
361typedef struct
362{
363 T_OSA_PARAM OsaCfg; /* osaÅäÖÃ */
364 T_DISK_PARAM DiskMap; /* ´ÅÅÌÓ³ÉäÅäÖà */
365 T_MEM_PARAM MemCfg; /* ÄÚ´æÅäÖà */
366 T_TASK_PARAM TaskCfg; /* ÈÎÎñÅäÖà */
367 T_TIMER_PARAM TimerCfg; /* ¶¨Ê±Æ÷ÅäÖà */
368 T_EXCEP_PARAM ExcepCfg; /* Òì³£ÅäÖà */
369 T_SYSM_PARAM SysmCfg; /* sysmtÅäÖÃ */
370 T_NVRAM_PARAM NvramCfg; /* NvÅäÖÃ */
371 T_vSIM_PARAM vSIMCfg; /* vSimÅäÖÃ */
372#ifdef _USE_PSM
373#ifdef _USE_PSM_NEW_FRAMEWORK
374 T_zPsm_Param PsmCfg; /* PsmÅäÖÃ */
375#else
376 T_PSM_PARAM PsmCfg; /* PsmÅäÖÃ */
377#endif
378#endif
379}T_OSS_PARAM; /* Õû¸öOSS¶¯Ì¬ÅäÖÃÀàÐÍ */
380
381typedef enum
382{
383 SYS_RESET_TO_NORMAL,
384 SYS_RESET_TO_CHARGER,
385 SYS_RESET_TO_ALRAM,
386 SYS_RESET_TO_EXCEPTRESET,
387 SYS_MAX_RESET_TYPE,
388} T_ZOssSys_RESET_TYPE;
389#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
390
391/*******************************************************************************
392 * Global variable declarations *
393 ******************************************************************************/
394
395
396/*******************************************************************************
397 * Global function declarations *
398 ******************************************************************************/
399#ifndef DOXYGEN_SHOULD_SKIP_THIS
400/* OSAÄ£¿é³õʼ»¯ */
401UINT32 OSA_Init(VOID);
402
403/* ϵͳ¹ÜÀíÄ£¿é */
404UINT32 zOss_Init(VOID);
405UINT32 zOss_TaskInit(VOID);
406UINT32 zOss_Start(VOID);
407VOID zOss_TaskStartOK(VOID);
408UINT32 zOss_SysPowerdown(VOID);
409VOID zOss_SysSoftReset(T_ZOssSys_RESET_TYPE type);
410T_OSS_PARAM *zOss_GetOssCfg(VOID);
411
412/* ÈÎÎñ¹ÜÀíÄ£¿é */
413UINT32 zOss_Task_HookSet(UINT8 type, VOID *HookFunc);
414ZOSS_TASK_ID zOss_CreateTask(const CHAR *task_name, FUNC_TASKENTRY task_entry, UINT32 stack_size, UINT32 priority, UINT32 private_data_len, UINT8 pno);
415UINT32 zOss_DeleteTask(ZOSS_TASK_ID task_id);
416UINT32 zOss_GetTaskInfo(ZOSS_TASK_ID task_id, T_ZOss_TCB *task_info);
417CHAR *zOss_GetTaskName(ZOSS_TASK_ID task_id);
418UINT32 zOss_GetAllTaskID(ZOSS_TASK_ID *task_id_arr);
419ZOSS_TASK_ID zOss_GetTaskID(const CHAR *task_name);
420ZOSS_TASK_ID zOss_GetSelfTaskID(VOID);
421UINT32 zOss_SetState(UINT8 next_state);
422UINT32 zOss_RegTaskSendHook(ZOSS_TASK_ID task_id, UINT8 hooktype, UINT8 dire, TASK_SEND_HOOK intercept_Entry);
423UINT32 zOss_TaskSend(UINT32 msg_id, const VOID *msg_buf, UINT16 msg_len, ZOSS_TASK_ID task_id);
424UINT32 zOss_TaskSendData(UINT32 msg_id, VOID *buf, UINT16 msg_len, ZOSS_TASK_ID task_id);
425ZOSS_TASK_ID zOss_Sender(VOID);
426
427/* ramdump */
428#ifdef _USE_MULTI_CORE_RAMDUMP
429VOID zOss_RamdumpSetOperation(T_zOss_RamdumpOpt *funcObjPtr);
430VOID zOss_RamdumpConfigureMem(T_zOss_RamdumpRegion *regionInfo);
431#else
432VOID zOss_RamdumpConfigureMem(UINT32 base, UINT32 size, UINT32 map_base, UINT32 copy_base);
433VOID zOss_RamdumpHookInstall(T_zOss_RamdumpHookFunc hook);
434#endif
435VOID zOss_RamdumpSetIoOpt(T_zOss_RamdumpIoOpt hook);
436
437/* NV²Ù×÷½Ó¿Ú */
438UINT32 zOss_NvItemWrite(UINT32 NvItemID, UINT8 *NvItemData, UINT32 NvItemLen);
439UINT32 zOss_NvItemRead(UINT32 NvItemID, UINT8 *NvItemData, UINT32 NvItemLen);
440UINT32 zOss_ResetNVFactory(VOID);
441UINT32 zOss_NvramFlush(VOID);
442VOID zOss_NvSetErrorAddr(UINT32 addr);
443BOOL zOss_NvInResume(VOID);
444VOID zOss_NvCheck(VOID);
445VOID zOss_NvWriteFactory(VOID);
446VOID zOss_NvScanBackUpArea(VOID);
447UINT32 zOss_NvGetEccLogInfo(T_ZOss_NvEccLog *logInfo);
448UINT32 zOss_ChangeNvroAttr(int writable);
449UINT32 Nvram_Flush(VOID);
450UINT32 Nvram_Finish(VOID);
451
452/* VSIM²Ù×÷½Ó¿Ú */
453UINT32 zOss_vSIMInit(VOID);
454UINT32 zOss_vSIMDataRead(UINT32 addr, VOID *data, UINT32 len);
455UINT32 zOss_vSIMDataWrite(UINT32 addr, VOID *data, UINT32 len);
456UINT32 zOss_vSIMFacWrite(VOID *data, UINT32 len);
457UINT32 zOss_vSIMRecovery(VOID);
458
459/* ´òÓ¡ */
460UINT32 zTools_Printf(UINT32 nModNo, UINT8 nPrintLevel, const VOID *pFormat, ...);
461VOID zOss_RamLog(CHAR *rambuf, UINT32 restrict);
462VOID zOss_RamPrintf(VOID);
463
464/* shellÄ£¿é */
465UINT32 zOss_AddShellCmd(const CHAR *cmd_name, const Shell_Func func, const CHAR *description);
466
467/* ¿´ÃŹ· */
468VOID zOss_WatchDogEnable(BOOL enable);
469
470/* CRCУÑé */
471UINT8 Comm_CrcCalc(const UINT8 *buf, UINT8 len);
472SINT32 Comm_CrcCheck(UINT8 *buf, UINT8 len, UINT8 crc);
473
474/* µãµÆÄ£¿é */
475VOID zOss_SetTransDataFlag(VOID);
476BOOL zOss_GetTransDataFlag(VOID);
477
478/* ʼþ×é */
479ZOSS_EVENT_ID zOss_CreateEvent(const CHAR *name);
480UINT32 zOss_GetEvent(ZOSS_EVENT_ID eventId, UINT32 events, UINT32 getOptions, UINT32 *pEventsReceived, UINT32 timeout);
481UINT32 zOss_SetEvent(ZOSS_EVENT_ID eventId, UINT32 events, UINT32 setOptions);
482UINT32 zOss_DeleteEvent(ZOSS_EVENT_ID eventId);
483UINT32 zOss_QueryEvent(ZOSS_EVENT_ID eventId);
484BOOL zOss_WaitingEvent(ZOSS_EVENT_ID eventId);
485
486/* »·Ðλº³å */
487BOOL zOss_RingIsEmpty(T_ZOss_RingId ring_id);
488BOOL zOss_RingIsFull(T_ZOss_RingId ring_id);
489T_ZOss_RingId zOss_RingCreate(SINT32 nbytes);
490SINT32 zOss_RingBufGet(T_ZOss_RingId ring_id, CHAR *buffer, SINT32 maxbytes);
491SINT32 zOss_RingBufPut(T_ZOss_RingId ring_id, CHAR *buffer, SINT32 nbytes);
492SINT32 zOss_RingFreeBytes(T_ZOss_RingId ring_id);
493SINT32 zOss_RingNBytes(T_ZOss_RingId ring_id);
494VOID zOss_RingDelete(T_ZOss_RingId ring_id);
495VOID zOss_RingFlush(T_ZOss_RingId ring_id);
496VOID zOss_RingMoveAhead(T_ZOss_RingId ring_id, SINT32 n);
497VOID zOss_RingPutAhead(T_ZOss_RingId ring_id, CHAR byte, SINT32 offset);
498
499/* ÏûÏ¢¶ÓÁÐ */
500ZOSS_QUEUE_ID zOss_QueueCreate(const CHAR *queue_name, UINT32 maxMsgs, UINT32 maxMsgLen);
501UINT32 zOss_QueueSend(ZOSS_QUEUE_ID queue_id, VOID *msg_ptr, UINT32 size, UINT32 timeout, UINT32 priority);
502UINT32 zOss_QueueRecv(ZOSS_QUEUE_ID queue_id, VOID *buffer, UINT32 maxsize, UINT32 timeout);
503UINT32 zOss_QueueFreeCount(ZOSS_QUEUE_ID queue_id);
504UINT32 zOss_QueueDelete(ZOSS_QUEUE_ID queue_id);
505
506/* ¹ÜµÀ */
507UINT32 zOss_PipeDevCreate(const CHAR *name, SINT32 nBytes);
508UINT32 zOss_PipeDevDelete(const CHAR *name, BOOL force);
509
510/* Cahce½Ó¿Ú */
511VOID zOss_CacheCleanRange(UINT32 base, UINT32 size);
512VOID zOss_CacheInvalidateRange(UINT32 base, UINT32 size);
513VOID zOss_CacheCleanRangeFast(UINT32 base, UINT32 size);
514VOID zOss_CacheInvalidateRangeFast(UINT32 base, UINT32 size);
515VOID zOss_IoRemapPages(VOID *base, UINT32 size);
516
517/* svÉèÖûñÈ¡½Ó¿Ú */
518UINT8 zOss_GetSvConfig(VOID);
519VOID zOss_SetSvConfig(UINT8 sv);
520
521/* ¶¨Ê±Æ÷¹ÜÀíÄ£¿é */
522#ifdef _USE_PSM
523VOID zOss_SetTimer_PsmFlag(ZOSS_TIMER_ID time_id, BOOL Flag);
524UINT32 zOss_GetPs_SleepTimer(VOID);
525#endif
526
527#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
528
529/**
530 * @brief ÉèÖ÷ÇÖÜÆÚÐÔÈÎÎñ¶¨Ê±Æ÷
531 * @param time_len Èë²Î£¬Ê±³¤£¬µ¥Î»£ºms
532 * @param msg_id Èë²Î£¬¶¨Ê±µ½ºó,·¢Ë͸øÉèÖö¨Ê±Æ÷ÈÎÎñµÄÏûÏ¢id
533 * @param arg Èë²Î£¬¸½¼Ó²ÎÊý,¶¨´«µÝ¸øÈÎÎñÈë¿Úº¯ÊýµÄbufÐβδËʱmsg_lenֵΪ4(sizeof(UINT32/arg))
534 * @return ³É¹¦:ÏàÓ¦µÄ¶¨Ê±Æ÷±êʶ; ʧ°Ü:ZOSS_INVALID_TIMER_ID
535 * @retval ZOSS_TIMER_IDÀàÐ͵ıêʶ ³É¹¦
536 * @retval ZOSS_INVALID_TIMER_ID ʧ°Ü
537 * @note ÉèÖÃʱ¿ÌΪ²Î¿¼µã,¾­¹ýÖ¸¶¨Ê±¼äºó, ÏòÉèÖö¨Ê±Æ÷µÄÈÎÎñ·¢ËÍÖ¸¶¨ÏûÏ¢²¢×Ô¶¯ÊͷŶ¨Ê±Æ÷ËùÕ¼×ÊÔ´
538 * @warning ±ØÐèÔÚÈÎÎñÄÚµ÷ÓÃ
539 */
540ZOSS_TIMER_ID zOss_SetRelativeTimer(UINT32 time_len, UINT32 msg_id, UINT32 arg);
541
542/**
543 * @brief ÉèÖ÷ÇÖÜÆÚÐÔÈÎÎñ¶¨Ê±Æ÷ÏòÄ¿±êÈÎÎñ·¢ËÍÏûÏ¢
544 * @param time_len Èë²Î£¬Ê±³¤£¬µ¥Î»£ºms
545 * @param msg_id Èë²Î£¬¶¨Ê±µ½ºó,·¢Ë͸øÉèÖö¨Ê±Æ÷ÈÎÎñµÄÏûÏ¢id
546 * @param arg Èë²Î£¬¸½¼Ó²ÎÊý,¶¨´«µÝ¸øÈÎÎñÈë¿Úº¯ÊýµÄbufÐβδËʱmsg_lenֵΪ4(sizeof(UINT32/arg))
547 * @param desk_task_id Èë²Î£¬Ö¸¶¨Ä¿±êÈÎÎñ£¬Èç¹ûÄ¿±êÈÎÎñΪ¿Õʱ£¬½«·¢ËÍÉèÖö¨Ê±Æ÷µÄÈÎÎñ
548 * @return ³É¹¦:ÏàÓ¦µÄ¶¨Ê±Æ÷±êʶ; ʧ°Ü:ZOSS_INVALID_TIMER_ID
549 * @retval ZOSS_TIMER_IDÀàÐ͵ıêʶ ³É¹¦
550 * @retval ZOSS_INVALID_TIMER_ID ʧ°Ü
551 * @note
552 * @warning
553 */
554ZOSS_TIMER_ID zOss_SetRelativeTimerByTaskId(UINT32 time_len, UINT32 msg_id, UINT32 arg, ZOSS_TASK_ID desk_task_id);
555
556/**
557 * @brief ÉèÖÃÖÜÆÚÐÔÈÎÎñ¶¨Ê±Æ÷
558 * @param time_len Èë²Î£¬Ê±³¤£¬µ¥Î»£ºms
559 * @param msg_id Èë²Î£¬¶¨Ê±µ½ºó,·¢Ë͸øÉèÖö¨Ê±Æ÷ÈÎÎñµÄÏûÏ¢id
560 * @param arg Èë²Î£¬¸½¼Ó²ÎÊý,¶¨´«µÝ¸øÈÎÎñÈë¿Úº¯ÊýµÄbufÐβδËʱmsg_lenֵΪ4(sizeof(UINT32/arg))
561 * @return ³É¹¦:ÏàÓ¦µÄ¶¨Ê±Æ÷±êʶ; ʧ°Ü:ZOSS_INVALID_TIMER_ID
562 * @retval ZOSS_TIMER_IDÀàÐ͵ıêʶ ³É¹¦
563 * @retval ZOSS_INVALID_TIMER_ID ʧ°Ü
564 * @note ÉèÖÃʱ¿ÌΪ²Î¿¼µã,¾­¹ýÖ¸¶¨Ê±¼äºó, ÏòÉèÖö¨Ê±Æ÷µÄÈÎÎñ·¢ËÍÖ¸¶¨ÏûÏ¢²¢×Ô¶¯ÊͷŶ¨Ê±Æ÷ËùÕ¼×ÊÔ´
565 * @warning ±ØÐèÔÚÈÎÎñÄÚµ÷ÓÃ
566 */
567ZOSS_TIMER_ID zOss_SetLoopTimer(UINT32 time_len, UINT32 msg_id, UINT32 arg);
568
569/**
570 * @brief ÉèÖÃÖÜÆÚÐÔÈÎÎñ¶¨Ê±Æ÷ÏòÄ¿±êÈÎÎñ·¢ËÍÏûÏ¢
571 * @param time_len Èë²Î£¬Ê±³¤£¬µ¥Î»£ºms
572 * @param msg_id Èë²Î£¬¶¨Ê±µ½ºó,·¢Ë͸øÉèÖö¨Ê±Æ÷ÈÎÎñµÄÏûÏ¢id
573 * @param arg Èë²Î£¬¸½¼Ó²ÎÊý,¶¨´«µÝ¸øÈÎÎñÈë¿Úº¯ÊýµÄbufÐβδËʱmsg_lenֵΪ4(sizeof(UINT32/arg))
574 * @param desk_task_id Èë²Î£¬Ö¸¶¨Ä¿±êÈÎÎñ£¬Èç¹ûÄ¿±êÈÎÎñΪ¿Õʱ£¬½«·¢ËÍÉèÖö¨Ê±Æ÷µÄÈÎÎñ
575 * @return ³É¹¦:ÏàÓ¦µÄ¶¨Ê±Æ÷±êʶ; ʧ°Ü:ZOSS_INVALID_TIMER_ID
576 * @retval ZOSS_TIMER_IDÀàÐ͵ıêʶ ³É¹¦
577 * @retval ZOSS_INVALID_TIMER_ID ʧ°Ü
578 * @note
579 * @warning
580 */
581ZOSS_TIMER_ID zOss_SetLoopTimerByTaskId(UINT32 time_len, UINT32 msg_id, UINT32 arg, ZOSS_TASK_ID desk_task_id);
582
583/**
584 * @brief ´´½¨¶¨Ê±Æ÷º¯Êý
585 * @param tm_name Èë²Î£¬¶¨Ê±Æ÷Ãû³Æ
586 * @param tm_callback Èë²Î£¬¶¨Ê±µ½ºóÐèÒªµ÷ÓõĻص÷º¯Êý
587 * @param tm_param Èë²Î£¬»Øµ÷º¯ÊýµÄÈë²Î
588 * @param bPeriod Èë²Î£¬TRUE£ºÖÜÆÚÐÔ¶¨Ê±Æ÷£»FALSE£º·ÇÖÜÆÚÐÔ¶¨Ê±Æ÷
589 * @return ³É¹¦:ÏàÓ¦µÄ¶¨Ê±Æ÷±êʶ; ʧ°Ü:ZOSS_INVALID_TIMER_ID
590 * @retval ZOSS_TIMER_IDÀàÐ͵ıêʶ ³É¹¦
591 * @retval ZOSS_INVALID_TIMER_ID ʧ°Ü
592 * @note ´´½¨ºÃÖ®ºó¿ÉÒÔµ÷ÓÃzOss_StartTimer()Æô¶¯¶¨Ê±Æ÷
593 * @warning
594 */
595ZOSS_TIMER_ID zOss_CreateTimer(const CHAR *tm_name, ZOSS_TIMER_FUN tm_callback, SINT32 tm_param, BOOL bPeriod);
596
597/**
598 * @brief Æô¶¯¶¨Ê±Æ÷º¯Êý,Æô¶¯Ê±¿ÌΪ²Î¿¼µã,¾­¹ýÖ¸¶¨Ê±¼äºó,µ÷Óûص÷º¯Êý
599 * @param timer_id Èë²Î£¬¶¨Ê±Æ÷id
600 * @param time_len Èë²Î£¬¶¨Ê±Æ÷ʱ³¤£¬µ¥Î»£ºms
601 * @param tm_callback Èë²Î£¬¶¨Ê±µ½ºóÒªµ÷ÓõĻص÷º¯Êý
602 * @param tm_param Èë²Î£¬»Øµ÷º¯ÊýµÄÈë²Î
603 * @return ³É¹¦:ZOSS_SUCCESS;ʧ°ÜZOSS_ERROR
604 * @retval ZOSS_SUCCESS ³É¹¦
605 * @retval ZOSS_ERROR ʧ°Ü
606 * @note
607 * @warning Èç¹û»Øµ÷º¯ÊýÖ´ÐÐʱ¼ä´óÓÚ¶¨Ê±Æ÷ʱ³¤,¿ÉÄÜ»áÔì³É´íÎó»ò¶¨Ê±Æ÷²»±»ÕýÈ·µ÷¶È
608 */
609UINT32 zOss_StartTimer(ZOSS_TIMER_ID timer_id, UINT32 time_len, ZOSS_TIMER_FUN tm_callback, SINT32 tm_param);
610
611/**
612 * @brief Í£Ö¹¶¨Ê±Æ÷¼ÆÊ±º¯Êý
613 * @param timer_id Èë²Î£¬¶¨Ê±Æ÷id
614 * @return ³É¹¦:ZOSS_SUCCESS;ʧ°ÜZOSS_ERROR
615 * @retval ZOSS_SUCCESS ³É¹¦
616 * @retval ZOSS_ERROR ʧ°Ü
617 * @note
618 * @warning
619 */
620UINT32 zOss_StopTimer(ZOSS_TIMER_ID timer_id);
621
622/**
623 * @brief ÔÝÍ£Ö¸¶¨¶¨Ê±Æ÷µÄ¼ÆÊ±
624 * @param timer_id Èë²Î£¬¶¨Ê±Æ÷id
625 * @return ³É¹¦:ZOSS_SUCCESS;ʧ°ÜZOSS_ERROR
626 * @retval ZOSS_SUCCESS ³É¹¦
627 * @retval ZOSS_ERROR ʧ°Ü
628 * @note ÔÝÍ£µÄͬʱ¼Ç¼ÏÂÊ£ÓàµÄÏà¶Ôʱ¼ä£¬µ÷ÓÃzOss_ResumeTime()º¯Êýºó¼ÌÐø¼ÆÊ±£»
629 Èç¹û¶¨Ê±Æ÷ÕýÔÚ±»µ÷¶È,ÔòÖ´ÐÐÍ굱ǰµ÷¶ÈºóÔÝÍ£¼ÆÊ±¡£
630 * @warning
631 */
632UINT32 zOss_PauseTimer(ZOSS_TIMER_ID timer_id);
633
634/**
635 * @brief ʹÔÝÍ£µÄ¶¨Ê±Æ÷¼ÌÐø¼ÆÊ±
636 * @param timer_id Èë²Î£¬¶¨Ê±Æ÷id
637 * @return ³É¹¦:ZOSS_SUCCESS;ʧ°ÜZOSS_ERROR
638 * @retval ZOSS_SUCCESS ³É¹¦
639 * @retval ZOSS_ERROR ʧ°Ü
640 * @note
641 * @warning
642 */
643UINT32 zOss_ResumeTimer(ZOSS_TIMER_ID timer_id);
644
645/**
646 * @brief ɾ³ýÖ¸¶¨µÄ¶¨Ê±Æ÷
647 * @param timer_id Èë²Î£¬¶¨Ê±Æ÷id
648 * @return ³É¹¦:ZOSS_SUCCESS;ʧ°ÜZOSS_ERROR
649 * @retval ZOSS_SUCCESS ³É¹¦
650 * @retval ZOSS_ERROR ʧ°Ü
651 * @note
652 * @warning
653 */
654UINT32 zOss_KillTimer(ZOSS_TIMER_ID timer_id);
655
656/*******************************************************************************
657 * Inline function implementations *
658 ******************************************************************************/
659#ifndef DOXYGEN_SHOULD_SKIP_THIS
660/* Ë«ÏòÁ´±í */
661#if defined (_OS_TOS) || defined (_OS_LINUX)
662/**************************************************************************
663* º¯ÊýÃû³Æ: zOss_ListInit
664* ¹¦ÄÜÃèÊö: ³õʼ»¯Ë«ÏòÁ´±í
665* ²ÎÊý˵Ã÷£º
666 (IN)
667 pList:Á´±íÖ¸Õë
668 (OUT)
669* ·µ »Ø Öµ:
670**************************************************************************/
671static inline VOID zOss_ListInit(T_ZOss_List *pList)
672{
673 zOss_AssertExN(pList != NULL);
674
675 pList->HEAD = NULL;
676 pList->TAIL = NULL;
677 pList->count = 0;
678}
679
680/**************************************************************************
681* º¯ÊýÃû³Æ: zOss_ListCount
682* ¹¦ÄÜÃèÊö: »ñÈ¡Á´±íÏÂ×ܹ²µÄ½ÚµãÊý
683* ²ÎÊý˵Ã÷£º
684 (IN)
685 pList:Á´±íÖ¸Õë
686 (OUT)
687* ·µ »Ø Öµ: ½Úµã¸öÊý
688**************************************************************************/
689static inline SINT32 zOss_ListCount(T_ZOss_List *pList)
690{
691 return (pList->count);
692}
693
694/**************************************************************************
695* º¯ÊýÃû³Æ: zOss_ListDelete
696* ¹¦ÄÜÃèÊö: ÒÆ³ýÁ´±íÖÐÖ¸¶¨µÄ½Úµã
697* ²ÎÊý˵Ã÷£º
698 (IN)
699 pList:Á´±íÖ¸Õë
700 pNode:´ýɾ³ý½ÚµãÖ¸Õë
701 (OUT)
702* ·µ »Ø Öµ:
703**************************************************************************/
704static inline VOID zOss_ListDelete(T_ZOss_List *pList, T_ZOss_Node *pNode)
705{
706 if (pNode->previous != NULL)
707 {
708 pNode->previous->next = pNode->next;
709 }
710 else
711 {
712 pList->HEAD = pNode->next;
713 }
714
715 if (pNode->next != NULL)
716 {
717 pNode->next->previous = pNode->previous;
718 }
719 else
720 {
721 pList->TAIL = pNode->previous;
722 }
723
724 /* update node count */
725 pList->count--;
726}
727
728/**************************************************************************
729* º¯ÊýÃû³Æ: zOss_ListFirst
730* ¹¦ÄÜÃèÊö: »ñÈ¡Á´±íµÄÊ×½Úµã
731* ²ÎÊý˵Ã÷£º
732 (IN)
733 pList:Á´±íÖ¸Õë
734 (OUT)
735* ·µ »Ø Öµ: ½ÚµãÖ¸Õë(µ±Á´±íÖÐûÓнڵãʱ£¬·µ»Ø¿Õ)
736**************************************************************************/
737static inline T_ZOss_Node* zOss_ListFirst(T_ZOss_List *pList)
738{
739 return (pList->HEAD);
740}
741
742/**************************************************************************
743* º¯ÊýÃû³Æ: zOss_ListInsert
744* ¹¦ÄÜÃèÊö: ÏòÁ´±íÖ¸¶¨µÄ½Úµãºó²åÈë½Úµã
745* ²ÎÊý˵Ã÷£º
746 (IN)
747 pList:Á´±íÖ¸Õë
748 pPrev:²åÈëµã½ÚµãÖ¸Õ룬µ±pPrevΪ¿Õʱ£¬±íʾ²åÈëµ½Á´±íÊ×λÖÃ
749 pNode:´ý²åÈëµÄ½ÚµãÖ¸Õë
750 (OUT)
751* ·µ »Ø Öµ:
752**************************************************************************/
753static inline VOID zOss_ListInsert (T_ZOss_List *pList, T_ZOss_Node *pPrev, T_ZOss_Node *pNode)
754{
755 T_ZOss_Node *pNext = NULL;
756
757 if (pPrev != NULL)
758 {
759 pNext = pPrev->next; /* make prev node point fwd to new */
760 pPrev->next = pNode;
761 }
762 else
763 {
764 pNext = pList->HEAD; /* new node is to be first in list */
765 pList->HEAD = pNode;
766 }
767
768 if (pNext != NULL)
769 {
770 pNext->previous = pNode; /* make next node point back to new */
771 }
772 else
773 {
774 pList->TAIL = pNode; /* new node is to be last in list */
775 }
776
777 /* set pointers in new node, and update node count */
778 pNode->next = pNext;
779 pNode->previous = pPrev;
780
781 pList->count++;
782}
783
784/**************************************************************************
785* º¯ÊýÃû³Æ: zOss_ListAdd
786* ¹¦ÄÜÃèÊö: ÏòÁ´±íβÌí¼Ó½Úµã
787* ²ÎÊý˵Ã÷£º
788 (IN)
789 pList:Á´±íÖ¸Õë
790 pNode:´ýÌí¼Ó½ÚµãÖ¸Õë
791 (OUT)
792* ·µ »Ø Öµ:
793**************************************************************************/
794static inline VOID zOss_ListAdd (T_ZOss_List *pList, T_ZOss_Node *pNode)
795{
796 zOss_ListInsert(pList, pList->TAIL, pNode);
797}
798
799/**************************************************************************
800* º¯ÊýÃû³Æ: zOss_ListLast
801* ¹¦ÄÜÃèÊö: »ñȡָ¶¨½ÚµãµÄºóÒ»½Úµã
802* ²ÎÊý˵Ã÷£º
803 (IN)
804 pNode:Ö¸¶¨½ÚµãÖ¸Õë
805 (OUT)
806* ·µ »Ø Öµ: ½ÚµãÖ¸Õë(µ±Á´±íÖÐûÓнڵãʱ£¬·µ»Ø¿Õ)
807**************************************************************************/
808static inline T_ZOss_Node* zOss_ListLast(T_ZOss_List *pList)
809{
810 return (pList->TAIL);
811}
812
813/**************************************************************************
814* º¯ÊýÃû³Æ: zOss_ListNext
815* ¹¦ÄÜÃèÊö: »ñȡָ¶¨½ÚµãµÄǰһ½Úµã
816* ²ÎÊý˵Ã÷£º
817 (IN)
818 pNode:½ÚµãÖ¸Õë
819 (OUT)
820* ·µ »Ø Öµ: ½ÚµãÖ¸Õë(µ±´«Èë½ÚµãÊÇÁ´±í×îºóÒ»¸ö½Úµãʱ£¬·µ»Ø¿Õ)
821**************************************************************************/
822static inline T_ZOss_Node* zOss_ListNext(T_ZOss_Node *pNode)
823{
824 return (pNode->next);
825}
826
827/**************************************************************************
828* º¯ÊýÃû³Æ: zOss_ListPrevious
829* ¹¦ÄÜÃèÊö: »ñȡָ¶¨½ÚµãµÄǰһ½Úµã
830* ²ÎÊý˵Ã÷£º
831 (IN)
832 pNode:Ö¸¶¨½ÚµãÖ¸Õë
833 (OUT)
834* ·µ »Ø Öµ: ½ÚµãÖ¸Õë(µ±´«Èë½ÚµãÊÇÁ´±íµÚÒ»¸ö½Úµãʱ£¬·µ»Ø¿Õ)
835**************************************************************************/
836static inline T_ZOss_Node *zOss_ListPrevious(T_ZOss_Node *pNode)
837{
838 return (pNode->previous);
839}
840
841/**************************************************************************
842* º¯ÊýÃû³Æ: zOss_ListNStep
843* ¹¦ÄÜÃèÊö: »ñÈ¡ÓëÖ¸¶¨½Úµã¼ä¸ônStepµÄ½Úµã
844* ²ÎÊý˵Ã÷£º
845 (IN)
846 pNode:½ÚµãÖ¸Õë
847 nStep:¼ä¸ôÊý. ÕýÊý:²éÕÒnext½Úµã£¬¸ºÊý²éÕÒprevious½Úµã
848 (OUT)
849* ·µ »Ø Öµ: ½ÚµãÖ¸Õë(µ±ÔÚ¼ä¸ônStepÄÚµ½´ïÁ´±íβʱ£¬·µ»Ø¿Õ)
850**************************************************************************/
851static inline T_ZOss_Node *zOss_ListNStep(T_ZOss_Node *pNode, SINT32 nStep)
852{
853 int i = 0;
854
855 if (nStep > 0)
856 {
857 for (i = nStep; i > 0; i--)
858 {
859 pNode = pNode->next;
860
861 if (pNode == NULL)
862 {
863 break;
864 }
865 }
866 }
867 else
868 {
869 for (i = nStep; i < 0; i++)
870 {
871 pNode = pNode->previous;
872
873 if (pNode == NULL)
874 {
875 break;
876 }
877 }
878 }
879 return (pNode);
880}
881
882/**************************************************************************
883* º¯ÊýÃû³Æ: zOss_ListFind
884* ¹¦ÄÜÃèÊö: ²éÕÒÁ´±íÖеĽڵã
885* ²ÎÊý˵Ã÷£º
886 (IN)
887 pList:Á´±íÖ¸Õë
888 pNode:´ý²éÕÒ½ÚµãÖ¸Õë
889 (OUT)
890* ·µ »Ø Öµ: Á´±íÖÐÓÐÖ¸¶¨½Úµã:½ÚµãÔÚÁ´±íÖеÄË÷Òý(´Ó1¿ªÊ¼)£¬
891 Á´±íÖÐÎÞÖ¸¶¨½Úµã:-1
892**************************************************************************/
893static inline SINT32 zOss_ListFind (T_ZOss_List *pList, T_ZOss_Node *pNode)
894{
895 T_ZOss_Node *pNextNode = NULL;
896 int iNodePosition = 1;
897
898 pNextNode = zOss_ListFirst (pList);
899
900 while ((pNextNode != NULL) && (pNextNode != pNode))
901 {
902 iNodePosition++;
903
904 pNextNode = zOss_ListNext (pNextNode);
905 }
906
907 if (pNextNode != NULL)
908 {
909 return (iNodePosition);
910 }
911 else
912 {
913 return (-1);
914 }
915}
916
917/**************************************************************************
918* º¯ÊýÃû³Æ: zOss_ListConnect
919* ¹¦ÄÜÃèÊö: ½«Á½¸öÁ´±íÁ´½ÓÔÚÒ»Æð
920* ²ÎÊý˵Ã÷£º
921 (IN)
922 pList1: Á´±í1
923 pList2: Á´±í2
924 (OUT)
925* ·µ»ØÖµ:
926* ˵Ã÷£º ½«pList2Á´½Óµ½pList1β²¿£»pList2µÄÁ´±íÍ·ÄÚÈݲ»»á¸Ä±ä
927**************************************************************************/
928static inline VOID zOss_ListConnect(T_ZOss_List *pList1, T_ZOss_List *pList2)
929{
930 if (pList1->count == 0)
931 {
932 pList1->HEAD = pList2->HEAD;
933 pList1->TAIL = pList2->TAIL;
934 }
935 else
936 {
937 if (pList2->count != 0)
938 {
939 pList1->TAIL ->next = pList2->HEAD;
940 pList2->HEAD->previous = pList1->TAIL;
941 pList1->TAIL = pList2->TAIL;
942 }
943 }
944 pList1->count += pList2->count;
945}
946#else
947VOID zOss_ListInit(T_ZOss_List *pList);
948T_ZOss_Node *zOss_ListFirst(T_ZOss_List *pList);
949T_ZOss_Node *zOss_ListLast(T_ZOss_List *pList);
950T_ZOss_Node *zOss_ListNext(T_ZOss_Node *pNode);
951T_ZOss_Node *zOss_ListPrevious(T_ZOss_Node *pNode);
952T_ZOss_Node *zOss_ListNStep(T_ZOss_Node *pNode, SINT32 nStep);
953SINT32 zOss_ListCount(T_ZOss_List *pList);
954SINT32 zOss_ListFind(T_ZOss_List *pList, T_ZOss_Node *pNode);
955VOID zOss_ListAdd(T_ZOss_List *pList, T_ZOss_Node *pNode);
956VOID zOss_ListDelete(T_ZOss_List *pList, T_ZOss_Node *pNode);
957VOID zOss_ListInsert(T_ZOss_List *pList, T_ZOss_Node *pPrev, T_ZOss_Node *pNode);
958VOID zOss_ListConnect(T_ZOss_List *pList1, T_ZOss_List *pList2);
959#endif
960
961#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
962
963
964#ifdef __cplusplus
965}
966#endif
967
968#endif // #ifndef _OSS_SUP_H