X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fatlantic%2Fatl_ethdev.c;h=fdc0a7f2db96311423a7c6ad42fb1451754232a1;hb=45bba02c95b0bae9097b793f2a5794c738b1ea84;hp=1fd4d1ec306ad691a10400b6bccda119ce95f9f7;hpb=05d5b1d6314caf851dee2a44f6a360e47f7d7a5b;p=dpdk.git diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 1fd4d1ec30..fdc0a7f2db 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -93,14 +93,14 @@ static void atl_dev_interrupt_handler(void *param); static int atl_add_mac_addr(struct rte_eth_dev *dev, - struct ether_addr *mac_addr, + struct rte_ether_addr *mac_addr, uint32_t index, uint32_t pool); static void atl_remove_mac_addr(struct rte_eth_dev *dev, uint32_t index); static int atl_set_default_mac_addr(struct rte_eth_dev *dev, - struct ether_addr *mac_addr); + struct rte_ether_addr *mac_addr); static int atl_dev_set_mc_addr_list(struct rte_eth_dev *dev, - struct ether_addr *mc_addr_set, + struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr); /* RSS */ @@ -179,6 +179,8 @@ static struct rte_pci_driver rte_atl_pmd = { | DEV_TX_OFFLOAD_MACSEC_INSERT \ | DEV_TX_OFFLOAD_MULTI_SEGS) +#define SFP_EEPROM_SIZE 0x100 + static const struct rte_eth_desc_lim rx_desc_lim = { .nb_max = ATL_MAX_RING_DESC, .nb_min = ATL_MIN_RING_DESC, @@ -369,8 +371,7 @@ atl_disable_intr(struct aq_hw_s *hw) static int eth_atl_dev_init(struct rte_eth_dev *eth_dev) { - struct atl_adapter *adapter = - (struct atl_adapter *)eth_dev->data->dev_private; + struct atl_adapter *adapter = eth_dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); @@ -414,7 +415,8 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) atl_disable_intr(hw); /* Allocate memory for storing MAC addresses */ - eth_dev->data->mac_addrs = rte_zmalloc("atlantic", ETHER_ADDR_LEN, 0); + eth_dev->data->mac_addrs = rte_zmalloc("atlantic", + RTE_ETHER_ADDR_LEN, 0); if (eth_dev->data->mac_addrs == NULL) { PMD_INIT_LOG(ERR, "MAC Malloc failed"); return -ENOMEM; @@ -600,9 +602,6 @@ atl_dev_start(struct rte_eth_dev *dev) dev->data->dev_link.link_status = hw->aq_link_status.mbps != 0; - if (err) - goto error; - if (rte_intr_allow_others(intr_handle)) { /* check if lsc interrupt is enabled */ if (dev->data->dev_conf.intr_conf.lsc != 0) @@ -898,7 +897,8 @@ int atl_macsec_config_txsc(struct rte_eth_dev *dev, uint8_t *mac) ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); memset(&cfg->aq_macsec.txsc.mac, 0, sizeof(cfg->aq_macsec.txsc.mac)); - memcpy((uint8_t *)&cfg->aq_macsec.txsc.mac + 2, mac, ETHER_ADDR_LEN); + memcpy((uint8_t *)&cfg->aq_macsec.txsc.mac + 2, mac, + RTE_ETHER_ADDR_LEN); return 0; } @@ -910,7 +910,8 @@ int atl_macsec_config_rxsc(struct rte_eth_dev *dev, ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); memset(&cfg->aq_macsec.rxsc.mac, 0, sizeof(cfg->aq_macsec.rxsc.mac)); - memcpy((uint8_t *)&cfg->aq_macsec.rxsc.mac + 2, mac, ETHER_ADDR_LEN); + memcpy((uint8_t *)&cfg->aq_macsec.rxsc.mac + 2, mac, + RTE_ETHER_ADDR_LEN); cfg->aq_macsec.rxsc.pi = pi; return 0; @@ -1013,8 +1014,7 @@ static int atl_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats, unsigned int n) { - struct atl_adapter *adapter = - (struct atl_adapter *)dev->data->dev_private; + struct atl_adapter *adapter = dev->data->dev_private; struct aq_hw_s *hw = &adapter->hw; struct get_stats req = { 0 }; struct macsec_msg_fw_request msg = { 0 }; @@ -1158,6 +1158,7 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_eth_link link, old; + u32 fc = AQ_NIC_FC_OFF; int err = 0; link.link_status = ETH_LINK_DOWN; @@ -1192,6 +1193,15 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused) if (link.link_status == old.link_status) return -1; + /* Driver has to update flow control settings on RX block + * on any link event. + * We should query FW whether it negotiated FC. + */ + if (hw->aq_fw_ops->get_flow_control) { + hw->aq_fw_ops->get_flow_control(hw, &fc); + hw_atl_b0_set_fc(hw, fc, 0U); + } + if (rte_eal_alarm_set(1000 * 1000, atl_dev_delayed_handler, (void *)dev) < 0) PMD_DRV_LOG(ERR, "rte_eal_alarm_set fail"); @@ -1340,8 +1350,7 @@ atl_dev_interrupt_action(struct rte_eth_dev *dev, { struct atl_interrupt *intr = ATL_DEV_PRIVATE_TO_INTR(dev->data->dev_private); - struct atl_adapter *adapter = - (struct atl_adapter *)dev->data->dev_private; + struct atl_adapter *adapter = dev->data->dev_private; struct aq_hw_s *hw = &adapter->hw; if (!(intr->flags & ATL_FLAG_NEED_LINK_UPDATE)) @@ -1411,7 +1420,6 @@ atl_dev_interrupt_handler(void *param) atl_dev_interrupt_action(dev, dev->intr_handle); } -#define SFP_EEPROM_SIZE 0xff static int atl_dev_get_eeprom_length(struct rte_eth_dev *dev __rte_unused) @@ -1432,6 +1440,9 @@ int atl_dev_get_eeprom(struct rte_eth_dev *dev, eeprom->data == NULL) return -EINVAL; + if (eeprom->magic > 0x7F) + return -EINVAL; + if (eeprom->magic) dev_addr = eeprom->magic; @@ -1452,6 +1463,9 @@ int atl_dev_set_eeprom(struct rte_eth_dev *dev, eeprom->data == NULL) return -EINVAL; + if (eeprom->magic > 0x7F) + return -EINVAL; + if (eeprom->magic) dev_addr = eeprom->magic; @@ -1489,14 +1503,20 @@ static int atl_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); + u32 fc = AQ_NIC_FC_OFF; + + if (hw->aq_fw_ops->get_flow_control == NULL) + return -ENOTSUP; + + hw->aq_fw_ops->get_flow_control(hw, &fc); - if (hw->aq_nic_cfg->flow_control == AQ_NIC_FC_OFF) + if (fc == AQ_NIC_FC_OFF) fc_conf->mode = RTE_FC_NONE; - else if (hw->aq_nic_cfg->flow_control & (AQ_NIC_FC_RX | AQ_NIC_FC_TX)) + else if (fc & (AQ_NIC_FC_RX | AQ_NIC_FC_TX)) fc_conf->mode = RTE_FC_FULL; - else if (hw->aq_nic_cfg->flow_control & AQ_NIC_FC_RX) + else if (fc & AQ_NIC_FC_RX) fc_conf->mode = RTE_FC_RX_PAUSE; - else if (hw->aq_nic_cfg->flow_control & AQ_NIC_FC_RX) + else if (fc & AQ_NIC_FC_RX) fc_conf->mode = RTE_FC_TX_PAUSE; return 0; @@ -1555,10 +1575,10 @@ atl_update_mac_addr(struct rte_eth_dev *dev, uint32_t index, } static int -atl_add_mac_addr(struct rte_eth_dev *dev, struct ether_addr *mac_addr, +atl_add_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, uint32_t index __rte_unused, uint32_t pool __rte_unused) { - if (is_zero_ether_addr(mac_addr)) { + if (rte_is_zero_ether_addr(mac_addr)) { PMD_DRV_LOG(ERR, "Invalid Ethernet Address"); return -EINVAL; } @@ -1573,7 +1593,7 @@ atl_remove_mac_addr(struct rte_eth_dev *dev, uint32_t index) } static int -atl_set_default_mac_addr(struct rte_eth_dev *dev, struct ether_addr *addr) +atl_set_default_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *addr) { atl_remove_mac_addr(dev, 0); atl_add_mac_addr(dev, addr, 0, 0); @@ -1584,11 +1604,11 @@ static int atl_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) { struct rte_eth_dev_info dev_info; - uint32_t frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; + uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN; atl_dev_info_get(dev, &dev_info); - if ((mtu < ETHER_MIN_MTU) || (frame_size > dev_info.max_rx_pktlen)) + if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen) return -EINVAL; /* update max frame size */ @@ -1740,7 +1760,7 @@ atl_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue_id, int on) static int atl_dev_set_mc_addr_list(struct rte_eth_dev *dev, - struct ether_addr *mc_addr_set, + struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);