Lines Matching refs:p_chain

187 static inline u16 qed_chain_get_prod_idx(struct qed_chain *p_chain)  in qed_chain_get_prod_idx()  argument
189 return p_chain->u.chain16.prod_idx; in qed_chain_get_prod_idx()
192 static inline u16 qed_chain_get_cons_idx(struct qed_chain *p_chain) in qed_chain_get_cons_idx() argument
194 return p_chain->u.chain16.cons_idx; in qed_chain_get_cons_idx()
197 static inline u32 qed_chain_get_cons_idx_u32(struct qed_chain *p_chain) in qed_chain_get_cons_idx_u32() argument
199 return p_chain->u.chain32.cons_idx; in qed_chain_get_cons_idx_u32()
202 static inline u16 qed_chain_get_elem_left(struct qed_chain *p_chain) in qed_chain_get_elem_left() argument
207 (u32)p_chain->u.chain16.prod_idx) - in qed_chain_get_elem_left()
208 (u32)p_chain->u.chain16.cons_idx); in qed_chain_get_elem_left()
209 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR) in qed_chain_get_elem_left()
210 used -= p_chain->u.chain16.prod_idx / p_chain->elem_per_page - in qed_chain_get_elem_left()
211 p_chain->u.chain16.cons_idx / p_chain->elem_per_page; in qed_chain_get_elem_left()
213 return (u16)(p_chain->capacity - used); in qed_chain_get_elem_left()
216 static inline u32 qed_chain_get_elem_left_u32(struct qed_chain *p_chain) in qed_chain_get_elem_left_u32() argument
221 (u64)p_chain->u.chain32.prod_idx) - in qed_chain_get_elem_left_u32()
222 (u64)p_chain->u.chain32.cons_idx); in qed_chain_get_elem_left_u32()
223 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR) in qed_chain_get_elem_left_u32()
224 used -= p_chain->u.chain32.prod_idx / p_chain->elem_per_page - in qed_chain_get_elem_left_u32()
225 p_chain->u.chain32.cons_idx / p_chain->elem_per_page; in qed_chain_get_elem_left_u32()
227 return p_chain->capacity - used; in qed_chain_get_elem_left_u32()
230 static inline u16 qed_chain_get_usable_per_page(struct qed_chain *p_chain) in qed_chain_get_usable_per_page() argument
232 return p_chain->usable_per_page; in qed_chain_get_usable_per_page()
235 static inline u8 qed_chain_get_unusable_per_page(struct qed_chain *p_chain) in qed_chain_get_unusable_per_page() argument
237 return p_chain->elem_unusable; in qed_chain_get_unusable_per_page()
240 static inline u32 qed_chain_get_page_cnt(struct qed_chain *p_chain) in qed_chain_get_page_cnt() argument
242 return p_chain->page_cnt; in qed_chain_get_page_cnt()
245 static inline dma_addr_t qed_chain_get_pbl_phys(struct qed_chain *p_chain) in qed_chain_get_pbl_phys() argument
247 return p_chain->pbl_sp.p_phys_table; in qed_chain_get_pbl_phys()
261 qed_chain_advance_page(struct qed_chain *p_chain, in qed_chain_advance_page() argument
267 switch (p_chain->mode) { in qed_chain_advance_page()
271 if (is_chain_u16(p_chain)) in qed_chain_advance_page()
272 *(u16 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
274 *(u32 *)idx_to_inc += p_chain->elem_unusable; in qed_chain_advance_page()
277 *p_next_elem = p_chain->p_virt_addr; in qed_chain_advance_page()
281 if (is_chain_u16(p_chain)) { in qed_chain_advance_page()
282 if (++(*(u16 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
286 if (++(*(u32 *)page_to_inc) == p_chain->page_cnt) in qed_chain_advance_page()
290 *p_next_elem = p_chain->pbl.pp_virt_addr_tbl[page_index]; in qed_chain_advance_page()
326 static inline void qed_chain_return_produced(struct qed_chain *p_chain) in qed_chain_return_produced() argument
328 if (is_chain_u16(p_chain)) in qed_chain_return_produced()
329 p_chain->u.chain16.cons_idx++; in qed_chain_return_produced()
331 p_chain->u.chain32.cons_idx++; in qed_chain_return_produced()
332 test_and_skip(p_chain, cons_idx); in qed_chain_return_produced()
346 static inline void *qed_chain_produce(struct qed_chain *p_chain) in qed_chain_produce() argument
350 if (is_chain_u16(p_chain)) { in qed_chain_produce()
351 if ((p_chain->u.chain16.prod_idx & in qed_chain_produce()
352 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
353 p_prod_idx = &p_chain->u.chain16.prod_idx; in qed_chain_produce()
354 p_prod_page_idx = &p_chain->pbl.c.u16.prod_page_idx; in qed_chain_produce()
355 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
358 p_chain->u.chain16.prod_idx++; in qed_chain_produce()
360 if ((p_chain->u.chain32.prod_idx & in qed_chain_produce()
361 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_produce()
362 p_prod_idx = &p_chain->u.chain32.prod_idx; in qed_chain_produce()
363 p_prod_page_idx = &p_chain->pbl.c.u32.prod_page_idx; in qed_chain_produce()
364 qed_chain_advance_page(p_chain, &p_chain->p_prod_elem, in qed_chain_produce()
367 p_chain->u.chain32.prod_idx++; in qed_chain_produce()
370 p_ret = p_chain->p_prod_elem; in qed_chain_produce()
371 p_chain->p_prod_elem = (void *)(((u8 *)p_chain->p_prod_elem) + in qed_chain_produce()
372 p_chain->elem_size); in qed_chain_produce()
387 static inline u32 qed_chain_get_capacity(struct qed_chain *p_chain) in qed_chain_get_capacity() argument
389 return p_chain->capacity; in qed_chain_get_capacity()
400 static inline void qed_chain_recycle_consumed(struct qed_chain *p_chain) in qed_chain_recycle_consumed() argument
402 test_and_skip(p_chain, prod_idx); in qed_chain_recycle_consumed()
403 if (is_chain_u16(p_chain)) in qed_chain_recycle_consumed()
404 p_chain->u.chain16.prod_idx++; in qed_chain_recycle_consumed()
406 p_chain->u.chain32.prod_idx++; in qed_chain_recycle_consumed()
419 static inline void *qed_chain_consume(struct qed_chain *p_chain) in qed_chain_consume() argument
423 if (is_chain_u16(p_chain)) { in qed_chain_consume()
424 if ((p_chain->u.chain16.cons_idx & in qed_chain_consume()
425 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_consume()
426 p_cons_idx = &p_chain->u.chain16.cons_idx; in qed_chain_consume()
427 p_cons_page_idx = &p_chain->pbl.c.u16.cons_page_idx; in qed_chain_consume()
428 qed_chain_advance_page(p_chain, &p_chain->p_cons_elem, in qed_chain_consume()
431 p_chain->u.chain16.cons_idx++; in qed_chain_consume()
433 if ((p_chain->u.chain32.cons_idx & in qed_chain_consume()
434 p_chain->elem_per_page_mask) == p_chain->next_page_mask) { in qed_chain_consume()
435 p_cons_idx = &p_chain->u.chain32.cons_idx; in qed_chain_consume()
436 p_cons_page_idx = &p_chain->pbl.c.u32.cons_page_idx; in qed_chain_consume()
437 qed_chain_advance_page(p_chain, &p_chain->p_cons_elem, in qed_chain_consume()
440 p_chain->u.chain32.cons_idx++; in qed_chain_consume()
443 p_ret = p_chain->p_cons_elem; in qed_chain_consume()
444 p_chain->p_cons_elem = (void *)(((u8 *)p_chain->p_cons_elem) + in qed_chain_consume()
445 p_chain->elem_size); in qed_chain_consume()
455 static inline void qed_chain_reset(struct qed_chain *p_chain) in qed_chain_reset() argument
459 if (is_chain_u16(p_chain)) { in qed_chain_reset()
460 p_chain->u.chain16.prod_idx = 0; in qed_chain_reset()
461 p_chain->u.chain16.cons_idx = 0; in qed_chain_reset()
463 p_chain->u.chain32.prod_idx = 0; in qed_chain_reset()
464 p_chain->u.chain32.cons_idx = 0; in qed_chain_reset()
466 p_chain->p_cons_elem = p_chain->p_virt_addr; in qed_chain_reset()
467 p_chain->p_prod_elem = p_chain->p_virt_addr; in qed_chain_reset()
469 if (p_chain->mode == QED_CHAIN_MODE_PBL) { in qed_chain_reset()
475 u32 reset_val = p_chain->page_cnt - 1; in qed_chain_reset()
477 if (is_chain_u16(p_chain)) { in qed_chain_reset()
478 p_chain->pbl.c.u16.prod_page_idx = (u16)reset_val; in qed_chain_reset()
479 p_chain->pbl.c.u16.cons_page_idx = (u16)reset_val; in qed_chain_reset()
481 p_chain->pbl.c.u32.prod_page_idx = reset_val; in qed_chain_reset()
482 p_chain->pbl.c.u32.cons_page_idx = reset_val; in qed_chain_reset()
486 switch (p_chain->intended_use) { in qed_chain_reset()
489 for (i = 0; i < p_chain->capacity; i++) in qed_chain_reset()
490 qed_chain_recycle_consumed(p_chain); in qed_chain_reset()
512 static inline void qed_chain_init_params(struct qed_chain *p_chain, in qed_chain_init_params() argument
520 p_chain->p_virt_addr = NULL; in qed_chain_init_params()
521 p_chain->p_phys_addr = 0; in qed_chain_init_params()
522 p_chain->elem_size = elem_size; in qed_chain_init_params()
523 p_chain->intended_use = (u8)intended_use; in qed_chain_init_params()
524 p_chain->mode = mode; in qed_chain_init_params()
525 p_chain->cnt_type = (u8)cnt_type; in qed_chain_init_params()
527 p_chain->elem_per_page = ELEMS_PER_PAGE(elem_size); in qed_chain_init_params()
528 p_chain->usable_per_page = USABLE_ELEMS_PER_PAGE(elem_size, mode); in qed_chain_init_params()
529 p_chain->elem_per_page_mask = p_chain->elem_per_page - 1; in qed_chain_init_params()
530 p_chain->elem_unusable = UNUSABLE_ELEMS_PER_PAGE(elem_size, mode); in qed_chain_init_params()
531 p_chain->next_page_mask = (p_chain->usable_per_page & in qed_chain_init_params()
532 p_chain->elem_per_page_mask); in qed_chain_init_params()
534 p_chain->page_cnt = page_cnt; in qed_chain_init_params()
535 p_chain->capacity = p_chain->usable_per_page * page_cnt; in qed_chain_init_params()
536 p_chain->size = p_chain->elem_per_page * page_cnt; in qed_chain_init_params()
538 p_chain->pbl_sp.p_phys_table = 0; in qed_chain_init_params()
539 p_chain->pbl_sp.p_virt_table = NULL; in qed_chain_init_params()
540 p_chain->pbl.pp_virt_addr_tbl = NULL; in qed_chain_init_params()
553 static inline void qed_chain_init_mem(struct qed_chain *p_chain, in qed_chain_init_mem() argument
556 p_chain->p_virt_addr = p_virt_addr; in qed_chain_init_mem()
557 p_chain->p_phys_addr = p_phys_addr; in qed_chain_init_mem()
575 static inline void qed_chain_init_pbl_mem(struct qed_chain *p_chain, in qed_chain_init_pbl_mem() argument
580 p_chain->pbl_sp.p_phys_table = p_phys_pbl; in qed_chain_init_pbl_mem()
581 p_chain->pbl_sp.p_virt_table = p_virt_pbl; in qed_chain_init_pbl_mem()
582 p_chain->pbl.pp_virt_addr_tbl = pp_virt_addr_tbl; in qed_chain_init_pbl_mem()
598 qed_chain_init_next_ptr_elem(struct qed_chain *p_chain, in qed_chain_init_next_ptr_elem() argument
605 size = p_chain->elem_size * p_chain->usable_per_page; in qed_chain_init_next_ptr_elem()
622 static inline void *qed_chain_get_last_elem(struct qed_chain *p_chain) in qed_chain_get_last_elem() argument
628 if (!p_chain->p_virt_addr) in qed_chain_get_last_elem()
631 switch (p_chain->mode) { in qed_chain_get_last_elem()
633 size = p_chain->elem_size * p_chain->usable_per_page; in qed_chain_get_last_elem()
634 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
636 while (p_next->next_virt != p_chain->p_virt_addr) { in qed_chain_get_last_elem()
643 p_virt_addr = p_chain->p_virt_addr; in qed_chain_get_last_elem()
646 last_page_idx = p_chain->page_cnt - 1; in qed_chain_get_last_elem()
647 p_virt_addr = p_chain->pbl.pp_virt_addr_tbl[last_page_idx]; in qed_chain_get_last_elem()
651 size = p_chain->elem_size * (p_chain->usable_per_page - 1); in qed_chain_get_last_elem()
663 static inline void qed_chain_set_prod(struct qed_chain *p_chain, in qed_chain_set_prod() argument
666 if (is_chain_u16(p_chain)) in qed_chain_set_prod()
667 p_chain->u.chain16.prod_idx = (u16) prod_idx; in qed_chain_set_prod()
669 p_chain->u.chain32.prod_idx = prod_idx; in qed_chain_set_prod()
670 p_chain->p_prod_elem = p_prod_elem; in qed_chain_set_prod()
678 static inline void qed_chain_pbl_zero_mem(struct qed_chain *p_chain) in qed_chain_pbl_zero_mem() argument
682 if (p_chain->mode != QED_CHAIN_MODE_PBL) in qed_chain_pbl_zero_mem()
685 page_cnt = qed_chain_get_page_cnt(p_chain); in qed_chain_pbl_zero_mem()
688 memset(p_chain->pbl.pp_virt_addr_tbl[i], 0, in qed_chain_pbl_zero_mem()