lif 90 drivers/media/platform/vsp1/vsp1.h struct vsp1_lif *lif[VSP1_MAX_LIF]; lif 260 drivers/media/platform/vsp1/vsp1_drm.c __func__, pipe->lif->index, lif 293 drivers/media/platform/vsp1/vsp1_drm.c __func__, pipe->lif->index, BRX_NAME(brx)); lif 307 drivers/media/platform/vsp1/vsp1_drm.c owner_pipe->pipe.lif->index); lif 322 drivers/media/platform/vsp1/vsp1_drm.c __func__, pipe->lif->index, BRX_NAME(brx)); lif 510 drivers/media/platform/vsp1/vsp1_drm.c ret = v4l2_subdev_call(&pipe->lif->subdev, pad, set_fmt, NULL, lif 517 drivers/media/platform/vsp1/vsp1_drm.c format.format.code, pipe->lif->index); lif 527 drivers/media/platform/vsp1/vsp1_drm.c pipe->lif->index); lif 692 drivers/media/platform/vsp1/vsp1_drm.c __func__, pipe->lif->index, lif 959 drivers/media/platform/vsp1/vsp1_drm.c pipe->lif = &vsp1->lif[i]->entity; lif 962 drivers/media/platform/vsp1/vsp1_drm.c pipe->output->entity.sink = pipe->lif; lif 966 drivers/media/platform/vsp1/vsp1_drm.c pipe->lif->pipe = pipe; lif 967 drivers/media/platform/vsp1/vsp1_drm.c list_add_tail(&pipe->lif->list_pipe, &pipe->entities); lif 169 drivers/media/platform/vsp1/vsp1_drv.c if (!vsp1->lif[i]) lif 174 drivers/media/platform/vsp1/vsp1_drv.c &vsp1->lif[i]->entity.subdev.entity, lif 343 drivers/media/platform/vsp1/vsp1_drv.c struct vsp1_lif *lif; lif 345 drivers/media/platform/vsp1/vsp1_drv.c lif = vsp1_lif_create(vsp1, i); lif 346 drivers/media/platform/vsp1/vsp1_drv.c if (IS_ERR(lif)) { lif 347 drivers/media/platform/vsp1/vsp1_drv.c ret = PTR_ERR(lif); lif 351 drivers/media/platform/vsp1/vsp1_drv.c vsp1->lif[i] = lif; lif 352 drivers/media/platform/vsp1/vsp1_drv.c list_add_tail(&lif->entity.list_dev, &vsp1->entities); lif 26 drivers/media/platform/vsp1/vsp1_lif.c static inline void vsp1_lif_write(struct vsp1_lif *lif, lif 29 drivers/media/platform/vsp1/vsp1_lif.c vsp1_dl_body_write(dlb, reg + lif->entity.index * VI6_LIF_OFFSET, lif 91 drivers/media/platform/vsp1/vsp1_lif.c struct vsp1_lif *lif = to_lif(&entity->subdev); lif 96 drivers/media/platform/vsp1/vsp1_lif.c format = vsp1_entity_get_pad_format(&lif->entity, lif->entity.config, lif 122 drivers/media/platform/vsp1/vsp1_lif.c vsp1_lif_write(lif, dlb, VI6_LIF_CSBTH, lif 126 drivers/media/platform/vsp1/vsp1_lif.c vsp1_lif_write(lif, dlb, VI6_LIF_CTRL, lif 139 drivers/media/platform/vsp1/vsp1_lif.c vsp1_lif_write(lif, dlb, VI6_LIF_LBA, lif 154 drivers/media/platform/vsp1/vsp1_lif.c struct vsp1_lif *lif; lif 157 drivers/media/platform/vsp1/vsp1_lif.c lif = devm_kzalloc(vsp1->dev, sizeof(*lif), GFP_KERNEL); lif 158 drivers/media/platform/vsp1/vsp1_lif.c if (lif == NULL) lif 161 drivers/media/platform/vsp1/vsp1_lif.c lif->entity.ops = &lif_entity_ops; lif 162 drivers/media/platform/vsp1/vsp1_lif.c lif->entity.type = VSP1_ENTITY_LIF; lif 163 drivers/media/platform/vsp1/vsp1_lif.c lif->entity.index = index; lif 170 drivers/media/platform/vsp1/vsp1_lif.c ret = vsp1_entity_init(vsp1, &lif->entity, "lif", 2, &lif_ops, lif 175 drivers/media/platform/vsp1/vsp1_lif.c return lif; lif 271 drivers/media/platform/vsp1/vsp1_pipe.c pipe->lif = NULL; lif 319 drivers/media/platform/vsp1/vsp1_pipe.c if (pipe->lif) { lif 368 drivers/media/platform/vsp1/vsp1_pipe.c if (!pipe->lif) lif 133 drivers/media/platform/vsp1/vsp1_pipe.h struct vsp1_entity *lif; lif 601 drivers/media/platform/vsp1/vsp1_video.c pipe->lif = e; lif 279 drivers/media/platform/vsp1/vsp1_wpf.c if (!pipe->lif || wpf->writeback) { lif 436 drivers/media/platform/vsp1/vsp1_wpf.c if (pipe->lif && !wpf->writeback) lif 70 drivers/net/ethernet/cisco/enic/vnic_resource.h u16 lif; /* loopback lif for mgmt frames */ lif 60 drivers/net/ethernet/pensando/ionic/ionic.h int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); lif 185 drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c &ionic->ident.lif); lif 50 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c seq_printf(seq, "max_ucast_filters: %d\n", ident->lif.eth.max_ucast_filters); lif 51 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c seq_printf(seq, "max_mcast_filters: %d\n", ident->lif.eth.max_mcast_filters); lif 70 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u32 *)&ionic->ident.lif.eth.config.queue_count[IONIC_QTYPE_TXQ]); lif 72 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u32 *)&ionic->ident.lif.eth.config.queue_count[IONIC_QTYPE_RXQ]); lif 113 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c void ionic_debugfs_add_qcq(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 116 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c struct ionic_dev *idev = &lif->ionic->idev; lif 120 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c struct device *dev = lif->ionic->dev; lif 124 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c qcq->dentry = debugfs_create_dir(q->name, lif->dentry); lif 209 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u64 *)&lif->info->status.eid); lif 211 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u16 *)&lif->info->status.link_status); lif 213 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u32 *)&lif->info->status.link_speed); lif 215 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c (u16 *)&lif->info->status.link_down_count); lif 229 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c void ionic_debugfs_add_lif(struct ionic_lif *lif) lif 231 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c lif->dentry = debugfs_create_dir(lif->name, lif->ionic->dentry); lif 232 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c debugfs_create_file("netdev", 0400, lif->dentry, lif 233 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c lif->netdev, &netdev_fops); lif 236 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c void ionic_debugfs_del_lif(struct ionic_lif *lif) lif 238 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c debugfs_remove_recursive(lif->dentry); lif 239 drivers/net/ethernet/pensando/ionic/ionic_debugfs.c lif->dentry = NULL; lif 17 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h void ionic_debugfs_add_lif(struct ionic_lif *lif); lif 18 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h void ionic_debugfs_add_qcq(struct ionic_lif *lif, struct ionic_qcq *qcq); lif 19 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h void ionic_debugfs_del_lif(struct ionic_lif *lif); lif 28 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h static inline void ionic_debugfs_add_lif(struct ionic_lif *lif) { } lif 29 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h static inline void ionic_debugfs_add_qcq(struct ionic_lif *lif, struct ionic_qcq *qcq) { } lif 30 drivers/net/ethernet/pensando/ionic/ionic_debugfs.h static inline void ionic_debugfs_del_lif(struct ionic_lif *lif) { } lif 288 drivers/net/ethernet/pensando/ionic/ionic_dev.c int ionic_db_page_num(struct ionic_lif *lif, int pid) lif 290 drivers/net/ethernet/pensando/ionic/ionic_dev.c return (lif->hw_index * lif->dbid_count) + pid; lif 293 drivers/net/ethernet/pensando/ionic/ionic_dev.c int ionic_cq_init(struct ionic_lif *lif, struct ionic_cq *cq, lif 308 drivers/net/ethernet/pensando/ionic/ionic_dev.c cq->lif = lif; lif 373 drivers/net/ethernet/pensando/ionic/ionic_dev.c int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev, lif 389 drivers/net/ethernet/pensando/ionic/ionic_dev.c q->lif = lif; lif 399 drivers/net/ethernet/pensando/ionic/ionic_dev.c snprintf(q->name, sizeof(q->name), "L%d-%s%u", lif->index, name, index); lif 443 drivers/net/ethernet/pensando/ionic/ionic_dev.c struct device *dev = q->lif->ionic->dev; lif 444 drivers/net/ethernet/pensando/ionic/ionic_dev.c struct ionic_lif *lif = q->lif; lif 451 drivers/net/ethernet/pensando/ionic/ionic_dev.c q->lif->index, q->name, q->hw_type, q->hw_index, lif 455 drivers/net/ethernet/pensando/ionic/ionic_dev.c ionic_dbell_ring(lif->kern_dbpage, q->hw_type, lif 483 drivers/net/ethernet/pensando/ionic/ionic_dev.c dev_err(q->lif->ionic->dev, lif 171 drivers/net/ethernet/pensando/ionic/ionic_dev.h struct ionic_lif *lif; lif 207 drivers/net/ethernet/pensando/ionic/ionic_dev.h struct ionic_lif *lif; lif 274 drivers/net/ethernet/pensando/ionic/ionic_dev.h int ionic_db_page_num(struct ionic_lif *lif, int pid); lif 276 drivers/net/ethernet/pensando/ionic/ionic_dev.h int ionic_cq_init(struct ionic_lif *lif, struct ionic_cq *cq, lif 287 drivers/net/ethernet/pensando/ionic/ionic_dev.h int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev, lif 19 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c static void ionic_get_stats_strings(struct ionic_lif *lif, u8 *buf) lif 24 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ionic_stats_groups[i].get_strings(lif, &buf); lif 30 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif; lif 33 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif = netdev_priv(netdev); lif 37 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ionic_stats_groups[i].get_values(lif, &buf); lif 40 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c static int ionic_get_stats_count(struct ionic_lif *lif) lif 45 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c num_stats += ionic_stats_groups[i].get_count(lif); lif 52 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 57 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c count = ionic_get_stats_count(lif); lif 69 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 73 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ionic_get_stats_strings(lif, buf); lif 85 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 86 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic *ionic = lif->ionic; lif 104 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 110 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c memcpy_fromio(p, lif->ionic->idev.dev_info_regs->words, size); lif 113 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c memcpy_fromio(p, lif->ionic->idev.dev_cmd_regs->words, size); lif 119 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 120 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_dev *idev = &lif->ionic->idev; lif 204 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c dev_info(lif->ionic->dev, "unknown xcvr type pid=%d / 0x%x\n", lif 232 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ks->base.speed = le32_to_cpu(lif->info->status.link_speed); lif 234 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (le16_to_cpu(lif->info->status.link_status)) lif 254 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 255 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic *ionic = lif->ionic; lif 261 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c idev = &lif->ionic->idev; lif 313 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 318 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c pause_type = lif->ionic->idev.port_info->config.pause_type; lif 328 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 329 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic *ionic = lif->ionic; lif 343 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (requested_pause == lif->ionic->idev.port_info->config.pause_type) lif 347 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ionic_dev_cmd_port_pause(&lif->ionic->idev, requested_pause); lif 359 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 362 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c coalesce->tx_coalesce_usecs = lif->rx_coalesce_usecs; lif 363 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c coalesce->rx_coalesce_usecs = lif->rx_coalesce_usecs; lif 371 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 400 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ident = &lif->ionic->ident; lif 408 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (coalesce->tx_coalesce_usecs != lif->rx_coalesce_usecs) { lif 413 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c coal = ionic_coal_usec_to_hw(lif->ionic, coalesce->rx_coalesce_usecs); lif 423 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c usecs = ionic_coal_hw_to_usec(lif->ionic, coal); lif 425 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (usecs != lif->rx_coalesce_usecs) { lif 426 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->rx_coalesce_usecs = usecs; lif 428 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (test_bit(IONIC_LIF_UP, lif->state)) { lif 429 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c for (i = 0; i < lif->nxqs; i++) { lif 430 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c qcq = lif->rxqcqs[i].qcq; lif 431 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, lif 443 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 446 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ring->tx_pending = lif->ntxq_descs; lif 448 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ring->rx_pending = lif->nrxq_descs; lif 454 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 469 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (ring->tx_pending == lif->ntxq_descs && lif 470 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ring->rx_pending == lif->nrxq_descs) lif 473 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (!ionic_wait_for_bit(lif, IONIC_LIF_QUEUE_RESET)) lif 476 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c running = test_bit(IONIC_LIF_UP, lif->state); lif 480 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->ntxq_descs = ring->tx_pending; lif 481 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->nrxq_descs = ring->rx_pending; lif 485 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c clear_bit(IONIC_LIF_QUEUE_RESET, lif->state); lif 493 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 496 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ch->max_combined = lif->ionic->ntxqs_per_lif; lif 499 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c ch->combined_count = lif->nxqs; lif 505 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 512 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (ch->combined_count == lif->nxqs) lif 515 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (!ionic_wait_for_bit(lif, IONIC_LIF_QUEUE_RESET)) lif 518 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c running = test_bit(IONIC_LIF_UP, lif->state); lif 522 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->nxqs = ch->combined_count; lif 526 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c clear_bit(IONIC_LIF_QUEUE_RESET, lif->state); lif 533 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 536 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) lif 544 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 545 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c u32 flags = lif->flags; lif 547 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c clear_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state); lif 549 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c set_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state); lif 551 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c if (flags != lif->flags) lif 552 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->flags = flags; lif 560 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 565 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c info->data = lif->nxqs; lif 578 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 580 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c return le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 591 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 595 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 597 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c indir[i] = lif->rss_ind_tbl[i]; lif 601 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c memcpy(key, lif->rss_hash_key, IONIC_RSS_HASH_KEY_SIZE); lif 612 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 618 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c err = ionic_lif_rss_config(lif, lif->rss_types, key, indir); lif 629 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(dev); lif 633 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c lif->rx_copybreak = *(u32 *)data; lif 645 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 649 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c *(u32 *)data = lif->rx_copybreak; lif 662 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 663 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_dev *idev = &lif->ionic->idev; lif 692 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 693 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_dev *idev = &lif->ionic->idev; lif 723 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic_lif *lif = netdev_priv(netdev); lif 724 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c struct ionic *ionic = lif->ionic; lif 2475 drivers/net/ethernet/pensando/ionic/ionic_if.h union ionic_lif_identity lif; lif 20 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_rx_mode(struct ionic_lif *lif, unsigned int rx_mode); lif 21 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr); lif 22 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr); lif 23 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_link_status_check(struct ionic_lif *lif); lif 27 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = container_of(work, struct ionic_lif, deferred.work); lif 28 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_deferred *def = &lif->deferred; lif 42 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_rx_mode(lif, w->rx_mode); lif 45 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_addr_add(lif, w->addr); lif 48 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_addr_del(lif, w->addr); lif 51 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_status_check(lif); lif 70 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_link_status_check(struct ionic_lif *lif) lif 72 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct net_device *netdev = lif->netdev; lif 76 drivers/net/ethernet/pensando/ionic/ionic_lif.c link_status = le16_to_cpu(lif->info->status.link_status); lif 85 drivers/net/ethernet/pensando/ionic/ionic_lif.c le32_to_cpu(lif->info->status.link_speed) / 1000); lif 87 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (test_bit(IONIC_LIF_UP, lif->state)) { lif 88 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_tx_wake_all_queues(lif->netdev); lif 96 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (test_bit(IONIC_LIF_UP, lif->state)) lif 101 drivers/net/ethernet/pensando/ionic/ionic_lif.c clear_bit(IONIC_LIF_LINK_CHECK_REQUESTED, lif->state); lif 104 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_link_status_check_request(struct ionic_lif *lif) lif 109 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (test_and_set_bit(IONIC_LIF_LINK_CHECK_REQUESTED, lif->state)) lif 118 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_deferred_enqueue(&lif->deferred, work); lif 120 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_status_check(lif); lif 133 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_request_irq(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 136 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 140 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->registered) lif 141 drivers/net/ethernet/pensando/ionic/ionic_lif.c name = lif->netdev->name; lif 152 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_intr_alloc(struct ionic_lif *lif, struct ionic_intr_info *intr) lif 154 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic *ionic = lif->ionic; lif 159 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_warn(lif->netdev, "%s: no intr, index=%d nintrs=%d\n", lif 170 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_intr_free(struct ionic_lif *lif, int index) lif 172 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (index != INTR_INDEX_NOT_ASSIGNED && index < lif->ionic->nintrs) lif 173 drivers/net/ethernet/pensando/ionic/ionic_lif.c clear_bit(index, lif->ionic->intrs); lif 179 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = q->lif; lif 187 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 194 drivers/net/ethernet/pensando/ionic/ionic_lif.c idev = &lif->ionic->idev; lif 195 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev = lif->ionic->dev; lif 209 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_adminq_post_wait(lif, &ctx); lif 215 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = q->lif; lif 223 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 230 drivers/net/ethernet/pensando/ionic/ionic_lif.c idev = &lif->ionic->idev; lif 231 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev = lif->ionic->dev; lif 244 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_adminq_post_wait(lif, &ctx); lif 247 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_qcq_deinit(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 249 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_dev *idev = &lif->ionic->idev; lif 250 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 270 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_qcq_free(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 272 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 282 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_intr_free(lif, qcq->intr.index); lif 291 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_qcqs_free(struct ionic_lif *lif) lif 293 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 296 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->notifyqcq) { lif 297 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->notifyqcq); lif 298 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->notifyqcq = NULL; lif 301 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->adminqcq) { lif 302 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->adminqcq); lif 303 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->adminqcq = NULL; lif 306 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) lif 307 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->rxqcqs[i].stats) lif 308 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->rxqcqs[i].stats); lif 310 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->rxqcqs); lif 311 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs = NULL; lif 313 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) lif 314 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->txqcqs[i].stats) lif 315 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->txqcqs[i].stats); lif 317 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->txqcqs); lif 318 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs = NULL; lif 325 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_intr_free(n_qcq->cq.lif, n_qcq->intr.index); lif 333 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_qcq_alloc(struct ionic_lif *lif, unsigned int type, lif 341 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_dev *idev = &lif->ionic->idev; lif 343 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 370 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot allocate queue structure\n"); lif 380 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot allocate queue info\n"); lif 387 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_q_init(lif, idev, &new->q, index, name, num_descs, lif 390 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot initialize queue\n"); lif 395 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_intr_alloc(lif, &new->intr); lif 397 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_warn(lif->netdev, "no intr for %s: %d\n", lif 402 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_bus_get_irq(lif->ionic, new->intr.index); lif 404 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_warn(lif->netdev, "no vector for %s: %d\n", lif 423 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot allocate completion queue info\n"); lif 428 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_cq_init(lif, &new->cq, &new->intr, num_descs, cq_desc_size); lif 430 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot initialize completion queue\n"); lif 437 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "Cannot allocate queue DMA memory\n"); lif 466 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_intr_free(lif, new->intr.index); lif 472 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_qcqs_alloc(struct ionic_lif *lif) lif 474 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 481 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_alloc(lif, IONIC_QTYPE_ADMINQ, 0, "admin", flags, lif 485 drivers/net/ethernet/pensando/ionic/ionic_lif.c 0, lif->kern_pid, &lif->adminqcq); lif 489 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->ionic->nnqs_per_lif) { lif 491 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_alloc(lif, IONIC_QTYPE_NOTIFYQ, 0, "notifyq", lif 495 drivers/net/ethernet/pensando/ionic/ionic_lif.c 0, lif->kern_pid, &lif->notifyqcq); lif 500 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_qcq_interrupts(lif->adminqcq, lif->notifyqcq); lif 503 drivers/net/ethernet/pensando/ionic/ionic_lif.c q_list_size = sizeof(*lif->txqcqs) * lif->nxqs; lif 505 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs = devm_kzalloc(dev, q_list_size, GFP_KERNEL); lif 506 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->txqcqs) lif 508 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 509 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs[i].stats = devm_kzalloc(dev, lif 512 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->txqcqs[i].stats) lif 516 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs = devm_kzalloc(dev, q_list_size, GFP_KERNEL); lif 517 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->rxqcqs) lif 519 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 520 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs[i].stats = devm_kzalloc(dev, lif 523 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->rxqcqs[i].stats) lif 530 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) lif 531 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->rxqcqs[i].stats) lif 532 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->rxqcqs[i].stats); lif 533 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->rxqcqs); lif 534 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs = NULL; lif 536 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) lif 537 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->txqcqs[i].stats) lif 538 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->txqcqs[i].stats); lif 539 drivers/net/ethernet/pensando/ionic/ionic_lif.c devm_kfree(dev, lif->txqcqs); lif 540 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs = NULL; lif 542 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->notifyqcq) { lif 543 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->notifyqcq); lif 544 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->notifyqcq = NULL; lif 547 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->adminqcq); lif 548 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->adminqcq = NULL; lif 553 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 555 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 562 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 567 drivers/net/ethernet/pensando/ionic/ionic_lif.c .intr_index = cpu_to_le16(lif->rxqcqs[q->index].qcq->intr.index), lif 582 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 595 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_add_qcq(lif, qcq); lif 600 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq) lif 602 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 609 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 627 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 638 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_napi_add(lif->netdev, &qcq->napi, ionic_rx_napi, lif 641 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_request_irq(lif, qcq); lif 649 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_add_qcq(lif, qcq); lif 660 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 664 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = q->info[0].cb_arg; lif 665 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev = lif->netdev; lif 669 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (eid <= lif->last_eid) lif 672 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->last_eid = eid; lif 674 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev_dbg(lif->ionic->dev, "notifyq event:\n"); lif 680 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_status_check_request(lif); lif 698 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_notifyq_clean(struct ionic_lif *lif, int budget) lif 700 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_dev *idev = &lif->ionic->idev; lif 701 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_cq *cq = &lif->notifyqcq->cq; lif 728 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = napi_to_cq(napi)->lif; lif 732 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (likely(lif->notifyqcq && lif->notifyqcq->flags & IONIC_QCQ_F_INITED)) lif 733 drivers/net/ethernet/pensando/ionic/ionic_lif.c n_work = ionic_notifyq_clean(lif, budget); lif 742 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 746 drivers/net/ethernet/pensando/ionic/ionic_lif.c ls = &lif->info->stats; lif 792 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr) lif 798 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 806 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_lock_bh(&lif->rx_filters.lock); lif 807 drivers/net/ethernet/pensando/ionic/ionic_lif.c f = ionic_rx_filter_by_addr(lif, addr); lif 808 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_unlock_bh(&lif->rx_filters.lock); lif 812 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "rx_filter add ADDR %pM (id %d)\n", addr, lif 816 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 820 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, 0, &ctx); lif 823 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr) lif 829 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 835 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_lock_bh(&lif->rx_filters.lock); lif 836 drivers/net/ethernet/pensando/ionic/ionic_lif.c f = ionic_rx_filter_by_addr(lif, addr); lif 838 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_unlock_bh(&lif->rx_filters.lock); lif 843 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_filter_free(lif, f); lif 844 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_unlock_bh(&lif->rx_filters.lock); lif 846 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 850 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n", addr, lif 856 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_addr(struct ionic_lif *lif, const u8 *addr, bool add) lif 858 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic *ionic = lif->ionic; lif 868 drivers/net/ethernet/pensando/ionic/ionic_lif.c nmfilters = le32_to_cpu(ionic->ident.lif.eth.max_mcast_filters); lif 869 drivers/net/ethernet/pensando/ionic/ionic_lif.c nufilters = le32_to_cpu(ionic->ident.lif.eth.max_ucast_filters); lif 871 drivers/net/ethernet/pensando/ionic/ionic_lif.c if ((is_multicast_ether_addr(addr) && lif->nmcast < nmfilters)) lif 872 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nmcast++; lif 874 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nucast < nufilters) lif 875 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nucast++; lif 879 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (is_multicast_ether_addr(addr) && lif->nmcast) lif 880 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nmcast--; lif 881 drivers/net/ethernet/pensando/ionic/ionic_lif.c else if (!is_multicast_ether_addr(addr) && lif->nucast) lif 882 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nucast--; lif 888 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "%s OOM\n", __func__); lif 894 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "deferred: rx_filter %s %pM\n", lif 896 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_deferred_enqueue(&lif->deferred, work); lif 898 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "rx_filter %s %pM\n", lif 901 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_lif_addr_add(lif, addr); lif 903 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_lif_addr_del(lif, addr); lif 919 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_rx_mode(struct ionic_lif *lif, unsigned int rx_mode) lif 925 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 935 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rx_mode, rx_mode); lif 946 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "lif%d %s\n", lif->index, buf); lif 948 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 950 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_warn(lif->netdev, "set rx_mode 0x%04x failed: %d\n", lif 953 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rx_mode = rx_mode; lif 956 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void _ionic_lif_rx_mode(struct ionic_lif *lif, unsigned int rx_mode) lif 963 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "%s OOM\n", __func__); lif 968 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "deferred: rx_mode\n"); lif 969 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_deferred_enqueue(&lif->deferred, work); lif 971 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_rx_mode(lif, rx_mode); lif 977 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 982 drivers/net/ethernet/pensando/ionic/ionic_lif.c ident = &lif->ionic->ident; lif 998 drivers/net/ethernet/pensando/ionic/ionic_lif.c nfilters = le32_to_cpu(ident->lif.eth.max_ucast_filters); lif 1001 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->uc_overflow = true; lif 1002 drivers/net/ethernet/pensando/ionic/ionic_lif.c } else if (lif->uc_overflow) { lif 1003 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->uc_overflow = false; lif 1010 drivers/net/ethernet/pensando/ionic/ionic_lif.c nfilters = le32_to_cpu(ident->lif.eth.max_mcast_filters); lif 1013 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->mc_overflow = true; lif 1014 drivers/net/ethernet/pensando/ionic/ionic_lif.c } else if (lif->mc_overflow) { lif 1015 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->mc_overflow = false; lif 1020 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->rx_mode != rx_mode) lif 1021 drivers/net/ethernet/pensando/ionic/ionic_lif.c _ionic_lif_rx_mode(lif, rx_mode); lif 1064 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_set_nic_features(struct ionic_lif *lif, lif 1067 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 1072 drivers/net/ethernet/pensando/ionic/ionic_lif.c .index = cpu_to_le16(lif->index), lif 1082 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 1086 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->hw_features = le64_to_cpu(ctx.cmd.lif_setattr.features & lif 1091 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev_info_once(lif->ionic->dev, "NIC is not supporting vlan offload, likely in SmartNIC mode\n"); lif 1093 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_TX_TAG) lif 1095 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_STRIP) lif 1097 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_FILTER) lif 1099 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_RX_HASH) lif 1101 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TX_SG) lif 1103 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TX_CSUM) lif 1105 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_RX_CSUM) lif 1107 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO) lif 1109 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPV6) lif 1111 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_ECN) lif 1113 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_GRE) lif 1115 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_GRE_CSUM) lif 1117 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP4) lif 1119 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP6) lif 1121 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_UDP) lif 1123 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM) lif 1129 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_init_nic_features(struct ionic_lif *lif) lif 1131 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct net_device *netdev = lif->netdev; lif 1147 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_set_nic_features(lif, features); lif 1154 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_TX_TAG) lif 1156 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_STRIP) lif 1158 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_FILTER) lif 1160 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_RX_HASH) lif 1162 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TX_SG) lif 1165 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TX_CSUM) lif 1167 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_RX_CSUM) lif 1169 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO) lif 1171 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPV6) lif 1173 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_ECN) lif 1175 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_GRE) lif 1177 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_GRE_CSUM) lif 1179 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP4) lif 1181 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP6) lif 1183 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_UDP) lif 1185 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM) lif 1199 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1203 drivers/net/ethernet/pensando/ionic/ionic_lif.c __func__, (u64)lif->netdev->features, (u64)features); lif 1205 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_set_nic_features(lif, features); lif 1238 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1243 drivers/net/ethernet/pensando/ionic/ionic_lif.c .index = cpu_to_le16(lif->index), lif 1250 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 1255 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_reset_queues(lif); lif 1262 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = container_of(ws, struct ionic_lif, tx_timeout_work); lif 1264 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_info(lif->netdev, "Tx Timeout recovery\n"); lif 1267 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_reset_queues(lif); lif 1273 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1275 drivers/net/ethernet/pensando/ionic/ionic_lif.c schedule_work(&lif->tx_timeout_work); lif 1281 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1286 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 1293 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 1300 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, 0, &ctx); lif 1306 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1311 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 1316 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_lock_bh(&lif->rx_filters.lock); lif 1318 drivers/net/ethernet/pensando/ionic/ionic_lif.c f = ionic_rx_filter_by_vlan(lif, vid); lif 1320 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_unlock_bh(&lif->rx_filters.lock); lif 1328 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_filter_free(lif, f); lif 1329 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_unlock_bh(&lif->rx_filters.lock); lif 1331 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_adminq_post_wait(lif, &ctx); lif 1334 drivers/net/ethernet/pensando/ionic/ionic_lif.c int ionic_lif_rss_config(struct ionic_lif *lif, const u16 types, lif 1343 drivers/net/ethernet/pensando/ionic/ionic_lif.c .rss.addr = cpu_to_le64(lif->rss_ind_tbl_pa), lif 1348 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_types = types; lif 1351 drivers/net/ethernet/pensando/ionic/ionic_lif.c memcpy(lif->rss_hash_key, key, IONIC_RSS_HASH_KEY_SIZE); lif 1354 drivers/net/ethernet/pensando/ionic/ionic_lif.c tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 1356 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl[i] = indir[i]; lif 1359 drivers/net/ethernet/pensando/ionic/ionic_lif.c memcpy(ctx.cmd.lif_setattr.rss.key, lif->rss_hash_key, lif 1362 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_adminq_post_wait(lif, &ctx); lif 1365 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_rss_init(struct ionic_lif *lif) lif 1370 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_types = IONIC_RSS_TYPE_IPV4 | lif 1378 drivers/net/ethernet/pensando/ionic/ionic_lif.c tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 1380 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, lif->nxqs); lif 1382 drivers/net/ethernet/pensando/ionic/ionic_lif.c return ionic_lif_rss_config(lif, lif->rss_types, NULL, NULL); lif 1385 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_rss_deinit(struct ionic_lif *lif) lif 1389 drivers/net/ethernet/pensando/ionic/ionic_lif.c tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 1390 drivers/net/ethernet/pensando/ionic/ionic_lif.c memset(lif->rss_ind_tbl, 0, tbl_sz); lif 1391 drivers/net/ethernet/pensando/ionic/ionic_lif.c memset(lif->rss_hash_key, 0, IONIC_RSS_HASH_KEY_SIZE); lif 1393 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_rss_config(lif, 0x0, NULL, NULL); lif 1396 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_txrx_disable(struct ionic_lif *lif) lif 1400 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1401 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_disable(lif->txqcqs[i].qcq); lif 1402 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_disable(lif->rxqcqs[i].qcq); lif 1406 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_txrx_deinit(struct ionic_lif *lif) lif 1410 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1411 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->txqcqs[i].qcq); lif 1412 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_tx_flush(&lif->txqcqs[i].qcq->cq); lif 1414 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->rxqcqs[i].qcq); lif 1415 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_flush(&lif->rxqcqs[i].qcq->cq); lif 1416 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_empty(&lif->rxqcqs[i].qcq->q); lif 1420 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_txrx_free(struct ionic_lif *lif) lif 1424 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1425 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->txqcqs[i].qcq); lif 1426 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs[i].qcq = NULL; lif 1428 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_free(lif, lif->rxqcqs[i].qcq); lif 1429 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs[i].qcq = NULL; lif 1433 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_txrx_alloc(struct ionic_lif *lif) lif 1441 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1442 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, i, "tx", flags, lif 1443 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->ntxq_descs, lif 1447 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->kern_pid, &lif->txqcqs[i].qcq); lif 1451 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs[i].qcq->stats = lif->txqcqs[i].stats; lif 1455 drivers/net/ethernet/pensando/ionic/ionic_lif.c coal = ionic_coal_usec_to_hw(lif->ionic, lif->rx_coalesce_usecs); lif 1456 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1457 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_alloc(lif, IONIC_QTYPE_RXQ, i, "rx", flags, lif 1458 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nrxq_descs, lif 1461 drivers/net/ethernet/pensando/ionic/ionic_lif.c 0, lif->kern_pid, &lif->rxqcqs[i].qcq); lif 1465 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs[i].qcq->stats = lif->rxqcqs[i].stats; lif 1467 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, lif 1468 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rxqcqs[i].qcq->intr.index, coal); lif 1469 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_qcq_interrupts(lif->rxqcqs[i].qcq, lif 1470 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->txqcqs[i].qcq); lif 1476 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_free(lif); lif 1481 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_txrx_init(struct ionic_lif *lif) lif 1486 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1487 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_lif_txq_init(lif, lif->txqcqs[i].qcq); lif 1491 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_lif_rxq_init(lif, lif->rxqcqs[i].qcq); lif 1493 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->txqcqs[i].qcq); lif 1498 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->netdev->features & NETIF_F_RXHASH) lif 1499 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_rss_init(lif); lif 1501 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_set_rx_mode(lif->netdev); lif 1507 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->txqcqs[i].qcq); lif 1508 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->rxqcqs[i].qcq); lif 1514 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_txrx_enable(struct ionic_lif *lif) lif 1518 drivers/net/ethernet/pensando/ionic/ionic_lif.c for (i = 0; i < lif->nxqs; i++) { lif 1519 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_enable(lif->txqcqs[i].qcq); lif 1523 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_fill(&lif->rxqcqs[i].qcq->q); lif 1524 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcq_enable(lif->rxqcqs[i].qcq); lif 1526 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_disable(lif->txqcqs[i].qcq); lif 1535 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_disable(lif->rxqcqs[i].qcq); lif 1536 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcq_disable(lif->txqcqs[i].qcq); lif 1544 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1549 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_txrx_alloc(lif); lif 1553 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_txrx_init(lif); lif 1557 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_txrx_enable(lif); lif 1561 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_set_real_num_tx_queues(netdev, lif->nxqs); lif 1562 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_set_real_num_rx_queues(netdev, lif->nxqs); lif 1564 drivers/net/ethernet/pensando/ionic/ionic_lif.c set_bit(IONIC_LIF_UP, lif->state); lif 1566 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_link_status_check_request(lif); lif 1573 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_deinit(lif); lif 1575 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_free(lif); lif 1581 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = netdev_priv(netdev); lif 1584 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!test_bit(IONIC_LIF_UP, lif->state)) { lif 1585 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev_dbg(lif->ionic->dev, "%s: %s state=DOWN\n", lif 1586 drivers/net/ethernet/pensando/ionic/ionic_lif.c __func__, lif->name); lif 1589 drivers/net/ethernet/pensando/ionic/ionic_lif.c dev_dbg(lif->ionic->dev, "%s: %s state=UP\n", __func__, lif->name); lif 1590 drivers/net/ethernet/pensando/ionic/ionic_lif.c clear_bit(IONIC_LIF_UP, lif->state); lif 1597 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_disable(lif); lif 1598 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_deinit(lif); lif 1599 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_txrx_free(lif); lif 1619 drivers/net/ethernet/pensando/ionic/ionic_lif.c int ionic_reset_queues(struct ionic_lif *lif) lif 1625 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_trans_update(lif->netdev); lif 1627 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!ionic_wait_for_bit(lif, IONIC_LIF_QUEUE_RESET)) lif 1630 drivers/net/ethernet/pensando/ionic/ionic_lif.c running = netif_running(lif->netdev); lif 1632 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_stop(lif->netdev); lif 1634 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_open(lif->netdev); lif 1636 drivers/net/ethernet/pensando/ionic/ionic_lif.c clear_bit(IONIC_LIF_QUEUE_RESET, lif->state); lif 1645 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 1650 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev = alloc_etherdev_mqs(sizeof(*lif), lif 1659 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = netdev_priv(netdev); lif 1660 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->netdev = netdev; lif 1661 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic->master_lif = lif; lif 1669 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->neqs = ionic->neqs_per_lif; lif 1670 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nxqs = ionic->ntxqs_per_lif; lif 1672 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->ionic = ionic; lif 1673 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->index = index; lif 1674 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->ntxq_descs = IONIC_DEF_TXRX_DESC; lif 1675 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->nrxq_descs = IONIC_DEF_TXRX_DESC; lif 1678 drivers/net/ethernet/pensando/ionic/ionic_lif.c coal = ionic_coal_usec_to_hw(lif->ionic, IONIC_ITR_COAL_USEC_DEFAULT); lif 1679 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rx_coalesce_usecs = ionic_coal_hw_to_usec(lif->ionic, coal); lif 1681 drivers/net/ethernet/pensando/ionic/ionic_lif.c snprintf(lif->name, sizeof(lif->name), "lif%u", index); lif 1683 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_lock_init(&lif->adminq_lock); lif 1685 drivers/net/ethernet/pensando/ionic/ionic_lif.c spin_lock_init(&lif->deferred.lock); lif 1686 drivers/net/ethernet/pensando/ionic/ionic_lif.c INIT_LIST_HEAD(&lif->deferred.list); lif 1687 drivers/net/ethernet/pensando/ionic/ionic_lif.c INIT_WORK(&lif->deferred.work, ionic_lif_deferred_work); lif 1690 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info_sz = ALIGN(sizeof(*lif->info), PAGE_SIZE); lif 1691 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info = dma_alloc_coherent(dev, lif->info_sz, lif 1692 drivers/net/ethernet/pensando/ionic/ionic_lif.c &lif->info_pa, GFP_KERNEL); lif 1693 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->info) { lif 1700 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_qcqs_alloc(lif); lif 1705 drivers/net/ethernet/pensando/ionic/ionic_lif.c tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); lif 1706 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl_sz = sizeof(*lif->rss_ind_tbl) * tbl_sz; lif 1707 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl = dma_alloc_coherent(dev, lif->rss_ind_tbl_sz, lif 1708 drivers/net/ethernet/pensando/ionic/ionic_lif.c &lif->rss_ind_tbl_pa, lif 1711 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->rss_ind_tbl) { lif 1716 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_rss_key_fill(lif->rss_hash_key, IONIC_RSS_HASH_KEY_SIZE); lif 1718 drivers/net/ethernet/pensando/ionic/ionic_lif.c list_add_tail(&lif->list, &ionic->lifs); lif 1720 drivers/net/ethernet/pensando/ionic/ionic_lif.c return lif; lif 1723 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcqs_free(lif); lif 1725 drivers/net/ethernet/pensando/ionic/ionic_lif.c dma_free_coherent(dev, lif->info_sz, lif->info, lif->info_pa); lif 1726 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info = NULL; lif 1727 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info_pa = 0; lif 1729 drivers/net/ethernet/pensando/ionic/ionic_lif.c free_netdev(lif->netdev); lif 1730 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = NULL; lif 1737 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 1743 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = ionic_lif_alloc(ionic, 0); lif 1745 drivers/net/ethernet/pensando/ionic/ionic_lif.c return PTR_ERR_OR_ZERO(lif); lif 1748 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_reset(struct ionic_lif *lif) lif 1750 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_dev *idev = &lif->ionic->idev; lif 1752 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_lock(&lif->ionic->dev_cmd_lock); lif 1753 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_dev_cmd_lif_reset(idev, lif->index); lif 1754 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); lif 1755 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_unlock(&lif->ionic->dev_cmd_lock); lif 1758 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_free(struct ionic_lif *lif) lif 1760 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 1763 drivers/net/ethernet/pensando/ionic/ionic_lif.c dma_free_coherent(dev, lif->rss_ind_tbl_sz, lif->rss_ind_tbl, lif 1764 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl_pa); lif 1765 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl = NULL; lif 1766 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rss_ind_tbl_pa = 0; lif 1769 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_qcqs_free(lif); lif 1770 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_reset(lif); lif 1773 drivers/net/ethernet/pensando/ionic/ionic_lif.c dma_free_coherent(dev, lif->info_sz, lif->info, lif->info_pa); lif 1774 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info = NULL; lif 1775 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->info_pa = 0; lif 1778 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_bus_unmap_dbpage(lif->ionic, lif->kern_dbpage); lif 1779 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->kern_dbpage = NULL; lif 1780 drivers/net/ethernet/pensando/ionic/ionic_lif.c kfree(lif->dbid_inuse); lif 1781 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->dbid_inuse = NULL; lif 1784 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_del_lif(lif); lif 1785 drivers/net/ethernet/pensando/ionic/ionic_lif.c list_del(&lif->list); lif 1786 drivers/net/ethernet/pensando/ionic/ionic_lif.c free_netdev(lif->netdev); lif 1792 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 1795 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = list_entry(cur, struct ionic_lif, list); lif 1797 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_free(lif); lif 1801 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_deinit(struct ionic_lif *lif) lif 1803 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!test_bit(IONIC_LIF_INITED, lif->state)) lif 1806 drivers/net/ethernet/pensando/ionic/ionic_lif.c clear_bit(IONIC_LIF_INITED, lif->state); lif 1808 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_rx_filters_deinit(lif); lif 1809 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_rss_deinit(lif); lif 1811 drivers/net/ethernet/pensando/ionic/ionic_lif.c napi_disable(&lif->adminqcq->napi); lif 1812 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->notifyqcq); lif 1813 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->adminqcq); lif 1815 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_reset(lif); lif 1821 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 1824 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = list_entry(cur, struct ionic_lif, list); lif 1825 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_deinit(lif); lif 1829 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_adminq_init(struct ionic_lif *lif) lif 1831 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 1838 drivers/net/ethernet/pensando/ionic/ionic_lif.c idev = &lif->ionic->idev; lif 1839 drivers/net/ethernet/pensando/ionic/ionic_lif.c qcq = lif->adminqcq; lif 1842 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_lock(&lif->ionic->dev_cmd_lock); lif 1843 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_dev_cmd_adminq_init(idev, qcq, lif->index, qcq->intr.index); lif 1844 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); lif 1846 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_unlock(&lif->ionic->dev_cmd_lock); lif 1848 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_err(lif->netdev, "adminq init failed %d\n", err); lif 1859 drivers/net/ethernet/pensando/ionic/ionic_lif.c netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi, lif 1862 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_request_irq(lif, qcq); lif 1864 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_warn(lif->netdev, "adminq irq request failed %d\n", err); lif 1877 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_add_qcq(lif, qcq); lif 1882 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_notifyq_init(struct ionic_lif *lif) lif 1884 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_qcq *qcq = lif->notifyqcq; lif 1885 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 1893 drivers/net/ethernet/pensando/ionic/ionic_lif.c .lif_index = cpu_to_le16(lif->index), lif 1898 drivers/net/ethernet/pensando/ionic/ionic_lif.c .intr_index = cpu_to_le16(lif->adminqcq->intr.index), lif 1910 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 1922 drivers/net/ethernet/pensando/ionic/ionic_lif.c q->info[0].cb_arg = lif; lif 1926 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_add_qcq(lif, qcq); lif 1931 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_station_set(struct ionic_lif *lif) lif 1933 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct net_device *netdev = lif->netdev; lif 1938 drivers/net/ethernet/pensando/ionic/ionic_lif.c .index = cpu_to_le16(lif->index), lif 1945 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_adminq_post_wait(lif, &ctx); lif 1956 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "deleting station MAC addr %pM\n", lif 1958 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_addr(lif, netdev->dev_addr, false); lif 1962 drivers/net/ethernet/pensando/ionic/ionic_lif.c netdev_dbg(lif->netdev, "adding station MAC addr %pM\n", lif 1964 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_addr(lif, netdev->dev_addr, true); lif 1969 drivers/net/ethernet/pensando/ionic/ionic_lif.c static int ionic_lif_init(struct ionic_lif *lif) lif 1971 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_dev *idev = &lif->ionic->idev; lif 1972 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct device *dev = lif->ionic->dev; lif 1977 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_debugfs_add_lif(lif); lif 1979 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_lock(&lif->ionic->dev_cmd_lock); lif 1980 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_dev_cmd_lif_init(idev, lif->index, lif->info_pa); lif 1981 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); lif 1983 drivers/net/ethernet/pensando/ionic/ionic_lif.c mutex_unlock(&lif->ionic->dev_cmd_lock); lif 1987 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->hw_index = le16_to_cpu(comp.hw_index); lif 1990 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->dbid_count = le32_to_cpu(lif->ionic->ident.dev.ndbpgs_per_lif); lif 1991 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->dbid_count) { lif 1996 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->dbid_inuse = bitmap_alloc(lif->dbid_count, GFP_KERNEL); lif 1997 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->dbid_inuse) { lif 2003 drivers/net/ethernet/pensando/ionic/ionic_lif.c set_bit(0, lif->dbid_inuse); lif 2004 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->kern_pid = 0; lif 2006 drivers/net/ethernet/pensando/ionic/ionic_lif.c dbpage_num = ionic_db_page_num(lif, lif->kern_pid); lif 2007 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->kern_dbpage = ionic_bus_map_dbpage(lif->ionic, dbpage_num); lif 2008 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif->kern_dbpage) { lif 2014 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_lif_adminq_init(lif); lif 2018 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (lif->ionic->nnqs_per_lif) { lif 2019 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_lif_notifyq_init(lif); lif 2024 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_init_nic_features(lif); lif 2028 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_rx_filters_init(lif); lif 2032 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_station_set(lif); lif 2036 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->rx_copybreak = IONIC_RX_COPYBREAK_DEFAULT; lif 2038 drivers/net/ethernet/pensando/ionic/ionic_lif.c set_bit(IONIC_LIF_INITED, lif->state); lif 2040 drivers/net/ethernet/pensando/ionic/ionic_lif.c INIT_WORK(&lif->tx_timeout_work, ionic_tx_timeout_work); lif 2045 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->notifyqcq); lif 2047 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_qcq_deinit(lif, lif->adminqcq); lif 2048 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_reset(lif); lif 2049 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_bus_unmap_dbpage(lif->ionic, lif->kern_dbpage); lif 2050 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->kern_dbpage = NULL; lif 2052 drivers/net/ethernet/pensando/ionic/ionic_lif.c kfree(lif->dbid_inuse); lif 2053 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif->dbid_inuse = NULL; lif 2061 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif; lif 2065 drivers/net/ethernet/pensando/ionic/ionic_lif.c lif = list_entry(cur, struct ionic_lif, list); lif 2066 drivers/net/ethernet/pensando/ionic/ionic_lif.c err = ionic_lif_init(lif); lif 2078 drivers/net/ethernet/pensando/ionic/ionic_lif.c static void ionic_lif_set_netdev_info(struct ionic_lif *lif) lif 2084 drivers/net/ethernet/pensando/ionic/ionic_lif.c .index = cpu_to_le16(lif->index), lif 2089 drivers/net/ethernet/pensando/ionic/ionic_lif.c strlcpy(ctx.cmd.lif_setattr.name, lif->netdev->name, lif 2092 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_adminq_post_wait(lif, &ctx); lif 2108 drivers/net/ethernet/pensando/ionic/ionic_lif.c struct ionic_lif *lif = ionic_netdev_lif(ndev); lif 2110 drivers/net/ethernet/pensando/ionic/ionic_lif.c if (!lif || lif->ionic != ionic) lif 2115 drivers/net/ethernet/pensando/ionic/ionic_lif.c ionic_lif_set_netdev_info(lif); lif 2220 drivers/net/ethernet/pensando/ionic/ionic_lif.c lc = &ident->lif.eth.config; lif 2222 drivers/net/ethernet/pensando/ionic/ionic_lif.c neqs_per_lif = le32_to_cpu(ident->lif.rdma.eq_qtype.qid_count); lif 183 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_txqcq(lif, i) ((lif)->txqcqs[i].qcq) lif 184 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_rxqcq(lif, i) ((lif)->rxqcqs[i].qcq) lif 185 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_txstats(lif, i) ((lif)->txqcqs[i].stats->tx) lif 186 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_rxstats(lif, i) ((lif)->rxqcqs[i].stats->rx) lif 187 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_txq(lif, i) (&lif_to_txqcq((lif), i)->q) lif 188 drivers/net/ethernet/pensando/ionic/ionic_lif.h #define lif_to_rxq(lif, i) (&lif_to_txqcq((lif), i)->q) lif 190 drivers/net/ethernet/pensando/ionic/ionic_lif.h static inline int ionic_wait_for_bit(struct ionic_lif *lif, int bitname) lif 194 drivers/net/ethernet/pensando/ionic/ionic_lif.h while (test_and_set_bit(bitname, lif->state) && lif 198 drivers/net/ethernet/pensando/ionic/ionic_lif.h return test_bit(bitname, lif->state); lif 239 drivers/net/ethernet/pensando/ionic/ionic_lif.h int ionic_lif_rss_config(struct ionic_lif *lif, u16 types, lif 244 drivers/net/ethernet/pensando/ionic/ionic_lif.h int ionic_reset_queues(struct ionic_lif *lif); lif 173 drivers/net/ethernet/pensando/ionic/ionic_main.c static void ionic_adminq_flush(struct ionic_lif *lif) lif 175 drivers/net/ethernet/pensando/ionic/ionic_main.c struct ionic_queue *adminq = &lif->adminqcq->q; lif 177 drivers/net/ethernet/pensando/ionic/ionic_main.c spin_lock(&lif->adminq_lock); lif 185 drivers/net/ethernet/pensando/ionic/ionic_main.c spin_unlock(&lif->adminq_lock); lif 188 drivers/net/ethernet/pensando/ionic/ionic_main.c static int ionic_adminq_check_err(struct ionic_lif *lif, lif 192 drivers/net/ethernet/pensando/ionic/ionic_main.c struct net_device *netdev = lif->netdev; lif 208 drivers/net/ethernet/pensando/ionic/ionic_main.c ionic_adminq_flush(lif); lif 226 drivers/net/ethernet/pensando/ionic/ionic_main.c dev = &q->lif->netdev->dev; lif 237 drivers/net/ethernet/pensando/ionic/ionic_main.c static int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx) lif 239 drivers/net/ethernet/pensando/ionic/ionic_main.c struct ionic_queue *adminq = &lif->adminqcq->q; lif 244 drivers/net/ethernet/pensando/ionic/ionic_main.c spin_lock(&lif->adminq_lock); lif 252 drivers/net/ethernet/pensando/ionic/ionic_main.c dev_dbg(&lif->netdev->dev, "post admin queue command:\n"); lif 259 drivers/net/ethernet/pensando/ionic/ionic_main.c spin_unlock(&lif->adminq_lock); lif 264 drivers/net/ethernet/pensando/ionic/ionic_main.c int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx) lif 266 drivers/net/ethernet/pensando/ionic/ionic_main.c struct net_device *netdev = lif->netdev; lif 271 drivers/net/ethernet/pensando/ionic/ionic_main.c err = ionic_adminq_post(lif, ctx); lif 281 drivers/net/ethernet/pensando/ionic/ionic_main.c return ionic_adminq_check_err(lif, ctx, (remaining == 0)); lif 300 drivers/net/ethernet/pensando/ionic/ionic_main.c ionic_intr_credits(cq->lif->ionic->idev.intr_ctrl, lif 11 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f) lif 13 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c struct device *dev = lif->ionic->dev; lif 20 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c int ionic_rx_filter_del(struct ionic_lif *lif, struct ionic_rx_filter *f) lif 30 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c return ionic_adminq_post_wait(lif, &ctx); lif 33 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c int ionic_rx_filters_init(struct ionic_lif *lif) lif 37 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c spin_lock_init(&lif->rx_filters.lock); lif 40 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c INIT_HLIST_HEAD(&lif->rx_filters.by_hash[i]); lif 41 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c INIT_HLIST_HEAD(&lif->rx_filters.by_id[i]); lif 47 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c void ionic_rx_filters_deinit(struct ionic_lif *lif) lif 55 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c head = &lif->rx_filters.by_id[i]; lif 57 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c ionic_rx_filter_free(lif, f); lif 61 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index, lif 64 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c struct device *dev = lif->ionic->dev; lif 98 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c spin_lock_bh(&lif->rx_filters.lock); lif 101 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c head = &lif->rx_filters.by_hash[key]; lif 105 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c head = &lif->rx_filters.by_id[key]; lif 108 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c spin_unlock_bh(&lif->rx_filters.lock); lif 113 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif, u16 vid) lif 120 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c head = &lif->rx_filters.by_hash[key]; lif 132 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif, lif 140 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c head = &lif->rx_filters.by_hash[key]; lif 26 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f); lif 27 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h int ionic_rx_filter_del(struct ionic_lif *lif, struct ionic_rx_filter *f); lif 28 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h int ionic_rx_filters_init(struct ionic_lif *lif); lif 29 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h void ionic_rx_filters_deinit(struct ionic_lif *lif); lif 30 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index, lif 32 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif, u16 vid); lif 33 drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif, const u8 *addr); lif 71 drivers/net/ethernet/pensando/ionic/ionic_stats.c #define MAX_Q(lif) ((lif)->netdev->real_num_tx_queues) lif 73 drivers/net/ethernet/pensando/ionic/ionic_stats.c static void ionic_get_lif_stats(struct ionic_lif *lif, lif 84 drivers/net/ethernet/pensando/ionic/ionic_stats.c for (q_num = 0; q_num < MAX_Q(lif); q_num++) { lif 85 drivers/net/ethernet/pensando/ionic/ionic_stats.c txqcq = lif_to_txqcq(lif, q_num); lif 95 drivers/net/ethernet/pensando/ionic/ionic_stats.c rxqcq = lif_to_rxqcq(lif, q_num); lif 107 drivers/net/ethernet/pensando/ionic/ionic_stats.c static u64 ionic_sw_stats_get_count(struct ionic_lif *lif) lif 115 drivers/net/ethernet/pensando/ionic/ionic_stats.c total += MAX_Q(lif) * IONIC_NUM_TX_STATS; lif 118 drivers/net/ethernet/pensando/ionic/ionic_stats.c total += MAX_Q(lif) * IONIC_NUM_RX_STATS; lif 120 drivers/net/ethernet/pensando/ionic/ionic_stats.c if (test_bit(IONIC_LIF_UP, lif->state) && lif 121 drivers/net/ethernet/pensando/ionic/ionic_stats.c test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) { lif 123 drivers/net/ethernet/pensando/ionic/ionic_stats.c total += MAX_Q(lif) * (IONIC_NUM_DBG_CQ_STATS + lif 129 drivers/net/ethernet/pensando/ionic/ionic_stats.c total += MAX_Q(lif) * (IONIC_NUM_DBG_CQ_STATS + lif 138 drivers/net/ethernet/pensando/ionic/ionic_stats.c static void ionic_sw_stats_get_strings(struct ionic_lif *lif, u8 **buf) lif 146 drivers/net/ethernet/pensando/ionic/ionic_stats.c for (q_num = 0; q_num < MAX_Q(lif); q_num++) { lif 153 drivers/net/ethernet/pensando/ionic/ionic_stats.c if (test_bit(IONIC_LIF_UP, lif->state) && lif 154 drivers/net/ethernet/pensando/ionic/ionic_stats.c test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) { lif 184 drivers/net/ethernet/pensando/ionic/ionic_stats.c for (q_num = 0; q_num < MAX_Q(lif); q_num++) { lif 192 drivers/net/ethernet/pensando/ionic/ionic_stats.c if (test_bit(IONIC_LIF_UP, lif->state) && lif 193 drivers/net/ethernet/pensando/ionic/ionic_stats.c test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) { lif 225 drivers/net/ethernet/pensando/ionic/ionic_stats.c static void ionic_sw_stats_get_values(struct ionic_lif *lif, u64 **buf) lif 233 drivers/net/ethernet/pensando/ionic/ionic_stats.c ionic_get_lif_stats(lif, &lif_stats); lif 240 drivers/net/ethernet/pensando/ionic/ionic_stats.c for (q_num = 0; q_num < MAX_Q(lif); q_num++) { lif 241 drivers/net/ethernet/pensando/ionic/ionic_stats.c txstats = &lif_to_txstats(lif, q_num); lif 249 drivers/net/ethernet/pensando/ionic/ionic_stats.c if (test_bit(IONIC_LIF_UP, lif->state) && lif 250 drivers/net/ethernet/pensando/ionic/ionic_stats.c test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) { lif 251 drivers/net/ethernet/pensando/ionic/ionic_stats.c txqcq = lif_to_txqcq(lif, q_num); lif 274 drivers/net/ethernet/pensando/ionic/ionic_stats.c for (q_num = 0; q_num < MAX_Q(lif); q_num++) { lif 275 drivers/net/ethernet/pensando/ionic/ionic_stats.c rxstats = &lif_to_rxstats(lif, q_num); lif 283 drivers/net/ethernet/pensando/ionic/ionic_stats.c if (test_bit(IONIC_LIF_UP, lif->state) && lif 284 drivers/net/ethernet/pensando/ionic/ionic_stats.c test_bit(IONIC_LIF_SW_DEBUG_STATS, lif->state)) { lif 285 drivers/net/ethernet/pensando/ionic/ionic_stats.c rxqcq = lif_to_rxqcq(lif, q_num); lif 37 drivers/net/ethernet/pensando/ionic/ionic_stats.h void (*get_strings)(struct ionic_lif *lif, u8 **buf); lif 38 drivers/net/ethernet/pensando/ionic/ionic_stats.h void (*get_values)(struct ionic_lif *lif, u64 **buf); lif 39 drivers/net/ethernet/pensando/ionic/ionic_stats.h u64 (*get_count)(struct ionic_lif *lif); lif 34 drivers/net/ethernet/pensando/ionic/ionic_txrx.c return netdev_get_tx_queue(q->lif->netdev, q->index); lif 54 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct net_device *netdev = q->lif->netdev; lif 55 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 61 drivers/net/ethernet/pensando/ionic/ionic_txrx.c if (clen > q->lif->rx_copybreak) { lif 95 drivers/net/ethernet/pensando/ionic/ionic_txrx.c netdev = q->lif->netdev; lif 102 drivers/net/ethernet/pensando/ionic/ionic_txrx.c if (unlikely(test_bit(IONIC_LIF_QUEUE_RESET, q->lif->state))) { lif 206 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct ionic_dev *idev = &cq->lif->ionic->idev; lif 219 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct ionic_lif *lif = q->lif; lif 225 drivers/net/ethernet/pensando/ionic/ionic_txrx.c netdev = lif->netdev; lif 226 drivers/net/ethernet/pensando/ionic/ionic_txrx.c dev = lif->ionic->dev; lif 252 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct net_device *netdev = q->lif->netdev; lif 286 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 305 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct ionic_lif *lif; lif 310 drivers/net/ethernet/pensando/ionic/ionic_txrx.c lif = rxcq->bound_q->lif; lif 311 drivers/net/ethernet/pensando/ionic/ionic_txrx.c idev = &lif->ionic->idev; lif 312 drivers/net/ethernet/pensando/ionic/ionic_txrx.c txcq = &lif->txqcqs[qi].qcq->cq; lif 340 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 346 drivers/net/ethernet/pensando/ionic/ionic_txrx.c q->lif->netdev->name, q->name); lif 357 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 363 drivers/net/ethernet/pensando/ionic/ionic_txrx.c q->lif->netdev->name, q->name); lif 376 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 405 drivers/net/ethernet/pensando/ionic/ionic_txrx.c if (unlikely(__netif_subqueue_stopped(q->lif->netdev, lif 407 drivers/net/ethernet/pensando/ionic/ionic_txrx.c netif_wake_subqueue(q->lif->netdev, queue_index); lif 419 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct ionic_dev *idev = &cq->lif->ionic->idev; lif 549 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 718 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 755 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 789 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct device *dev = q->lif->ionic->dev; lif 865 drivers/net/ethernet/pensando/ionic/ionic_txrx.c netif_stop_subqueue(q->lif->netdev, q->index); lif 872 drivers/net/ethernet/pensando/ionic/ionic_txrx.c netif_wake_subqueue(q->lif->netdev, q->index); lif 883 drivers/net/ethernet/pensando/ionic/ionic_txrx.c struct ionic_lif *lif = netdev_priv(netdev); lif 888 drivers/net/ethernet/pensando/ionic/ionic_txrx.c if (unlikely(!test_bit(IONIC_LIF_UP, lif->state))) { lif 893 drivers/net/ethernet/pensando/ionic/ionic_txrx.c if (unlikely(!lif_to_txqcq(lif, queue_index))) lif 895 drivers/net/ethernet/pensando/ionic/ionic_txrx.c q = lif_to_txq(lif, queue_index);