| 465 | } |
| 466 | |
| 467 | int |
| 468 | ionic_port_init(struct ionic_adapter *adapter) |
| 469 | { |
| 470 | struct ionic_dev *idev = &adapter->idev; |
| 471 | struct ionic_identity *ident = &adapter->ident; |
| 472 | char z_name[RTE_MEMZONE_NAMESIZE]; |
| 473 | uint32_t config_words = RTE_DIM(ident->port.config.words); |
| 474 | uint32_t cmd_words = RTE_DIM(idev->dev_cmd->data); |
| 475 | uint32_t i, nwords; |
| 476 | int err; |
| 477 | |
| 478 | if (idev->port_info) |
| 479 | return 0; |
| 480 | |
| 481 | idev->port_info_sz = RTE_ALIGN(sizeof(*idev->port_info), |
| 482 | rte_mem_page_size()); |
| 483 | |
| 484 | snprintf(z_name, sizeof(z_name), "%s_port_%s_info", |
| 485 | IONIC_DRV_NAME, adapter->name); |
| 486 | |
| 487 | idev->port_info_z = ionic_memzone_reserve(z_name, idev->port_info_sz, |
| 488 | SOCKET_ID_ANY); |
| 489 | if (!idev->port_info_z) { |
| 490 | IONIC_PRINT(ERR, "Cannot reserve port info DMA memory"); |
| 491 | return -ENOMEM; |
| 492 | } |
| 493 | |
| 494 | idev->port_info = idev->port_info_z->addr; |
| 495 | idev->port_info_pa = idev->port_info_z->iova; |
| 496 | |
| 497 | nwords = RTE_MIN(config_words, cmd_words); |
| 498 | |
| 499 | for (i = 0; i < nwords; i++) |
| 500 | iowrite32(ident->port.config.words[i], &idev->dev_cmd->data[i]); |
| 501 | |
| 502 | idev->port_info->config.state = IONIC_PORT_ADMIN_STATE_UP; |
| 503 | ionic_dev_cmd_port_init(idev); |
| 504 | err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); |
| 505 | if (err) |
| 506 | IONIC_PRINT(ERR, "Failed to init port"); |
| 507 | |
| 508 | return err; |
| 509 | } |
| 510 | |
| 511 | int |
| 512 | ionic_port_reset(struct ionic_adapter *adapter) |
no test coverage detected