Lines Matching defs:idxd

9 #include <uapi/linux/idxd.h>
11 #include "idxd.h"
36 struct idxd_device *idxd = engine->idxd;
45 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
48 if (id > idxd->max_groups - 1 || id < -1)
63 engine->group = idxd->groups[id];
102 static void idxd_set_free_rdbufs(struct idxd_device *idxd)
106 for (i = 0, rdbufs = 0; i < idxd->max_groups; i++) {
107 struct idxd_group *g = idxd->groups[i];
112 idxd->nr_rdbufs = idxd->max_rdbufs - rdbufs;
137 struct idxd_device *idxd = group->idxd;
145 if (idxd->data->type == IDXD_TYPE_IAX)
148 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
151 if (idxd->state == IDXD_DEV_ENABLED)
154 if (val > idxd->max_rdbufs)
157 if (val > idxd->nr_rdbufs + group->rdbufs_reserved)
161 idxd_set_free_rdbufs(idxd);
203 struct idxd_device *idxd = group->idxd;
211 if (idxd->data->type == IDXD_TYPE_IAX)
214 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
217 if (idxd->state == IDXD_DEV_ENABLED)
221 val > group->rdbufs_reserved + idxd->nr_rdbufs)
266 struct idxd_device *idxd = group->idxd;
274 if (idxd->data->type == IDXD_TYPE_IAX)
277 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
280 if (idxd->state == IDXD_DEV_ENABLED)
283 if (idxd->rdbuf_limit == 0)
311 struct idxd_device *idxd = group->idxd;
313 for (i = 0; i < idxd->max_engines; i++) {
314 struct idxd_engine *engine = idxd->engines[i];
320 rc += sysfs_emit_at(buf, rc, "engine%d.%d ", idxd->id, engine->id);
339 struct idxd_device *idxd = group->idxd;
341 for (i = 0; i < idxd->max_wqs; i++) {
342 struct idxd_wq *wq = idxd->wqs[i];
348 rc += sysfs_emit_at(buf, rc, "wq%d.%d ", idxd->id, wq->id);
376 struct idxd_device *idxd = group->idxd;
384 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
387 if (idxd->state == IDXD_DEV_ENABLED)
390 if (idxd->hw.version <= DEVICE_VERSION_2 && !tc_override)
418 struct idxd_device *idxd = group->idxd;
426 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
429 if (idxd->state == IDXD_DEV_ENABLED)
432 if (idxd->hw.version <= DEVICE_VERSION_2 && !tc_override)
524 struct idxd_device *idxd)
528 !idxd->hw.group_cap.progress_limit;
532 struct idxd_device *idxd)
544 idxd->data->type == IDXD_TYPE_IAX;
552 struct idxd_device *idxd = group->idxd;
554 if (idxd_group_attr_progress_limit_invisible(attr, idxd))
557 if (idxd_group_attr_read_buffers_invisible(attr, idxd))
632 struct idxd_device *idxd = wq->idxd;
641 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
647 if (id > idxd->max_groups - 1 || id < -1)
658 group = idxd->groups[id];
684 struct idxd_device *idxd = wq->idxd;
686 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
715 static int total_claimed_wq_size(struct idxd_device *idxd)
720 for (i = 0; i < idxd->max_wqs; i++) {
721 struct idxd_wq *wq = idxd->wqs[i];
735 struct idxd_device *idxd = wq->idxd;
742 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
745 if (idxd->state == IDXD_DEV_ENABLED)
748 if (size + total_claimed_wq_size(idxd) - wq->size > idxd->max_wq_size)
772 struct idxd_device *idxd = wq->idxd;
779 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
808 struct idxd_device *idxd = wq->idxd;
812 if (!idxd->hw.gen_cap.block_on_fault)
815 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
854 struct idxd_device *idxd = wq->idxd;
865 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1011 struct idxd_device *idxd = wq->idxd;
1015 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1025 if (xfer_size > idxd->max_xfer_bytes)
1048 struct idxd_device *idxd = wq->idxd;
1052 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1062 if (batch_size > idxd->max_batch_size)
1065 idxd_wq_set_max_batch_size(idxd->data->type, wq, (u32)batch_size);
1084 struct idxd_device *idxd = wq->idxd;
1091 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1120 struct idxd_device *idxd = wq->idxd;
1127 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1150 struct idxd_device *idxd = wq->idxd;
1153 if (!idxd->hw.wq_cap.occupancy)
1156 offset = WQCFG_OFFSET(idxd, wq->id, WQCFG_OCCUP_IDX);
1157 occup = ioread32(idxd->reg_base + offset) & WQCFG_OCCUP_MASK;
1208 static int idxd_verify_supported_opcap(struct idxd_device *idxd, unsigned long *opmask)
1219 if (!test_bit(bit, idxd->opcap_bmap))
1230 struct idxd_device *idxd = wq->idxd;
1245 rc = idxd_verify_supported_opcap(idxd, opmask);
1285 #define idxd_wq_attr_invisible(name, cap_field, a, idxd) \
1286 ((a) == &dev_attr_wq_##name.attr && !(idxd)->hw.wq_cap.cap_field)
1289 struct idxd_device *idxd)
1293 idxd->data->type == IDXD_TYPE_IAX;
1301 struct idxd_device *idxd = wq->idxd;
1303 if (idxd_wq_attr_invisible(op_config, op_config, attr, idxd))
1306 if (idxd_wq_attr_max_batch_size_invisible(attr, idxd))
1309 if (idxd_wq_attr_invisible(prs_disable, wq_prs_support, attr, idxd))
1312 if (idxd_wq_attr_invisible(ats_disable, wq_ats_support, attr, idxd))
1348 struct idxd_device *idxd = confdev_to_idxd(dev);
1350 return sysfs_emit(buf, "%#x\n", idxd->hw.version);
1358 struct idxd_device *idxd = confdev_to_idxd(dev);
1360 return sysfs_emit(buf, "%u\n", idxd->max_wq_size);
1367 struct idxd_device *idxd = confdev_to_idxd(dev);
1369 return sysfs_emit(buf, "%u\n", idxd->max_groups);
1376 struct idxd_device *idxd = confdev_to_idxd(dev);
1378 return sysfs_emit(buf, "%u\n", idxd->max_wqs);
1385 struct idxd_device *idxd = confdev_to_idxd(dev);
1387 return sysfs_emit(buf, "%u\n", idxd->max_engines);
1394 struct idxd_device *idxd = confdev_to_idxd(dev);
1396 return sysfs_emit(buf, "%d\n", dev_to_node(&idxd->pdev->dev));
1403 struct idxd_device *idxd = confdev_to_idxd(dev);
1405 return sysfs_emit(buf, "%u\n", idxd->max_batch_size);
1413 struct idxd_device *idxd = confdev_to_idxd(dev);
1415 return sysfs_emit(buf, "%llu\n", idxd->max_xfer_bytes);
1422 struct idxd_device *idxd = confdev_to_idxd(dev);
1424 return sysfs_emit(buf, "%*pb\n", IDXD_MAX_OPCAP_BITS, idxd->opcap_bmap);
1431 struct idxd_device *idxd = confdev_to_idxd(dev);
1433 return sysfs_emit(buf, "%#llx\n", idxd->hw.gen_cap.bits);
1440 struct idxd_device *idxd = confdev_to_idxd(dev);
1442 return sysfs_emit(buf, "%u\n", test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags));
1449 struct idxd_device *idxd = confdev_to_idxd(dev);
1452 spin_lock(&idxd->dev_lock);
1453 for (i = 0; i < idxd->max_wqs; i++) {
1454 struct idxd_wq *wq = idxd->wqs[i];
1458 spin_unlock(&idxd->dev_lock);
1467 struct idxd_device *idxd = confdev_to_idxd(dev);
1469 return sysfs_emit(buf, "%u\n", device_user_pasid_enabled(idxd));
1476 struct idxd_device *idxd = confdev_to_idxd(dev);
1478 switch (idxd->state) {
1494 struct idxd_device *idxd = confdev_to_idxd(dev);
1498 spin_lock(&idxd->dev_lock);
1499 multi_u64_to_bmap(swerr_bmap, &idxd->sw_err.bits[0], 4);
1500 spin_unlock(&idxd->dev_lock);
1508 struct idxd_device *idxd = confdev_to_idxd(dev);
1510 return sysfs_emit(buf, "%u\n", idxd->max_rdbufs);
1526 struct idxd_device *idxd = confdev_to_idxd(dev);
1528 return sysfs_emit(buf, "%u\n", idxd->rdbuf_limit);
1542 struct idxd_device *idxd = confdev_to_idxd(dev);
1550 if (idxd->state == IDXD_DEV_ENABLED)
1553 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1556 if (!idxd->hw.group_cap.rdbuf_limit)
1559 if (val > idxd->hw.group_cap.total_rdbufs)
1562 idxd->rdbuf_limit = val;
1580 struct idxd_device *idxd = confdev_to_idxd(dev);
1582 return sysfs_emit(buf, "%u\n", idxd->major);
1589 struct idxd_device *idxd = confdev_to_idxd(dev);
1591 return sysfs_emit(buf, "%#x\n", idxd->cmd_status);
1597 struct idxd_device *idxd = confdev_to_idxd(dev);
1599 idxd->cmd_status = 0;
1607 struct idxd_device *idxd = confdev_to_idxd(dev);
1609 if (idxd->hw.version < DEVICE_VERSION_2)
1612 return sysfs_emit(buf, "%#llx\n", idxd->hw.iaa_cap.bits);
1619 struct idxd_device *idxd = confdev_to_idxd(dev);
1621 if (!idxd->evl)
1624 return sysfs_emit(buf, "%u\n", idxd->evl->size);
1631 struct idxd_device *idxd = confdev_to_idxd(dev);
1635 if (!idxd->evl)
1642 if (idxd->state == IDXD_DEV_ENABLED)
1645 if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
1649 (val * evl_ent_size(idxd) > ULONG_MAX - idxd->evl->dma))
1652 idxd->evl->size = val;
1658 struct idxd_device *idxd)
1662 idxd->data->type == IDXD_TYPE_IAX;
1666 struct idxd_device *idxd)
1676 idxd->data->type == IDXD_TYPE_IAX;
1680 struct idxd_device *idxd)
1683 (idxd->data->type != IDXD_TYPE_IAX ||
1684 idxd->hw.version < DEVICE_VERSION_2);
1688 struct idxd_device *idxd)
1691 !idxd->hw.gen_cap.evl_support);
1698 struct idxd_device *idxd = confdev_to_idxd(dev);
1700 if (idxd_device_attr_max_batch_size_invisible(attr, idxd))
1703 if (idxd_device_attr_read_buffers_invisible(attr, idxd))
1706 if (idxd_device_attr_iaa_cap_invisible(attr, idxd))
1709 if (idxd_device_attr_event_log_size_invisible(attr, idxd))
1754 struct idxd_device *idxd = confdev_to_idxd(dev);
1756 kfree(idxd->groups);
1757 bitmap_free(idxd->wq_enable_map);
1758 kfree(idxd->wqs);
1759 kfree(idxd->engines);
1760 kfree(idxd->evl);
1761 kmem_cache_destroy(idxd->evl_cache);
1762 ida_free(&idxd_ida, idxd->id);
1763 bitmap_free(idxd->opcap_bmap);
1764 kfree(idxd);
1779 static int idxd_register_engine_devices(struct idxd_device *idxd)
1784 for (i = 0; i < idxd->max_engines; i++) {
1785 engine = idxd->engines[i];
1795 for (; i < idxd->max_engines; i++) {
1796 engine = idxd->engines[i];
1801 engine = idxd->engines[j];
1807 static int idxd_register_group_devices(struct idxd_device *idxd)
1812 for (i = 0; i < idxd->max_groups; i++) {
1813 group = idxd->groups[i];
1823 for (; i < idxd->max_groups; i++) {
1824 group = idxd->groups[i];
1829 group = idxd->groups[j];
1835 static int idxd_register_wq_devices(struct idxd_device *idxd)
1840 for (i = 0; i < idxd->max_wqs; i++) {
1841 wq = idxd->wqs[i];
1851 for (; i < idxd->max_wqs; i++) {
1852 wq = idxd->wqs[i];
1857 wq = idxd->wqs[j];
1863 int idxd_register_devices(struct idxd_device *idxd)
1865 struct device *dev = &idxd->pdev->dev;
1868 rc = device_add(idxd_confdev(idxd));
1872 rc = idxd_register_wq_devices(idxd);
1878 rc = idxd_register_engine_devices(idxd);
1884 rc = idxd_register_group_devices(idxd);
1893 for (i = 0; i < idxd->max_engines; i++)
1894 device_unregister(engine_confdev(idxd->engines[i]));
1896 for (i = 0; i < idxd->max_wqs; i++)
1897 device_unregister(wq_confdev(idxd->wqs[i]));
1899 device_del(idxd_confdev(idxd));
1903 void idxd_unregister_devices(struct idxd_device *idxd)
1907 for (i = 0; i < idxd->max_wqs; i++) {
1908 struct idxd_wq *wq = idxd->wqs[i];
1913 for (i = 0; i < idxd->max_engines; i++) {
1914 struct idxd_engine *engine = idxd->engines[i];
1919 for (i = 0; i < idxd->max_groups; i++) {
1920 struct idxd_group *group = idxd->groups[i];