Lines Matching refs:its_dev
106 u64 (*get_msi_base)(struct its_device *its_dev);
226 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
227 return d->hwirq - its_dev->event_map.lpi_base;
230 static struct its_collection *dev_event_to_col(struct its_device *its_dev,
233 struct its_node *its = its_dev->its;
235 return its->collections + its_dev->event_map.col_map[event];
238 static struct its_vlpi_map *dev_event_to_vlpi_map(struct its_device *its_dev,
241 if (WARN_ON_ONCE(event >= its_dev->event_map.nr_lpis))
244 return &its_dev->event_map.vlpi_maps[event];
250 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
253 return dev_event_to_vlpi_map(its_dev, event);
289 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
290 cpu = its_dev->event_map.col_map[its_get_event_id(d)];
1467 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1469 WARN_ON(!is_v4_1(its_dev->its));
1483 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1487 (is_v4_1(its_dev->its) || !irqd_is_forwarded_to_vcpu(d)))
1490 its_send_inv(its_dev, its_get_event_id(d));
1492 its_send_vinv(its_dev, its_get_event_id(d));
1497 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1505 if (is_v4_1(its_dev->its))
1508 map = dev_event_to_vlpi_map(its_dev, event);
1525 its_send_vmovi(its_dev, event);
1592 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1599 node = its_dev->its->numa_node;
1628 if ((its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144))
1646 if ((its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) &&
1662 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1671 prev_cpu = its_dev->event_map.col_map[id];
1684 target_col = &its_dev->its->collections[cpu];
1685 its_send_movi(its_dev, target_col, id);
1686 its_dev->event_map.col_map[id] = cpu;
1699 static u64 its_irq_get_msi_base(struct its_device *its_dev)
1701 struct its_node *its = its_dev->its;
1708 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1712 its = its_dev->its;
1713 addr = its->get_msi_base(its_dev);
1726 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1734 its_send_vint(its_dev, event);
1736 its_send_vclear(its_dev, event);
1739 its_send_int(its_dev, event);
1741 its_send_clear(its_dev, event);
1827 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1834 raw_spin_lock(&its_dev->event_map.vlpi_lock);
1836 if (!its_dev->event_map.vm) {
1839 maps = kcalloc(its_dev->event_map.nr_lpis, sizeof(*maps),
1846 its_dev->event_map.vm = info->map->vm;
1847 its_dev->event_map.vlpi_maps = maps;
1848 } else if (its_dev->event_map.vm != info->map->vm) {
1854 its_dev->event_map.vlpi_maps[event] = *info->map;
1858 its_send_vmovi(its_dev, event);
1861 its_map_vm(its_dev->its, info->map->vm);
1873 its_send_discard(its_dev, event);
1876 its_send_vmapti(its_dev, event);
1879 its_dev->event_map.nr_vlpis++;
1883 raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1889 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1893 raw_spin_lock(&its_dev->event_map.vlpi_lock);
1897 if (!its_dev->event_map.vm || !map) {
1906 raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1912 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1916 raw_spin_lock(&its_dev->event_map.vlpi_lock);
1918 if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d)) {
1924 its_send_discard(its_dev, event);
1928 its_send_mapti(its_dev, d->hwirq, event);
1934 its_unmap_vm(its_dev->its, its_dev->event_map.vm);
1940 if (!--its_dev->event_map.nr_vlpis) {
1941 its_dev->event_map.vm = NULL;
1942 kfree(its_dev->event_map.vlpi_maps);
1946 raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1952 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1954 if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
1968 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1972 if (!is_v4(its_dev->its))
3241 struct its_device *its_dev = NULL, *tmp;
3248 its_dev = tmp;
3255 return its_dev;
3438 static void its_free_device(struct its_device *its_dev)
3442 raw_spin_lock_irqsave(&its_dev->its->lock, flags);
3443 list_del(&its_dev->entry);
3444 raw_spin_unlock_irqrestore(&its_dev->its->lock, flags);
3445 kfree(its_dev->event_map.col_map);
3446 kfree(its_dev->itt);
3447 kfree(its_dev);
3470 struct its_device *its_dev;
3497 its_dev = its_find_device(its, dev_id);
3498 if (its_dev) {
3504 its_dev->shared = true;
3509 its_dev = its_create_device(its, dev_id, nvec, true);
3510 if (!its_dev) {
3518 info->scratchpad[0].ptr = its_dev;
3554 struct its_device *its_dev = info->scratchpad[0].ptr;
3555 struct its_node *its = its_dev->its;
3561 err = its_alloc_device_irq(its_dev, nr_irqs, &hwirq);
3565 err = iommu_dma_prepare_msi(info->desc, its->get_msi_base(its_dev));
3575 hwirq + i, &its_irq_chip, its_dev);
3580 (int)(hwirq + i - its_dev->event_map.lpi_base),
3590 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3599 its_dev->event_map.col_map[event] = cpu;
3603 its_send_mapti(its_dev, d->hwirq, event);
3610 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3613 its_dec_lpi_count(d, its_dev->event_map.col_map[event]);
3615 its_send_discard(its_dev, event);
3622 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3623 struct its_node *its = its_dev->its;
3626 bitmap_release_region(its_dev->event_map.lpi_map,
3643 if (!its_dev->shared &&
3644 bitmap_empty(its_dev->event_map.lpi_map,
3645 its_dev->event_map.nr_lpis)) {
3646 its_lpi_free(its_dev->event_map.lpi_map,
3647 its_dev->event_map.lpi_base,
3648 its_dev->event_map.nr_lpis);
3651 its_send_mapd(its_dev, 0);
3652 its_free_device(its_dev);
4640 static u64 its_irq_get_msi_base_pre_its(struct its_device *its_dev)
4642 struct its_node *its = its_dev->its;
4651 return its->pre_its_base + (its_dev->device_id << 2);