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