Lines Matching full:bank
37 static int adf_reserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_reserve_ring() argument
39 spin_lock(&bank->lock); in adf_reserve_ring()
40 if (bank->ring_mask & (1 << ring)) { in adf_reserve_ring()
41 spin_unlock(&bank->lock); in adf_reserve_ring()
44 bank->ring_mask |= (1 << ring); in adf_reserve_ring()
45 spin_unlock(&bank->lock); in adf_reserve_ring()
49 static void adf_unreserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_unreserve_ring() argument
51 spin_lock(&bank->lock); in adf_unreserve_ring()
52 bank->ring_mask &= ~(1 << ring); in adf_unreserve_ring()
53 spin_unlock(&bank->lock); in adf_unreserve_ring()
56 static void adf_enable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_enable_ring_irq() argument
58 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_enable_ring_irq()
60 spin_lock_bh(&bank->lock); in adf_enable_ring_irq()
61 bank->irq_mask |= (1 << ring); in adf_enable_ring_irq()
62 spin_unlock_bh(&bank->lock); in adf_enable_ring_irq()
63 csr_ops->write_csr_int_col_en(bank->csr_addr, bank->bank_number, in adf_enable_ring_irq()
64 bank->irq_mask); in adf_enable_ring_irq()
65 csr_ops->write_csr_int_col_ctl(bank->csr_addr, bank->bank_number, in adf_enable_ring_irq()
66 bank->irq_coalesc_timer); in adf_enable_ring_irq()
69 static void adf_disable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_disable_ring_irq() argument
71 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_disable_ring_irq()
73 spin_lock_bh(&bank->lock); in adf_disable_ring_irq()
74 bank->irq_mask &= ~(1 << ring); in adf_disable_ring_irq()
75 spin_unlock_bh(&bank->lock); in adf_disable_ring_irq()
76 csr_ops->write_csr_int_col_en(bank->csr_addr, bank->bank_number, in adf_disable_ring_irq()
77 bank->irq_mask); in adf_disable_ring_irq()
82 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_send_message()
96 csr_ops->write_csr_ring_tail(ring->bank->csr_addr, in adf_send_message()
97 ring->bank->bank_number, ring->ring_number, in adf_send_message()
106 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_handle_response()
121 csr_ops->write_csr_ring_head(ring->bank->csr_addr, in adf_handle_response()
122 ring->bank->bank_number, in adf_handle_response()
130 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_configure_tx_ring()
133 csr_ops->write_csr_ring_config(ring->bank->csr_addr, in adf_configure_tx_ring()
134 ring->bank->bank_number, in adf_configure_tx_ring()
141 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev); in adf_configure_rx_ring()
147 csr_ops->write_csr_ring_config(ring->bank->csr_addr, in adf_configure_rx_ring()
148 ring->bank->bank_number, in adf_configure_rx_ring()
154 struct adf_etr_bank_data *bank = ring->bank; in adf_init_ring() local
155 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_init_ring()
188 csr_ops->write_csr_ring_base(ring->bank->csr_addr, in adf_init_ring()
189 ring->bank->bank_number, ring->ring_number, in adf_init_ring()
203 dma_free_coherent(&GET_DEV(ring->bank->accel_dev), in adf_cleanup_ring()
217 struct adf_etr_bank_data *bank; in adf_create_ring() local
224 dev_err(&GET_DEV(accel_dev), "Invalid bank number\n"); in adf_create_ring()
252 bank = &transport_data->banks[bank_num]; in adf_create_ring()
253 if (adf_reserve_ring(bank, ring_num)) { in adf_create_ring()
258 ring = &bank->rings[ring_num]; in adf_create_ring()
260 ring->bank = bank; in adf_create_ring()
283 adf_enable_ring_irq(bank, ring->ring_number); in adf_create_ring()
288 adf_unreserve_ring(bank, ring_num); in adf_create_ring()
295 struct adf_etr_bank_data *bank = ring->bank; in adf_remove_ring() local
296 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_remove_ring()
299 adf_disable_ring_irq(bank, ring->ring_number); in adf_remove_ring()
303 csr_ops->write_csr_ring_config(bank->csr_addr, bank->bank_number, in adf_remove_ring()
305 csr_ops->write_csr_ring_base(bank->csr_addr, bank->bank_number, in adf_remove_ring()
308 adf_unreserve_ring(bank, ring->ring_number); in adf_remove_ring()
314 static void adf_ring_response_handler(struct adf_etr_bank_data *bank) in adf_ring_response_handler() argument
316 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_ring_response_handler()
322 empty_rings = csr_ops->read_csr_e_stat(bank->csr_addr, in adf_ring_response_handler()
323 bank->bank_number); in adf_ring_response_handler()
324 empty_rings = ~empty_rings & bank->irq_mask; in adf_ring_response_handler()
327 adf_handle_response(&bank->rings[i]); in adf_ring_response_handler()
332 struct adf_etr_bank_data *bank = (void *)bank_addr; in adf_response_handler() local
333 struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev); in adf_response_handler()
336 adf_ring_response_handler(bank); in adf_response_handler()
338 csr_ops->write_csr_int_flag_and_col(bank->csr_addr, bank->bank_number, in adf_response_handler()
339 bank->irq_mask); in adf_response_handler()
359 static void adf_get_coalesc_timer(struct adf_etr_bank_data *bank, in adf_get_coalesc_timer() argument
363 if (adf_get_cfg_int(bank->accel_dev, section, in adf_get_coalesc_timer()
365 bank_num_in_accel, &bank->irq_coalesc_timer)) in adf_get_coalesc_timer()
366 bank->irq_coalesc_timer = ADF_COALESCING_DEF_TIME; in adf_get_coalesc_timer()
368 if (ADF_COALESCING_MAX_TIME < bank->irq_coalesc_timer || in adf_get_coalesc_timer()
369 ADF_COALESCING_MIN_TIME > bank->irq_coalesc_timer) in adf_get_coalesc_timer()
370 bank->irq_coalesc_timer = ADF_COALESCING_DEF_TIME; in adf_get_coalesc_timer()
374 struct adf_etr_bank_data *bank, in adf_init_bank() argument
387 memset(bank, 0, sizeof(*bank)); in adf_init_bank()
388 bank->bank_number = bank_num; in adf_init_bank()
389 bank->csr_addr = csr_addr; in adf_init_bank()
390 bank->accel_dev = accel_dev; in adf_init_bank()
391 spin_lock_init(&bank->lock); in adf_init_bank()
393 /* Allocate the rings in the bank */ in adf_init_bank()
395 bank->rings = kzalloc_node(size, GFP_KERNEL, in adf_init_bank()
397 if (!bank->rings) in adf_init_bank()
406 adf_get_coalesc_timer(bank, "Accelerator0", bank_num); in adf_init_bank()
408 bank->irq_coalesc_timer = ADF_COALESCING_MIN_TIME; in adf_init_bank()
414 ring = &bank->rings[i]; in adf_init_bank()
428 tx_ring = &bank->rings[i - hw_data->tx_rx_gap]; in adf_init_bank()
432 if (adf_bank_debugfs_add(bank)) { in adf_init_bank()
434 "Failed to add bank debugfs entry\n"); in adf_init_bank()
445 ring = &bank->rings[i]; in adf_init_bank()
449 kfree(bank->rings); in adf_init_bank()
513 static void cleanup_bank(struct adf_etr_bank_data *bank) in cleanup_bank() argument
515 struct adf_accel_dev *accel_dev = bank->accel_dev; in cleanup_bank()
521 struct adf_etr_ring_data *ring = &bank->rings[i]; in cleanup_bank()
523 if (bank->ring_mask & (1 << i)) in cleanup_bank()
529 kfree(bank->rings); in cleanup_bank()
530 adf_bank_debugfs_rm(bank); in cleanup_bank()
531 memset(bank, 0, sizeof(*bank)); in cleanup_bank()