Lines Matching defs:its_dev

137 struct its_dev {
138 TAILQ_ENTRY(its_dev) entry;
159 struct its_dev *its_dev;
174 struct its_dev *its_dev;
181 struct its_dev *its_dev;
187 struct its_dev *its_dev;
192 struct its_dev *its_dev;
223 struct its_dev *gi_its_dev;
249 TAILQ_HEAD(its_dev_list, its_dev) sc_its_dev_list;
311 static void its_cmd_mapd(device_t, struct its_dev *, uint8_t);
312 static void its_cmd_inv(device_t, struct its_dev *, struct gicv3_its_irqsrc *);
939 static struct its_dev *
943 struct its_dev *its_dev = NULL;
948 TAILQ_FOREACH(its_dev, &sc->sc_its_dev_list, entry) {
949 if (its_dev->pci_dev == child)
954 return (its_dev);
957 static struct its_dev *
961 struct its_dev *its_dev;
967 its_dev = its_device_find(dev, child);
968 if (its_dev != NULL)
969 return (its_dev);
971 its_dev = malloc(sizeof(*its_dev), M_GICV3_ITS, M_NOWAIT | M_ZERO);
972 if (its_dev == NULL)
975 its_dev->pci_dev = child;
976 its_dev->devid = its_get_devid(child);
978 its_dev->lpis.lpi_busy = 0;
979 its_dev->lpis.lpi_num = nvecs;
980 its_dev->lpis.lpi_free = nvecs;
984 free(its_dev, M_GICV3_ITS);
987 its_dev->lpis.lpi_base = irq_base;
996 its_dev->itt_size = roundup2(MAX(nvecs, 2) * esize, 256);
997 its_dev->itt = (vm_offset_t)contigmalloc(its_dev->itt_size,
1000 if (its_dev->itt == 0) {
1001 vmem_free(sc->sc_irq_alloc, its_dev->lpis.lpi_base, nvecs);
1002 free(its_dev, M_GICV3_ITS);
1007 TAILQ_INSERT_TAIL(&sc->sc_its_dev_list, its_dev, entry);
1011 its_cmd_mapd(dev, its_dev, 1);
1013 return (its_dev);
1017 its_device_release(device_t dev, struct its_dev *its_dev)
1021 KASSERT(its_dev->lpis.lpi_busy == 0,
1025 its_cmd_mapd(dev, its_dev, 0);
1031 TAILQ_REMOVE(&sc->sc_its_dev_list, its_dev, entry);
1035 KASSERT(its_dev->itt != 0, ("Invalid ITT in valid ITS device"));
1036 contigfree((void *)its_dev->itt, its_dev->itt_size, M_GICV3_ITS);
1039 vmem_free(sc->sc_irq_alloc, its_dev->lpis.lpi_base,
1040 its_dev->lpis.lpi_num);
1042 free(its_dev, M_GICV3_ITS);
1051 struct its_dev *its_dev;
1055 its_dev = its_device_get(dev, child, count);
1056 if (its_dev == NULL)
1059 KASSERT(its_dev->lpis.lpi_free >= count,
1062 irq = its_dev->lpis.lpi_base + its_dev->lpis.lpi_num -
1063 its_dev->lpis.lpi_free;
1065 its_dev->lpis.lpi_free--;
1067 girq->gi_its_dev = its_dev;
1070 its_dev->lpis.lpi_busy += count;
1082 struct its_dev *its_dev;
1086 its_dev = its_device_find(dev, child);
1088 KASSERT(its_dev != NULL,
1091 KASSERT(its_dev->lpis.lpi_busy >= count,
1094 its_dev->lpis.lpi_busy));
1099 its_dev->lpis.lpi_busy -= count;
1101 if (its_dev->lpis.lpi_busy == 0)
1102 its_device_release(dev, its_dev);
1113 struct its_dev *its_dev;
1117 its_dev = its_device_get(dev, child, nvecs);
1118 if (its_dev == NULL)
1121 KASSERT(its_dev->lpis.lpi_free > 0,
1124 irq = its_dev->lpis.lpi_base + its_dev->lpis.lpi_num -
1125 its_dev->lpis.lpi_free;
1126 its_dev->lpis.lpi_free--;
1127 its_dev->lpis.lpi_busy++;
1129 girq->gi_its_dev = its_dev;
1142 struct its_dev *its_dev;
1145 its_dev = its_device_find(dev, child);
1147 KASSERT(its_dev != NULL,
1150 KASSERT(its_dev->lpis.lpi_busy > 0,
1152 "were allocated: allocated %d", its_dev->lpis.lpi_busy));
1155 its_dev->lpis.lpi_busy--;
1157 if (its_dev->lpis.lpi_busy == 0)
1158 its_device_release(dev, its_dev);
1392 cmd_format_devid(cmd, desc->cmd_desc_movi.its_dev->devid);
1401 cmd_format_itt(cmd, vtophys(desc->cmd_desc_mapd.its_dev->itt));
1409 size = fls(desc->cmd_desc_mapd.its_dev->lpis.lpi_num);
1415 cmd_format_devid(cmd, desc->cmd_desc_mapd.its_dev->devid);
1428 cmd_format_devid(cmd, desc->cmd_desc_mapvi.its_dev->devid);
1436 cmd_format_devid(cmd, desc->cmd_desc_mapi.its_dev->devid);
1443 cmd_format_devid(cmd, desc->cmd_desc_inv.its_dev->devid);
1512 desc.cmd_desc_movi.its_dev = girq->gi_its_dev;
1549 desc.cmd_desc_mapvi.its_dev = girq->gi_its_dev;
1560 its_cmd_mapd(device_t dev, struct its_dev *its_dev, uint8_t valid)
1565 desc.cmd_desc_mapd.its_dev = its_dev;
1572 its_cmd_inv(device_t dev, struct its_dev *its_dev,
1584 desc.cmd_desc_inv.pid = girq->gi_irq - its_dev->lpis.lpi_base;
1585 desc.cmd_desc_inv.its_dev = its_dev;