• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/contrib/ncsw/Peripherals/BM/

Lines Matching refs:p_BmPool

58 static void depletion_link(t_BmPool *p_BmPool)
60 t_BmPortal *p_Portal = (t_BmPortal *)p_BmPool->h_BmPortal;
63 p_Portal->depletionPoolsTable[p_BmPool->bpid] = p_BmPool;
64 bm_isr_bscn_mask(p_Portal->p_BmPortalLow, (uint8_t)p_BmPool->bpid, 1);
68 static void depletion_unlink(t_BmPool *p_BmPool)
70 t_BmPortal *p_Portal = (t_BmPortal *)p_BmPool->h_BmPortal;
73 p_Portal->depletionPoolsTable[p_BmPool->bpid] = NULL;
74 bm_isr_bscn_mask(p_Portal->p_BmPortalLow, (uint8_t)p_BmPool->bpid, 0);
78 static t_Error BmPoolRelease(t_BmPool *p_BmPool,
85 if (p_BmPool->flags & BMAN_POOL_FLAG_NO_RELEASE)
89 if (!(p_BmPool->flags & BMAN_POOL_FLAG_STOCKPILE))
90 return BmPortalRelease(h_BmPortal, p_BmPool->bpid, bufs, num, flags);
108 if ((p_BmPool->spFill + num) <= p_BmPool->spMaxBufs)
110 memcpy(PTR_MOVE(p_BmPool->sp, sizeof(struct bm_buffer) * (p_BmPool->spFill)),
113 p_BmPool->spFill += num;
120 p_BmPool->bpid,
121 (struct bm_buffer *)PTR_MOVE(p_BmPool->sp, sizeof(struct bm_buffer) * (p_BmPool->spFill - p_BmPool->spBufsCmd)),
122 p_BmPool->spBufsCmd,
126 p_BmPool->spFill -= p_BmPool->spBufsCmd;
133 static int BmPoolAcquire(t_BmPool *p_BmPool,t_Handle h_BmPortal,
137 if (p_BmPool->flags & BMAN_POOL_FLAG_ONLY_RELEASE)
141 if (!(p_BmPool->flags & BMAN_POOL_FLAG_STOCKPILE))
142 return BmPortalAcquire(h_BmPortal, p_BmPool->bpid, bufs, num);
145 ((p_BmPool->spFill - num) < p_BmPool->spMinBufs))
147 p_BmPool->spFill += BmPortalAcquire(h_BmPortal,
148 p_BmPool->bpid,
149 (struct bm_buffer *)PTR_MOVE(p_BmPool->sp, sizeof(struct bm_buffer) * (p_BmPool->spFill)),
150 p_BmPool->spBufsCmd);
152 else if (p_BmPool->spFill < num)
154 if (!p_BmPool->spFill)
157 PTR_MOVE(p_BmPool->sp, sizeof(struct bm_buffer) * (p_BmPool->spFill - num)),
159 p_BmPool->spFill -= num;
163 static t_Error BmPoolFree(t_BmPool *p_BmPool, bool discardBuffers)
168 ASSERT_COND(p_BmPool);
170 if (!p_BmPool->shadowMode)
172 if (p_BmPool->flags & BMAN_POOL_FLAG_DEPLETION)
174 depletion_unlink(p_BmPool);
175 BmUnSetPoolThresholds(p_BmPool->h_Bm, p_BmPool->bpid);
179 p_Data = BM_POOL_GetBuf(p_BmPool, p_BmPool->h_BmPortal);
182 h_BufContext = BM_POOL_GetBufferContext(p_BmPool, p_Data);
184 p_BmPool->bufferPoolInfo.f_PutBuf(p_BmPool->bufferPoolInfo.h_BufferPool, p_Data, h_BufContext);
186 BmBpidPut(p_BmPool->h_Bm, p_BmPool->bpid);
189 if (p_BmPool->sp)
190 XX_Free(p_BmPool->sp);
192 XX_Free(p_BmPool);
203 t_BmPool *p_BmPool;
213 p_BmPool = (t_BmPool*)XX_Malloc(sizeof(t_BmPool));
214 if (!p_BmPool)
219 memset(p_BmPool, 0, sizeof(t_BmPool));
221 p_BmPool->p_BmPoolDriverParams = (t_BmPoolDriverParams *)XX_Malloc(sizeof(t_BmPoolDriverParams));
222 if (!p_BmPool->p_BmPoolDriverParams)
224 XX_Free(p_BmPool);
228 memset(p_BmPool->p_BmPoolDriverParams, 0, sizeof(t_BmPoolDriverParams));
230 p_BmPool->h_Bm = p_BmPoolParam->h_Bm;
231 p_BmPool->h_BmPortal = p_BmPoolParam->h_BmPortal;
232 p_BmPool->h_App = p_BmPoolParam->h_App;
233 p_BmPool->numOfBuffers = p_BmPoolParam->numOfBuffers;
234 p_BmPool->shadowMode = p_BmPoolParam->shadowMode;
236 if (!p_BmPool->h_BmPortal)
238 p_BmPool->h_BmPortal = BmGetPortalHandle(p_BmPool->h_Bm);
239 SANITY_CHECK_RETURN_VALUE(p_BmPool->h_BmPortal, E_INVALID_HANDLE, NULL);
242 memcpy(&p_BmPool->bufferPoolInfo, &p_BmPoolParam->bufferPoolInfo, sizeof(t_BufferPoolInfo));
243 if (!p_BmPool->bufferPoolInfo.f_PhysToVirt)
244 p_BmPool->bufferPoolInfo.f_PhysToVirt = XX_PhysToVirt;
245 if (!p_BmPool->bufferPoolInfo.f_VirtToPhys)
246 p_BmPool->bufferPoolInfo.f_VirtToPhys = XX_VirtToPhys;
248 p_BmPool->p_BmPoolDriverParams->dynamicBpid = DEFAULT_dynamicBpid;
249 p_BmPool->p_BmPoolDriverParams->useDepletion = DEFAULT_useDepletion;
250 p_BmPool->p_BmPoolDriverParams->useStockpile = DEFAULT_useStockpile;
252 if (p_BmPool->shadowMode)
254 p_BmPool->numOfBuffers = 0;
255 BM_POOL_ConfigBpid(p_BmPool, p_BmPoolParam->bpid);
258 return p_BmPool;
263 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
266 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
267 SANITY_CHECK_RETURN_ERROR(p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE);
269 p_BmPool->flags |= (p_BmPool->p_BmPoolDriverParams->dynamicBpid)?BMAN_POOL_FLAG_DYNAMIC_BPID:0;
270 p_BmPool->flags |= (p_BmPool->p_BmPoolDriverParams->useStockpile)?BMAN_POOL_FLAG_STOCKPILE:0;
271 p_BmPool->flags |= ((!p_BmPool->shadowMode) &&
272 (p_BmPool->p_BmPoolDriverParams->useDepletion))?BMAN_POOL_FLAG_DEPLETION:0;
274 if (p_BmPool->flags & BMAN_POOL_FLAG_DYNAMIC_BPID)
276 if((p_BmPool->bpid = (uint8_t)BmBpidGet(p_BmPool->h_Bm, FALSE, (uint32_t)0)) == (uint8_t)ILLEGAL_BASE)
278 BM_POOL_Free(p_BmPool);
284 if (BmBpidGet(p_BmPool->h_Bm, TRUE, (uint32_t)p_BmPool->bpid) == (uint32_t)ILLEGAL_BASE)
286 BM_POOL_Free(p_BmPool);
287 RETURN_ERROR(CRITICAL, E_INVALID_STATE, ("can't force pool id %d", p_BmPool->bpid));
290 if (p_BmPool->flags & BMAN_POOL_FLAG_DEPLETION)
292 if(BmSetPoolThresholds(p_BmPool->h_Bm, p_BmPool->bpid, p_BmPool->p_BmPoolDriverParams->depletionThresholds))
294 BM_POOL_Free(p_BmPool);
295 RETURN_ERROR(MAJOR, E_INVALID_STATE, ("can't set thresh for pool bpid %d",p_BmPool->bpid));
298 depletion_link(p_BmPool);
301 if (p_BmPool->flags & BMAN_POOL_FLAG_STOCKPILE)
303 p_BmPool->sp = (struct bm_buffer *)XX_Malloc(sizeof(struct bm_buffer) * p_BmPool->spMaxBufs);
304 if (!p_BmPool->sp)
306 BM_POOL_Free(p_BmPool);
309 memset(p_BmPool->sp, 0, sizeof(struct bm_buffer) * p_BmPool->spMaxBufs);
312 XX_Free(p_BmPool->p_BmPoolDriverParams);
313 p_BmPool->p_BmPoolDriverParams = NULL;
318 if ((err = BM_POOL_FillBufs (p_BmPool, p_BmPool->h_BmPortal, p_BmPool->numOfBuffers)) != E_OK)
320 BM_POOL_Free(p_BmPool);
336 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
338 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
339 SANITY_CHECK_RETURN_ERROR(p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE);
342 p_BmPool->p_BmPoolDriverParams->dynamicBpid = FALSE;
343 p_BmPool->bpid = bpid;
351 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
353 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
354 SANITY_CHECK_RETURN_ERROR(p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE);
357 p_BmPool->p_BmPoolDriverParams->useDepletion = TRUE;
358 p_BmPool->f_Depletion = f_Depletion;
359 memcpy(&p_BmPool->p_BmPoolDriverParams->depletionThresholds,
361 sizeof(p_BmPool->p_BmPoolDriverParams->depletionThresholds));
368 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
370 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
371 SANITY_CHECK_RETURN_ERROR(p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE);
374 SANITY_CHECK_RETURN_ERROR((p_BmPool->shadowMode ||
375 ((maxBuffers * 2) <= p_BmPool->numOfBuffers)),
378 p_BmPool->p_BmPoolDriverParams->useStockpile = TRUE;
379 p_BmPool->spMaxBufs = maxBuffers;
380 p_BmPool->spMinBufs = minBuffers;
381 p_BmPool->spBufsCmd = DEFAULT_numOfBufsPerCmd;
383 SANITY_CHECK_RETURN_ERROR((p_BmPool->spMaxBufs >=
384 (p_BmPool->spMinBufs + p_BmPool->spBufsCmd)),
392 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
394 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
395 SANITY_CHECK_RETURN_ERROR(p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE);
397 p_BmPool->noBuffCtxt = !en;
404 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
410 SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, NULL);
411 SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, NULL);
412 SANITY_CHECK_RETURN_VALUE(p_BmPool->bufferPoolInfo.f_PhysToVirt, E_INVALID_STATE, NULL);
416 if (p_BmPool->h_BmPortal)
417 h_BmPortal = p_BmPool->h_BmPortal;
420 SANITY_CHECK_RETURN_VALUE(p_BmPool->h_Bm, E_INVALID_HANDLE, NULL);
421 h_BmPortal = BmGetPortalHandle(p_BmPool->h_Bm);
426 retBufsNum = (uint8_t)BmPoolAcquire(p_BmPool, h_BmPortal, bufs, 1, flags);
435 p_BmPool->bpid,
436 p_BmPool->bufferPoolInfo.f_PhysToVirt((physAddress_t)physAddr)));
438 return p_BmPool->bufferPoolInfo.f_PhysToVirt((physAddress_t)physAddr);
443 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
447 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
448 SANITY_CHECK_RETURN_ERROR(!p_BmPool->p_BmPoolDriverParams, E_INVALID_STATE);
453 bufs[0].bpid = p_BmPool->bpid;
458 p_BmPool->bpid, (uint64_t)PTR_TO_UINT(p_Buff), physAddress));
462 if (p_BmPool->h_BmPortal)
463 h_BmPortal = p_BmPool->h_BmPortal;
466 SANITY_CHECK_RETURN_ERROR(p_BmPool->h_Bm, E_INVALID_HANDLE);
467 h_BmPortal = BmGetPortalHandle(p_BmPool->h_Bm);
472 return BmPoolRelease(p_BmPool, h_BmPortal, bufs, 1, BMAN_RELEASE_FLAG_WAIT);
477 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
479 SANITY_CHECK_RETURN_ERROR(p_BmPool, E_INVALID_HANDLE);
480 SANITY_CHECK_RETURN_ERROR(!p_BmPool->p_BmPoolDriverParams, E_INVALID_STATE);
484 if (p_BmPool->h_BmPortal)
485 h_BmPortal = p_BmPool->h_BmPortal;
488 SANITY_CHECK_RETURN_ERROR(p_BmPool->h_Bm, E_INVALID_HANDLE);
489 h_BmPortal = BmGetPortalHandle(p_BmPool->h_Bm);
500 p_Data = p_BmPool->bufferPoolInfo.f_GetBuf(p_BmPool->bufferPoolInfo.h_BufferPool, &h_BufContext);
502 RETURN_ERROR(MAJOR, E_INVALID_STATE, ("run-out of buffers for bpid %d",p_BmPool->bpid));
504 if (!p_BmPool->noBuffCtxt)
507 if ((res = BM_POOL_PutBuf(p_BmPool, h_BmPortal, p_Data)) != E_OK)
516 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
518 SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, 0);
519 SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, 0);
521 return p_BmPool->bpid;
526 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
528 SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, 0);
529 SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, 0);
531 return p_BmPool->bufferPoolInfo.bufferSize;
536 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
538 SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, NULL);
539 SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, NULL);
542 if (p_BmPool->noBuffCtxt)
550 t_BmPool *p_BmPool = (t_BmPool *)h_BmPool;
552 SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, 0);
553 SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, 0);
558 return BmGetCounter(p_BmPool->h_Bm, e_BM_IM_COUNTERS_POOL_CONTENT, p_BmPool->bpid);
560 return (p_BmPool->swDepletionCount +=
561 BmGetCounter(p_BmPool->h_Bm, e_BM_IM_COUNTERS_POOL_SW_DEPLETION, p_BmPool->bpid));
563 return (p_BmPool->hwDepletionCount +=
564 BmGetCounter(p_BmPool->h_Bm, e_BM_IM_COUNTERS_POOL_HW_DEPLETION, p_BmPool->bpid));