1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /********************************************************************20**
25 Desc: This file contains all the data structures and
26 prototypes for LTE PDCP.
30 *********************************************************************21*/
32 @brief PDCP Product Structures, prototypes
40 #endif /* __cplusplus */
43 RLC RB control block */
44 typedef struct pjUlUeCb PjUlUeCb;
45 typedef struct pjUlRbCb PjUlRbCb; /* PDCP RB control block */
47 /** @addtogroup dldata */
52 * PDCP SDU Status Information for a DRB mapped to RLC AM.
55 typedef struct pjUlHoCfmInfo
57 U8 rbId; /*!< RB ID */
58 Bool pres; /*!< Is handover info present for this RB */
59 U8 dir; /*!< Direction of the RB */
61 U8 numBits; /*!< Number of bits in UL bitmap */
63 U8 *ulBitMap; /*!< Status Report bitmap of PDUs */
64 U32 count; /*!< UL Count value with FMS */
69 * Handover information maintainned during processing of SduStaReq
71 typedef struct pjUlHoInfo
73 U32 transId; /*!< Transaction ID */
74 UdxSduStaCfmInfo *staCfm; /*!< SduStaCfm received from DL */
75 PjUlHoCfmInfo *hoCfmInfo; /*!< SDU Status Confirm */
78 /** @defgroup uldata UL Module Info
80 /** @addtogroup uldata */
84 PDCP Rx Entry - PDU received from RLC */
85 typedef struct pjRxEnt
87 CmLList lstEnt; /*!< List entry for PDU */
88 CmLList datPktEnt; /*!< List entry for PDU */
89 U8 state; /*!< PDU state */
90 Bool discFlag; /*!< Whether entry can be discarded
92 Bool dupEntry; /*!< Duplicate Entry, These entries
94 Bool res; /*!< Reserved */
95 U32 count; /*!< COUNT associated with this PDU */
96 Buffer *mBuf; /*!< Buffer to store the pdu during processing */
100 Bool isOutSeq; /*!< flag to tell whether this is a in-sequence packet or not */
104 PDCP uplink control block */
105 typedef struct pjUlCb
108 U32 rxNext; /*next expected pdcp pdu counter */
109 U32 rxDeliv; /*next delivered pdu count to the upper layer*/
110 U32 rxReord; /* Holds the count value of Data PDU which triggered t-Reordering */
111 Bool outOfOrderDelivery; /*Out of Delivery is configured or not*/
112 Bool staRepReqd; /*!< Flag to indicate if status report
114 Bool discReqd; /*!< Flag to indicate if the PDU can
115 be discarded during Integrity
117 Bool transCmp; /*!< Whether transmission of PDUs from RLC
118 during reestablishment is complete */
119 U8 state; /*!< RB state for the UL entity */
120 PjBuf recBuf; /*!< Reception buffer */
121 U32 nxtSubCnt; /*!< Count of next SDU to be submitted
122 to the upper layer. Used in SRB, DRBUM */
123 U32 nxtSubDeCmp; /*!< Count of next PDU to be submitted
124 to the decompression unit */
126 U32 obdPdu; /*!< Count of the Pdu sent for offboarding */
127 U32 firstReEstCnt; /*!< Count of the first PDU received after
128 reestablishment was triggered */
129 #if (defined(PJ_SEC_ASYNC) || defined (PJ_CMP_ASYNC))
130 CmTimer obdTmr; /*!< Offboard timer */
131 U32 obdCnt; /*!< OBD Count */
132 #endif /* (defined(PJ_SEC_ASYNC) || defined (PJ_CMP_ASYNC)) */
133 CmLListCp ulPktLst; /*!< Queues the message during
134 Re-establishment/Handover */
135 U32 fmsCount; /*!< To store the Count value (FMS + HFN) at the time Out-Of-Sequence */
136 /* Added for UL UU LOSS */
138 PjSn nxtSubSn; /*!< PDCP SN to be submitted to UL next */
140 CmTimer tReordTmr; /*!< t-Reorder timer */
146 PDCP RB control block */
149 CmLteRbId rbId; /*!< RB Id for PDCP Cb */
150 U8 rbType; /*!< RB Type : 0 - PJ_SRB, 1 - PJ_DRB */
151 CmLteRlcMode mode; /*!< Mapped RLC entity's mode */
152 U8 dir; /*!< Direction for UL/DL/biderctional */
153 U8 snLen; /*!< Sequence number length */
154 U8 state; /*!< RB state - Used only for DRBs*/
155 PjSn firstSn; /*!< SN of the first message sent
156 for Integrity Protection */
157 PjRohc rohc; /*!< ROHC Information */
158 PjCmpCxt cmpCxt; /*!< Context for ROHC */
159 PTR cmpCxtId; /*!< Context Id for ROHC */
160 /* pj005.201 added support for L2 Measurement */
162 U8 qci; /*!< QCI value associated with rb */
163 PjL2MeasRbCb rbL2Cb; /*!< L2 Meas Cb for RB */
164 #endif /* LTE_L2_MEAS */
165 /** @defgroup dldata DL Module Info
167 PjUlCb ulCb; /*!< Uplink PDCP RbCb */
168 PjUlUeCb *ueCb; /*!< Pointer to the UE in which RB is present */
169 PjSec secInfo; /*!< Security Info */
170 U16 reOrdrTmrVal; /* t-Reordering timer value in ms*/
178 CmHashListEnt ueHlEnt; /*!< Hash list entry for UeCb */
180 PjUeKey key; /*!< Hash list key for UeCb */
183 PjUlRbCb *srbCb[PJ_MAX_SRB_PER_UE]; /*!< SRB RbCbs within a UE */
184 PjUlRbCb *drbCb[PJ_MAX_DRB_PER_UE]; /*!< DRB RbCbs within a UE */
185 PjSec secInfo; /*!< Security Info */
186 PjUlHoInfo *hoInfo; /*!< SDU Status Confirm */
187 PjLibInfo libInfo; /*!< Hook Info - to wait for
189 /* pj005.201 added support for L2 Measurement */
191 U16 numActRb[LPJ_MAX_QCI]; /* number of RBs Active */
192 #endif /* LTE_L2_MEAS */
193 Bool isUlDatFwdReqd; /*!< To identify whether App rqstd for UL Data Fwding or not */
196 typedef struct pjUlPkt
205 EXTERN S16 pjCfgAddUlRb ARGS ((PjCb *gCb,CmLteRnti ueId,CmLteCellId cellId,U8 isHo,
206 CpjCfgEnt *entCfg,PjUlUeCb **ueCb, CpjCfmEnt *entCfm ));
208 EXTERN S16 pjCfgReCfgUlRb ARGS ((PjCb *gCb,PjUlUeCb *ueCb,
209 CpjCfgEnt *entCfg, CpjCfmEnt *entCfm));
211 EXTERN S16 pjCfgDelUlRb ARGS ((PjCb *gCb,PjUlUeCb *ueCb,
212 CpjCfgEnt *entCfg,CpjCfmEnt *entCfm));
214 EXTERN S16 pjCfgReEstUlRb ARGS ((
219 UdxCfmEnt *entDlCfgCfm
222 EXTERN S16 pjCfgDelUlUe ARGS ((
229 EXTERN S16 pjCfgPrcSecUlCfg ARGS ((
231 CpjSecCfgReqInfo *secCfg,
232 CpjSecCfgCfmInfo *cfgCfm
235 EXTERN S16 pjCfgUlUeIdChng ARGS((
238 CpjUeInfo *newUeInfo,
242 EXTERN S16 pjCfgPrcUlCount ARGS ((
244 CpjCountReqInfo *countReq,
245 CpjCountCfmInfo *countCfm,
246 UdxCountCfmInfo *cntCfm
249 EXTERN S16 pjCfgDelPjUlRbCb ARGS ((
255 EXTERN S16 pjUtlUlCipherClose ARGS((
257 Void *cpCxtId /* Context Id for Ciphering to be closed */
260 EXTERN S16 pjUtlUlIntClose ARGS((
262 Void *intCxtId /* Integration CxtId to be closed */
265 EXTERN S16 pjCfgUlReEstReq ARGS ((
267 CpjReEstReqInfo *reEstReq,
268 CpjReEstCfmInfo *reEstCfm
271 EXTERN S16 pjDbmInsRxEnt ARGS ((
277 EXTERN S16 pjDbmBufInit ARGS ((
282 EXTERN PjRxEnt* pjDbmGetRxEnt ARGS ((
287 EXTERN PjRxEnt* pjDbmGetRxEntSn ARGS ((
292 EXTERN S16 pjDbmDelRxEnt ARGS ((
297 EXTERN S16 pjDbmRxDelAll ARGS((
301 EXTERN S16 pjDbmRxDeInit ARGS ((
306 EXTERN S16 pjDbmUlDeInit ARGS ((
310 EXTERN S16 pjDbmFetchUlUeCb ARGS ((
312 CmLteRnti ueId, /* UE Identifier */
313 CmLteCellId cellId, /* Cell Identifier */
314 PjUlUeCb **ueCb /* UE Control Block */
317 EXTERN S16 pjDbmCreateUlUeCb ARGS ((
319 CmLteRnti ueId, /* UE Identifier */
320 CmLteCellId cellId, /* Cell Identifier */
321 PjUlUeCb **ueCb /* UE Control Block */
323 EXTERN PjUlRbCb* pjDbmCreateUlRbCb ARGS ((
331 EXTERN S16 pjDbmFetchUlRbCb ARGS ((
333 CmLteRlcId rlcId, /* RLC Identifier */
334 PjUlRbCb **rbCb /* RB Cb */
337 EXTERN S16 pjDbmDelUlRbCb ARGS ((
346 EXTERN S16 pjDbmDelUlUeCb ARGS((
348 PjUlUeCb *ueCb, /* UE Identifier */
349 Bool abortFlag /* Abort Flag */
352 EXTERN S16 PjDbmDelAllUlUe ARGS((PjCb *gCb));
353 EXTERN S16 pjDbmDelAllUlRb ARGS((
355 PjUlRbCb **rbCbLst, /* RB Cb list */
356 U8 numRbCb /* Number of rbCbs */
358 EXTERN S16 pjDbmDelAllUlUe ARGS ((
362 EXTERN S16 pjDbmUlInit ARGS (( PjCb *gCb));
363 EXTERN S16 pjDbmUlShutdown ARGS((PjCb *gCb));
364 EXTERN S16 pjDbmAddUlTransIdLst ARGS((PjCb *gCb,PjCfgInfo *cfg));
365 EXTERN S16 pjDbmFindUlTransIdLst ARGS((PjCb *gCb,U32 transId,
367 EXTERN S16 pjDbmDelUlTransIdLst ARGS((PjCb *gCb,PjCfgInfo **cfg));
368 EXTERN S16 pjDbmDelAllUlTransIdLst ARGS((PjCb *gCb));
370 EXTERN S16 pjUtlUlUpdUpSecKeys ARGS(( PjCb *gCb, PjUlUeCb *ueCb));
371 EXTERN S16 pjUtlUlUpdCpSecKeys ARGS(( PjCb *gCb, PjUlUeCb *ueCb));
372 EXTERN S16 pjUtlUlHdlRbReEstComplete ARGS((PjCb *gCb, PjUlRbCb *pjRbCb));
375 EXTERN S16 pjUtlUlCmpReset ARGS((
377 PjUlRbCb *pjRbCb /* Context to be reset for compression */
381 EXTERN S16 pjUtlUlCmpInit ARGS((
383 PjUlRbCb *pjRbCb /* PDCP RbCb */
385 EXTERN S16 pjUtlUlIntInit ARGS((
387 PjUlUeCb *ueCb /* UE CB Ptr */
389 EXTERN S16 pjUtlUlCpInit ARGS((
391 PjUlUeCb *ueCb /* UE CB Ptr */
393 EXTERN S16 pjUtlUlUpInit ARGS((
395 PjUlUeCb *ueCb /* UE CB Ptr */
398 EXTERN S16 pjUtlUlCmpReq ARGS((
400 PjUlRbCb *pjRbCb, /* PDCP RbCb */
401 Buffer *mBuf, /* SDU to be compressed */
402 Buffer **opSdu, /* Compressed SDU */
403 U32 count /* COUNT - transaction Id */
405 EXTERN S16 pjUtlUlIntProtReq ARGS((
407 PjUlRbCb *pjRbCb, /* PDCP RbCb */
408 PjSecInp secInp , /* Input parameters for integrity */
409 Buffer *mBuf, /* SDU to be compressed */
410 U32 *macI /* Message authentication code for the SDU */
412 EXTERN S16 pjUtlDeCmpReq ARGS((
414 PjUlRbCb *pjRbCb, /* PDCP RbCb */
415 U32 count, /* COUNT - transaction Id */
416 Buffer *mBuf, /* SDU to be compressed */
417 Buffer **opSdu /* Compressed SDU */
419 EXTERN S16 pjUtlIntVerReq ARGS((
421 PjUlRbCb *pjRbCb, /* PDCP RbCb */
422 PjSecInp secInp , /* Input parameters for integrity */
423 Buffer *mBuf, /* SDU to be compressed */
424 U32 macI, /* MAC-I to be verified with */
425 Status *status /* Integrity verification status */
427 EXTERN S16 pjUtlDecipherReq ARGS((
429 PjUlRbCb *pjRbCb, /* PDCP RbCb */
430 U32 count, /* count of packet */
431 Buffer *mBuf, /* Data to be deciphered */
432 Buffer **opSdu /* Deciphered SDU */
434 EXTERN S16 pjUtlSndFeedback ARGS((
436 PjUlRbCb *pjRbCb, /* PDCP RbCb */
437 Buffer *feedback /* ROHC Feedback */
439 EXTERN S16 pjUtlUlReEstSrb1 ARGS((
441 PjUlRbCb *pjRbCb /* PDCP Control Block Pointer */
443 EXTERN S16 pjUtlUlReEstStart ARGS((
445 PjUlUeCb *ueCb, /* UE Control Block Pointer */
446 CpjCfgReqInfo *cfgReq /* CfgReq for Reestablishment */
448 EXTERN S16 pjUtlUlReEstHOStart ARGS((
450 PjUlUeCb *ueCb, /* Number of RBs undergoing reestablishment*/
451 U32 transId, /* Transaction id of Sdu Status cfm */
454 EXTERN S16 pjUtlUlReEstReconfig ARGS((
456 PjUlUeCb *ueCb /* UE Control Block */
458 EXTERN S16 pjUtlUlReEstUl ARGS((
460 PjUlUeCb *ueCb /* UE Control Block */
462 EXTERN S16 pjUtlUlSndReEstCfgCfm ARGS((
464 PjUlUeCb *ueCb /* UE Control Block */
466 EXTERN S16 pjUtlUlSndSduStaCfm ARGS((
468 PjUlUeCb *ueCb /* UE Control Block */
470 EXTERN S16 pjUtlUlShutdown ARGS((
473 EXTERN Void pjUtlUlFreeRb ARGS((
477 /* kw005.201 added function to send data forward indication mesage */
478 EXTERN S16 pjUtlUlSndDatFwdInd ARGS((
481 PjuDatFwdIndInfo *datFwdInd
483 EXTERN S16 pjUtlUlSndUlStaRep ARGS ((
489 EXTERN S16 pjUtlUlHdlObdInitCfm ARGS((
491 PjUlUeCb *ueCb, /* Pointer to UeCb */
492 U16 txIdx, /* Transaction Index for UeCb */
493 U8 cfmType, /* Confirm type */
494 U8 maskVal /* mask value */
496 EXTERN S16 pjUtlUlHdlInitObdTmrExp ARGS((
501 EXTERN S16 pjCfgPrcUlSduSta ARGS((
503 CpjSduStaReqInfo *staReq,
504 UdxSduStaCfmInfo *staCfm
507 EXTERN S16 pjUtlUlSaveCfmInfo ARGS((
509 PjUlUeCb *ueCb, /* Pointer to UeCb */
510 U8 cfmType, /* Confirm type */
511 Bool startTmr, /* Whether to start timer */
512 U8 entity, /* Confirm type */
513 PTR cfmPtr, /* Pointer to the structure for confirm */
514 PTR cfgPtr /* Pointer to the structure for request */
518 EXTERN S16 pjUlmHdlSrbPkt ARGS((
520 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
521 Buffer *pdu /* !< PDU Buffer */
523 EXTERN S16 pjUlmHndlDlStaRep ARGS ((
530 #ifndef XEON_SPECIFIC_CHANGES
531 EXTERN U32 pjMsCheckSpaccQueue ARGS((
535 EXTERN U32 pjMsCheckSpaccQueue ARGS((
540 EXTERN S16 pjUlmHdlDrbPkt ARGS((
542 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
543 Buffer *pdu, /* !< PDU Buffer */
544 Bool isOutOfSeq /* !< To indicate whether this packet is in-sequence or not */
546 EXTERN S16 pjUlmProcessSrb ARGS((
548 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
549 PjSn sn, /* !< SN value of PDU */
550 Buffer *pdu /* !< PDU message buffer */
552 EXTERN S16 pjUlmProcessDrbUm ARGS((
554 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
555 PjSn sn, /* !< SN value of PDU */
556 Buffer *pdu /* !< PDU message buffer */
558 EXTERN S16 pjUlmProcessDrbAm ARGS((
560 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
561 PjSn sn, /* !< SN value of PDU */
562 Buffer *pdu, /* !< PDU message buffer */
563 Bool isOutOfSeq /* !< To indicate whether packet received is in-sequence or not */
565 EXTERN S16 pjUlmHdlDecipher ARGS((
567 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
568 PjRxEnt *rxEnt /* !< Rx Entry */
570 EXTERN S16 pjUlmHdlIntVer ARGS((
572 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
573 PjRxEnt *rxEnt /* !< Rx Entry */
575 EXTERN S16 pjUlmHdlDeCmp ARGS((
577 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
578 PjRxEnt *rxEnt /* !< Rx Entry */
580 EXTERN S16 pjUlmDeliverSrb ARGS((
582 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
583 PjRxEnt *rxEnt /* !< Recption Buffer Entry */
585 EXTERN S16 pjUlmDeliverDrbUm ARGS((
587 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
588 PjRxEnt *rxEnt /* !< Recption Buffer Entry */
590 EXTERN S16 pjUlmDeliverDrbAm ARGS((
592 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
593 PjRxEnt *rxEnt /* !< Recption Buffer Entry */
595 EXTERN S16 pjUlmReEstSrb ARGS((
597 PjUlRbCb *pjRbCb /*!< PDCP control block */
599 EXTERN S16 pjUlmReEstDrbAm ARGS((
601 PjUlRbCb *pjRbCb /*!< PDCP control block */
603 EXTERN S16 pjUlmBldStaRep ARGS((
605 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
606 PjSn fmc, /* !< First Missing count */
607 U8 *staRep, /* !< Status Report */
608 U16 bMapLen /* !< Bitmap Length */
610 EXTERN S16 pjUlmHdlDatFwdReq ARGS((
612 PjUlRbCb *pjRbCb, /* !< PDCP ID */
613 PjuDatFwdReqInfo *datFwdReq /* !< DatFwdReq Info */
615 EXTERN S16 pjUlmSubmitForDecmp ARGS((
617 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
618 PjRxEnt *rxEnt /* Ptr To Rx Entry */
621 EXTERN Void pjUlmHdlObdTmrExpiry ARGS((
623 PjUlRbCb *pjRbCb /* !< PDCP Control Block */
626 EXTERN Void pjUlmHdlErrUpdates ARGS((
628 PjUlRbCb *pjRbCb, /* !< PDCP Control Block */
629 U32 errCnt /* !< Count of PDU that raises the error */
632 EXTERN Void pjLimDatInd ARGS((
639 EXTERN Void pjLimReEstCmpInd ARGS((
644 S16 pjUtlL2MeasUlInit(PjCb *gCb);
646 EXTERN Void pjUtlResetUlL2MeasCntr ARGS((
652 EXTERN S16 pjUtlSndUlL2MeasNCfm ARGS ((PjCb *gCb,
653 PjL2MeasCfmEvt *measCfmEvt));
655 EXTERN Void pjUtlPlcMeasDatInUlL2Sts ARGS((PjL2Cntr *, PjL2MeasRbCb *, U8));
658 EXTERN S16 pjDbmFetchPjUlRbCb ARGS ((
665 EXTERN S16 pjUtlUlSndUlRohcFdbk ARGS ((
671 EXTERN S16 pjUtlUlResetBuffrdPkts ARGS ((
676 EXTERN S16 pjUtlReEstProcUlRb ARGS ((
682 EXTERN S16 pjUtlCheckOnlySrbPresent ARGS((
683 PjCb *tPjCb, /* Pdcp UL control block */
684 CmLtePdcpId pdcpId, /* PDCP Id*/
685 U32 *waitForReEstTrig /* wait for reestablishment trigger */
688 EXTERN Void pjUlmReEstCmpInd ARGS((
690 PjUlRbCb *tRbCb /* !< RB control block */
693 EXTERN S16 PjUlUdxDlStaRep ARGS((
694 Pst *pst, /* Post structure */
695 SpId spId, /* Service provider ID */
696 UdxDlStaRepInfo *staRep /*PDCP Status Report*/
699 EXTERN S16 PjUlUdxUlStaRep ARGS ((
700 Pst *pst, /* Post structure */
701 SpId spId, /* Service provider ID */
702 UdxUlStaRepInfo *staRep /*PDCP Status Report*/
705 EXTERN S16 pjUtlStartUlReEst ARGS ((
707 CpjReEstReqInfo *reEstReq,
708 CpjReEstCfmInfo *reEstCfm
711 EXTERN S16 pjUtlUlPrcsDatResume ARGS ((
713 CpjDatResumeReqInfo *datResReq
716 EXTERN S16 pjUlmStartDataFrwdPerRb ARGS((
721 EXTERN Void pjUlmProcessUlPktQ ARGS ((
723 PjUlRbCb *pjRbCb /* !< PDCP Control Block */
726 EXTERN S16 pjUtlUlGetRbCb ARGS ((
733 EXTERN Void pjUtlEmptyUlPktList ARGS((
738 EXTERN S16 pjUtlUlReEstHO ARGS((
743 EXTERN S16 pjDbmFetchUlUeCb ARGS((
749 EXTERN S16 pjUlmHndlDatFwdReq ARGS((
752 PjuDatFwdReqInfo *datFwdReq
754 EXTERN Void dumpPDCPUlRbInformation ARGS ((
759 EXTERN void DumpPDCPUlDebugInformation ARGS ((
763 EXTERN Void pjDeInitDeCipherQ(Void);
765 EXTERN Void pjUlmHdlReordTmrExpiry ARGS((
766 PjCb *tPjCb,/*pjCb structure */
773 #endif /* __cplusplus */
778 /********************************************************************30**
781 **********************************************************************/