Lines Matching refs:p_chain

282 qed_chain_advance_page(struct qed_chain *p_chain,  in qed_chain_advance_page()  argument
288 switch (p_chain->mode) { in qed_chain_advance_page()
292 if (is_chain_u16(p_chain)) in qed_chain_advance_page()
293 *(u16 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
295 *(u32 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
298 *p_next_elem = p_chain->p_virt_addr; in qed_chain_advance_page()
302 if (is_chain_u16(p_chain)) { in qed_chain_advance_page()
303 if (++(*(u16 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
307 if (++(*(u32 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
311 *p_next_elem = p_chain->pbl.pp_addr_tbl[page_index].virt_addr; in qed_chain_advance_page()
349 static inline void qed_chain_return_produced(struct qed_chain *p_chain) in qed_chain_return_produced() argument
351 if (is_chain_u16(p_chain)) in qed_chain_return_produced()
352 p_chain->u.chain16.cons_idx++; in qed_chain_return_produced()
354 p_chain->u.chain32.cons_idx++; in qed_chain_return_produced()
355 test_and_skip(p_chain, cons_idx); in qed_chain_return_produced()
369 static inline void *qed_chain_produce(struct qed_chain *p_chain) in qed_chain_produce() argument
373 if (is_chain_u16(p_chain)) { in qed_chain_produce()
374 if ((p_chain->u.chain16.prod_idx & in qed_chain_produce()
375 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
376 p_prod_idx = &p_chain->u.chain16.prod_idx; in qed_chain_produce()
377 p_prod_page_idx = &p_chain->pbl.c.u16.prod_page_idx; in qed_chain_produce()
378 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
381 p_chain->u.chain16.prod_idx++; in qed_chain_produce()
383 if ((p_chain->u.chain32.prod_idx & in qed_chain_produce()
384 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
385 p_prod_idx = &p_chain->u.chain32.prod_idx; in qed_chain_produce()
386 p_prod_page_idx = &p_chain->pbl.c.u32.prod_page_idx; in qed_chain_produce()
387 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
390 p_chain->u.chain32.prod_idx++; in qed_chain_produce()
393 p_ret = p_chain->p_prod_elem; in qed_chain_produce()
394 p_chain->p_prod_elem = (void *)(((u8 *)p_chain->p_prod_elem) + in qed_chain_produce()
395 p_chain->elem_size); in qed_chain_produce()
407 static inline u32 qed_chain_get_capacity(struct qed_chain *p_chain) in qed_chain_get_capacity() argument
409 return p_chain->capacity; in qed_chain_get_capacity()
422 static inline void qed_chain_recycle_consumed(struct qed_chain *p_chain) in qed_chain_recycle_consumed() argument
424 test_and_skip(p_chain, prod_idx); in qed_chain_recycle_consumed()
425 if (is_chain_u16(p_chain)) in qed_chain_recycle_consumed()
426 p_chain->u.chain16.prod_idx++; in qed_chain_recycle_consumed()
428 p_chain->u.chain32.prod_idx++; in qed_chain_recycle_consumed()
440 static inline void *qed_chain_consume(struct qed_chain *p_chain) in qed_chain_consume() argument
444 if (is_chain_u16(p_chain)) { in qed_chain_consume()
445 if ((p_chain->u.chain16.cons_idx & in qed_chain_consume()
446 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_consume()
447 p_cons_idx = &p_chain->u.chain16.cons_idx; in qed_chain_consume()
448 p_cons_page_idx = &p_chain->pbl.c.u16.cons_page_idx; in qed_chain_consume()
449 qed_chain_advance_page(p_chain, &p_chain->p_cons_elem, in qed_chain_consume()
452 p_chain->u.chain16.cons_idx++; in qed_chain_consume()
454 if ((p_chain->u.chain32.cons_idx & in qed_chain_consume()
455 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_consume()
456 p_cons_idx = &p_chain->u.chain32.cons_idx; in qed_chain_consume()
457 p_cons_page_idx = &p_chain->pbl.c.u32.cons_page_idx; in qed_chain_consume()
458 qed_chain_advance_page(p_chain, &p_chain->p_cons_elem, in qed_chain_consume()
461 p_chain->u.chain32.cons_idx++; in qed_chain_consume()
464 p_ret = p_chain->p_cons_elem; in qed_chain_consume()
465 p_chain->p_cons_elem = (void *)(((u8 *)p_chain->p_cons_elem) + in qed_chain_consume()
466 p_chain->elem_size); in qed_chain_consume()
478 static inline void qed_chain_reset(struct qed_chain *p_chain) in qed_chain_reset() argument
482 if (is_chain_u16(p_chain)) { in qed_chain_reset()
483 p_chain->u.chain16.prod_idx = 0; in qed_chain_reset()
484 p_chain->u.chain16.cons_idx = 0; in qed_chain_reset()
486 p_chain->u.chain32.prod_idx = 0; in qed_chain_reset()
487 p_chain->u.chain32.cons_idx = 0; in qed_chain_reset()
489 p_chain->p_cons_elem = p_chain->p_virt_addr; in qed_chain_reset()
490 p_chain->p_prod_elem = p_chain->p_virt_addr; in qed_chain_reset()
492 if (p_chain->mode == QED_CHAIN_MODE_PBL) { in qed_chain_reset()
498 u32 reset_val = p_chain->page_cnt - 1; in qed_chain_reset()
500 if (is_chain_u16(p_chain)) { in qed_chain_reset()
501 p_chain->pbl.c.u16.prod_page_idx = (u16)reset_val; in qed_chain_reset()
502 p_chain->pbl.c.u16.cons_page_idx = (u16)reset_val; in qed_chain_reset()
504 p_chain->pbl.c.u32.prod_page_idx = reset_val; in qed_chain_reset()
505 p_chain->pbl.c.u32.cons_page_idx = reset_val; in qed_chain_reset()
509 switch (p_chain->intended_use) { in qed_chain_reset()
512 for (i = 0; i < p_chain->capacity; i++) in qed_chain_reset()
513 qed_chain_recycle_consumed(p_chain); in qed_chain_reset()
532 static inline void *qed_chain_get_last_elem(struct qed_chain *p_chain) in qed_chain_get_last_elem() argument
538 if (!p_chain->p_virt_addr) in qed_chain_get_last_elem()
541 switch (p_chain->mode) { in qed_chain_get_last_elem()
543 size = p_chain->elem_size * p_chain->usable_per_page; in qed_chain_get_last_elem()
544 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
546 while (p_next->next_virt != p_chain->p_virt_addr) { in qed_chain_get_last_elem()
553 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
556 last_page_idx = p_chain->page_cnt - 1; in qed_chain_get_last_elem()
557 p_virt_addr = p_chain->pbl.pp_addr_tbl[last_page_idx].virt_addr; in qed_chain_get_last_elem()
561 size = p_chain->elem_size * (p_chain->usable_per_page - 1); in qed_chain_get_last_elem()
576 static inline void qed_chain_set_prod(struct qed_chain *p_chain, in qed_chain_set_prod() argument
579 if (p_chain->mode == QED_CHAIN_MODE_PBL) { in qed_chain_set_prod()
582 cur_prod = is_chain_u16(p_chain) ? p_chain->u.chain16.prod_idx : in qed_chain_set_prod()
583 p_chain->u.chain32.prod_idx; in qed_chain_set_prod()
586 page_mask = ~p_chain->elem_per_page_mask; in qed_chain_set_prod()
597 p_chain->elem_per_page; in qed_chain_set_prod()
599 page_cnt = qed_chain_get_page_cnt(p_chain); in qed_chain_set_prod()
600 if (is_chain_u16(p_chain)) in qed_chain_set_prod()
601 p_chain->pbl.c.u16.prod_page_idx = in qed_chain_set_prod()
602 (p_chain->pbl.c.u16.prod_page_idx - in qed_chain_set_prod()
605 p_chain->pbl.c.u32.prod_page_idx = in qed_chain_set_prod()
606 (p_chain->pbl.c.u32.prod_page_idx - in qed_chain_set_prod()
610 if (is_chain_u16(p_chain)) in qed_chain_set_prod()
611 p_chain->u.chain16.prod_idx = (u16) prod_idx; in qed_chain_set_prod()
613 p_chain->u.chain32.prod_idx = prod_idx; in qed_chain_set_prod()
614 p_chain->p_prod_elem = p_prod_elem; in qed_chain_set_prod()
624 static inline void qed_chain_pbl_zero_mem(struct qed_chain *p_chain) in qed_chain_pbl_zero_mem() argument
628 if (p_chain->mode != QED_CHAIN_MODE_PBL) in qed_chain_pbl_zero_mem()
631 page_cnt = qed_chain_get_page_cnt(p_chain); in qed_chain_pbl_zero_mem()
634 memset(p_chain->pbl.pp_addr_tbl[i].virt_addr, 0, in qed_chain_pbl_zero_mem()
635 p_chain->page_size); in qed_chain_pbl_zero_mem()