From 37badc1a711fc7802d2f0b67924f3c15e569a7d5 Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Fri, 27 Nov 2020 18:53:31 +0530 Subject: [PATCH] Developer-guide.rst Change-Id: Ic58e014a32e475d2297527c155f4ec609faa8a05 Signed-off-by: lal.harshita --- docs/LicHeader.jpg | Bin 0 -> 74743 bytes docs/ModeofCommunication.jpg | Bin 0 -> 53849 bytes docs/StepsOfCommunication.jpg | Bin 0 -> 46978 bytes docs/api-docs.rst | 2 - docs/developer-guide.rst | 754 ++++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 3 +- docs/user-guide.rst | 2 - src/cm/common_def.h | 1 + src/du_app/du_mgr_main.c | 10 +- 9 files changed, 761 insertions(+), 11 deletions(-) create mode 100644 docs/LicHeader.jpg create mode 100644 docs/ModeofCommunication.jpg create mode 100644 docs/StepsOfCommunication.jpg create mode 100644 docs/developer-guide.rst diff --git a/docs/LicHeader.jpg b/docs/LicHeader.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44c01953de2a04663c2c14758a2bcae995e03b9b GIT binary patch literal 74743 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 PKAVs2`5c2Vr@Q_I3A(*6 literal 0 HcmV?d00001 diff --git a/docs/StepsOfCommunication.jpg b/docs/StepsOfCommunication.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6aa0cdb37647e142810c346d03d220a73c22b216 GIT binary patch literal 46978 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 Lf9)^g@8SOfB@j?f literal 0 HcmV?d00001 diff --git a/docs/api-docs.rst b/docs/api-docs.rst index c36e1e58b..c4bde6183 100644 --- a/docs/api-docs.rst +++ b/docs/api-docs.rst @@ -134,8 +134,6 @@ API Functions Additional APIs ---------------- -These APIs are not defined in the AAD Spec but were implemented in O-DU High to achieve UE attach. - 1. DU APP - MAC Interface A. DU APP to MAC diff --git a/docs/developer-guide.rst b/docs/developer-guide.rst new file mode 100644 index 000000000..d25404950 --- /dev/null +++ b/docs/developer-guide.rst @@ -0,0 +1,754 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Developer-Guide +=============== + +.. contents:: + :depth: 3 + :local: + +Introduction +------------ + +This document provides information required to work on O-DU High code-base. + +Coding Style +------------ + +O-DU High uses C languages. The coding guidelines followed are: + + a. A new file should have License Header and Footer with exception of auto-generated files like files generated by + ASN tool. Refer to the diagram below for License header. + b. Every block must be indented by 3 spaces. + c. Any header file must be included only in .c file, not in other header files. + d. The line width should not exceed more than 120 characters. + +.. figure:: LicHeader.jpg + :width: 600 + :alt: Figure 6 License Header and Footer + + Figure 6 : License Header and Footer + +O-DU High code +--------------- + +Refer to O-DU High code-base at: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du/l2.git;a=tree + +Technical Details +----------------- + +Below section references coding specifics of O-DU High components. + +Thread Management +^^^^^^^^^^^^^^^^^ + +Creation of Thread: ++++++++++++++++++++ + +In O-DU High, multiple threads are created using below macro + + ODU_CREATE_TASK (priority, stskId) + + a. Creates a thread by declaring a thread id + b. Inputs + + - priority - Priority of the task + - stskId - Thread Id + +Setting a core affinity: +++++++++++++++++++++++++ + + ODU_SET_THREAD_AFFINITY (tskId, mode, coreId, tskAssociatedTskId) + + a. Sets the processor/core affinity for a thread based on the mode supplied by the caller. + b. Inputs + + - tskId - thread Id + - mode - mode according to which the affinity is set + - coreId - coreId to which the affinity has to be set + - tskAssociatedTskId - thread Id of the associated layer + + c. Returns ROK on success and RFAILED on failure + +Registering Entities: ++++++++++++++++++++++++ + +All logical entities in O-DU High must be registered into the database. + + ODU_REG_TTSK (ent, inst, ttype, prior, initTsk, actvTsk) + + a. Inputs + + - ent - Id of the entity to activate. Example: ENTDUAPP, ENTSCTP, ENTEGTP etc + - Inst - Instance of the entity to activate. It distinguishes between multiple instances of the same entity on a + given processor. Example: RLC_UL_INST (Instance id 0) and RLC_DL_INST (Instance id 1) belong to the same entity id, ENTRLC. + - ttype - Type of entity + - prior - Priority, ranges from 0(Highest) to 3(Lowest). + - initTsk - Initialization function(xxActvInit) of the entity being registered gets invoked. Example: duActvInit initializes DU APP + - actvTsk - This function(xxActvTsk) is responsible to receive any incoming message to that entity. Example: duActvTsk is triggerred when a message comes to DU APP + +Attaching Entity to Thread: ++++++++++++++++++++++++++++ + +Every entity must be attached to a thread to schedule its activation based on priority and incoming events. Any number +of entities can be attached to a system task. + + ODU_ATTACH_TTSK (ent, inst, stskId) + + a. Inputs + + - ent - Entity Id of the task + - inst - Instance Id of the task + - stskId - Thread Id to use + +Memory Management +^^^^^^^^^^^^^^^^^ + +Configuration ++++++++++++++ + +Memory is divided into multiple regions(identified by region id) and each region is divided into multiple pools(identified by pool id). +The configurations are present in mt_ss.h and mt_ss.c at /l2/src/mt. +Currently, the number of regions configured are 6 and each region has 5 pools. + +Region and pool used by each layer is identified by following macros: + + - MAC - MAC_MEM_REGION and MAC_POOL + - SCH - SCH_MEM_REGION and SCH_POOL + - RLC UL - RLC_MEM_REGION_UL and RLC_POOL + - RLC_DL - RLC_MEM_REGION_DL and RLC_POOL + - DU APP - DU_APP_MEM_REGION and DU_POOL + +Static Memory ++++++++++++++ + +Macros are defined at each layer for static memory allocation/deallocation from that layer's region and pool. + + XX_ALLOC(bufPtr, size) + + a. Allocates static buffer + b. Inputs: + + - bufPtr - pointer to store address of the memory allocated + - size - size of memory to be allocated + + c. Result: + + - If allocation is sucessful, butPtr stores memory address + - If allocation fails, bufPtr is NULL. + + XX_FREE(bufPtr, size) + + a. Frees static buffer + b. Inputs: + + - bufPtr - pointer to memory to be freed + - size - size of memory to be freed + +Here, XX stands for various ODU-High entity i.e. + + - MAC - MAC_ALLOC & MAC_FREE + - SCH - SCH_ALLOC & SCH_FREE + - RLC - RLC_ALLOC & RLC_FREE + - DU APP - DU_ALLOC & DU_FREE + +Sharable Memory ++++++++++++++++ + +One of the methods of communication between layers is through sharabale memory. +The sender will allocate sharable buffer from its own region and pool. +This memory will be freed by receiving layer and returned back to sender's region and pool. + + XX_ALLOC_SHRABL_BUF(bufPtr, size) + + a. Allocates sharable buffer + b. Inputs: + + - bufPtr - pointer to store address of the memory allocated + - size - size of memory to be allocated + + c. Result: + + - If allocation is sucessful, butPtr stores memory address + - If allocation fails, bufPtr is NULL. + + XX_FREE_SHRABL_BUF(region, pool, bufPtr, size) + + a. Frees sharabale buffer + b. Inputs: + + - region - region where this buffer is allocated from + - pool - pool where this buffer is allocated from + - bufPtr - pointer to memory to be freed + - size - size of memory to be freed + +Here, XX stands for various ODU-High entities i.e. + + - MAC - MAC_ALLOC_SHRABL_BUF & MAC_FREE_SHRABL_BUF + - SCH - Since scheduler communicates only with MAC and is tightly coupled, sharable buffers are not needed. + - RLC - RLC_ALLOC_SHRABL_BUF & RLC_FREE_SHRABL_BUF + - DU APP - DU_ALLOC_SHRABL_BUF & DU_FREE_SHRABL_BUF + +Message Buffer +++++++++++++++ + +A message is an ordered sequence of bytes. It stores both the control information and the data being communicated. +Message buffers are allocated from dynamic memory. + + ODU_GET_MSG_BUF(region, pool, mBuf) + + a. Allocates memory for message buffer + b. Inputs: + + - region - region of sending layer + - pool - pool of sending layer + - mBuf - pointer to message buffer + + ODU_PUT_MSG_BUF(mBuf) + + a. Frees memory for message + b. Inputs: + + - mBuf - message pointer + +WLS Memory +++++++++++ + +WLS memory is allocated for message exchanges between O-DU High and O-DU Low. + + LWR_MAC_ALLOC(ptr, size) + + a. Allocates WLS memory block + b. Inputs: + + - ptr - pointer to store address of the memory allocated + - size - size of memory to be allocated + + c. Result: + + - If allocation is sucessful, ptr stores memory address + - If allocation fails, ptr is NULL. + + LWR_MAC_FREE(ptr, size) + + a. Frees WLS block + b. Inputs: + + - bufPtr - pointer to memory to be freed + - size - size of memory to be freed + +Intra O-DU High Communication +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +O-DU high entities communicate with each other through one of the following: + +Types of Communication +++++++++++++++++++++++ + +Direct API Call +############### + +Interface APIs invoked from one entity translate into direct function calls into the destination entity. +Control returns to the calling entity after the called entity has completed processing the called function. + + Macro to select this communication mode : ODU_SELECTOR_TC + +Serialization +############# + +Interface API invoked from one entity is packed into a message and then sent to destination entity through system services. +Control returns to the caller immediately after the message is posted, before the destination has seen or processed it. +There are two serialization methods supported: + + a. Pack/Unpack data + + - The interface data is packed into the message. Receiver will unpack this, parameter by parameter. + - Macro to select this communication mode : ODU_SELECTOR_LC + + b. Pack/Unpack pointer + + - The pointer to data is packed and sent. Receiver will unpack the pointer and directly access data at this address. + - Macro to select this communication mode : ODU_SELECTOR_LWLC + +Below figure depicts the mode of communication between various entities registered in O-DU High. +Here, + + - TC stands for Direct API call + - LC stands for Serialization by packing/unpacking of data + - LWLC stands for Serialization by packing/unpacking of pointers + +.. figure:: ModeofCommunication.jpg + :width: 600 + :alt: Figure 7 Mode of communication between O-DU High entities + + Figure 7: Mode of communication between O-DU High entities + +Steps of Communication +++++++++++++++++++++++ + +1. Fill Post Structure + + Information needed by system services to route API to the destination layer is stored in post structure. + + | typedef struct pst + | { + | ProcId dstProcId; /\* destination processor ID \*/ + | ProcId srcProcId; /\* source processor ID \*/ + | Ent dstEnt; /\* destination entity \*/ + | Inst dstInst; /\* destination instance \*/ + | Ent srcEnt; /\* source entity \*/ + | Inst srcInst; /\* source instance \*/ + | Prior prior; /\* priority \*/ + | Route route; /\* route \*/ + | Event event; /\* event \*/ + | Region region; /\* region \*/ + | Pool pool; /\* pool \*/ + | Selector selector; /\* selector \*/ + | uint16_t spare1; /\* spare for alignment \*/ + | } Pst; + +2. Pack API into message + + At sender, API is packed i.e. the data is stored into a message in ordered sequence of bytes. + At receiver, the data is unpacked from the message and its corresponding handler is invoked. + + a. If pst->selector is LC, each parameter is packed/unpacked one by one using one of the below. + + - oduPackUInt8(val, mBuf) - Packs 8-bits value(val) into message(mBuf) + - oduUnpakcUInt8(val, mBuf) - Unpacks 8-bits from message(mBuf) and stores in val + - oduPackUInt16(val, mBuf) - Packs 16-bits value(val) into message(mBuf) + - oduUnpakcUInt16(val, mBuf) - Unpacks 16-bits from message(mBuf) and stores in val + - oduPackUInt32(val, mBuf) - Packs 32-bits value(val) into message(mBuf) + - oduUnpakcUInt32(val, mBuf) - Unpacks 16-bits from message(mBuf) and stores in val + + The sequence in which the parameters are unpacked must be reverse of the packing sequence. + + b. If pst->selector is LWLC, pointer to the interface structure is packed/unpacked. + + - oduPackPointer(ptr, mBuf) - Packs pointer value(ptr) into message(mBuf) + - oduUnpackPointer(ptr, mBuf) - Unpacks pointer value from message(mBuf) and stores in ptr + +3. Post the message + + Once the post information is filled and API is packed into a message, it is posted to destination using: + + ODU_POST_TASK(pst, mBuf) + + a. Inputs + + - pst - post structure mentioned above + - mBuf - message + +Below figure summarized the above steps of intra O-DU High communication + +.. figure:: StepsOfCommunication.jpg + :width: 600 + :alt: Figure 8 Communication between entities + + Figure 8: Steps of Communication between O-DU High entities + + +Communication with Intel O-DU Low +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Intel O-DU Low communicates with O-DU High over WLS interface. Hence, Intel's "wls_lib.h" library is required for using +the following APIs for communication. + +1. **WLS_Open** + + *void\* WLS_Open(const char \*ifacename, unsigned int mode, unsigned long long nWlsMemorySize)* + + a. Description + + - Opens the WLS interface and registers as instance in the kernel space driver. + - Control section of shared memory is mapped to application memory. + + b. Inputs: + + - ifacename - pointer to string with device driver name (/dev/wls) + - mode - mode of operation (Master or Slave). Here, O-DU High acts as MASTER. + + c. Returns pointer handle to WLS interface for future use by WLS functions + +2. **WLS_Ready** + + *int WLS_Ready(void \*h)* + + a. Description + + - Checks the state of remote peer of WLS interface + + b. Inputs - handle of WLS interface + c. Returns 0 if peer is available i.e. one to one connection is established + +3. **WLS_Close** + + *int WLS_Close(void \*h)* + + a. Description + + - Closes the WLS interface and de-registers as instance in the kernel space driver + - Control section of shared memory is unmapped form user space application + + b. Input - handle of WLS interface to be closed + c. Returns 0 if operation is successful + +4. **WLS_Alloc** + + *void\* WLS_Alloc(void\* h, unsigned int size)* + + a. Description + + - Allocates memory block for data exchange shared memory. Memory block is backed by huge pages. + - Memory is allocated only once for L2, and divided into various regions. + + b. Input + + - h - handle of WLS interface + - size - size of memory block to allocate + + c. Returns + + - Pointer to allocated memory block + - NULL on memory allocation failure + +5. **WLS_Free** + + *int WLS_Free(void\* h, void\* pMsg)* + + a. Description + + - Frees memory block for data exchanged on shared memory. + + b. Input + + - h - handle of WLS interface + - pMsg - pointer to WLS memory + + c. Returns 0 if operation is sucessful + +6. **WLS_Put** + + *int WLS_Put(void\* h, unsigned long long pMsg, unsigned int MsgSize, unsigned short MsgTypeID, unsigned short + Flags)* + + a. Description + + - Puts memory block (or group of blocks) allocated from WLS memory into the interface to transfer to remote peer + + b. Input + + - h - handle of WLS interface + - pMsg - pointer to memory block (physical address) with data to be transfered to remote peer + - MsgSize - size of memory block to send (should be less than 2 MB) + - MsgTypeID - application specific identifier of message type + - Flags - Scatter/Gather flag if memory block has multiple chunks + + c. Returns 0 if operation is successful + +7. **WLS_Check** + + *int WLS_Check(void\* h)* + + a. Description + + - Checks if there are memory blocks with data from remote peer + + b. Input - handle of WLS interface + c. Returns number of blocks available for "get" operation + +8. **WLS_Wait** + + *int WLS_Wait(void\* h)* + + a. Description + + - Waits for new memory block from remote peer + - Blocking call + + b. Input - the handle of WLS interface + c. Returns number of blocks available for "get" operation + +9. **WLS_Get** + + *unsigned long long WLS_Get(void\* h, unsigned int \*MsgSize, unsigned short \*MsgTypeID, unsigned short \*Flags)* + + a. Description + + - Gets memory block from interface received from remote peer. + - Non-blocking operation + + b. Input + + - h - handle of WLS interface + - MsgSize - pointer to set size of memory block + - MsgTypeID - pointer to application specific identifier of message type + - Flags - pointer to Scatter/Gather flag if memory block has multiple chunks + + c. Returns + + - Pointer to memory block (physical address) with data received from remote peer + - NULL if error or no blocks available + +10. **WLS_WGet** + + *unsigned long long WLS_WGet(void\* h, unsigned int \*MsgSize, unsigned short \*MsgTypeID, unsigned short \*Flags)* + + a. Description + + - Gets memory block from interface received from remote peer + - It is a blocking operation and waits for next memory block from remote peer + + b. Input + + - h - handle of WLS interface + - MsgSize - pointer to set size of memory block + - MsgTypeID - pointer to application specific identifier of message type + - Flags - pointer to Scatter/Gather flag if memory block has multiple chunks + + c. Returns + + - Pointer to memory block (physical address) with data received from remote peer + - NULL if error or no blocks available + +11. **WLS_WakeUp** + + *int WLS_WakeUp(void\* h)* + + a. Description + + - Performs "wakeup" notification to remote peer to unblock "wait" operations pending + + b. Input - handle of WLS interface + c. Returns 0 if operation is successful + +12. **WLS_VA2PA** + + *unsigned long long WLS_VA2PA(void\* h, void\* pMsg)* + + a. Description + + - Converts virtual address (VA) to physical address (PA) + + b. Input + + - h - handle of WLS interface + - pMsg - virtual address of WLS memory block + + c. Returns + + - Physical address of WLS memory block + - NULL, if error + +13. **WLS_PA2VA** + + *void\* WLS_PA2VA(void\* h, unsigned long long pMsg)* + + a. Description + + - Converts physical address (PA) to virtual address (VA) + + b. Input + + - h - handle of WLS interface + - pMsg - physical address of WLS memory block + + c. Returns + + - Virtual address of WLS memory block + - NULL, if error + +14. **WLS_EnqueueBlock** + + *int WLS_EnqueueBlock(void\* h, unsigned long long pMsg)* + + a. Description + + - Used by the Master to provide memory blocks to slave for next slave-to-master data transfer + + b. Input + + - h - handle of WLS interface + - pMsg - physical address of WLS memory block + + c. Returns 0 if opertaion is successful + +15. **WLS_DequeueBlock** + + *unsigned long long WLS_DequeueBlock(void\* h)* + + a. Description + + - Used by the Master and Slave to get block from master-to-slave queue of available memory blocks + + b. Input - handle of WLS interface + c. Returns + + - Physical address of WLS memory block + - NULL, if error + +16. **WLS_NumBlocks** + + *int WLS_NumBlocks(void\* h)* + + a. Description + + - Returns number of current available block provided by the Master for new transfer of data from slave + + b. Input - handle of WLS interface + c. Returns number of available blocks in slave to master queue + +Additional Utility Functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. ODU_START_TASK(startTime, taskId) + + a. Gives current time through input parameter + b. Input + + - startTime - stores current time to be returned + - taskId - task id of calling entity + +2. ODU_STOP_TASK(startTime, taskId) + + a. Calculates difference of start time and current time. + b. Input + + - startTime - start time of this task + - taskId - taskId of calling entity + +3. ODU_SET_PROC_ID(procId) + + a. Processors are identified by processor identifiers (ProcId) that are globally unique. + It sets the procId for the local processor. In O-DU High, procId is 0 (DU_PROC) + b. Inputs + + - procId - process id to be set + +4. ODU_GET_PROCID() + + a. Finds and returns the local processor id on which the calling task is running + b. Inputs + + - void + +5. ODU_CAT_MSG(mbuf1, mbuf2, order) + + a. Concatenates the given two message. + b. Inputs + + - mbuf1 - pointer to message buffer 1 + - mbuf2 - pointer to message buffer 2 + - order - order in which the messages are concatenated + +6. ODU_GET_MSG_LEN(mBuf, lngPtr) + + a. Determines length of the data contents of a message + b. Inputs + + - mBuf - pointer to the message buffer + - lngPtr - pointer to store length value + +7. ODU_EXIT_TASK() + + a. Gracefully exits the process + b. Inputs + + - void + +8. ODU_PRINT_MSG(mBuf, src, dst) + + a. Prints information about message buffer. + b. Inputs + + - mBuf - pointer to the message buffer + - src - source Id + - dest - destination Id + +9. ODU_REM_PRE_MSG(dataPtr, mBuf) + + a. Removes one byte of data from the beginning of a message + b. Inputs + + - dataPtr - pointer to the location where one byte of data is placed + - mBuf - pointer to the message buffer + +10. ODU_REM_PRE_MSG_MULT(dst, cnt, mBuf) + + a. Removes the specified number of bytes of data from the beginning of a message + b. Inputs + + - dst - pointer to the location where the data bytes are placed. + - cnt - number of bytes to be removed from the message. + - mBuf- pointer to the message. + +11. ODU_REG_TMR_MT(ent, inst, period, func) + + a. Registers timer function of an entity with system services + b. Inputs + + - ent - entity ID of task registering the timer. + - inst - instance of task registering the timer. + - period - period in system ticks between system service sccessive scheduling + of the timer function in the entity + - func - timer function. + +12. ODU_SEGMENT_MSG(mBuf1, idx, mBuf2) + + a. Segments a message into two messages at the specified index. + b. Inputs + + - mBuf1 - Message 1, original message to be segmented + - idx - index in message 1 from which message 2 is created. + - mBuf2 - pointer to message buffer 2 (new message). + +13. ODU_ADD_PRE_MSG_MULT(src, cnt, dst) + + a. Copies consecutive bytes of data to the beginning of a message + b. Inputs + + - src - source buffer + - cnt - number of bytes + - dst - destination message + +14. ODU_ADD_PRE_MSG_MULT_IN_ORDER(src, cnt, dst) + + a. Copies consecutive bytes of data to the beginning of a message and keeps the bytes order preserved + b. Inputs + + - src - source buffer + - cnt - number of bytes + - dst - destination message + +15. ODU_ADD_POST_MSG_MULT(src, cnt, dst) + + a. Copies consecutive bytes of data to the end of a message + b. Inputs + + - src - source buffer + - cnt - number of bytes + - dst - destination message + +16. ODU_COPY_MSG_TO_FIX_BUF(src, srcIdx, cnt, dst, ccnt) + + a. Copies data from a message buffer into a fixed buffer + b. Inputs + + - src - source message + - srcIdx - start index of source buffer to be copied + - cnt - number of bytes to be copied + - dst - destination buffer + - ccnt - number of bytes copied + +17. ODU_COPY_FIX_BUF_TO_MSG(src, dst, dstIdx, cnt, ccnt) + + a. Copies data from a fixed buffer to a message buffer + b. Inputs + + - src - source buffer + - dst - destination message + - dstIdx - index in destination message to starting copying bytes from + - cnt - number of bytes to be copied + - ccnt - number of bytes copied + diff --git a/docs/index.rst b/docs/index.rst index 91a2db734..40ef0fd5c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -14,8 +14,7 @@ Welcome to O-RAN SC O-DU-L2 Documentation installation-guide.rst user-guide.rst api-docs.rst - - + developer-guide.rst * :ref:`genindex` * :ref:`modindex` diff --git a/docs/user-guide.rst b/docs/user-guide.rst index afe00cbc6..d297b86f8 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -1,7 +1,5 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 -.. (c) - User Guide ========== diff --git a/src/cm/common_def.h b/src/cm/common_def.h index a39917e71..60a8ac903 100644 --- a/src/cm/common_def.h +++ b/src/cm/common_def.h @@ -104,6 +104,7 @@ #define ODU_CAT_MSG SCatMsg #define ODU_GET_PROCID SFndProcId #define ODU_SET_THREAD_AFFINITY SSetAffinity +#define ODU_CREATE_TASK SCreateSTsk #define GET_UE_IDX( _crnti,_ueIdx) \ { \ diff --git a/src/du_app/du_mgr_main.c b/src/du_app/du_mgr_main.c index 364157b2c..7f112cb1f 100644 --- a/src/du_app/du_mgr_main.c +++ b/src/du_app/du_mgr_main.c @@ -291,7 +291,7 @@ uint8_t commonInit() ODU_SET_PROC_ID(DU_PROC); /* system task for DU APP */ - if(SCreateSTsk(PRIOR0, &du_app_stsk) != ROK) + if(ODU_CREATE_TASK(PRIOR0, &du_app_stsk) != ROK) { DU_LOG("\nDU_APP : System Task creation for DU APP failed"); return RFAILED; @@ -299,7 +299,7 @@ uint8_t commonInit() ODU_SET_THREAD_AFFINITY(&du_app_stsk, SS_AFFINITY_MODE_EXCL, 15, 0); /* system task for RLC_DL and MAC */ - if(SCreateSTsk(PRIOR0, &rlc_mac_cl_stsk) != ROK) + if(ODU_CREATE_TASK(PRIOR0, &rlc_mac_cl_stsk) != ROK) { DU_LOG("\nDU_APP : System Task creation for RLC DL/MAC failed"); return RFAILED; @@ -309,7 +309,7 @@ uint8_t commonInit() ODU_SET_THREAD_AFFINITY(&rlc_mac_cl_stsk, SS_AFFINITY_MODE_EXCL, 16, 0); /* system task for RLC UL */ - if(SCreateSTsk(PRIOR1, &rlc_ul_stsk) != ROK) + if(ODU_CREATE_TASK(PRIOR1, &rlc_ul_stsk) != ROK) { DU_LOG("\nDU_APP : System Task creation for RLC UL failed"); return RFAILED; @@ -317,7 +317,7 @@ uint8_t commonInit() ODU_SET_THREAD_AFFINITY(&rlc_ul_stsk, SS_AFFINITY_MODE_EXCL, 17, 0); /* system task for SCTP receiver thread */ - if(SCreateSTsk(PRIOR0, &sctp_stsk) != ROK) + if(ODU_CREATE_TASK(PRIOR0, &sctp_stsk) != ROK) { DU_LOG("\nDU_APP : System Task creation for SCTP failed"); return RFAILED; @@ -325,7 +325,7 @@ uint8_t commonInit() ODU_SET_THREAD_AFFINITY(&sctp_stsk, SS_AFFINITY_MODE_EXCL, 18, 0); /* system task for lower-mac receiver thread */ - if(SCreateSTsk(PRIOR0, &lwr_mac_stsk) != ROK) + if(ODU_CREATE_TASK(PRIOR0, &lwr_mac_stsk) != ROK) { DU_LOG("\nDU_APP : System Task creation for Lower MAC failed"); return RFAILED; -- 2.16.6