MCPcopy Create free account
hub / github.com/F-Stack/f-stack / gicv3_its_alloc_msix

Function gicv3_its_alloc_msix

freebsd/arm64/arm64/gicv3_its.c:1364–1401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1362}
1363
1364static int
1365gicv3_its_alloc_msix(device_t dev, device_t child, device_t *pic,
1366 struct intr_irqsrc **isrcp)
1367{
1368 struct gicv3_its_softc *sc;
1369 struct gicv3_its_irqsrc *girq;
1370 struct its_dev *its_dev;
1371 u_int nvecs, irq;
1372
1373 nvecs = pci_msix_count(child);
1374 its_dev = its_device_get(dev, child, nvecs);
1375 if (its_dev == NULL)
1376 return (ENXIO);
1377
1378 KASSERT(its_dev->lpis.lpi_free > 0,
1379 ("gicv3_its_alloc_msix: No free LPIs"));
1380 sc = device_get_softc(dev);
1381 irq = its_dev->lpis.lpi_base + its_dev->lpis.lpi_num -
1382 its_dev->lpis.lpi_free;
1383
1384 girq = gicv3_its_alloc_irqsrc(dev, sc, irq);
1385 if (girq == NULL)
1386 return (ENXIO);
1387 girq->gi_id = its_dev->lpis.lpi_busy;
1388 girq->gi_its_dev = its_dev;
1389
1390 its_dev->lpis.lpi_free--;
1391 its_dev->lpis.lpi_busy++;
1392
1393 /* Map the message to the given IRQ */
1394 gicv3_its_select_cpu(dev, (struct intr_irqsrc *)girq);
1395 its_cmd_mapti(dev, girq);
1396
1397 *pic = dev;
1398 *isrcp = (struct intr_irqsrc *)girq;
1399
1400 return (0);
1401}
1402
1403static int
1404gicv3_its_release_msix(device_t dev, device_t child, struct intr_irqsrc *isrc)

Callers

nothing calls this directly

Calls 5

its_device_getFunction · 0.85
device_get_softcFunction · 0.85
gicv3_its_alloc_irqsrcFunction · 0.85
gicv3_its_select_cpuFunction · 0.85
its_cmd_maptiFunction · 0.85

Tested by

no test coverage detected