Lines Matching refs:p_chain

193 static inline u16 qed_chain_get_prod_idx(struct qed_chain *p_chain)  in qed_chain_get_prod_idx()  argument
195 return p_chain->u.chain16.prod_idx; in qed_chain_get_prod_idx()
198 static inline u16 qed_chain_get_cons_idx(struct qed_chain *p_chain) in qed_chain_get_cons_idx() argument
200 return p_chain->u.chain16.cons_idx; in qed_chain_get_cons_idx()
203 static inline u32 qed_chain_get_cons_idx_u32(struct qed_chain *p_chain) in qed_chain_get_cons_idx_u32() argument
205 return p_chain->u.chain32.cons_idx; in qed_chain_get_cons_idx_u32()
208 static inline u16 qed_chain_get_elem_left(struct qed_chain *p_chain) in qed_chain_get_elem_left() argument
210 u16 elem_per_page = p_chain->elem_per_page; in qed_chain_get_elem_left()
211 u32 prod = p_chain->u.chain16.prod_idx; in qed_chain_get_elem_left()
212 u32 cons = p_chain->u.chain16.cons_idx; in qed_chain_get_elem_left()
219 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR) in qed_chain_get_elem_left()
222 return (u16)(p_chain->capacity - used); in qed_chain_get_elem_left()
225 static inline u32 qed_chain_get_elem_left_u32(struct qed_chain *p_chain) in qed_chain_get_elem_left_u32() argument
227 u16 elem_per_page = p_chain->elem_per_page; in qed_chain_get_elem_left_u32()
228 u64 prod = p_chain->u.chain32.prod_idx; in qed_chain_get_elem_left_u32()
229 u64 cons = p_chain->u.chain32.cons_idx; in qed_chain_get_elem_left_u32()
236 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR) in qed_chain_get_elem_left_u32()
239 return p_chain->capacity - used; in qed_chain_get_elem_left_u32()
242 static inline u16 qed_chain_get_usable_per_page(struct qed_chain *p_chain) in qed_chain_get_usable_per_page() argument
244 return p_chain->usable_per_page; in qed_chain_get_usable_per_page()
247 static inline u8 qed_chain_get_unusable_per_page(struct qed_chain *p_chain) in qed_chain_get_unusable_per_page() argument
249 return p_chain->elem_unusable; in qed_chain_get_unusable_per_page()
252 static inline u32 qed_chain_get_page_cnt(struct qed_chain *p_chain) in qed_chain_get_page_cnt() argument
254 return p_chain->page_cnt; in qed_chain_get_page_cnt()
257 static inline dma_addr_t qed_chain_get_pbl_phys(struct qed_chain *p_chain) in qed_chain_get_pbl_phys() argument
259 return p_chain->pbl_sp.p_phys_table; in qed_chain_get_pbl_phys()
273 qed_chain_advance_page(struct qed_chain *p_chain, in qed_chain_advance_page() argument
279 switch (p_chain->mode) { in qed_chain_advance_page()
283 if (is_chain_u16(p_chain)) in qed_chain_advance_page()
284 *(u16 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
286 *(u32 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
289 *p_next_elem = p_chain->p_virt_addr; in qed_chain_advance_page()
293 if (is_chain_u16(p_chain)) { in qed_chain_advance_page()
294 if (++(*(u16 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
298 if (++(*(u32 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
302 *p_next_elem = p_chain->pbl.pp_addr_tbl[page_index].virt_addr; in qed_chain_advance_page()
338 static inline void qed_chain_return_produced(struct qed_chain *p_chain) in qed_chain_return_produced() argument
340 if (is_chain_u16(p_chain)) in qed_chain_return_produced()
341 p_chain->u.chain16.cons_idx++; in qed_chain_return_produced()
343 p_chain->u.chain32.cons_idx++; in qed_chain_return_produced()
344 test_and_skip(p_chain, cons_idx); in qed_chain_return_produced()
358 static inline void *qed_chain_produce(struct qed_chain *p_chain) in qed_chain_produce() argument
362 if (is_chain_u16(p_chain)) { in qed_chain_produce()
363 if ((p_chain->u.chain16.prod_idx & in qed_chain_produce()
364 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
365 p_prod_idx = &p_chain->u.chain16.prod_idx; in qed_chain_produce()
366 p_prod_page_idx = &p_chain->pbl.c.u16.prod_page_idx; in qed_chain_produce()
367 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
370 p_chain->u.chain16.prod_idx++; in qed_chain_produce()
372 if ((p_chain->u.chain32.prod_idx & in qed_chain_produce()
373 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
374 p_prod_idx = &p_chain->u.chain32.prod_idx; in qed_chain_produce()
375 p_prod_page_idx = &p_chain->pbl.c.u32.prod_page_idx; in qed_chain_produce()
376 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
379 p_chain->u.chain32.prod_idx++; in qed_chain_produce()
382 p_ret = p_chain->p_prod_elem; in qed_chain_produce()
383 p_chain->p_prod_elem = (void *)(((u8 *)p_chain->p_prod_elem) + in qed_chain_produce()
384 p_chain->elem_size); in qed_chain_produce()
399 static inline u32 qed_chain_get_capacity(struct qed_chain *p_chain) in qed_chain_get_capacity() argument
401 return p_chain->capacity; in qed_chain_get_capacity()
412 static inline void qed_chain_recycle_consumed(struct qed_chain *p_chain) in qed_chain_recycle_consumed() argument
414 test_and_skip(p_chain, prod_idx); in qed_chain_recycle_consumed()
415 if (is_chain_u16(p_chain)) in qed_chain_recycle_consumed()
416 p_chain->u.chain16.prod_idx++; in qed_chain_recycle_consumed()
418 p_chain->u.chain32.prod_idx++; in qed_chain_recycle_consumed()
431 static inline void *qed_chain_consume(struct qed_chain *p_chain) in qed_chain_consume() argument
435 if (is_chain_u16(p_chain)) { in qed_chain_consume()
436 if ((p_chain->u.chain16.cons_idx & in qed_chain_consume()
437 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_consume()
438 p_cons_idx = &p_chain->u.chain16.cons_idx; in qed_chain_consume()
439 p_cons_page_idx = &p_chain->pbl.c.u16.cons_page_idx; in qed_chain_consume()
440 qed_chain_advance_page(p_chain, &p_chain->p_cons_elem, in qed_chain_consume()
443 p_chain->u.chain16.cons_idx++; in qed_chain_consume()
445 if ((p_chain->u.chain32.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.chain32.cons_idx; in qed_chain_consume()
448 p_cons_page_idx = &p_chain->pbl.c.u32.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.chain32.cons_idx++; in qed_chain_consume()
455 p_ret = p_chain->p_cons_elem; in qed_chain_consume()
456 p_chain->p_cons_elem = (void *)(((u8 *)p_chain->p_cons_elem) + in qed_chain_consume()
457 p_chain->elem_size); in qed_chain_consume()
467 static inline void qed_chain_reset(struct qed_chain *p_chain) in qed_chain_reset() argument
471 if (is_chain_u16(p_chain)) { in qed_chain_reset()
472 p_chain->u.chain16.prod_idx = 0; in qed_chain_reset()
473 p_chain->u.chain16.cons_idx = 0; in qed_chain_reset()
475 p_chain->u.chain32.prod_idx = 0; in qed_chain_reset()
476 p_chain->u.chain32.cons_idx = 0; in qed_chain_reset()
478 p_chain->p_cons_elem = p_chain->p_virt_addr; in qed_chain_reset()
479 p_chain->p_prod_elem = p_chain->p_virt_addr; in qed_chain_reset()
481 if (p_chain->mode == QED_CHAIN_MODE_PBL) { in qed_chain_reset()
487 u32 reset_val = p_chain->page_cnt - 1; in qed_chain_reset()
489 if (is_chain_u16(p_chain)) { in qed_chain_reset()
490 p_chain->pbl.c.u16.prod_page_idx = (u16)reset_val; in qed_chain_reset()
491 p_chain->pbl.c.u16.cons_page_idx = (u16)reset_val; in qed_chain_reset()
493 p_chain->pbl.c.u32.prod_page_idx = reset_val; in qed_chain_reset()
494 p_chain->pbl.c.u32.cons_page_idx = reset_val; in qed_chain_reset()
498 switch (p_chain->intended_use) { in qed_chain_reset()
501 for (i = 0; i < p_chain->capacity; i++) in qed_chain_reset()
502 qed_chain_recycle_consumed(p_chain); in qed_chain_reset()
524 static inline void qed_chain_init_params(struct qed_chain *p_chain, in qed_chain_init_params() argument
532 p_chain->p_virt_addr = NULL; in qed_chain_init_params()
533 p_chain->p_phys_addr = 0; in qed_chain_init_params()
534 p_chain->elem_size = elem_size; in qed_chain_init_params()
535 p_chain->intended_use = (u8)intended_use; in qed_chain_init_params()
536 p_chain->mode = mode; in qed_chain_init_params()
537 p_chain->cnt_type = (u8)cnt_type; in qed_chain_init_params()
539 p_chain->elem_per_page = ELEMS_PER_PAGE(elem_size); in qed_chain_init_params()
540 p_chain->usable_per_page = USABLE_ELEMS_PER_PAGE(elem_size, mode); in qed_chain_init_params()
541 p_chain->elem_per_page_mask = p_chain->elem_per_page - 1; in qed_chain_init_params()
542 p_chain->elem_unusable = UNUSABLE_ELEMS_PER_PAGE(elem_size, mode); in qed_chain_init_params()
543 p_chain->next_page_mask = (p_chain->usable_per_page & in qed_chain_init_params()
544 p_chain->elem_per_page_mask); in qed_chain_init_params()
546 p_chain->page_cnt = page_cnt; in qed_chain_init_params()
547 p_chain->capacity = p_chain->usable_per_page * page_cnt; in qed_chain_init_params()
548 p_chain->size = p_chain->elem_per_page * page_cnt; in qed_chain_init_params()
550 p_chain->pbl_sp.p_phys_table = 0; in qed_chain_init_params()
551 p_chain->pbl_sp.p_virt_table = NULL; in qed_chain_init_params()
552 p_chain->pbl.pp_addr_tbl = NULL; in qed_chain_init_params()
565 static inline void qed_chain_init_mem(struct qed_chain *p_chain, in qed_chain_init_mem() argument
568 p_chain->p_virt_addr = p_virt_addr; in qed_chain_init_mem()
569 p_chain->p_phys_addr = p_phys_addr; in qed_chain_init_mem()
587 static inline void qed_chain_init_pbl_mem(struct qed_chain *p_chain, in qed_chain_init_pbl_mem() argument
592 p_chain->pbl_sp.p_phys_table = p_phys_pbl; in qed_chain_init_pbl_mem()
593 p_chain->pbl_sp.p_virt_table = p_virt_pbl; in qed_chain_init_pbl_mem()
594 p_chain->pbl.pp_addr_tbl = pp_addr_tbl; in qed_chain_init_pbl_mem()
610 qed_chain_init_next_ptr_elem(struct qed_chain *p_chain, in qed_chain_init_next_ptr_elem() argument
617 size = p_chain->elem_size * p_chain->usable_per_page; in qed_chain_init_next_ptr_elem()
634 static inline void *qed_chain_get_last_elem(struct qed_chain *p_chain) in qed_chain_get_last_elem() argument
640 if (!p_chain->p_virt_addr) in qed_chain_get_last_elem()
643 switch (p_chain->mode) { in qed_chain_get_last_elem()
645 size = p_chain->elem_size * p_chain->usable_per_page; in qed_chain_get_last_elem()
646 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
648 while (p_next->next_virt != p_chain->p_virt_addr) { in qed_chain_get_last_elem()
655 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
658 last_page_idx = p_chain->page_cnt - 1; in qed_chain_get_last_elem()
659 p_virt_addr = p_chain->pbl.pp_addr_tbl[last_page_idx].virt_addr; in qed_chain_get_last_elem()
663 size = p_chain->elem_size * (p_chain->usable_per_page - 1); in qed_chain_get_last_elem()
675 static inline void qed_chain_set_prod(struct qed_chain *p_chain, in qed_chain_set_prod() argument
678 if (p_chain->mode == QED_CHAIN_MODE_PBL) { in qed_chain_set_prod()
681 cur_prod = is_chain_u16(p_chain) ? p_chain->u.chain16.prod_idx : in qed_chain_set_prod()
682 p_chain->u.chain32.prod_idx; in qed_chain_set_prod()
685 page_mask = ~p_chain->elem_per_page_mask; in qed_chain_set_prod()
696 p_chain->elem_per_page; in qed_chain_set_prod()
698 page_cnt = qed_chain_get_page_cnt(p_chain); in qed_chain_set_prod()
699 if (is_chain_u16(p_chain)) in qed_chain_set_prod()
700 p_chain->pbl.c.u16.prod_page_idx = in qed_chain_set_prod()
701 (p_chain->pbl.c.u16.prod_page_idx - in qed_chain_set_prod()
704 p_chain->pbl.c.u32.prod_page_idx = in qed_chain_set_prod()
705 (p_chain->pbl.c.u32.prod_page_idx - in qed_chain_set_prod()
709 if (is_chain_u16(p_chain)) in qed_chain_set_prod()
710 p_chain->u.chain16.prod_idx = (u16) prod_idx; in qed_chain_set_prod()
712 p_chain->u.chain32.prod_idx = prod_idx; in qed_chain_set_prod()
713 p_chain->p_prod_elem = p_prod_elem; in qed_chain_set_prod()
721 static inline void qed_chain_pbl_zero_mem(struct qed_chain *p_chain) in qed_chain_pbl_zero_mem() argument
725 if (p_chain->mode != QED_CHAIN_MODE_PBL) in qed_chain_pbl_zero_mem()
728 page_cnt = qed_chain_get_page_cnt(p_chain); in qed_chain_pbl_zero_mem()
731 memset(p_chain->pbl.pp_addr_tbl[i].virt_addr, 0, in qed_chain_pbl_zero_mem()