197
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 | Project : 3G PS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Module : UPM
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 | Copyright 2003 Texas Instruments.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | Instruments .
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | Texas Instruments.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 | Purpose: This module implements the process dispatcher
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | for the User Plane Manager (UPM) entity.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | For design details, see:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 | 8010.939 UPM Detailed Specification
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 +---------------------------------------------------------------------------*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 /*==== DECLARATION CONTROL =================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 /*==== INCLUDES =============================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 #include "upm.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #include "upm_dispatcher.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /*==== CONSTS ===============================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 /*==== TYPES ================================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 /*==== LOCALS ===============================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 /*==== PRIVATE FUNCTIONS ====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 /*==== PUBLIC FUNCTIONS =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 | Function : upm_disp_sm_activate_started_ind
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 | Description : Dispatch SM_ACTIVATE_STARTED_IND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 | Parameters : sm_activate_started_ind - received primitive
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 void upm_disp_sm_activate_started_ind(T_SM_ACTIVATE_STARTED_IND *prim)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 int nsapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 struct T_CONTEXT_DATA *ptr_context_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 (void)TRACE_FUNCTION("upm_disp_sm_activate_started_ind");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 nsapi = (int)prim->nsapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 ptr_context_data = upm_get_context_data_from_nsapi(nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 /* UPM_DTI_REQ arrived first (or activation override). Use present data structures. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 if (ptr_context_data != NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 #ifdef UPM_WITHOUT_USER_PLANE /*T_UPM_USER_PLANE_DATA is not visible for GPRS world*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 memset(ptr_context_data, 0, sizeof(struct T_CONTEXT_DATA)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 /* - sizeof(struct T_UPM_USER_PLANE_DATA)*/);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 #else /*#ifndef UPM_WITHOUT_USER_PLANE*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 memset(ptr_context_data, 0, sizeof(struct T_CONTEXT_DATA)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 - sizeof(struct T_UPM_USER_PLANE_DATA));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 #endif /*#ifndef UPM_WITHOUT_USER_PLANE*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 ptr_context_data->nsapi = (U8)nsapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 MALLOC(ptr_context_data, (U32)sizeof(struct T_CONTEXT_DATA));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 if (ptr_context_data == NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 (void)TRACE_ERROR("Unable to allocate data structure for new context!");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 memset(ptr_context_data, 0, sizeof(struct T_CONTEXT_DATA));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 upm_assign_context_data_to_nsapi(ptr_context_data, nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 TRACE_ASSERT(ptr_context_data != NULL);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 upm_link_control_init(ptr_context_data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 #ifdef TI_UMTS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 upm_rab_control_init(ptr_context_data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 #endif /* TI_UMTS */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 #ifdef TI_GPRS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 upm_sndcp_control_init(ptr_context_data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 #endif /* TI_GPRS */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 #ifdef TI_DUAL_MODE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 upm_rat_control_init( (T_PS_rat)prim->rat );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 #endif /* TI_DUAL_MODE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 upm_link_control(ptr_context_data, UPM_P_SM_ACTIVATE_STARTED_IND, prim);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 | Function : upm_disp_sm_activate_ind
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 | Description : Dispatch SM_ACTIVATE_IND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 | Parameters : sm_activate_ind - received primitive
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 void upm_disp_sm_activate_ind(T_SM_ACTIVATE_IND *sm_activate_ind)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 struct T_CONTEXT_DATA *ptr_context_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 (void)TRACE_FUNCTION("upm_disp_sm_activate_ind");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 ptr_context_data = upm_get_context_data_from_nsapi(sm_activate_ind->nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 if (ptr_context_data != NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 upm_link_control(ptr_context_data, UPM_P_SM_ACTIVATE_IND, sm_activate_ind);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 (void)TRACE_ERROR("Tried to complete activation of non-existent context!");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 | Function : upm_disp_sm_modify_ind
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 | Description : Dispatch SM_MODIFY_IND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 | Parameters : sm_modify_ind - received primitive
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 void upm_disp_sm_modify_ind (T_SM_MODIFY_IND *sm_modify_ind)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 struct T_CONTEXT_DATA *ptr_context_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 (void)TRACE_FUNCTION("upm_disp_sm_modify_ind");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 ptr_context_data = upm_get_context_data_from_nsapi(sm_modify_ind->nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 if (ptr_context_data != NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 upm_link_control(ptr_context_data, UPM_P_SM_MODIFY_IND, sm_modify_ind);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 (void)TRACE_ERROR("Tried to modify non-existent context!");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 | Function : upm_disp_upm_count_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 | Description : Dispatch UPM_COUNT_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 | Parameters : prim - received primitive
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 void upm_disp_upm_count_req (T_UPM_COUNT_REQ *prim)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 struct T_CONTEXT_DATA *ptr_context_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 (void)TRACE_FUNCTION("upm_disp_upm_count_req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 ptr_context_data = upm_get_context_data_from_nsapi(prim->nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 if (ptr_context_data != NULL) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 #ifdef TI_GPRS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 #ifdef TI_DUAL_MODE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 if (upm_get_current_rat() == PS_RAT_GSM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 #endif /* TI_DUAL_MODE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 upm_sndcp_dispatch_upm_count_req(prim);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 #endif /* TI_GPRS */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 #ifdef TI_DUAL_MODE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 #endif /* TI_DUAL_MODE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 #ifdef TI_UMTS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 upm_dti_dispatch_upm_count_req(ptr_context_data, prim->reset);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 (void)TRACE_EVENT_P1("Warning: Received COUNT_REQ for undefined "
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 "NSAPI/context; ignored...", prim->nsapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 /*==== END OF FILE ==========================================================*/
|