static void lio_cn68xx_setup_pkt_ctl_regs(struct octeon_device *oct) { struct octeon_cn6xxx *cn68xx = (struct octeon_cn6xxx *)oct->chip; u64 pktctl, tx_pipe, max_oqs; pktctl = octeon_read_csr64(oct, CN6XXX_SLI_PKT_CTL); /* 68XX specific */ max_oqs = CFG_GET_OQ_MAX_Q(CHIP_FIELD(oct, cn6xxx, conf)); tx_pipe = octeon_read_csr64(oct, CN68XX_SLI_TX_PIPE); tx_pipe &= 0xffffffffff00ffffULL; /* clear out NUMP field */ tx_pipe |= max_oqs << 16; /* put max_oqs in NUMP field */ octeon_write_csr64(oct, CN68XX_SLI_TX_PIPE, tx_pipe); if (CFG_GET_IS_SLI_BP_ON(cn68xx->conf)) pktctl |= 0xF; else /* Disable per-port backpressure. */ pktctl &= ~0xF; octeon_write_csr64(oct, CN6XXX_SLI_PKT_CTL, pktctl); }
static void lio_ethtool_get_channels(struct net_device *dev, struct ethtool_channels *channel) { struct lio *lio = GET_LIO(dev); struct octeon_device *oct = lio->oct_dev; u32 max_rx = 0, max_tx = 0, tx_count = 0, rx_count = 0; if (OCTEON_CN6XXX(oct)) { struct octeon_config *conf6x = CHIP_FIELD(oct, cn6xxx, conf); max_rx = CFG_GET_OQ_MAX_Q(conf6x); max_tx = CFG_GET_IQ_MAX_Q(conf6x); rx_count = CFG_GET_NUM_RXQS_NIC_IF(conf6x, lio->ifidx); tx_count = CFG_GET_NUM_TXQS_NIC_IF(conf6x, lio->ifidx); } channel->max_rx = max_rx; channel->max_tx = max_tx; channel->rx_count = rx_count; channel->tx_count = tx_count; }