Lines Matching full:bank
52 adf_reserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_reserve_ring() argument
54 mtx_lock(&bank->lock); in adf_reserve_ring()
55 if (bank->ring_mask & (1 << ring)) { in adf_reserve_ring()
56 mtx_unlock(&bank->lock); in adf_reserve_ring()
59 bank->ring_mask |= (1 << ring); in adf_reserve_ring()
60 mtx_unlock(&bank->lock); in adf_reserve_ring()
65 adf_unreserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_unreserve_ring() argument
67 mtx_lock(&bank->lock); in adf_unreserve_ring()
68 bank->ring_mask &= ~(1 << ring); in adf_unreserve_ring()
69 mtx_unlock(&bank->lock); in adf_unreserve_ring()
73 adf_enable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_enable_ring_irq() argument
75 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_enable_ring_irq()
81 mtx_lock(&bank->lock); in adf_enable_ring_irq()
82 bank->irq_mask |= (1 << ring); in adf_enable_ring_irq()
83 mtx_unlock(&bank->lock); in adf_enable_ring_irq()
84 csr_ops->write_csr_int_col_en(bank->csr_addr, in adf_enable_ring_irq()
85 bank->bank_number, in adf_enable_ring_irq()
86 bank->irq_mask); in adf_enable_ring_irq()
87 csr_ops->write_csr_int_col_ctl(bank->csr_addr, in adf_enable_ring_irq()
88 bank->bank_number, in adf_enable_ring_irq()
89 bank->irq_coalesc_timer | in adf_enable_ring_irq()
94 adf_disable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_disable_ring_irq() argument
96 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_disable_ring_irq()
98 mtx_lock(&bank->lock); in adf_disable_ring_irq()
99 bank->irq_mask &= ~(1 << ring); in adf_disable_ring_irq()
100 mtx_unlock(&bank->lock); in adf_disable_ring_irq()
101 csr_ops->write_csr_int_col_en(bank->csr_addr, in adf_disable_ring_irq()
102 bank->bank_number, in adf_disable_ring_irq()
103 bank->irq_mask); in adf_disable_ring_irq()
109 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_send_message()
126 csr_ops->write_csr_ring_tail(ring->bank->csr_addr, in adf_send_message()
127 ring->bank->bank_number, in adf_send_message()
138 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_handle_response()
157 csr_ops->write_csr_ring_head(ring->bank->csr_addr, in adf_handle_response()
158 ring->bank->bank_number, in adf_handle_response()
170 struct adf_etr_bank_data *bank; in adf_poll_bank() local
189 bank = &trans_data->banks[bank_num]; in adf_poll_bank()
190 mtx_lock(&bank->lock); in adf_poll_bank()
194 csr_ops->read_csr_e_stat(bank->csr_addr, bank->bank_number); in adf_poll_bank()
196 rings_not_empty = (~rings_not_empty) & bank->ring_mask; in adf_poll_bank()
198 /* Return RETRY if the bank polling rings in adf_poll_bank()
201 if (!(rings_not_empty & bank->ring_mask)) { in adf_poll_bank()
202 mtx_unlock(&bank->lock); in adf_poll_bank()
207 * Loop over all rings within this bank. in adf_poll_bank()
210 * bank we use ring_number to get the global ring. in adf_poll_bank()
214 ring = &bank->rings[ring_num]; in adf_poll_bank()
228 mtx_unlock(&bank->lock); in adf_poll_bank()
243 struct adf_etr_bank_data *bank; in adf_poll_all_banks() local
259 bank = &trans_data->banks[bank_num]; in adf_poll_all_banks()
260 /* if there are no polling rings on this bank in adf_poll_all_banks()
261 * continue to the next bank number. in adf_poll_all_banks()
263 if (bank->ring_mask == 0) in adf_poll_all_banks()
286 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_configure_tx_ring()
289 csr_ops->write_csr_ring_config(ring->bank->csr_addr, in adf_configure_tx_ring()
290 ring->bank->bank_number, in adf_configure_tx_ring()
298 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_configure_rx_ring()
303 csr_ops->write_csr_ring_config(ring->bank->csr_addr, in adf_configure_rx_ring()
304 ring->bank->bank_number, in adf_configure_rx_ring()
312 struct adf_etr_bank_data *bank = ring->bank; in adf_init_ring() local
313 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_init_ring()
349 csr_ops->write_csr_ring_base(ring->bank->csr_addr, in adf_init_ring()
350 ring->bank->bank_number, in adf_init_ring()
353 mtx_init(&ring->lock, "adf bank", NULL, MTX_DEF); in adf_init_ring()
382 struct adf_etr_bank_data *bank; in adf_create_ring() local
390 device_printf(GET_DEV(accel_dev), "Invalid bank number\n"); in adf_create_ring()
419 bank = &transport_data->banks[bank_num]; in adf_create_ring()
420 if (adf_reserve_ring(bank, ring_num)) { in adf_create_ring()
427 ring = &bank->rings[ring_num]; in adf_create_ring()
429 ring->bank = bank; in adf_create_ring()
454 adf_enable_ring_irq(bank, ring->ring_number); in adf_create_ring()
459 adf_unreserve_ring(bank, ring_num); in adf_create_ring()
467 struct adf_etr_bank_data *bank = ring->bank; in adf_remove_ring() local
468 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_remove_ring()
471 adf_disable_ring_irq(bank, ring->ring_number); in adf_remove_ring()
474 csr_ops->write_csr_ring_config(bank->csr_addr, in adf_remove_ring()
475 bank->bank_number, in adf_remove_ring()
478 csr_ops->write_csr_ring_base(bank->csr_addr, in adf_remove_ring()
479 bank->bank_number, in adf_remove_ring()
483 adf_unreserve_ring(bank, ring->ring_number); in adf_remove_ring()
490 adf_ring_response_handler(struct adf_etr_bank_data *bank) in adf_ring_response_handler() argument
492 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_ring_response_handler()
499 csr_ops->read_csr_e_stat(bank->csr_addr, bank->bank_number); in adf_ring_response_handler()
500 empty_rings = ~empty_rings & bank->irq_mask; in adf_ring_response_handler()
504 adf_handle_response(&bank->rings[i], 0); in adf_ring_response_handler()
511 struct adf_etr_bank_data *bank = (void *)bank_addr; in adf_response_handler() local
512 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_response_handler()
515 adf_ring_response_handler(bank); in adf_response_handler()
516 csr_ops->write_csr_int_flag_and_col(bank->csr_addr, in adf_response_handler()
517 bank->bank_number, in adf_response_handler()
518 bank->irq_mask); in adf_response_handler()
542 adf_get_coalesc_timer(struct adf_etr_bank_data *bank, in adf_get_coalesc_timer() argument
546 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_get_coalesc_timer()
557 bank->irq_coalesc_timer = in adf_get_coalesc_timer()
562 bank->irq_coalesc_timer = coalesc_timer; in adf_get_coalesc_timer()
564 if (bank->irq_coalesc_timer > ADF_COALESCING_MAX_TIME) in adf_get_coalesc_timer()
565 bank->irq_coalesc_timer = ADF_COALESCING_MAX_TIME; in adf_get_coalesc_timer()
566 else if (bank->irq_coalesc_timer < ADF_COALESCING_MIN_TIME) in adf_get_coalesc_timer()
567 bank->irq_coalesc_timer = ADF_COALESCING_MIN_TIME; in adf_get_coalesc_timer()
572 struct adf_etr_bank_data *bank, in adf_init_bank() argument
585 explicit_bzero(bank, sizeof(*bank)); in adf_init_bank()
586 bank->bank_number = bank_num; in adf_init_bank()
587 bank->csr_addr = csr_addr; in adf_init_bank()
588 bank->accel_dev = accel_dev; in adf_init_bank()
589 mtx_init(&bank->lock, "adf bank", NULL, MTX_DEF); in adf_init_bank()
591 /* Allocate the rings in the bank */ in adf_init_bank()
593 bank->rings = kzalloc_node(size, in adf_init_bank()
606 adf_get_coalesc_timer(bank, "Accelerator0", bank_num); in adf_init_bank()
608 bank->irq_coalesc_timer = ADF_COALESCING_MIN_TIME; in adf_init_bank()
613 ring = &bank->rings[i]; in adf_init_bank()
625 tx_ring = &bank->rings[i - hw_data->tx_rx_gap]; in adf_init_bank()
630 if (adf_bank_debugfs_add(bank)) { in adf_init_bank()
632 "Failed to add bank debugfs entry\n"); in adf_init_bank()
641 ring = &bank->rings[i]; in adf_init_bank()
647 kfree(bank->rings); in adf_init_bank()
718 cleanup_bank(struct adf_etr_bank_data *bank) in cleanup_bank() argument
721 struct adf_accel_dev *accel_dev = bank->accel_dev; in cleanup_bank()
726 struct adf_accel_dev *accel_dev = bank->accel_dev; in cleanup_bank()
728 struct adf_etr_ring_data *ring = &bank->rings[i]; in cleanup_bank()
730 if (bank->ring_mask & (1 << i)) in cleanup_bank()
738 kfree(bank->rings); in cleanup_bank()
739 adf_bank_debugfs_rm(bank); in cleanup_bank()
740 mtx_destroy(&bank->lock); in cleanup_bank()
741 explicit_bzero(bank, sizeof(*bank)); in cleanup_bank()