| 132 | } |
| 133 | |
| 134 | static int ena_com_admin_init_aenq(struct ena_com_dev *ena_dev, |
| 135 | struct ena_aenq_handlers *aenq_handlers) |
| 136 | { |
| 137 | struct ena_com_aenq *aenq = &ena_dev->aenq; |
| 138 | u32 addr_low, addr_high, aenq_caps; |
| 139 | u16 size; |
| 140 | |
| 141 | ena_dev->aenq.q_depth = ENA_ASYNC_QUEUE_DEPTH; |
| 142 | size = ADMIN_AENQ_SIZE(ENA_ASYNC_QUEUE_DEPTH); |
| 143 | ENA_MEM_ALLOC_COHERENT(ena_dev->dmadev, size, |
| 144 | aenq->entries, |
| 145 | aenq->dma_addr, |
| 146 | aenq->mem_handle); |
| 147 | |
| 148 | if (!aenq->entries) { |
| 149 | ena_trc_err(ena_dev, "Memory allocation failed\n"); |
| 150 | return ENA_COM_NO_MEM; |
| 151 | } |
| 152 | |
| 153 | aenq->head = aenq->q_depth; |
| 154 | aenq->phase = 1; |
| 155 | |
| 156 | addr_low = ENA_DMA_ADDR_TO_UINT32_LOW(aenq->dma_addr); |
| 157 | addr_high = ENA_DMA_ADDR_TO_UINT32_HIGH(aenq->dma_addr); |
| 158 | |
| 159 | ENA_REG_WRITE32(ena_dev->bus, addr_low, ena_dev->reg_bar + ENA_REGS_AENQ_BASE_LO_OFF); |
| 160 | ENA_REG_WRITE32(ena_dev->bus, addr_high, ena_dev->reg_bar + ENA_REGS_AENQ_BASE_HI_OFF); |
| 161 | |
| 162 | aenq_caps = 0; |
| 163 | aenq_caps |= ena_dev->aenq.q_depth & ENA_REGS_AENQ_CAPS_AENQ_DEPTH_MASK; |
| 164 | aenq_caps |= (sizeof(struct ena_admin_aenq_entry) << |
| 165 | ENA_REGS_AENQ_CAPS_AENQ_ENTRY_SIZE_SHIFT) & |
| 166 | ENA_REGS_AENQ_CAPS_AENQ_ENTRY_SIZE_MASK; |
| 167 | ENA_REG_WRITE32(ena_dev->bus, aenq_caps, ena_dev->reg_bar + ENA_REGS_AENQ_CAPS_OFF); |
| 168 | |
| 169 | if (unlikely(!aenq_handlers)) { |
| 170 | ena_trc_err(ena_dev, "AENQ handlers pointer is NULL\n"); |
| 171 | return ENA_COM_INVAL; |
| 172 | } |
| 173 | |
| 174 | aenq->aenq_handlers = aenq_handlers; |
| 175 | |
| 176 | return 0; |
| 177 | } |
| 178 | |
| 179 | static void comp_ctxt_release(struct ena_com_admin_queue *queue, |
| 180 | struct ena_comp_ctx *comp_ctx) |
no outgoing calls
no test coverage detected