| 292 | } |
| 293 | |
| 294 | static int |
| 295 | memif_msg_receive_add_ring(struct rte_eth_dev *dev, memif_msg_t *msg, int fd) |
| 296 | { |
| 297 | struct pmd_internals *pmd = dev->data->dev_private; |
| 298 | memif_msg_add_ring_t *ar = &msg->add_ring; |
| 299 | struct memif_queue *mq; |
| 300 | |
| 301 | if (fd < 0) { |
| 302 | memif_msg_enq_disconnect(pmd->cc, "Missing interrupt fd", 0); |
| 303 | return -1; |
| 304 | } |
| 305 | |
| 306 | /* check if we have enough queues */ |
| 307 | if (ar->flags & MEMIF_MSG_ADD_RING_FLAG_C2S) { |
| 308 | if (ar->index >= pmd->cfg.num_c2s_rings) { |
| 309 | memif_msg_enq_disconnect(pmd->cc, "Invalid ring index", 0); |
| 310 | return -1; |
| 311 | } |
| 312 | pmd->run.num_c2s_rings++; |
| 313 | } else { |
| 314 | if (ar->index >= pmd->cfg.num_s2c_rings) { |
| 315 | memif_msg_enq_disconnect(pmd->cc, "Invalid ring index", 0); |
| 316 | return -1; |
| 317 | } |
| 318 | pmd->run.num_s2c_rings++; |
| 319 | } |
| 320 | |
| 321 | mq = (ar->flags & MEMIF_MSG_ADD_RING_FLAG_C2S) ? |
| 322 | dev->data->rx_queues[ar->index] : dev->data->tx_queues[ar->index]; |
| 323 | |
| 324 | if (rte_intr_fd_set(mq->intr_handle, fd)) |
| 325 | return -1; |
| 326 | |
| 327 | mq->log2_ring_size = ar->log2_ring_size; |
| 328 | mq->region = ar->region; |
| 329 | mq->ring_offset = ar->offset; |
| 330 | |
| 331 | return 0; |
| 332 | } |
| 333 | |
| 334 | static int |
| 335 | memif_msg_receive_connect(struct rte_eth_dev *dev, memif_msg_t *msg) |
no test coverage detected