f43567d28780608921c8210200f219b0941e6fb7
[o-du/l2.git] / src / cm / rgu.x
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /**********************************************************************
20      Name:    Upper Layer Interface
21
22      Type:    C header file
23
24      Desc:    Structures, variables and typedefs required by 
25               RGU interface
26
27      File:    rgu.x
28
29 *********************************************************************21*/
30
31 \f
32 #ifndef __RGUX__
33 #define __RGUX__
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 /** 
39   @file rgu.x 
40   @brief Structure declarations and definitions for RGU interface.
41  */
42
43 /***********************************************************************
44                           typedefs and data structures
45  ***********************************************************************/
46
47 /**
48  * @brief PDU information given on a logical channel.
49  */
50 typedef struct rguPduInfo
51 {
52    U8     numPdu;                 /*!< Number of PDUs */ 
53    Buffer *mBuf[RGU_MAX_PDU];     /*!< numPdu data buffers */
54 } RguPduInfo;
55
56
57 /**
58  * @brief Buffer Occupancy Report for dedicated logical channel.
59  */
60 typedef struct rguDBoReport
61 {
62    S32  bo;                /*!< Buffer occupancy reported by RLC */
63 #ifdef CCPU_OPT
64    U16  estRlcHdrSz;       /*!< Estimated RLC header size */
65    Bool staPduPrsnt;       /*!< Indicates whether the BO includes
66                                 a status PDU as well */
67 #endif
68    U32  staPduBo;          /*!< Indicates the Status PDU BO. 
69                                 This is included in bo */
70    U32  oldestSduArrTime;
71 } RguDBoReport;
72
73 /**
74  * @brief DatReq from RLC to MAC for Common Channels (BCCH, PCCH and CCCH).
75  */
76 typedef struct rguCDatReqInfo
77 {
78    CmLteCellId     cellId;          /*!< CELL ID */
79    CmLteLcId       lcId;            /*!< Logical channel ID */
80    CmLteLcType     lcType;          /*!< Logical channel Type */
81    U32             transId;         /*!< Transaction ID */
82 #ifdef EMTC_ENABLE
83    U8              pnb;            /*Paging narrowBand on which UE performs Paging*/
84 #endif
85    union{
86    CmLteTimingInfo timeToTx;        /*!< Actual time when PHY transmits
87                                          this, applicable to BCCH and PCCH only */
88    CmLteRnti rnti;                  /*!< Temporary CRNTI:Applicable for CCCH. */
89    }u;
90    Buffer          *pdu;            /*!< PDU to be transmitted */
91 } RguCDatReqInfo;
92 /**
93  * @brief DatReq Information of a logical channel.
94  */
95 typedef struct rguLchDatReq
96 {
97    CmLteLcId    lcId;                /*!< Logical channel ID */
98    RguDBoReport boReport;            /*!< BO for the logical channel */
99    RguPduInfo   pdu;                 /*!< PDU to be transmitted*/
100    Bool         setMaxUlPrio;
101 #ifdef L2_OPTMZ
102    Bool         freeBuff;            /*!< TRUE if Buffer is to be freed by MAC
103                                           It is set for UM bearer*/
104 #endif
105 } RguLchDatReq;
106
107 /*rgu_x_001.main_3 - ADD - L2M Support */
108 #ifdef LTE_L2_MEAS
109 /**
110  * @brief Structure to store logical channels to SN mapping */
111 typedef struct rguLchmapInfo
112 {
113    CmLteLcId lChId;                  /*!< Logical channel Id */
114    U16       snList[RGU_MAX_LC];     /*!< Set of sequence numbers */
115 }RguLchMapInfo;
116 /**
117  * @brief Sequence Number mapping info per TB 
118  * */
119 typedef struct rguSnMapInfo
120 {
121    U32            tbId;               /*!< TB id for which sn info map */
122    U8             numLch;             /*!< Number of Ded Logical Channels */
123    RguLchMapInfo  lchMap[RGU_MAX_LC]; /*!< LC to SN Mapping Info*/
124 } RguSnMapInfo;
125
126 /*
127  *  @brief Structure to hold harq status Indication to RLC
128  *  */
129 typedef struct rguHarqStatusInd
130 {
131    CmLteCellId   cellId;                    /*!< Cell Id*/
132    CmLteRnti     ueId;                      /*!< ue Id*/
133    U8            numTbs;                    /*!< Number of Tbs present */
134  
135    U32           tbId[RGU_MAX_TB];          /*!< tbId provided by RLC in
136                                                  DatReq  */                                                                                 
137    U16           status[RGU_MAX_TB];        /*!< Status back to RLC ACK/NACK*/
138 } RguHarqStatusInd;
139
140 /*
141  *  @brief Structure to hold rguHarqStatusInd and pst structure
142  *  */
143 typedef struct rguHarqStaInd
144 {
145     RguHarqStatusInd  hqStatusInd;            
146     Pst               pst;
147 } RguHarqStaInd;
148
149 /*
150  *  @brief UL Throughput Measurement Request from RLC to MAC regarding configuration
151  *  of an LC for a particular UE to provide Timing Info.
152  *  */
153 typedef struct rguL2MUlThrpMeasReqInfo
154 {
155    CmLteCellId   cellId;                    /*!< Cell Id*/
156    CmLteRnti     rnti;                      /*!< UE Id*/
157    U8            numLcId;                   /*!< Number of LC Ids configured */
158    U8            lcId[RGU_MAX_LC];          /*!< LC ID indices that are 
159                                               configured */
160    Bool          enbMeas;                   /*!< Indication to enable/disable 
161                                                measurement for the LC ID*/
162 } RguL2MUlThrpMeasReqInfo;
163
164 #endif /* LTE_L2_MEAS */
165 /**
166  * @brief DatReq info for each TB of a UE.
167  */
168 typedef struct rguDatReqTb
169 {
170    U8           nmbLch;              /*!< Number of logical channels of a UE 
171                                           that have data for this TB */
172    RguLchDatReq lchData[RGU_MAX_LC]; /*!< Data Buffers and BO of  
173                                           logical channels for this TB */
174 /* rgu_x_001.main_3 - ADD - L2M Support */
175 #ifdef LTE_L2_MEAS
176    U32          tbId;                /*!< RLC's internal tbId maintained
177                                           per UE */  
178 #endif /* LTE_L2_MEAS */
179 }RguDatReqTb;
180
181 /**
182  * @brief DatReq from RLC to MAC for dedicated channels of an UE.
183  */
184 typedef struct rguDDatReqPerUe
185 {
186    CmLteRnti     rnti;         /*!< UE ID */
187    U32           transId;      /*!< Transaction ID */
188    U8            nmbOfTbs;     /*!< Number of TBs. Relevant for MIMO */
189    RguDatReqTb   datReqTb[2];  /*!< DatReq info for MAX 2 TBs */ 
190 } RguDDatReqPerUe;
191
192 /**
193  * @brief DatReq from RLC to MAC for dedicated channels of all UEs in a TTI.
194  */
195 typedef struct rguDDatReqInfo
196 {
197    CmLteCellId        cellId;                        /*!< CELL ID */
198    U8                 nmbOfUeGrantPerTti;                 /*!< Number of TBs. Relevant for MIMO */
199    RguDDatReqPerUe    datReq[RGU_MAX_NUM_UE_PER_TTI];    /*!< Pointer to DatReq for MAX UEs configured Per TTI */ 
200 } RguDDatReqInfo;
201
202 /**
203  * @brief DatInd from MAC to RLC on CCCH.
204  */
205 typedef struct rguCDatIndInfo
206 {
207    CmLteCellId cellId;               /*!< Cell ID */
208    CmLteRnti   rnti;                 /*!< RNTI */
209    CmLteLcId   lcId;                 /*!< Logical channel instance */
210    Buffer      *pdu;                 /*!< PDU received always one */
211 } RguCDatIndInfo;
212
213 #ifdef MAC_RLC_UL_RBUF
214 typedef struct rguDedDatInd1
215 {
216    Void *msg;
217 }RguDedDatInd1;
218 #endif 
219
220 /* rgu_x_001.main_3 - ADD - L2M & R9 Support */
221 #ifdef LTE_L2_MEAS
222
223 /** 
224  *  * Segment Indication ID from MAC to RLC */
225 typedef enum rguL2MUlThrpSegInd
226 {
227    RGU_L2M_ULTHRP_NOTDEF = 0,/**< Specifies No Indication */
228    RGU_L2M_ULTHRP_FIRST = 1,        /**< Specifies First Segment Indication */
229    RGU_L2M_ULTHRP_LAST = 2,        /**< Specifies Last Segment Indication */
230    RGU_L2M_ULTHRP_INTERIM = 3    /**< Specifies Interim Segment Indication */
231 }RguL2MUlThrpSegInd;
232
233 /**
234  * @brief Scheduled IP Throughput Timing Info from MAC to RLC.
235  */
236 typedef struct rgL2MeasUlThrpTimInfo 
237 {
238    U32                 thrpTimeUl;      /*!< Difference in Timing values T1, T2 */
239    RguL2MUlThrpSegInd  firstLastSegInd;         /*!< Indication of Data Burst */
240 }RgL2MeasUlThrpTimInfo;
241
242 #endif
243 /**
244  * @brief DatInd Information for a logical channel.
245  */
246 typedef struct rguLchDatInd
247 {
248    CmLteLcId    lcId;                /*!< Logical channel instance */
249    RguPduInfo   pdu;                 /*!< PDU received */
250    /* rgu_x_001.main_3 - ADD - L2M & R9 Support */
251 }RguLchDatInd;
252
253 /**
254  * @brief Data Indication from MAC to RLC for dedicated channels of an UE.
255  */
256 typedef struct rguDDatIndInfo
257 {
258    CmLteCellId  cellId;              /*!< CELL ID */
259    CmLteRnti    rnti;                /*!< UE ID */
260    U8           numLch;              /*!< Number of logical channels within
261                                        the UE that has data */
262    RguLchDatInd lchData[RGU_MAX_LC]; /*!< Data buffers of logical channels */
263 #ifdef LTE_L2_MEAS
264    U32          ttiCnt;              /*!< The Current TTI in the Cell */
265    U8           burstInd;            /*!< Indicates the Burst Start or End */
266 #endif
267 } RguDDatIndInfo;
268
269 /**
270  * @brief Status Response from RLC to MAC  for common logical channel.
271  */
272 typedef struct rguCStaRspInfo
273 {
274    CmLteCellId  cellId;         /*!< CELL ID */
275    CmLteLcId    lcId;           /*!< Logical channel ID */ 
276    CmLteLcType  lcType;         /*!< Logical channel type */
277    S32 bo;                      /*!< Buffer occupancy reported by RLC */
278 #ifdef EMTC_ENABLE
279    U8          emtcDiReason;   /*!< Reason for DI message to send. */
280    U8          pnb;            /*paging narrowBand on which UE will perform paging*/
281 #endif
282    union                        /*!< lcType in the primitive is 
283                                      the union selector */
284    {
285       CmLteTimingInfo timeToTx; /*!< Timing info for the BO, applicable for
286                                    BCCH and PCCH */
287       CmLteRnti       rnti;     /*!< Temporary CRNTI, only for CCCH */
288    } u;
289 } RguCStaRspInfo;
290
291 /**
292  * @brief Status Response from RLC to MAC  for dedicated logical channel.
293  */
294 typedef struct rguDStaRspInfo
295 {
296    Pst          post; 
297    CmLteCellId  cellId;     /*!< CELL ID */
298    CmLteRnti    rnti;       /*!< UE ID */
299    CmLteLcId    lcId;       /*!< Logical channel ID */
300    RguDBoReport boReport;   /*!< BO report for this common channel */
301 } RguDStaRspInfo;
302
303 /**
304  * @brief Status Indication from MAC to RLC for common logical channel.
305  */
306 typedef struct rguCStaIndInfo
307 {
308    CmLteCellId cellId;       /*!< CELL ID */
309    CmLteLcId   lcId;         /*!< Logical channel ID */
310    U32         transId;      /*!< Transaction ID */
311    CmLteRnti   rnti;         /*!< Temporary CRNTI */
312 #ifdef EMTC_ENABLE
313    Bool                isEmtcPaging;      /*!< To Identify whether Paging is EMTC or Lagecy */
314    CmLteTimingInfo     pagingTimingInfo; /*!< paging TimingInfo information */
315 #endif
316 } RguCStaIndInfo;
317
318 /**
319  * @brief StaInd info for each logical channel of an UE.
320  */
321 typedef struct rguLchStaInd
322 {
323    CmLteLcId   lcId;         /*!< Logical channel ID */
324    S16         totBufSize;  /*!< Total buffer size in bytes 
325                                 scheduled by MAC */
326 } RguLchStaInd;
327
328 /**
329  * @brief StaInd info for each TB of a UE.
330  */
331 typedef struct rguStaIndTb
332 {
333    U8           nmbLch;               /*!< Number of logical channels scheduled
334                                            for this TB */
335    RguLchStaInd lchStaInd[RGU_MAX_LC];/*!< Buffer size allocated for scheduled 
336                                            logical channels for this TB */
337 #ifdef LTE_L2_MEAS
338    U32          tbId;                /*!< RLC internal TB id */                                           
339    U16          status;              /*!< Status back to RLC ACK/NACK/RGU_NACK_LOSS */
340 #endif
341 }RguStaIndTb;
342 /**
343  * @brief StaInd from MAC to RLC for dedicated logical channels of an UE.
344  */
345 typedef struct rguDStaIndPerUe
346 {
347    CmLteRnti     rnti;        /*!< UE ID */
348    U32           transId;     /*!< Transaction ID */
349    U8            nmbOfTbs;    /*!< Number of TBs. Relevant for MIMO */
350    RguStaIndTb   staIndTb[2]; /*!< StaInd info for MAX 2 TBs */
351    Bool          fillCtrlPdu; /*!< Flag to fill RLC control PDU */
352 } RguDStaIndPerUe;
353
354 /**
355  * @brief StaInd from MAC to RLC for dedicated logical channels of all UEs Per TTI.
356  */
357 typedef struct rguDStaIndInfo
358 {
359    CmLteCellId      cellId;                       /*!< CELL ID */
360    U8               nmbOfUeGrantPerTti;                /*!< Number of TBs. Relevant for MIMO */
361    RguDStaIndPerUe  staInd[RGU_MAX_NUM_UE_PER_TTI];   /*!< StaInd info for MAX number of UEs per TTI */
362 } RguDStaIndInfo;
363
364 /**
365  * @brief flowCntrl info per LC.
366  */
367 typedef struct rguLcFlowCntrlInfo
368 {
369   CmLteLcId   lcId; 
370   U32         pktAdmitCnt; 
371   U32         maxBo4FlowCtrl; /*!< MAX BO of Queued SDUs at RLC beyond which Flow is Controlled */
372 }RguLcFlowCntrlInfo;
373
374 /**
375  * @brief flowCntrl info per UE.
376  */
377 typedef struct rguUeFlowCntrlInfo 
378 {
379   CmLteRnti            ueId;
380   U32                  numLcs;
381   RguLcFlowCntrlInfo   lcInfo[RGU_MAX_LC];
382 }RguUeFlowCntrlInfo;  
383
384 /**
385  * @brief flowCntrlInd from MAC to RLC for dedicated logical channels of all UEs Per TTI.
386  */
387 typedef struct rguFlowCntrlInd
388 {
389    CmLteCellId         cellId;                       /*!< CELL ID */
390    U32                 numUes;
391    RguUeFlowCntrlInfo  ueFlowCntrlInfo[RGU_MAX_NUM_UE_PER_TTI];
392 }RguFlowCntrlInd;  
393 typedef struct rguInfoRingElem 
394 {
395   SpId         spId;
396   U8           event;
397   Void         *msg;
398 }RguInfoRingElem;
399
400 /* Buffer occupancy status information */
401 typedef struct rlcMacBOStatus
402 {
403    CmLteCellId  cellId;     /*!< CELL ID */
404    CmLteRnti    rnti;       /*!< UE ID */
405    Bool         commCh;     /*!< Common or Dedicated Channel */
406    CmLteLcId    lcId;       /*!< Logical channel ID */
407    S32          bo;         /*!< Buffer occupancy reported by RLC */
408 }RlcMacBOStatus;
409
410 /* Schedule result report from RLC to MAC */
411 typedef struct rlcMacLchSta
412 {
413    Bool         commCh;     /*!<Common or Dedicated Channel */
414    RguLchStaInd lchStaInd;  /*!<Buffer size allocated for logical channel */
415 }RlcMacLchSta;
416
417 typedef struct rlcMacSchedRep
418 {
419    CmLteTimingInfo timeToTx;  /*!< Air interface time */
420    CmLteCellId  cellId;       /*!< CELL ID */
421    CmLteRnti    rnti;         /*!< Temporary CRNTI */
422    U8           nmbLch;       /*!< Number of logical channels scheduled */
423    RlcMacLchSta lchSta[RGU_MAX_LC];  /*!< Scheduled info of logical channels */
424 }RlcMacSchedRepInfo;
425
426 /* UL Data i.e. RLC PDU info from RLC to MAC */
427 typedef struct rlcMacPduInfo
428 {
429    Bool         commCh;   /*!<Common or Dedicated Channel */
430    CmLteLcId    lcId;     /*!< Logical channel ID */
431    MsgLen       pduLen;   /*!< PDU Length */
432    uint8_t      *pduBuf;  /*!< RLC PDU buffer */
433 }RlcMacPduInfo;
434
435 typedef struct rlcMacData
436 {  
437    CmLteCellId     cellId;       /*!< CELL ID */
438    CmLteRnti       rnti;         /*!< Temporary CRNTI */ 
439    SlotIndInfo     slotInfo;     /*!< Timing info */
440    U8              numPdu;       /*!< Number of RLC PDUs */
441    RlcMacPduInfo   pduInfo[RGU_MAX_PDU];
442 }RlcMacData;
443
444
445 /***********************************************************************
446           type definitions for upper layer interface - RLC primitives
447  ***********************************************************************/
448 /** @brief Bind Request from RLC to MAC to bind the interface SAPs */
449 typedef S16 (*RguBndReq) ARGS((
450    Pst*                 pst,
451    SuId                 suId,
452    SpId                 spId));
453 /** @brief Unbind Request from RLC to MAC to unbind the interface SAPs */
454 typedef S16 (*RguUbndReq) ARGS((
455    Pst*                 pst,
456    SpId                 spId,
457    Reason               reason));
458 /** @brief Bind Confirmation from MAC to RLC for the bind/unbind 
459  * request for the interface SAPs */
460 typedef S16 (*RguBndCfm) ARGS((
461    Pst*                 pst,
462    SuId                 suId,
463    U8                   status));
464 /** @brief Data Request from RLC to MAC for forwarding SDUs on common
465  * channel for transmission */
466 typedef S16 (*RguCDatReq) ARGS((
467    Pst*                 pst,
468    SpId                 spId,
469    RguCDatReqInfo  *    datReq));
470 /** @brief Data Request from RLC to MAC for forwarding SDUs on 
471  * dedicated channel for transmission */
472 typedef S16 (*RguDDatReq) ARGS((
473    Pst*                 pst,
474    SpId                 spId,
475    RguDDatReqInfo       *datReq));
476
477 typedef uint16_t (*RlcMacDlData) ARGS((
478    Pst*                 pst,
479    SpId                 spId,
480    RlcMacData           *dlData));
481 /** @brief Data Indication from MAC to RLC to 
482  * forward the data received for common channels */
483 typedef S16 (*RguCDatInd) ARGS((
484    Pst*                 pst,
485    SuId                 suId,
486    RguCDatIndInfo  *    datInd));
487 /** @brief Data Indication from MAC to RLC to 
488  * forward the data received for dedicated channels */
489 typedef S16 (*RguDDatInd) ARGS((
490    Pst*                 pst,
491    SuId                 suId,
492    RguDDatIndInfo       *datInd));
493
494 typedef uint8_t (*RlcMacUlDataFunc) ARGS((
495    Pst*                 pst,
496    RlcMacData           *ulData));
497 /** @brief Status Response from RLC to MAC to 
498  * inform the BO report for common channels */
499 typedef S16 (*RguCStaRsp) ARGS((
500    Pst*                 pst,
501    SpId                 spId,
502    RguCStaRspInfo  *    staRsp));
503 /** @brief Status Repsonse from RLC to MAC to 
504  * inform the BO report for dedicated channels */
505 typedef S16 (*RguDStaRsp) ARGS((
506    Pst*                 pst,
507    SpId                 spId,
508    RguDStaRspInfo  *    staRsp));
509
510 typedef uint16_t (*RlcMacBoStatus) ARGS((
511    Pst*                 pst,
512    SpId                 spId,
513    RlcMacBOStatus       *boStatus));
514
515 /** @brief Status Indication from MAC to RLC  
516  * as a response to the staRsp primitive from RLC */
517 typedef S16 (*RguCStaInd) ARGS((
518    Pst*                 pst,
519    SuId                 suId,
520    RguCStaIndInfo  *    staInd));
521 /** @brief Status Indication from MAC to RLC  
522  * as a response to the staRsp primitive from RLC */
523 typedef S16 (*RguDStaInd) ARGS((
524    Pst*                 pst,
525    SuId                 suId,
526    RguDStaIndInfo *    staInd));
527
528 typedef uint16_t (*RlcMacSchedRep) ARGS((
529    Pst*                 pst,
530    SuId                 suId,
531    RlcMacSchedRepInfo       *schRep));
532
533 typedef S16 (*RguFlowCntrlIndInfo) ARGS((
534    Pst                  *pst,
535    SuId                 suId,
536    RguFlowCntrlInd      *flowCntrlInd));
537
538 /* rgu_x_001.main_3 - ADD - L2M & R9 Support */
539 #ifdef LTE_L2_MEAS
540 /** @brief HARQ Status Indication from MAC to RLC  
541  * as a response to Data Req primitive from RLC */
542 typedef S16 (*RguHqStaInd) ARGS((
543    Pst*                 pst,
544    SuId                 suId,
545    RguHarqStatusInd     *harqStatusInd));
546 /** @brief LCID measurement status from RLC to MAC  
547  * so as to provide Timing Info in DDatInd */
548 typedef S16 (*RguL2MUlThrpMeasReq) ARGS((
549    Pst*                 pst,
550    SpId                 spId,
551    RguL2MUlThrpMeasReqInfo  *l2mUlThrpMeasReq));
552
553 #endif /* LTE_L2_MEAS */
554
555
556 #ifdef RG
557 /** @brief Bind Request from RLC to MAC to bind the interface SAPs
558  * @param pst Pointer to the post structure.
559  * @param suId SAP ID of the service user.
560  * @param spId SAP ID of the service provider.
561  * @return ROK/RFAILED
562 */
563 EXTERN S16 RgUiRguBndReq ARGS((Pst* pst,SuId suId,SpId spId));
564 /** @brief Unbind Request from RLC to MAC to unbind the interface SAPs 
565  * @param pst Pointer to the post structure.
566  * @param spId SAP ID of the service provider.
567  * @param reason Reason for unbind request.
568  * @return ROK/RFAILED
569 */
570 EXTERN S16 RgUiRguUbndReq ARGS((Pst* pst,SpId spId,Reason reason));
571 /** @brief Bind Confirmation from MAC to RLC for the bind and unbind 
572  * request for the interface SAPs 
573  * @param pst Pointer to the post structure.
574  * @param suId SAP ID of the service user.
575  * @param status Status of the bind request. 
576  * @return ROK/RFAILED
577 */
578 EXTERN S16 RgUiRguBndCfm ARGS((Pst* pst,SuId suId,U8 status));
579 /** @brief Data Request from RLC to MAC for forwarding SDUs on common
580  * channel for transmission 
581  * @param pst Pointer to the post structure.
582  * @param spId SAP ID of the service provider.
583  * @param datReq Data request for common channels (BCCH, PCCH and CCCH).
584  * @return ROK/RFAILED
585 */
586 EXTERN S16 RgUiRguCDatReq ARGS((Pst* pst,SpId spId,RguCDatReqInfo *datReq));
587 /** @brief Data Request from RLC to MAC for forwarding SDUs on 
588  * dedicated channel for transmission 
589  * @param pst Pointer to the post structure.
590  * @param spId SAP ID of the service provider.
591  * @param datReq Data request for dedicated channels (DCCH and DTCH).
592  * @return ROK/RFAILED
593 */
594 EXTERN S16 RgUiRguDDatReq ARGS((Pst* pst,SpId spId,RguDDatReqInfo  *datReq));
595
596 EXTERN uint16_t MacRlcProcDlData(Pst* pst, SpId spId, RlcMacData *dlData);
597
598 /** @brief Data Indication from MAC to RLC to 
599  * forward the data received for common channels
600  * @param pst Pointer to the post structure.
601  * @param suId SAP ID of the service user.
602  * @param datInd Data indication on CCCH.
603  * @return ROK/RFAILED
604 */
605 EXTERN S16 RgUiRguCDatInd ARGS((Pst* pst,SuId suId,RguCDatIndInfo  *datInd));
606 /** @brief Data Indication from MAC to RLC to 
607  * forward the data received for dedicated channels
608  * @param pst Pointer to the post structure.
609  * @param suId SAP ID of the service user.
610  * @param datInd Data indication on dedicated channels (DCCH and DTCH).
611  * @return ROK/RFAILED
612 */
613 EXTERN S16 RgUiRguDDatInd ARGS((Pst* pst,SuId suId,RguDDatIndInfo  *datInd));
614 /** @brief Status Response from RLC to MAC to 
615  * inform the BO report for common channels
616  * @param pst Pointer to the post structure.
617  * @param spId SAP ID of the service provider.
618  * @param staRsp Status response for common channels (BCCH, PCCH and CCCH).
619  * @return ROK/RFAILED
620 */
621 EXTERN S16 RgUiRguCStaRsp ARGS((Pst* pst,SpId spId,RguCStaRspInfo  *staRsp));
622 /** @brief Status Response from RLC to MAC to 
623  * inform the BO report for dedicated channels
624  * @param pst Pointer to the post structure.
625  * @param spId SAP ID of the service provider.
626  * @param staRsp Status response for dedicated channels (DCCH and DTCH).
627  * @return ROK/RFAILED
628 */
629 EXTERN S16 RgUiRguDStaRsp ARGS((Pst* pst,SpId spId,RguDStaRspInfo  *staRsp));
630
631 EXTERN uint16_t MacRlcProcBOStatus(Pst* pst, SpId spId, RlcMacBOStatus* boStatus);
632
633 /** @brief Status Indication from MAC to RLC  
634  * as a response to the staRsp primitive from RLC.
635  * @param pst Pointer to the post structure.
636  * @param suId SAP ID of the service user.
637  * @param staInd Status indication on common channels (BCCH, PCCH and CCCH).
638  * @return ROK/RFAILED
639 */
640 EXTERN S16 RgUiRguCStaInd ARGS((Pst* pst,SuId suId,RguCStaIndInfo  *staInd));
641 /** @brief Status Indication from MAC to RLC  
642  * as a response to the staRsp primitive from RLC.
643  * @param pst Pointer to the post structure.
644  * @param suId SAP ID of the service user.
645  * @param staInd Status indication on dedicated channels (DCCH and DTCH).
646  * @return ROK/RFAILED
647 */
648 EXTERN S16 RgUiRguDStaInd ARGS((Pst* pst,SuId suId,RguDStaIndInfo  *staInd));
649 /** @brief flow control indication from MAC to RLC */  
650 EXTERN S16 RgUiRguFlowCntrlInd ARGS((Pst *pst, SuId suId, 
651 RguFlowCntrlInd *flowCntrlInd)); 
652 /*rgu_x_001.main_3 - ADD - L2M & R9 Support */
653 #ifdef LTE_L2_MEAS
654 /** @brief HARQ Status Indication from MAC to RLC  
655  * as a response to the Data Req from RLC.
656  * Informs HARQ feedback for the TB with sn mapping info. */
657 EXTERN S16 RgUiRguHqStaInd ARGS((Pst* pst,SuId suId,
658 RguHarqStatusInd *harqStatusInd));
659
660
661
662 /** @brief Request for measuring the timing Info for a LC from RLC to MAC  
663  * When the status is ON then Timing Info for data bursts 
664  * shall be captured and provided to RLC on DDatInd. */
665 EXTERN S16 RgUiRguL2MUlThrpMeasReq ARGS((Pst* pst,SpId spId,
666 RguL2MUlThrpMeasReqInfo  *l2mUlThrpMeasReq));
667
668 #endif /* LTE_L2_MEAS */
669
670 #endif
671
672 #ifdef KW
673 /** @brief Request from RLC to MAC to bind the interface saps */
674 EXTERN S16 RlcLiRguBndReq ARGS((
675    Pst*                 pst,
676    SuId                 suId,
677    SpId                 spId
678 ));
679 /** @brief Request from RLC to MAC to Unbind the interface saps */
680 EXTERN S16 RlcLiRguUbndReq ARGS((
681    Pst*                 pst,
682    SpId                 spId,
683    Reason               reason
684 ));
685 /** @brief Confirmation from MAC to RLC for the bind/Unbind 
686  * request for the interface saps */
687 EXTERN S16 RlcLiRguBndCfm ARGS((
688    Pst*                 pst,
689    SuId                 suId,
690    U8                   status
691 ));
692 /** @brief Request from RLC to MAC for forwarding SDUs on common
693  * channel for transmission */
694 EXTERN S16 RlcLiRguCDatReq ARGS((
695    Pst*                 pst,
696    SpId                 spId,
697    RguCDatReqInfo  *    datReq
698 ));
699 /** @brief Request from RLC to MAC for forwarding SDUs on 
700  * dedicated channel for transmission */
701 EXTERN S16 RlcMacSendDlData ARGS((
702    Pst*                 pst,
703    SpId                 spId,
704    RlcMacData  *    datReq
705 ));
706
707 /** @brief Handler toprocess UL data from MAC and
708  * forwarding to appropriate common/dedicated
709  * channel's handler */
710 EXTERN uint8_t RlcProcUlData ARGS((
711    Pst*           pst,
712    RlcMacData   *ulData
713 ));
714
715 /** @brief Data Indication from MAC to RLC to 
716  * forward the data received for common channels*/
717 EXTERN S16 RlcLiRguCDatInd ARGS((
718    Pst*                 pst,
719    SuId                 suId,
720    RguCDatIndInfo  *    datInd
721 ));
722 /** @brief Data Indication from MAC to RLC to 
723  * forward the data received for dedicated channels*/
724 EXTERN S16 RlcLiRguDDatInd ARGS((
725    Pst*                 pst,
726    SuId                 suId,
727    RguDDatIndInfo  *    datInd
728 ));
729 /** @brief Primitive invoked from RLC to MAC to 
730  * inform the BO report for common channels*/
731 EXTERN S16 RlcLiRguCStaRsp ARGS((
732    Pst*                 pst,
733    SpId                 spId,
734    RguCStaRspInfo  *    staRsp
735 ));
736 /** @brief Primitive invoked from RLC to MAC to 
737  * inform the BO report for dedicated channels*/
738 EXTERN S16 RlcMacSendBOStatus ARGS((
739    Pst*                 pst,
740    SpId                 spId,
741    RlcMacBOStatus*      boSta
742 ));
743
744 /**@brief Primitive invoked from MAC to RLC to
745  * inform scheduling result for logical channels */
746 EXTERN uint16_t RlcMacProcSchedRep ARGS((
747    Pst*                 pst,
748    SuId                 suId,
749    RlcMacSchedRepInfo       *schRep
750 ));
751 /** @brief Status Indication from MAC to RLC  
752  * as a response to the staRsp primitive from RLC.
753  * Informs RLC of the totalBufferSize and Timing Info 
754  * for the transmission on common channels. */
755 EXTERN S16 RlcLiRguCStaInd ARGS((
756    Pst*                 pst,
757    SuId                 suId,
758    RguCStaIndInfo  *    staInd
759 ));
760 /** @brief Status Indication from MAC to RLC  
761  * as a response to the staRsp primitive from RLC.
762  * Informs RLC of the totalBufferSize and Timing Info 
763  * for the transmission on dedicated channels. */
764 EXTERN S16 RlcLiRguDStaInd ARGS((
765    Pst*                 pst,
766    SuId                 suId,
767    RguDStaIndInfo  *    staInd
768 ));
769
770 #ifdef LTE_L2_MEAS
771 /** @brief HARQ Status Indication from MAC to RLC  
772  * as a response to the Data Req from RLC.
773  * Informs HARQ feedback for the PDU with sn. */
774 EXTERN S16 RlcLiRguHqStaInd ARGS((
775    Pst*                 pst,
776    SuId                 suId,
777    RguHarqStatusInd     *harqStatusInd));
778
779
780 /** @brief Request for measuring the timing Info for a LC from RLC to MAC  
781  * When the status is ON then Timing Info for data bursts 
782  * shall be captured and provided to RLC on DDatInd. */
783 EXTERN S16 RlcLiRguL2MUlThrpMeasReq ARGS((
784    Pst*                 pst,
785    SpId                 spId,
786    RguL2MUlThrpMeasReqInfo *l2mUlThrpMeasReq));
787
788 #endif /* LTE_L2_MEAS */
789
790 /** @brief flowCntrl Indication from MAC to RLC  */
791 EXTERN S16 RlcLiRguFlowCntrlInd ARGS((
792 Pst              *pst, 
793 SuId             suId, 
794 RguFlowCntrlInd  *flowCntrlInd
795 ));
796 #endif
797
798 #ifdef LCRGU
799 /** @brief Request from RLC to MAC to bind the interface saps */
800 EXTERN S16 cmPkRguBndReq ARGS((
801    Pst*                 pst,
802    SuId                 suId,
803    SpId                 spId
804 ));
805 /** @brief Request from RLC to MAC to bind the interface saps */
806 EXTERN S16 cmUnpkRguBndReq ARGS((
807    RguBndReq            func,
808    Pst*                 pst,
809    Buffer               *mBuf
810 ));
811 /** @brief Request from RLC to MAC to Unbind the interface saps */
812 EXTERN S16 cmPkRguUbndReq ARGS((
813    Pst*                 pst,
814    SpId                 spId,
815    Reason               reason
816 ));
817 /** @brief Request from RLC to MAC to Unbind the interface saps */
818 EXTERN S16 cmUnpkRguUbndReq ARGS((
819    RguUbndReq           func,
820    Pst*                 pst,
821    Buffer               *mBuf
822 ));
823 /** @brief Confirmation from MAC to RLC for the bind/Unbind 
824  * request for the interface saps */
825 EXTERN S16 cmPkRguBndCfm ARGS((
826    Pst*                 pst,
827    SuId                 suId,
828    U8                   status
829 ));
830 /** @brief Confirmation from MAC to RLC for the bind/Unbind 
831  * request for the interface saps */
832 EXTERN S16 cmUnpkRguBndCfm ARGS((
833    RguBndCfm            func,
834    Pst*                 pst,
835    Buffer               *mBuf
836 ));
837 /** @brief Request from RLC to MAC for forwarding SDUs on common
838  * channel for transmission */
839 EXTERN S16 cmPkRguCDatReq ARGS((
840    Pst*                 pst,
841    SpId                 spId,
842    RguCDatReqInfo  *    datReq
843 ));
844 /** @brief Request from RLC to MAC for forwarding SDUs on common
845  * channel for transmission */
846 EXTERN S16 cmUnpkRguCDatReq ARGS((
847    RguCDatReq           func,
848    Pst*                 pst,
849    Buffer               *mBuf
850 ));
851 /** @brief Request from RLC to MAC for forwarding SDUs on 
852  * dedicated channel for transmission */
853 EXTERN uint16_t packDlData ARGS((
854    Pst*                 pst,
855    SpId                 spId,
856    RlcMacData      *    datReq
857 ));
858 /** @brief Request from RLC to MAC for forwarding SDUs on 
859  * dedicated channel for transmission */
860 EXTERN S16 unpackDlData ARGS((
861    RlcMacDlData         func,
862    Pst*                 pst,
863    Buffer               *mBuf
864 ));
865 /** @brief Data Indication from MAC to RLC to 
866  * forward the data received for common channels*/
867 EXTERN S16 cmPkRguCDatInd ARGS((
868    Pst*                 pst,
869    SuId                 suId,
870    RguCDatIndInfo  *    datInd
871 ));
872 /** @brief Data Indication from MAC to RLC to 
873  * forward the data received for common channels*/
874 EXTERN S16 cmUnpkRguCDatInd ARGS((
875    RguCDatInd           func,
876    Pst*                 pst,
877    Buffer               *mBuf
878 ));
879 /** @brief Data Indication from MAC to RLC to 
880  * forward the data received for dedicated channels*/
881 EXTERN uint8_t packRlcUlData ARGS((
882    Pst*                 pst,
883    RlcMacData  *    ulData
884 ));
885 /** @brief Data Indication from MAC to RLC to 
886  * forward the data received for dedicated channels*/
887 EXTERN uint8_t unpackRcvdUlData ARGS((
888    RlcMacUlDataFunc     func,
889    Pst*                 pst,
890    Buffer               *mBuf
891 ));
892 /** @brief Primitive invoked from RLC to MAC to 
893  * inform the BO report for common channels*/
894 EXTERN S16 cmPkRguCStaRsp ARGS((
895    Pst*                 pst,
896    SpId                 spId,
897    RguCStaRspInfo  *    staRsp
898 ));
899 /** @brief Primitive invoked from RLC to MAC to 
900  * inform the BO report for common channels*/
901 EXTERN S16 cmUnpkRguCStaRsp ARGS((
902    RguCStaRsp           func,
903    Pst*                 pst,
904    Buffer               *mBuf
905 ));
906 /** @brief Primitive invoked from RLC to MAC to 
907  * inform the BO report for dedicated channels*/
908 EXTERN uint16_t packBOStatus ARGS((
909    Pst*                 pst,
910    SpId                 spId,
911    RlcMacBOStatus*      boStatus
912 ));
913 /** @brief Primitive invoked from RLC to MAC to 
914  * inform the BO report for dedicated channels*/
915 EXTERN uint16_t unpackBOStatus ARGS((
916    RlcMacBoStatus       func,
917    Pst*                 pst,
918    Buffer               *mBuf
919 ));
920 /** @brief Status Indication from MAC to RLC  
921  * as a response to the staRsp primitive from RLC.
922  * Informs RLC of the totalBufferSize and Timing Info 
923  * for the transmission on common channels. */
924 EXTERN S16 cmPkRguCStaInd ARGS((
925    Pst*                 pst,
926    SuId                 suId,
927    RguCStaIndInfo  *    staInd
928 ));
929 /** @brief Status Indication from MAC to RLC  
930  * as a response to the staRsp primitive from RLC.
931  * Informs RLC of the totalBufferSize and Timing Info 
932  * for the transmission on common channels. */
933 EXTERN S16 cmUnpkRguCStaInd ARGS((
934    RguCStaInd           func,
935    Pst*                 pst,
936    Buffer               *mBuf
937 ));
938 /** @brief Status Indication from MAC to RLC  
939  * as a response to the staRsp primitive from RLC.
940  * Informs RLC of the totalBufferSize and Timing Info 
941  * for the transmission on dedicated channels. */
942 EXTERN S16 packSchedRep ARGS((
943    Pst*                 pst,
944    SuId                 suId,
945    RlcMacSchedRepInfo   *staInd
946 ));
947 EXTERN S16 cmPkRguFlowCntrlInfo ARGS((
948 RguFlowCntrlInd *param, 
949 Buffer           *mBuf
950 ));
951 EXTERN S16 cmPkRguUeFlowCntrlInfo ARGS((
952 RguUeFlowCntrlInfo *param,
953 Buffer           *mBuf
954 ));
955 EXTERN S16 cmPkRguLcFlowCntrlInfo ARGS((
956 RguLcFlowCntrlInfo *param,
957 Buffer           *mBuf
958 ));
959 EXTERN S16 cmUnpkRguLcFlowCntrlInfo ARGS((
960 RguLcFlowCntrlInfo *param,
961 Buffer           *mBuf
962 ));
963 EXTERN S16 cmUnpkRguUeFlowCntrlInfo ARGS((
964 RguUeFlowCntrlInfo *param,
965 Buffer           *mBuf
966 ));
967 EXTERN S16 cmUnpkRguFlowCntrlInfo ARGS((
968 RguFlowCntrlInd *param, 
969 Buffer           *mBuf
970 ));
971 /** @brief Status Indication from MAC to RLC  
972  * as a response to the staRsp primitive from RLC.
973  * Informs RLC of the totalBufferSize and Timing Info 
974  * for the transmission on dedicated channels. */
975 EXTERN S16 unpackSchedRep ARGS((
976    RlcMacSchedRep       func,
977    Pst*                 pst,
978    Buffer               *mBuf
979 ));
980 EXTERN S16 cmPkRguPduInfo ARGS((
981    RguPduInfo           *param,
982    Buffer               *mBuf
983 ));
984 EXTERN S16 cmUnpkRguPduInfo ARGS((
985    RguPduInfo           *param,
986    Buffer               *mBuf
987 ));
988 EXTERN S16 cmPkRguDBoReport ARGS((
989    RguDBoReport         *param,
990    Buffer               *mBuf
991 ));
992 EXTERN S16 cmUnpkRguDBoReport ARGS((
993    RguDBoReport         *param,
994    Buffer               *mBuf
995 ));
996
997 EXTERN S16 cmPkRguCDatReqInfo ARGS((
998    RguCDatReqInfo       *param,
999    Buffer               *mBuf
1000 ));
1001 EXTERN S16 cmUnpkRguCDatReqInfo ARGS((
1002    RguCDatReqInfo       *param,
1003    Buffer               *mBuf
1004 ));
1005 EXTERN S16 cmPkRguLchDatReq ARGS((
1006    RguLchDatReq         *param,
1007    Buffer               *mBuf
1008 ));
1009 EXTERN S16 cmUnpkRguLchDatReq ARGS((
1010    RguLchDatReq         *param,
1011    Buffer               *mBuf
1012 ));
1013 EXTERN S16 cmPkRguDatReqTb ARGS((
1014    RguDatReqTb          *param,
1015    Buffer               *mBuf
1016 ));
1017 EXTERN S16 cmPkRguStaIndTb ARGS((
1018    RguStaIndTb          *param,
1019    Buffer               *mBuf
1020 ));
1021 EXTERN S16 cmUnpkRguStaIndTb ARGS((
1022    RguStaIndTb          *param,
1023    Buffer               *mBuf
1024 ));
1025 /* rgu_x_001.main_3 - ADD - L2M Support */
1026 #ifdef LTE_L2_MEAS
1027 EXTERN S16 cmPkRguDDatReqInfo ARGS((
1028    Pst                  *pst,
1029    RguDDatReqInfo       *param,
1030    Buffer               *mBuf
1031 ));
1032 EXTERN S16 cmUnpkRguDDatReqInfo ARGS((
1033    Pst                  *pst,
1034    RguDDatReqInfo       *param,
1035    Buffer               *mBuf
1036 ));
1037 EXTERN S16 cmUnpkRguDatReqTb ARGS((
1038    Pst                  *pst,
1039    RguDatReqTb          *param,
1040    Buffer               *mBuf
1041 ));
1042 #else
1043 EXTERN S16 cmPkRguDDatReqInfo ARGS((
1044    RguDDatReqInfo       *param,
1045    Buffer               *mBuf
1046 ));
1047 EXTERN S16 cmUnpkRguDDatReqInfo ARGS((
1048    RguDDatReqInfo       *param,
1049    Buffer               *mBuf
1050 ));
1051 EXTERN S16 cmUnpkRguDatReqTb ARGS((
1052    RguDatReqTb          *param,
1053    Buffer               *mBuf
1054 ));
1055 #endif
1056 EXTERN S16 cmPkRguCDatIndInfo ARGS((
1057    RguCDatIndInfo       *param,
1058    Buffer               *mBuf
1059 ));
1060 EXTERN S16 cmUnpkRguCDatIndInfo ARGS((
1061    RguCDatIndInfo       *param,
1062    Buffer               *mBuf
1063 ));
1064 EXTERN S16 cmPkRguLchDatInd ARGS((
1065    RguLchDatInd         *param,
1066    Buffer               *mBuf
1067 ));
1068 EXTERN S16 cmUnpkRguLchDatInd ARGS((
1069    RguLchDatInd         *param,
1070    Buffer               *mBuf
1071 ));
1072 EXTERN S16 packRlcMacDataInfo ARGS((
1073    RlcMacData         *param,
1074    Buffer               *mBuf
1075 ));
1076 EXTERN S16 unpackRlcMacDataInfo ARGS((
1077    RlcMacData       *param,
1078    Buffer               *mBuf
1079 ));
1080
1081 EXTERN S16 cmPkRguCStaRspInfo ARGS((
1082    RguCStaRspInfo       *param,
1083    Buffer               *mBuf
1084 ));
1085 EXTERN S16 cmUnpkRguCStaRspInfo ARGS((
1086    RguCStaRspInfo       *param,
1087    Buffer               *mBuf
1088 ));
1089 EXTERN S16 packBOStatusInfo ARGS((
1090    RlcMacBOStatus       *param,
1091    Buffer               *mBuf
1092 ));
1093 EXTERN S16 unpackBOStatusInfo ARGS((
1094    RlcMacBOStatus       *param,
1095    Buffer               *mBuf
1096 ));
1097 EXTERN S16 cmPkRguCStaIndInfo ARGS((
1098    RguCStaIndInfo       *param,
1099    Buffer               *mBuf
1100 ));
1101 EXTERN S16 cmUnpkRguCStaIndInfo ARGS((
1102    RguCStaIndInfo       *param,
1103    Buffer               *mBuf
1104 ));
1105 EXTERN S16 cmPkRguLchStaInd ARGS((
1106    RguLchStaInd         *param,
1107    Buffer               *mBuf
1108 ));
1109 EXTERN S16 cmUnpkRguLchStaInd ARGS((
1110    RguLchStaInd         *param,
1111    Buffer               *mBuf
1112 ));
1113 EXTERN S16 packSchedRepInfo ARGS((
1114    RlcMacSchedRepInfo   *param,
1115    Buffer               *mBuf
1116 ));
1117 EXTERN S16 unpackSchedRepInfo ARGS((
1118    RlcMacSchedRepInfo   *param,
1119    Buffer               *mBuf
1120 ));
1121   
1122 /*rgu_x_001.main_3 - ADD - L2M  & R9 Support */
1123 #ifdef LTE_L2_MEAS
1124 /** @brief Request from MAC to RLC for forwarding HARQ Status */
1125
1126 EXTERN S16 cmPkRguHqStaInd ARGS((
1127    Pst*                 pst,
1128    SpId                 spId,
1129    RguHarqStatusInd     *harqStatusInd));
1130
1131 /** @brief Request from MAC to RLC forwarding HARQ status  */
1132 EXTERN S16 cmUnpkRguHqStaInd ARGS((
1133    RguHqStaInd          func,
1134    Pst*                 pst,
1135    Buffer               *mBuf
1136 ));
1137
1138 /** @brief Primitive invoked from RLC to MAC to 
1139  *  * inform the On/Off Status of LC Id*/
1140 EXTERN S16 cmPkRguL2MUlThrpMeasReq ARGS((
1141    Pst*                 pst,
1142    SpId                 spId,
1143    RguL2MUlThrpMeasReqInfo*    measReq
1144 ));
1145
1146 /** @brief Primitive invoked from RLC to MAC to 
1147  *  * inform the On/Off Status of LC Id*/
1148 EXTERN S16 cmUnpkRguL2MUlThrpMeasReq ARGS((
1149    RguL2MUlThrpMeasReq  func,
1150    Pst*                 pst,
1151    Buffer               *mBuf
1152 ));
1153
1154 EXTERN S16 cmPkRguL2MUlThrpMeasReqInfo ARGS((
1155    RguL2MUlThrpMeasReqInfo *param,
1156    Buffer               *mBuf
1157 ));
1158
1159 EXTERN S16 cmUnpkRguL2MUlThrpMeasReqInfo ARGS((
1160    RguL2MUlThrpMeasReqInfo       *param,
1161    Buffer               *mBuf
1162 ));
1163
1164 #endif /* LTE_L2_MEAS */
1165 EXTERN S16 cmUnpkRguFlowCntrlInd ARGS((
1166    RguFlowCntrlIndInfo  func,
1167    Pst                  *pst,
1168    Buffer               *mBuf
1169  ));
1170
1171 EXTERN S16 cmPkRguFlowCntrlInd ARGS((
1172    Pst* pst,
1173    SuId suId,
1174    RguFlowCntrlInd  *flowCntrlInd
1175  ));
1176 #endif
1177
1178 #ifdef __cplusplus
1179 }
1180 #endif
1181 #endif /* __RGUX__ */
1182
1183 /********************************************************************30**
1184
1185          End of file
1186 **********************************************************************/