Lines Matching defs:bmp
79 __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
81 bmp->index1 = (bmp->index1 + 1) & (bmp->array1_size - 1);
85 __rte_bitmap_mask1_get(struct rte_bitmap *bmp)
87 return (~1llu) << bmp->offset1;
91 __rte_bitmap_index2_set(struct rte_bitmap *bmp)
93 bmp->index2 = (((bmp->index1 << RTE_BITMAP_SLAB_BIT_SIZE_LOG2) + bmp->offset1) << RTE_BITMAP_CL_SLAB_SIZE_LOG2);
129 __rte_bitmap_scan_init(struct rte_bitmap *bmp)
131 bmp->index1 = bmp->array1_size - 1;
132 bmp->offset1 = RTE_BITMAP_SLAB_BIT_SIZE - 1;
133 __rte_bitmap_index2_set(bmp);
134 bmp->index2 += RTE_BITMAP_CL_SLAB_SIZE;
136 bmp->go2 = 0;
172 struct rte_bitmap *bmp;
193 bmp = (struct rte_bitmap *) mem;
195 bmp->array1 = (uint64_t *) &mem[array1_byte_offset];
196 bmp->array1_size = array1_slabs;
197 bmp->array2 = (uint64_t *) &mem[array2_byte_offset];
198 bmp->array2_size = array2_slabs;
200 __rte_bitmap_scan_init(bmp);
202 return bmp;
248 struct rte_bitmap *bmp;
264 bmp = (struct rte_bitmap *) mem;
265 bmp->array1 = (uint64_t *) &mem[array1_byte_offset];
266 bmp->array1_size = array1_slabs;
267 bmp->array2 = (uint64_t *) &mem[array2_byte_offset];
268 bmp->array2_size = array2_slabs;
270 __rte_bitmap_scan_init(bmp);
272 memset(bmp->array1, 0xff, bmp->array1_size * sizeof(bmp->array1[0]));
273 memset(bmp->array2, 0xff, bmp->array2_size * sizeof(bmp->array2[0]));
275 __rte_bitmap_clear_slab_overhead_bits(bmp->array1, bmp->array1_size,
276 bmp->array2_size >> RTE_BITMAP_CL_SLAB_SIZE_LOG2);
277 __rte_bitmap_clear_slab_overhead_bits(bmp->array2, bmp->array2_size,
279 return bmp;
285 * @param bmp
291 rte_bitmap_free(struct rte_bitmap *bmp)
294 if (bmp == NULL) {
304 * @param bmp
308 rte_bitmap_reset(struct rte_bitmap *bmp)
310 memset(bmp->array1, 0, bmp->array1_size * sizeof(uint64_t));
311 memset(bmp->array2, 0, bmp->array2_size * sizeof(uint64_t));
312 __rte_bitmap_scan_init(bmp);
318 * @param bmp
324 rte_bitmap_prefetch0(struct rte_bitmap *bmp, uint32_t pos)
330 slab2 = bmp->array2 + index2;
337 * @param bmp
345 rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
352 slab2 = bmp->array2 + index2;
359 * @param bmp
365 rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
375 slab2 = bmp->array2 + index2;
376 slab1 = bmp->array1 + index1;
385 * @param bmp
393 rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
402 slab2 = bmp->array2 + index2;
403 slab1 = bmp->array1 + index1;
452 * @param bmp
458 rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
466 slab2 = bmp->array2 + index2;
476 slab2 = bmp->array2 + index2;
484 slab1 = bmp->array1 + index1;
491 __rte_bitmap_scan_search(struct rte_bitmap *bmp)
497 value1 = bmp->array1[bmp->index1];
498 value1 &= __rte_bitmap_mask1_get(bmp);
500 if (rte_bsf64_safe(value1, &bmp->offset1))
503 __rte_bitmap_index1_inc(bmp);
504 bmp->offset1 = 0;
507 for (i = 0; i < bmp->array1_size; i ++, __rte_bitmap_index1_inc(bmp)) {
508 value1 = bmp->array1[bmp->index1];
510 if (rte_bsf64_safe(value1, &bmp->offset1))
518 __rte_bitmap_scan_read_init(struct rte_bitmap *bmp)
520 __rte_bitmap_index2_set(bmp);
521 bmp->go2 = 1;
522 rte_prefetch1((void *)(bmp->array2 + bmp->index2 + 8));
526 __rte_bitmap_scan_read(struct rte_bitmap *bmp, uint32_t *pos, uint64_t *slab)
530 slab2 = bmp->array2 + bmp->index2;
531 for ( ; bmp->go2 ; bmp->index2 ++, slab2 ++, bmp->go2 = bmp->index2 & RTE_BITMAP_CL_SLAB_MASK) {
533 *pos = bmp->index2 << RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
536 bmp->index2 ++;
538 bmp->go2 = bmp->index2 & RTE_BITMAP_CL_SLAB_MASK;
549 * @param bmp
567 rte_bitmap_scan(struct rte_bitmap *bmp, uint32_t *pos, uint64_t *slab)
570 if (__rte_bitmap_scan_read(bmp, pos, slab)) {
575 if (__rte_bitmap_scan_search(bmp)) {
576 __rte_bitmap_scan_read_init(bmp);
577 __rte_bitmap_scan_read(bmp, pos, slab);