| 1051 | } |
| 1052 | |
| 1053 | struct rte_cryptodev * |
| 1054 | rte_cryptodev_pmd_allocate(const char *name, int socket_id) |
| 1055 | { |
| 1056 | struct rte_cryptodev *cryptodev; |
| 1057 | uint8_t dev_id; |
| 1058 | |
| 1059 | if (rte_cryptodev_pmd_get_named_dev(name) != NULL) { |
| 1060 | CDEV_LOG_ERR("Crypto device with name %s already " |
| 1061 | "allocated!", name); |
| 1062 | return NULL; |
| 1063 | } |
| 1064 | |
| 1065 | dev_id = rte_cryptodev_find_free_device_index(); |
| 1066 | if (dev_id == RTE_CRYPTO_MAX_DEVS) { |
| 1067 | CDEV_LOG_ERR("Reached maximum number of crypto devices"); |
| 1068 | return NULL; |
| 1069 | } |
| 1070 | |
| 1071 | cryptodev = rte_cryptodev_pmd_get_dev(dev_id); |
| 1072 | |
| 1073 | if (cryptodev->data == NULL) { |
| 1074 | struct rte_cryptodev_data **cryptodev_data = |
| 1075 | &cryptodev_globals.data[dev_id]; |
| 1076 | |
| 1077 | int retval = rte_cryptodev_data_alloc(dev_id, cryptodev_data, |
| 1078 | socket_id); |
| 1079 | |
| 1080 | if (retval < 0 || *cryptodev_data == NULL) |
| 1081 | return NULL; |
| 1082 | |
| 1083 | cryptodev->data = *cryptodev_data; |
| 1084 | |
| 1085 | if (rte_eal_process_type() == RTE_PROC_PRIMARY) { |
| 1086 | strlcpy(cryptodev->data->name, name, |
| 1087 | RTE_CRYPTODEV_NAME_MAX_LEN); |
| 1088 | |
| 1089 | cryptodev->data->dev_id = dev_id; |
| 1090 | cryptodev->data->socket_id = socket_id; |
| 1091 | cryptodev->data->dev_started = 0; |
| 1092 | CDEV_LOG_DEBUG("PRIMARY:init data"); |
| 1093 | } |
| 1094 | |
| 1095 | CDEV_LOG_DEBUG("Data for %s: dev_id %d, socket %d, started %d", |
| 1096 | cryptodev->data->name, |
| 1097 | cryptodev->data->dev_id, |
| 1098 | cryptodev->data->socket_id, |
| 1099 | cryptodev->data->dev_started); |
| 1100 | |
| 1101 | /* init user callbacks */ |
| 1102 | TAILQ_INIT(&(cryptodev->link_intr_cbs)); |
| 1103 | |
| 1104 | cryptodev->attached = RTE_CRYPTODEV_ATTACHED; |
| 1105 | |
| 1106 | cryptodev_globals.nb_devs++; |
| 1107 | } |
| 1108 | |
| 1109 | return cryptodev; |
| 1110 | } |
no test coverage detected