1*d14abf15SRobert Mustacchi 
2*d14abf15SRobert Mustacchi #include "lm5710.h"
3*d14abf15SRobert Mustacchi #include "lm_sp_req_mgr.h"
4*d14abf15SRobert Mustacchi #include "context.h"
5*d14abf15SRobert Mustacchi 
6*d14abf15SRobert Mustacchi 
7*d14abf15SRobert Mustacchi 
8*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_init(struct _lm_device_t * pdev,u32_t cid)9*d14abf15SRobert Mustacchi lm_sp_req_manager_init(
10*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
11*d14abf15SRobert Mustacchi     u32_t cid
12*d14abf15SRobert Mustacchi     )
13*d14abf15SRobert Mustacchi {
14*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
15*d14abf15SRobert Mustacchi 
16*d14abf15SRobert Mustacchi     if CHK_NULL(pdev)
17*d14abf15SRobert Mustacchi     {
18*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
19*d14abf15SRobert Mustacchi     }
20*d14abf15SRobert Mustacchi 
21*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
22*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
23*d14abf15SRobert Mustacchi     {
24*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
25*d14abf15SRobert Mustacchi     }
26*d14abf15SRobert Mustacchi 
27*d14abf15SRobert Mustacchi     s_list_clear(&sp_req_mgr->pending_reqs);
28*d14abf15SRobert Mustacchi     sp_req_mgr->blocked = FALSE;
29*d14abf15SRobert Mustacchi     sp_req_mgr->req_seq_number = 1;
30*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_virt_addr = NULL;
31*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_phys_addr.as_u64 = 0;
32*d14abf15SRobert Mustacchi 
33*d14abf15SRobert Mustacchi     return LM_STATUS_SUCCESS;
34*d14abf15SRobert Mustacchi }
35*d14abf15SRobert Mustacchi 
36*d14abf15SRobert Mustacchi 
37*d14abf15SRobert Mustacchi 
38*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_shutdown(struct _lm_device_t * pdev,u32_t cid)39*d14abf15SRobert Mustacchi lm_sp_req_manager_shutdown(
40*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
41*d14abf15SRobert Mustacchi     u32_t cid
42*d14abf15SRobert Mustacchi     )
43*d14abf15SRobert Mustacchi {
44*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
45*d14abf15SRobert Mustacchi 
46*d14abf15SRobert Mustacchi     if CHK_NULL(pdev)
47*d14abf15SRobert Mustacchi     {
48*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
49*d14abf15SRobert Mustacchi     }
50*d14abf15SRobert Mustacchi 
51*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
52*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
53*d14abf15SRobert Mustacchi     {
54*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
55*d14abf15SRobert Mustacchi     }
56*d14abf15SRobert Mustacchi 
57*d14abf15SRobert Mustacchi     if (ERR_IF(!s_list_is_empty(&sp_req_mgr->pending_reqs)))
58*d14abf15SRobert Mustacchi     {
59*d14abf15SRobert Mustacchi         DbgBreakIf( !s_list_is_empty(&sp_req_mgr->pending_reqs) );
60*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
61*d14abf15SRobert Mustacchi     }
62*d14abf15SRobert Mustacchi 
63*d14abf15SRobert Mustacchi     sp_req_mgr->blocked = TRUE;
64*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_virt_addr = NULL;
65*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_phys_addr.as_u64 = 0;
66*d14abf15SRobert Mustacchi 
67*d14abf15SRobert Mustacchi     return LM_STATUS_SUCCESS;
68*d14abf15SRobert Mustacchi }
69*d14abf15SRobert Mustacchi 
70*d14abf15SRobert Mustacchi 
71*d14abf15SRobert Mustacchi 
72*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_post(struct _lm_device_t * pdev,u32_t cid,struct _lm_sp_req_common_t * sp_req)73*d14abf15SRobert Mustacchi lm_sp_req_manager_post(
74*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
75*d14abf15SRobert Mustacchi     u32_t cid,
76*d14abf15SRobert Mustacchi     struct _lm_sp_req_common_t *sp_req
77*d14abf15SRobert Mustacchi     )
78*d14abf15SRobert Mustacchi {
79*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
80*d14abf15SRobert Mustacchi     lm_status_t          lm_status  = LM_STATUS_FAILURE;
81*d14abf15SRobert Mustacchi 
82*d14abf15SRobert Mustacchi     if (CHK_NULL(pdev) || CHK_NULL(sp_req))
83*d14abf15SRobert Mustacchi     {
84*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
85*d14abf15SRobert Mustacchi     }
86*d14abf15SRobert Mustacchi 
87*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
88*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
89*d14abf15SRobert Mustacchi     {
90*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
91*d14abf15SRobert Mustacchi     }
92*d14abf15SRobert Mustacchi 
93*d14abf15SRobert Mustacchi //    DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_post, before lock cid=%d\n", cid);
94*d14abf15SRobert Mustacchi 	MM_ACQUIRE_SP_REQ_MGR_LOCK(pdev);
95*d14abf15SRobert Mustacchi //    DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_post, inside lock cid=%d\n", cid);
96*d14abf15SRobert Mustacchi 
97*d14abf15SRobert Mustacchi 	if (sp_req_mgr->blocked)
98*d14abf15SRobert Mustacchi     {
99*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_post, adding to list cid=%d\n", cid);
100*d14abf15SRobert Mustacchi 
101*d14abf15SRobert Mustacchi 		s_list_push_tail(&sp_req_mgr->pending_reqs, &sp_req->link);
102*d14abf15SRobert Mustacchi 		sp_req = NULL;
103*d14abf15SRobert Mustacchi         lm_status = LM_STATUS_PENDING;
104*d14abf15SRobert Mustacchi 	}
105*d14abf15SRobert Mustacchi     else
106*d14abf15SRobert Mustacchi     {
107*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_post, calling req_post_function, cid=%d\n", cid);
108*d14abf15SRobert Mustacchi 
109*d14abf15SRobert Mustacchi         sp_req->req_seq_number = ++sp_req_mgr->req_seq_number;
110*d14abf15SRobert Mustacchi         sp_req_mgr->posted_req = sp_req;
111*d14abf15SRobert Mustacchi         sp_req_mgr->blocked = TRUE;
112*d14abf15SRobert Mustacchi 	}
113*d14abf15SRobert Mustacchi 	MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
114*d14abf15SRobert Mustacchi 
115*d14abf15SRobert Mustacchi 	if (sp_req != NULL)
116*d14abf15SRobert Mustacchi     {
117*d14abf15SRobert Mustacchi         lm_status = ((req_post_function)sp_req->req_post_func)(pdev, sp_req->req_post_ctx, sp_req);
118*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_post, req_post_function, cid=%d, lm_status=%d\n", cid, lm_status);
119*d14abf15SRobert Mustacchi     }
120*d14abf15SRobert Mustacchi 
121*d14abf15SRobert Mustacchi     return lm_status;
122*d14abf15SRobert Mustacchi }
123*d14abf15SRobert Mustacchi 
124*d14abf15SRobert Mustacchi 
125*d14abf15SRobert Mustacchi 
126*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_complete(struct _lm_device_t * pdev,u32_t cid,u32_t seq_num,lm_sp_req_common_t ** sp_req)127*d14abf15SRobert Mustacchi lm_sp_req_manager_complete(
128*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
129*d14abf15SRobert Mustacchi     u32_t cid,
130*d14abf15SRobert Mustacchi     u32_t seq_num,
131*d14abf15SRobert Mustacchi     lm_sp_req_common_t **sp_req
132*d14abf15SRobert Mustacchi     )
133*d14abf15SRobert Mustacchi {
134*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
135*d14abf15SRobert Mustacchi     lm_status_t         lm_status   = LM_STATUS_SUCCESS;
136*d14abf15SRobert Mustacchi 
137*d14abf15SRobert Mustacchi     if (CHK_NULL(pdev) || CHK_NULL(sp_req))
138*d14abf15SRobert Mustacchi     {
139*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
140*d14abf15SRobert Mustacchi     }
141*d14abf15SRobert Mustacchi 
142*d14abf15SRobert Mustacchi     *sp_req = NULL;
143*d14abf15SRobert Mustacchi 
144*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
145*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
146*d14abf15SRobert Mustacchi     {
147*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
148*d14abf15SRobert Mustacchi     }
149*d14abf15SRobert Mustacchi 
150*d14abf15SRobert Mustacchi     MM_ACQUIRE_SP_REQ_MGR_LOCK(pdev);
151*d14abf15SRobert Mustacchi 
152*d14abf15SRobert Mustacchi     /* in iscsi we use sp_req_mgr.posted_req to store last req, */
153*d14abf15SRobert Mustacchi     /* so instead of getting the seq num as param, we'll find it ourselves */
154*d14abf15SRobert Mustacchi     if (seq_num == 0)
155*d14abf15SRobert Mustacchi     {
156*d14abf15SRobert Mustacchi         if CHK_NULL(sp_req_mgr->posted_req)
157*d14abf15SRobert Mustacchi         {
158*d14abf15SRobert Mustacchi             MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
159*d14abf15SRobert Mustacchi             return LM_STATUS_INVALID_PARAMETER;
160*d14abf15SRobert Mustacchi         }
161*d14abf15SRobert Mustacchi 
162*d14abf15SRobert Mustacchi         seq_num = sp_req_mgr->posted_req->req_seq_number;
163*d14abf15SRobert Mustacchi     }
164*d14abf15SRobert Mustacchi 
165*d14abf15SRobert Mustacchi     if ( ERR_IF( seq_num != sp_req_mgr->req_seq_number ) ||
166*d14abf15SRobert Mustacchi          ERR_IF( sp_req_mgr->blocked == FALSE ) )
167*d14abf15SRobert Mustacchi     {
168*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_complete, cid=%d, seq_num=%d, sp_req_mgr->req_seq_number=%d\n", cid, seq_num, sp_req_mgr->req_seq_number);
169*d14abf15SRobert Mustacchi         DbgBreakIf( seq_num != sp_req_mgr->req_seq_number );
170*d14abf15SRobert Mustacchi         DbgBreakIf( (sp_req_mgr->blocked == FALSE) && (sp_req_mgr->posted_req != NULL) );
171*d14abf15SRobert Mustacchi         MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
172*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
173*d14abf15SRobert Mustacchi     }
174*d14abf15SRobert Mustacchi 
175*d14abf15SRobert Mustacchi 	if (!s_list_is_empty(&sp_req_mgr->pending_reqs))
176*d14abf15SRobert Mustacchi     {
177*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_complete, popping from list cid=%d\n", cid);
178*d14abf15SRobert Mustacchi 
179*d14abf15SRobert Mustacchi         *sp_req = (lm_sp_req_common_t *)s_list_pop_head(&sp_req_mgr->pending_reqs);
180*d14abf15SRobert Mustacchi 
181*d14abf15SRobert Mustacchi         if (CHK_NULL(*sp_req))
182*d14abf15SRobert Mustacchi         {
183*d14abf15SRobert Mustacchi             MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
184*d14abf15SRobert Mustacchi     		return LM_STATUS_INVALID_PARAMETER;
185*d14abf15SRobert Mustacchi         }
186*d14abf15SRobert Mustacchi 
187*d14abf15SRobert Mustacchi 		(*sp_req)->req_seq_number = ++sp_req_mgr->req_seq_number;
188*d14abf15SRobert Mustacchi         sp_req_mgr->posted_req = (*sp_req);
189*d14abf15SRobert Mustacchi     }
190*d14abf15SRobert Mustacchi     else
191*d14abf15SRobert Mustacchi     {
192*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_complete, no pending reqs, cid=%d\n", cid);
193*d14abf15SRobert Mustacchi 
194*d14abf15SRobert Mustacchi         sp_req_mgr->blocked = FALSE;
195*d14abf15SRobert Mustacchi         sp_req_mgr->posted_req = NULL;
196*d14abf15SRobert Mustacchi     }
197*d14abf15SRobert Mustacchi 
198*d14abf15SRobert Mustacchi     MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
199*d14abf15SRobert Mustacchi 
200*d14abf15SRobert Mustacchi 	if ((*sp_req) != NULL)
201*d14abf15SRobert Mustacchi     {
202*d14abf15SRobert Mustacchi         lm_status = ((req_post_function)(*sp_req)->req_post_func)(pdev, (*sp_req)->req_post_ctx, *sp_req);
203*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_complete, req_post_function, cid=%d, lm_status=%d\n", cid, lm_status);
204*d14abf15SRobert Mustacchi     }
205*d14abf15SRobert Mustacchi 
206*d14abf15SRobert Mustacchi     return lm_status;
207*d14abf15SRobert Mustacchi }
208*d14abf15SRobert Mustacchi 
209*d14abf15SRobert Mustacchi 
210*d14abf15SRobert Mustacchi 
211*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_block(struct _lm_device_t * pdev,u32_t cid)212*d14abf15SRobert Mustacchi lm_sp_req_manager_block(
213*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
214*d14abf15SRobert Mustacchi     u32_t cid
215*d14abf15SRobert Mustacchi     )
216*d14abf15SRobert Mustacchi {
217*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
218*d14abf15SRobert Mustacchi 
219*d14abf15SRobert Mustacchi     if CHK_NULL(pdev)
220*d14abf15SRobert Mustacchi     {
221*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
222*d14abf15SRobert Mustacchi     }
223*d14abf15SRobert Mustacchi 
224*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
225*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
226*d14abf15SRobert Mustacchi     {
227*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
228*d14abf15SRobert Mustacchi     }
229*d14abf15SRobert Mustacchi 
230*d14abf15SRobert Mustacchi     MM_ACQUIRE_SP_REQ_MGR_LOCK(pdev);
231*d14abf15SRobert Mustacchi 
232*d14abf15SRobert Mustacchi //    DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_block, blocking sq req mgr, cid=%d\n", cid);
233*d14abf15SRobert Mustacchi 	sp_req_mgr->blocked = TRUE;
234*d14abf15SRobert Mustacchi 
235*d14abf15SRobert Mustacchi     MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
236*d14abf15SRobert Mustacchi 
237*d14abf15SRobert Mustacchi     return LM_STATUS_SUCCESS;
238*d14abf15SRobert Mustacchi }
239*d14abf15SRobert Mustacchi 
240*d14abf15SRobert Mustacchi 
241*d14abf15SRobert Mustacchi 
242*d14abf15SRobert Mustacchi /* same as complete, execpt for seq number and asserts */
243*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_unblock(struct _lm_device_t * pdev,u32_t cid,lm_sp_req_common_t ** sp_req)244*d14abf15SRobert Mustacchi lm_sp_req_manager_unblock(
245*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
246*d14abf15SRobert Mustacchi     u32_t cid,
247*d14abf15SRobert Mustacchi     lm_sp_req_common_t **sp_req
248*d14abf15SRobert Mustacchi     )
249*d14abf15SRobert Mustacchi {
250*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
251*d14abf15SRobert Mustacchi     lm_status_t          lm_status  = LM_STATUS_SUCCESS;
252*d14abf15SRobert Mustacchi 
253*d14abf15SRobert Mustacchi     if (CHK_NULL(pdev) || CHK_NULL(sp_req))
254*d14abf15SRobert Mustacchi     {
255*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
256*d14abf15SRobert Mustacchi     }
257*d14abf15SRobert Mustacchi 
258*d14abf15SRobert Mustacchi     *sp_req = NULL;
259*d14abf15SRobert Mustacchi 
260*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
261*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
262*d14abf15SRobert Mustacchi     {
263*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
264*d14abf15SRobert Mustacchi     }
265*d14abf15SRobert Mustacchi 
266*d14abf15SRobert Mustacchi     MM_ACQUIRE_SP_REQ_MGR_LOCK(pdev);
267*d14abf15SRobert Mustacchi 
268*d14abf15SRobert Mustacchi     if (!s_list_is_empty(&sp_req_mgr->pending_reqs))
269*d14abf15SRobert Mustacchi     {
270*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_unblock, popping from list cid=%d\n", cid);
271*d14abf15SRobert Mustacchi 
272*d14abf15SRobert Mustacchi         *sp_req = (lm_sp_req_common_t *)s_list_pop_head(&sp_req_mgr->pending_reqs);
273*d14abf15SRobert Mustacchi 
274*d14abf15SRobert Mustacchi         if (CHK_NULL(*sp_req))
275*d14abf15SRobert Mustacchi         {
276*d14abf15SRobert Mustacchi             MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
277*d14abf15SRobert Mustacchi             return LM_STATUS_INVALID_PARAMETER;
278*d14abf15SRobert Mustacchi         }
279*d14abf15SRobert Mustacchi 
280*d14abf15SRobert Mustacchi         (*sp_req)->req_seq_number = ++sp_req_mgr->req_seq_number;
281*d14abf15SRobert Mustacchi         sp_req_mgr->posted_req = (*sp_req);
282*d14abf15SRobert Mustacchi     }
283*d14abf15SRobert Mustacchi     else
284*d14abf15SRobert Mustacchi     {
285*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_unblock, no pending reqs, cid=%d\n", cid);
286*d14abf15SRobert Mustacchi 
287*d14abf15SRobert Mustacchi         sp_req_mgr->blocked = FALSE;
288*d14abf15SRobert Mustacchi         sp_req_mgr->posted_req = NULL;
289*d14abf15SRobert Mustacchi     }
290*d14abf15SRobert Mustacchi 
291*d14abf15SRobert Mustacchi     MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
292*d14abf15SRobert Mustacchi 
293*d14abf15SRobert Mustacchi 	if ((*sp_req) != NULL)
294*d14abf15SRobert Mustacchi     {
295*d14abf15SRobert Mustacchi 		lm_status = ((req_post_function)(*sp_req)->req_post_func)(pdev, (*sp_req)->req_post_ctx, *sp_req);
296*d14abf15SRobert Mustacchi //        DbgMessage(pdev, FATAL/*INFORM*/, "###lm_sp_req_manager_unblock, req_post_function, cid=%d, lm_status=%d\n", cid, lm_status);
297*d14abf15SRobert Mustacchi     }
298*d14abf15SRobert Mustacchi 
299*d14abf15SRobert Mustacchi     return lm_status;
300*d14abf15SRobert Mustacchi }
301*d14abf15SRobert Mustacchi 
302*d14abf15SRobert Mustacchi 
303*d14abf15SRobert Mustacchi 
304*d14abf15SRobert Mustacchi lm_status_t
lm_sp_req_manager_set_sp_data(struct _lm_device_t * pdev,u32_t cid,void * virt_addr,lm_address_t phys_addr)305*d14abf15SRobert Mustacchi lm_sp_req_manager_set_sp_data(
306*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
307*d14abf15SRobert Mustacchi     u32_t cid,
308*d14abf15SRobert Mustacchi     void *virt_addr,
309*d14abf15SRobert Mustacchi     lm_address_t phys_addr
310*d14abf15SRobert Mustacchi     )
311*d14abf15SRobert Mustacchi {
312*d14abf15SRobert Mustacchi     lm_sp_req_manager_t *sp_req_mgr = NULL;
313*d14abf15SRobert Mustacchi 
314*d14abf15SRobert Mustacchi     if CHK_NULL(pdev)
315*d14abf15SRobert Mustacchi     {
316*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
317*d14abf15SRobert Mustacchi     }
318*d14abf15SRobert Mustacchi 
319*d14abf15SRobert Mustacchi     sp_req_mgr = lm_cid_sp_req_mgr(pdev, cid);
320*d14abf15SRobert Mustacchi     if CHK_NULL(sp_req_mgr)
321*d14abf15SRobert Mustacchi     {
322*d14abf15SRobert Mustacchi         return LM_STATUS_INVALID_PARAMETER;
323*d14abf15SRobert Mustacchi     }
324*d14abf15SRobert Mustacchi 
325*d14abf15SRobert Mustacchi     MM_ACQUIRE_SP_REQ_MGR_LOCK(pdev);
326*d14abf15SRobert Mustacchi 
327*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_virt_addr = virt_addr;
328*d14abf15SRobert Mustacchi     sp_req_mgr->sp_data_phys_addr = phys_addr;
329*d14abf15SRobert Mustacchi 
330*d14abf15SRobert Mustacchi     MM_RELEASE_SP_REQ_MGR_LOCK(pdev);
331*d14abf15SRobert Mustacchi 
332*d14abf15SRobert Mustacchi     return LM_STATUS_SUCCESS;
333*d14abf15SRobert Mustacchi }
334*d14abf15SRobert Mustacchi 
335