|
@@ -816,6 +816,45 @@ void i40evf_set_rss_lut(struct i40evf_adapter *adapter)
|
|
|
kfree(vrl);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * i40evf_print_link_message - print link up or down
|
|
|
+ * @adapter: adapter structure
|
|
|
+ *
|
|
|
+ * Log a message telling the world of our wonderous link status
|
|
|
+ */
|
|
|
+static void i40evf_print_link_message(struct i40evf_adapter *adapter)
|
|
|
+{
|
|
|
+ struct net_device *netdev = adapter->netdev;
|
|
|
+ char *speed = "Unknown ";
|
|
|
+
|
|
|
+ if (!adapter->link_up) {
|
|
|
+ netdev_info(netdev, "NIC Link is Down\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (adapter->link_speed) {
|
|
|
+ case I40E_LINK_SPEED_40GB:
|
|
|
+ speed = "40 G";
|
|
|
+ break;
|
|
|
+ case I40E_LINK_SPEED_20GB:
|
|
|
+ speed = "20 G";
|
|
|
+ break;
|
|
|
+ case I40E_LINK_SPEED_10GB:
|
|
|
+ speed = "10 G";
|
|
|
+ break;
|
|
|
+ case I40E_LINK_SPEED_1GB:
|
|
|
+ speed = "1000 M";
|
|
|
+ break;
|
|
|
+ case I40E_LINK_SPEED_100MB:
|
|
|
+ speed = "100 M";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ netdev_info(netdev, "NIC Link is Up %sbps Full Duplex\n", speed);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i40evf_request_reset
|
|
|
* @adapter: adapter structure
|
|
@@ -853,15 +892,13 @@ void i40evf_virtchnl_completion(struct i40evf_adapter *adapter,
|
|
|
(struct i40e_virtchnl_pf_event *)msg;
|
|
|
switch (vpe->event) {
|
|
|
case I40E_VIRTCHNL_EVENT_LINK_CHANGE:
|
|
|
- adapter->link_up =
|
|
|
- vpe->event_data.link_event.link_status;
|
|
|
- if (adapter->link_up && !netif_carrier_ok(netdev)) {
|
|
|
- dev_info(&adapter->pdev->dev, "NIC Link is Up\n");
|
|
|
- netif_carrier_on(netdev);
|
|
|
- netif_tx_wake_all_queues(netdev);
|
|
|
- } else if (!adapter->link_up) {
|
|
|
- dev_info(&adapter->pdev->dev, "NIC Link is Down\n");
|
|
|
- netif_carrier_off(netdev);
|
|
|
+ adapter->link_speed =
|
|
|
+ vpe->event_data.link_event.link_speed;
|
|
|
+ if (adapter->link_up !=
|
|
|
+ vpe->event_data.link_event.link_status) {
|
|
|
+ adapter->link_up =
|
|
|
+ vpe->event_data.link_event.link_status;
|
|
|
+ i40evf_print_link_message(adapter);
|
|
|
netif_tx_stop_all_queues(netdev);
|
|
|
}
|
|
|
break;
|