MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ixgbe_crypto_enable_ipsec

Function ixgbe_crypto_enable_ipsec

dpdk/drivers/net/ixgbe/ixgbe_ipsec.c:607–664  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

605
606
607int
608ixgbe_crypto_enable_ipsec(struct rte_eth_dev *dev)
609{
610 struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
611 uint32_t reg;
612 uint64_t rx_offloads;
613 uint64_t tx_offloads;
614
615 rx_offloads = dev->data->dev_conf.rxmode.offloads;
616 tx_offloads = dev->data->dev_conf.txmode.offloads;
617
618 /* sanity checks */
619 if (rx_offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO) {
620 PMD_DRV_LOG(ERR, "RSC and IPsec not supported");
621 return -1;
622 }
623 if (rx_offloads & RTE_ETH_RX_OFFLOAD_KEEP_CRC) {
624 PMD_DRV_LOG(ERR, "HW CRC strip needs to be enabled for IPsec");
625 return -1;
626 }
627
628
629 /* Set IXGBE_SECTXBUFFAF to 0x15 as required in the datasheet*/
630 IXGBE_WRITE_REG(hw, IXGBE_SECTXBUFFAF, 0x15);
631
632 /* IFG needs to be set to 3 when we are using security. Otherwise a Tx
633 * hang will occur with heavy traffic.
634 */
635 reg = IXGBE_READ_REG(hw, IXGBE_SECTXMINIFG);
636 reg = (reg & 0xFFFFFFF0) | 0x3;
637 IXGBE_WRITE_REG(hw, IXGBE_SECTXMINIFG, reg);
638
639 reg = IXGBE_READ_REG(hw, IXGBE_HLREG0);
640 reg |= IXGBE_HLREG0_TXCRCEN | IXGBE_HLREG0_RXCRCSTRP;
641 IXGBE_WRITE_REG(hw, IXGBE_HLREG0, reg);
642
643 if (rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) {
644 IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, 0);
645 reg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
646 if (reg != 0) {
647 PMD_DRV_LOG(ERR, "Error enabling Rx Crypto");
648 return -1;
649 }
650 }
651 if (tx_offloads & RTE_ETH_TX_OFFLOAD_SECURITY) {
652 IXGBE_WRITE_REG(hw, IXGBE_SECTXCTRL,
653 IXGBE_SECTXCTRL_STORE_FORWARD);
654 reg = IXGBE_READ_REG(hw, IXGBE_SECTXCTRL);
655 if (reg != IXGBE_SECTXCTRL_STORE_FORWARD) {
656 PMD_DRV_LOG(ERR, "Error enabling Rx Crypto");
657 return -1;
658 }
659 }
660
661 ixgbe_crypto_clear_ipsec_tables(dev);
662
663 return 0;
664}

Callers 1

ixgbe_dev_rxtx_startFunction · 0.85

Calls 1

Tested by

no test coverage detected