| // SPDX-License-Identifier: GPL-2.0 | |
| /* Copyright(c) 2023 Intel Corporation. All rights rsvd. */ | |
| #include <linux/kernel.h> | |
| #include "idxd.h" | |
| int idxd_load_iaa_device_defaults(struct idxd_device *idxd) | |
| { | |
| struct idxd_engine *engine; | |
| struct idxd_group *group; | |
| struct idxd_wq *wq; | |
| int i; | |
| if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags)) | |
| return 0; | |
| wq = idxd->wqs[0]; | |
| if (wq->state != IDXD_WQ_DISABLED) | |
| return -EPERM; | |
| /* set mode to "dedicated" */ | |
| set_bit(WQ_FLAG_DEDICATED, &wq->flags); | |
| wq->threshold = 0; | |
| /* only setting up 1 wq, so give it all the wq space */ | |
| wq->size = idxd->max_wq_size; | |
| /* set priority to 10 */ | |
| wq->priority = 10; | |
| /* set type to "kernel" */ | |
| wq->type = IDXD_WQT_KERNEL; | |
| /* set wq group to 0 */ | |
| group = idxd->groups[0]; | |
| wq->group = group; | |
| group->num_wqs++; | |
| /* set name to "iaa_crypto" */ | |
| strscpy_pad(wq->name, "iaa_crypto"); | |
| /* set driver_name to "crypto" */ | |
| strscpy_pad(wq->driver_name, "crypto"); | |
| /* assign all engines to group 0 */ | |
| for (i = 0; i < idxd->max_engines; i++) { | |
| engine = idxd->engines[i]; | |
| engine->group = group; | |
| group->num_engines++; | |
| } | |
| return 0; | |
| } |