Lines Matching defs:hci

18 #include "hci.h"
40 #define rhs_reg_read(r) readl(hci->RHS_regs + (RHS_##r))
41 #define rhs_reg_write(r, v) writel(v, hci->RHS_regs + (RHS_##r))
165 static void hci_dma_cleanup(struct i3c_hci *hci)
167 struct hci_rings_data *rings = hci->io_data;
183 dma_free_coherent(&hci->master.dev,
187 dma_free_coherent(&hci->master.dev,
192 dma_free_coherent(&hci->master.dev,
196 dma_unmap_single(&hci->master.dev, rh->ibi_data_dma,
205 hci->io_data = NULL;
208 static int hci_dma_init(struct i3c_hci *hci)
219 dev_info(&hci->master.dev, "%d DMA rings available\n", nr_rings);
221 dev_err(&hci->master.dev, "number of rings should be <= 8\n");
229 hci->io_data = rings;
238 dev_info(&hci->master.dev, "Ring %d at offset %#x\n", i, offset);
243 rh->regs = hci->base_regs + offset;
257 rh->xfer = dma_alloc_coherent(&hci->master.dev, xfers_sz,
259 rh->resp = dma_alloc_coherent(&hci->master.dev, resps_sz,
303 dma_alloc_coherent(&hci->master.dev, ibi_status_ring_sz,
310 dma_map_single(&hci->master.dev, rh->ibi_data,
312 if (dma_mapping_error(&hci->master.dev, rh->ibi_data_dma)) {
338 hci_dma_cleanup(hci);
342 static void hci_dma_unmap_xfer(struct i3c_hci *hci,
352 dma_unmap_single(&hci->master.dev,
358 static int hci_dma_queue_xfer(struct i3c_hci *hci,
361 struct hci_rings_data *rings = hci->io_data;
380 if (hci->cmd == &mipi_i3c_hci_cmd_v2) {
396 dma_map_single(&hci->master.dev,
402 if (dma_mapping_error(&hci->master.dev,
404 hci_dma_unmap_xfer(hci, xfer_list, i);
429 hci_dma_unmap_xfer(hci, xfer_list, i + 1);
445 static bool hci_dma_dequeue_xfer(struct i3c_hci *hci,
448 struct hci_rings_data *rings = hci->io_data;
460 dev_crit(&hci->master.dev, "unable to abort the ring\n");
479 if (hci->cmd == &mipi_i3c_hci_cmd_v2) {
488 hci_dma_unmap_xfer(hci, xfer, 1);
500 static void hci_dma_xfer_done(struct i3c_hci *hci, struct hci_rh_data *rh)
520 hci_dma_unmap_xfer(hci, xfer, 1);
524 dev_err(&hci->master.dev,
546 static int hci_dma_request_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev,
567 static void hci_dma_free_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev)
577 static void hci_dma_recycle_ibi_slot(struct i3c_hci *hci,
587 static void hci_dma_process_ibi(struct i3c_hci *hci, struct hci_rh_data *rh)
655 dev_err(&hci->master.dev, "IBI error from %#x\n", ibi_addr);
660 dev = i3c_hci_addr_to_dev(hci, ibi_addr);
662 dev_err(&hci->master.dev,
670 dev_err(&hci->master.dev, "IBI payload too big (%d > %d)\n",
687 dev_err(&hci->master.dev, "no free slot for IBI\n");
699 dma_sync_single_for_cpu(&hci->master.dev, ring_ibi_data_dma,
708 dma_sync_single_for_cpu(&hci->master.dev, ring_ibi_data_dma,
736 static bool hci_dma_irq_handler(struct i3c_hci *hci, unsigned int mask)
738 struct hci_rings_data *rings = hci->io_data;
758 hci_dma_process_ibi(hci, rh);
760 hci_dma_xfer_done(hci, rh);
765 dev_notice_ratelimited(&hci->master.dev,
767 mipi_i3c_hci_resume(hci);
770 dev_warn_ratelimited(&hci->master.dev,
773 dev_err_ratelimited(&hci->master.dev,