Lines Matching full:bank
36 static int adf_reserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_reserve_ring() argument
38 spin_lock(&bank->lock); in adf_reserve_ring()
39 if (bank->ring_mask & (1 << ring)) { in adf_reserve_ring()
40 spin_unlock(&bank->lock); in adf_reserve_ring()
43 bank->ring_mask |= (1 << ring); in adf_reserve_ring()
44 spin_unlock(&bank->lock); in adf_reserve_ring()
48 static void adf_unreserve_ring(struct adf_etr_bank_data *bank, u32 ring) in adf_unreserve_ring() argument
50 spin_lock(&bank->lock); in adf_unreserve_ring()
51 bank->ring_mask &= ~(1 << ring); in adf_unreserve_ring()
52 spin_unlock(&bank->lock); in adf_unreserve_ring()
55 static void adf_enable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_enable_ring_irq() argument
57 spin_lock_bh(&bank->lock); in adf_enable_ring_irq()
58 bank->irq_mask |= (1 << ring); in adf_enable_ring_irq()
59 spin_unlock_bh(&bank->lock); in adf_enable_ring_irq()
60 WRITE_CSR_INT_COL_EN(bank->csr_addr, bank->bank_number, bank->irq_mask); in adf_enable_ring_irq()
61 WRITE_CSR_INT_COL_CTL(bank->csr_addr, bank->bank_number, in adf_enable_ring_irq()
62 bank->irq_coalesc_timer); in adf_enable_ring_irq()
65 static void adf_disable_ring_irq(struct adf_etr_bank_data *bank, u32 ring) in adf_disable_ring_irq() argument
67 spin_lock_bh(&bank->lock); in adf_disable_ring_irq()
68 bank->irq_mask &= ~(1 << ring); in adf_disable_ring_irq()
69 spin_unlock_bh(&bank->lock); in adf_disable_ring_irq()
70 WRITE_CSR_INT_COL_EN(bank->csr_addr, bank->bank_number, bank->irq_mask); in adf_disable_ring_irq()
87 WRITE_CSR_RING_TAIL(ring->bank->csr_addr, ring->bank->bank_number, in adf_send_message()
109 WRITE_CSR_RING_HEAD(ring->bank->csr_addr, in adf_handle_response()
110 ring->bank->bank_number, in adf_handle_response()
119 WRITE_CSR_RING_CONFIG(ring->bank->csr_addr, ring->bank->bank_number, in adf_configure_tx_ring()
130 WRITE_CSR_RING_CONFIG(ring->bank->csr_addr, ring->bank->bank_number, in adf_configure_rx_ring()
136 struct adf_etr_bank_data *bank = ring->bank; in adf_init_ring() local
137 struct adf_accel_dev *accel_dev = bank->accel_dev; in adf_init_ring()
166 WRITE_CSR_RING_BASE(ring->bank->csr_addr, ring->bank->bank_number, in adf_init_ring()
180 dma_free_coherent(&GET_DEV(ring->bank->accel_dev), in adf_cleanup_ring()
193 struct adf_etr_bank_data *bank; in adf_create_ring() local
200 dev_err(&GET_DEV(accel_dev), "Invalid bank number\n"); in adf_create_ring()
227 bank = &transport_data->banks[bank_num]; in adf_create_ring()
228 if (adf_reserve_ring(bank, ring_num)) { in adf_create_ring()
233 ring = &bank->rings[ring_num]; in adf_create_ring()
235 ring->bank = bank; in adf_create_ring()
258 adf_enable_ring_irq(bank, ring->ring_number); in adf_create_ring()
263 adf_unreserve_ring(bank, ring_num); in adf_create_ring()
270 struct adf_etr_bank_data *bank = ring->bank; in adf_remove_ring() local
273 adf_disable_ring_irq(bank, ring->ring_number); in adf_remove_ring()
276 WRITE_CSR_RING_CONFIG(bank->csr_addr, bank->bank_number, in adf_remove_ring()
278 WRITE_CSR_RING_BASE(bank->csr_addr, bank->bank_number, in adf_remove_ring()
281 adf_unreserve_ring(bank, ring->ring_number); in adf_remove_ring()
287 static void adf_ring_response_handler(struct adf_etr_bank_data *bank) in adf_ring_response_handler() argument
291 empty_rings = READ_CSR_E_STAT(bank->csr_addr, bank->bank_number); in adf_ring_response_handler()
292 empty_rings = ~empty_rings & bank->irq_mask; in adf_ring_response_handler()
296 adf_handle_response(&bank->rings[i]); in adf_ring_response_handler()
302 struct adf_etr_bank_data *bank = (void *)bank_addr; in adf_response_handler() local
305 adf_ring_response_handler(bank); in adf_response_handler()
306 WRITE_CSR_INT_FLAG_AND_COL(bank->csr_addr, bank->bank_number, in adf_response_handler()
307 bank->irq_mask); in adf_response_handler()
327 static void adf_get_coalesc_timer(struct adf_etr_bank_data *bank, in adf_get_coalesc_timer() argument
331 if (adf_get_cfg_int(bank->accel_dev, section, in adf_get_coalesc_timer()
333 bank_num_in_accel, &bank->irq_coalesc_timer)) in adf_get_coalesc_timer()
334 bank->irq_coalesc_timer = ADF_COALESCING_DEF_TIME; in adf_get_coalesc_timer()
336 if (ADF_COALESCING_MAX_TIME < bank->irq_coalesc_timer || in adf_get_coalesc_timer()
337 ADF_COALESCING_MIN_TIME > bank->irq_coalesc_timer) in adf_get_coalesc_timer()
338 bank->irq_coalesc_timer = ADF_COALESCING_DEF_TIME; in adf_get_coalesc_timer()
342 struct adf_etr_bank_data *bank, in adf_init_bank() argument
350 memset(bank, 0, sizeof(*bank)); in adf_init_bank()
351 bank->bank_number = bank_num; in adf_init_bank()
352 bank->csr_addr = csr_addr; in adf_init_bank()
353 bank->accel_dev = accel_dev; in adf_init_bank()
354 spin_lock_init(&bank->lock); in adf_init_bank()
362 adf_get_coalesc_timer(bank, "Accelerator0", bank_num); in adf_init_bank()
364 bank->irq_coalesc_timer = ADF_COALESCING_MIN_TIME; in adf_init_bank()
369 ring = &bank->rings[i]; in adf_init_bank()
383 tx_ring = &bank->rings[i - hw_data->tx_rx_gap]; in adf_init_bank()
387 if (adf_bank_debugfs_add(bank)) { in adf_init_bank()
389 "Failed to add bank debugfs entry\n"); in adf_init_bank()
398 ring = &bank->rings[i]; in adf_init_bank()
465 static void cleanup_bank(struct adf_etr_bank_data *bank) in cleanup_bank() argument
470 struct adf_accel_dev *accel_dev = bank->accel_dev; in cleanup_bank()
472 struct adf_etr_ring_data *ring = &bank->rings[i]; in cleanup_bank()
474 if (bank->ring_mask & (1 << i)) in cleanup_bank()
480 adf_bank_debugfs_rm(bank); in cleanup_bank()
481 memset(bank, 0, sizeof(*bank)); in cleanup_bank()