WARN_ONCE on querying ecdev before ecdev_offer for e1000
This commit is contained in:
parent
c2c4a1b27f
commit
45b526e99f
|
|
@ -43,6 +43,10 @@ ifeq (@ENABLE_E1000@,1)
|
|||
obj-m += ec_e1000.o
|
||||
ec_e1000-objs := $(EC_E1000_OBJ)
|
||||
CFLAGS_e1000_main-@KERNEL_E1000@-ethercat.o = -DREV=$(REV)
|
||||
|
||||
ifeq (@ENABLE_DRIVER_RESOURCE_VERIFYING@,1)
|
||||
ccflags-y := -DEC_ENABLE_DRIVER_RESOURCE_VERIFYING
|
||||
endif
|
||||
endif
|
||||
|
||||
KBUILD_EXTRA_SYMBOLS := \
|
||||
|
|
|
|||
|
|
@ -303,11 +303,20 @@ struct e1000_adapter {
|
|||
struct delayed_work fifo_stall_task;
|
||||
struct delayed_work phy_info_task;
|
||||
|
||||
ec_device_t *ecdev;
|
||||
ec_device_t *ecdev_;
|
||||
unsigned long ec_watchdog_jiffies;
|
||||
struct irq_work ec_watchdog_kicker;
|
||||
bool ecdev_initialized;
|
||||
};
|
||||
|
||||
static inline ec_device_t *get_ecdev(struct e1000_adapter *adapter)
|
||||
{
|
||||
#ifdef EC_ENABLE_DRIVER_RESOURCE_VERIFYING
|
||||
WARN_ON(!adapter->ecdev_initialized);
|
||||
#endif
|
||||
return adapter->ecdev_;
|
||||
}
|
||||
|
||||
enum e1000_state_t {
|
||||
__E1000_TESTING,
|
||||
__E1000_RESETTING,
|
||||
|
|
|
|||
|
|
@ -303,11 +303,20 @@ struct e1000_adapter {
|
|||
struct delayed_work fifo_stall_task;
|
||||
struct delayed_work phy_info_task;
|
||||
|
||||
ec_device_t *ecdev;
|
||||
ec_device_t *ecdev_;
|
||||
unsigned long ec_watchdog_jiffies;
|
||||
struct irq_work ec_watchdog_kicker;
|
||||
bool ecdev_initialized;
|
||||
};
|
||||
|
||||
static inline ec_device_t *get_ecdev(struct e1000_adapter *adapter)
|
||||
{
|
||||
#ifdef EC_ENABLE_DRIVER_RESOURCE_VERIFYING
|
||||
WARN_ON(!adapter->ecdev_initialized);
|
||||
#endif
|
||||
return adapter->ecdev_;
|
||||
}
|
||||
|
||||
enum e1000_state_t {
|
||||
__E1000_TESTING,
|
||||
__E1000_RESETTING,
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ static int e1000_request_irq(struct e1000_adapter *adapter)
|
|||
int irq_flags = IRQF_SHARED;
|
||||
int err;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +288,7 @@ static void e1000_free_irq(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ static void e1000_irq_disable(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (!adapter->ecdev_) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -320,7 +320,7 @@ static void e1000_irq_enable(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -407,7 +407,7 @@ static void e1000_configure(struct e1000_adapter *adapter)
|
|||
*/
|
||||
for (i = 0; i < adapter->num_rx_queues; i++) {
|
||||
struct e1000_rx_ring *ring = &adapter->rx_ring[i];
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
/* fill rx ring completely! */
|
||||
adapter->alloc_rx_buf(adapter, ring, ring->count);
|
||||
} else {
|
||||
|
|
@ -427,7 +427,7 @@ int e1000_up(struct e1000_adapter *adapter)
|
|||
|
||||
clear_bit(__E1000_DOWN, &adapter->flags);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
|
|
@ -516,13 +516,13 @@ static void e1000_down_and_stop(struct e1000_adapter *adapter)
|
|||
* still running after the adapter has been turned down.
|
||||
*/
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
cancel_delayed_work_sync(&adapter->phy_info_task);
|
||||
cancel_delayed_work_sync(&adapter->fifo_stall_task);
|
||||
}
|
||||
|
||||
/* Only kill reset task if adapter is not resetting */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_RESETTING, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_RESETTING, &adapter->flags))
|
||||
cancel_work_sync(&adapter->reset_task);
|
||||
}
|
||||
|
||||
|
|
@ -537,7 +537,7 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||
ew32(RCTL, rctl & ~E1000_RCTL_EN);
|
||||
/* flush and sleep below */
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_tx_disable(netdev);
|
||||
}
|
||||
|
||||
|
|
@ -557,7 +557,7 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||
* in the hardware until the next IFF_DOWN+IFF_UP cycle.
|
||||
*/
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_carrier_off(netdev);
|
||||
napi_disable(&adapter->napi);
|
||||
|
||||
|
|
@ -1012,6 +1012,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
|
||||
adapter->bars = bars;
|
||||
adapter->need_ioport = need_ioport;
|
||||
adapter->ecdev_initialized = 0;
|
||||
|
||||
hw = &adapter->hw;
|
||||
hw->back = adapter;
|
||||
|
|
@ -1246,12 +1247,13 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
e1000_reset(adapter);
|
||||
|
||||
// offer device to EtherCAT master module
|
||||
adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
|
||||
if (adapter->ecdev) {
|
||||
adapter->ecdev_ = ecdev_offer(netdev, ec_poll, THIS_MODULE);
|
||||
adapter->ecdev_initialized = 1;
|
||||
if (get_ecdev(adapter)) {
|
||||
init_irq_work(&adapter->ec_watchdog_kicker, ec_kick_watchdog);
|
||||
err = ecdev_open(adapter->ecdev);
|
||||
err = ecdev_open(get_ecdev(adapter));
|
||||
if (err) {
|
||||
ecdev_withdraw(adapter->ecdev);
|
||||
ecdev_withdraw(get_ecdev(adapter));
|
||||
goto err_register;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1273,7 +1275,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
((hw->bus_width == e1000_bus_width_64) ? 64 : 32),
|
||||
netdev->dev_addr);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
/* carrier off reporting is important to ethtool even BEFORE open */
|
||||
netif_carrier_off(netdev);
|
||||
}
|
||||
|
|
@ -1323,15 +1325,15 @@ static void e1000_remove(struct pci_dev *pdev)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
bool disable_dev;
|
||||
|
||||
if (adapter->ecdev)
|
||||
if (get_ecdev(adapter))
|
||||
irq_work_sync(&adapter->ec_watchdog_kicker);
|
||||
|
||||
e1000_down_and_stop(adapter);
|
||||
e1000_release_manageability(adapter);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_close(adapter->ecdev);
|
||||
ecdev_withdraw(adapter->ecdev);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_close(get_ecdev(adapter));
|
||||
ecdev_withdraw(get_ecdev(adapter));
|
||||
} else {
|
||||
unregister_netdev(netdev);
|
||||
}
|
||||
|
|
@ -1464,7 +1466,7 @@ int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->flags);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
|
|
@ -1926,7 +1928,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 rdlen, rctl, rxcsum;
|
||||
|
||||
if (!adapter->ecdev && adapter->netdev->mtu > ETH_DATA_LEN) {
|
||||
if (!get_ecdev(adapter) && adapter->netdev->mtu > ETH_DATA_LEN) {
|
||||
rdlen = adapter->rx_ring[0].count *
|
||||
sizeof(struct e1000_rx_desc);
|
||||
adapter->clean_rx = e1000_clean_jumbo_rx_irq;
|
||||
|
|
@ -2026,7 +2028,7 @@ static void
|
|||
e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
|
||||
struct e1000_tx_buffer *buffer_info)
|
||||
{
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2236,7 +2238,7 @@ static void e1000_enter_82542_rst(struct e1000_adapter *adapter)
|
|||
E1000_WRITE_FLUSH();
|
||||
mdelay(5);
|
||||
|
||||
if (!adapter->ecdev && netif_running(netdev))
|
||||
if (!get_ecdev(adapter) && netif_running(netdev))
|
||||
e1000_clean_all_rx_rings(adapter);
|
||||
}
|
||||
|
||||
|
|
@ -2259,7 +2261,7 @@ static void e1000_leave_82542_rst(struct e1000_adapter *adapter)
|
|||
/* No need to loop, because 82542 supports only 1 queue */
|
||||
struct e1000_rx_ring *ring = &adapter->rx_ring[0];
|
||||
e1000_configure_rx(adapter);
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
/* fill rx ring completely! */
|
||||
adapter->alloc_rx_buf(adapter, ring, ring->count);
|
||||
} else {
|
||||
|
|
@ -2519,12 +2521,12 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
u32 link, tctl;
|
||||
|
||||
link = e1000_has_link(adapter);
|
||||
if (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)
|
||||
if (!get_ecdev(adapter) && (netif_carrier_ok(netdev)) && link)
|
||||
goto link_up;
|
||||
|
||||
if (link) {
|
||||
if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) ||
|
||||
(!adapter->ecdev && !netif_carrier_ok(netdev))) {
|
||||
if ((get_ecdev(adapter) && !ecdev_get_link(get_ecdev(adapter))) ||
|
||||
(!get_ecdev(adapter) && !netif_carrier_ok(netdev))) {
|
||||
u32 ctrl;
|
||||
/* update snapshot of PHY registers on LSC */
|
||||
e1000_get_speed_and_duplex(hw,
|
||||
|
|
@ -2559,8 +2561,8 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
tctl |= E1000_TCTL_EN;
|
||||
ew32(TCTL, tctl);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_set_link(adapter->ecdev, 1);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_set_link(get_ecdev(adapter), 1);
|
||||
}
|
||||
else {
|
||||
netif_carrier_on(netdev);
|
||||
|
|
@ -2571,15 +2573,15 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
adapter->smartspeed = 0;
|
||||
}
|
||||
} else {
|
||||
if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
|
||||
|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
|
||||
if ((get_ecdev(adapter) && ecdev_get_link(get_ecdev(adapter)))
|
||||
|| (!get_ecdev(adapter) && netif_carrier_ok(netdev))) {
|
||||
adapter->link_speed = 0;
|
||||
adapter->link_duplex = 0;
|
||||
pr_info("%s NIC Link is Down\n",
|
||||
netdev->name);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_set_link(adapter->ecdev, 0);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_set_link(get_ecdev(adapter), 0);
|
||||
} else {
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
|
|
@ -2607,7 +2609,7 @@ link_up:
|
|||
|
||||
e1000_update_adaptive(hw);
|
||||
|
||||
if (!adapter->ecdev && !netif_carrier_ok(netdev)) {
|
||||
if (!get_ecdev(adapter) && !netif_carrier_ok(netdev)) {
|
||||
if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
|
||||
/* We've lost link, so the controller stops DMA,
|
||||
* but we've got queued Tx work that's never going
|
||||
|
|
@ -2643,7 +2645,7 @@ link_up:
|
|||
adapter->detect_tx_hung = true;
|
||||
|
||||
/* Reschedule the task */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->watchdog_task, 2 * HZ);
|
||||
}
|
||||
|
||||
|
|
@ -3164,7 +3166,7 @@ static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
|
|||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_tx_ring *tx_ring = adapter->tx_ring;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -3260,7 +3262,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
if (!__pskb_pull_tail(skb, pull_size)) {
|
||||
e_err(drv, "__pskb_pull_tail "
|
||||
"failed.\n");
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
return NETDEV_TX_OK;
|
||||
|
|
@ -3311,7 +3313,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
|
||||
if (unlikely((hw->mac_type == e1000_82547) &&
|
||||
(e1000_82547_fifo_workaround(adapter, skb)))) {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_stop_queue(netdev);
|
||||
if (!test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->fifo_stall_task, 1);
|
||||
|
|
@ -3329,7 +3331,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
|
||||
tso = e1000_tso(adapter, tx_ring, skb, protocol);
|
||||
if (tso < 0) {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
return NETDEV_TX_OK;
|
||||
|
|
@ -3361,7 +3363,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
*/
|
||||
int desc_needed = MAX_SKB_FRAGS + 7;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netdev_sent_queue(netdev, skb->len);
|
||||
skb_tx_timestamp(skb);
|
||||
}
|
||||
|
|
@ -3378,12 +3380,12 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
/* Make sure there is space in the ring for the next send. */
|
||||
e1000_maybe_stop_tx(netdev, tx_ring, desc_needed);
|
||||
|
||||
if (adapter->ecdev || !netdev_xmit_more() ||
|
||||
if (get_ecdev(adapter) || !netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
|
||||
writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt);
|
||||
}
|
||||
} else {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
tx_ring->buffer_info[first].time_stamp = 0;
|
||||
|
|
@ -3634,7 +3636,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -3720,7 +3722,7 @@ void e1000_update_stats(struct e1000_adapter *adapter)
|
|||
if (pci_channel_offline(pdev))
|
||||
return;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
spin_lock_irqsave(&adapter->stats_lock, flags);
|
||||
}
|
||||
|
||||
|
|
@ -3851,7 +3853,7 @@ void e1000_update_stats(struct e1000_adapter *adapter)
|
|||
adapter->stats.mgpdc += er32(MGTPDC);
|
||||
}
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
spin_unlock_irqrestore(&adapter->stats_lock, flags);
|
||||
}
|
||||
}
|
||||
|
|
@ -3900,11 +3902,11 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) {
|
||||
hw->get_link_status = 1;
|
||||
/* guard against interrupt when we're going down */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->watchdog_task, 1);
|
||||
}
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
int i, ec_work_done = 0;
|
||||
for (i = 0; i < E1000_MAX_INTR; i++) {
|
||||
if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring,
|
||||
|
|
@ -4022,12 +4024,12 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
|
|||
*/
|
||||
smp_store_release(&tx_ring->next_to_clean, i);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netdev_completed_queue(netdev, pkts_compl, bytes_compl);
|
||||
}
|
||||
|
||||
#define TX_WAKE_THRESHOLD 32
|
||||
if (!adapter->ecdev && unlikely(count && netif_carrier_ok(netdev) &&
|
||||
if (!get_ecdev(adapter) && unlikely(count && netif_carrier_ok(netdev) &&
|
||||
E1000_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD)) {
|
||||
/* Make sure that anybody stopping the queue after this
|
||||
* sees the new next_to_clean.
|
||||
|
|
@ -4041,7 +4043,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
|
|||
}
|
||||
}
|
||||
|
||||
if (!adapter->ecdev && adapter->detect_tx_hung) {
|
||||
if (!get_ecdev(adapter) && adapter->detect_tx_hung) {
|
||||
/* Detect a transmit hang in hardware, this serializes the
|
||||
* check with the clearing of time_stamp and movement of i
|
||||
*/
|
||||
|
|
@ -4529,7 +4531,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
length = le16_to_cpu(rx_desc->length);
|
||||
|
||||
data = buffer_info->rxbuf.data;
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
prefetch(data);
|
||||
skb = e1000_copybreak(adapter, buffer_info, length, data);
|
||||
if (!skb) {
|
||||
|
|
@ -4573,7 +4575,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
if (adapter->discarding) {
|
||||
/* All receives must fit into a single buffer */
|
||||
netdev_dbg(netdev, "Receive packet consumed multiple buffers\n");
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb(skb);
|
||||
}
|
||||
if (status & E1000_RXD_STAT_EOP)
|
||||
|
|
@ -4589,7 +4591,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
} else if (netdev->features & NETIF_F_RXALL) {
|
||||
goto process_skb;
|
||||
} else {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb(skb);
|
||||
}
|
||||
goto next_desc;
|
||||
|
|
@ -4606,7 +4608,7 @@ process_skb:
|
|||
*/
|
||||
length -= 4;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
if (buffer_info->rxbuf.data == NULL)
|
||||
skb_put(skb, length);
|
||||
else /* copybreak skb */
|
||||
|
|
@ -4619,10 +4621,10 @@ process_skb:
|
|||
le16_to_cpu(rx_desc->csum), skb);
|
||||
}
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
dma_sync_single_for_cpu(&adapter->pdev->dev, buffer_info->dma,
|
||||
adapter->rx_buffer_len, DMA_FROM_DEVICE);
|
||||
ecdev_receive(adapter->ecdev, data, length);
|
||||
ecdev_receive(get_ecdev(adapter), data, length);
|
||||
|
||||
// No need to detect link status as
|
||||
// long as frames are received: Reset watchdog.
|
||||
|
|
@ -4941,7 +4943,7 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
|
|||
data->phy_id = hw->phy_addr;
|
||||
break;
|
||||
case SIOCGMIIREG:
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EPERM;
|
||||
}
|
||||
spin_lock_irqsave(&adapter->stats_lock, flags);
|
||||
|
|
@ -4953,7 +4955,7 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
|
|||
spin_unlock_irqrestore(&adapter->stats_lock, flags);
|
||||
break;
|
||||
case SIOCSMIIREG:
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EPERM;
|
||||
}
|
||||
if (data->reg_num & ~(0x1F))
|
||||
|
|
@ -5243,7 +5245,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
|
|||
u32 ctrl, ctrl_ext, rctl, status;
|
||||
u32 wufc = adapter->wol;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -5339,7 +5341,7 @@ static int __maybe_unused e1000_resume(struct device *dev)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 err;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -5375,7 +5377,7 @@ static int __maybe_unused e1000_resume(struct device *dev)
|
|||
if (netif_running(netdev))
|
||||
e1000_up(adapter);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_device_attach(netdev);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ static int e1000_request_irq(struct e1000_adapter *adapter)
|
|||
int irq_flags = IRQF_SHARED;
|
||||
int err;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -277,7 +277,7 @@ static void e1000_free_irq(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -292,7 +292,7 @@ static void e1000_irq_disable(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (adapter->ecdev_) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -309,7 +309,7 @@ static void e1000_irq_enable(struct e1000_adapter *adapter)
|
|||
{
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -396,7 +396,7 @@ static void e1000_configure(struct e1000_adapter *adapter)
|
|||
*/
|
||||
for (i = 0; i < adapter->num_rx_queues; i++) {
|
||||
struct e1000_rx_ring *ring = &adapter->rx_ring[i];
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
/* fill rx ring completely! */
|
||||
adapter->alloc_rx_buf(adapter, ring, ring->count);
|
||||
} else {
|
||||
|
|
@ -416,7 +416,7 @@ int e1000_up(struct e1000_adapter *adapter)
|
|||
|
||||
clear_bit(__E1000_DOWN, &adapter->flags);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
|
|
@ -505,13 +505,13 @@ static void e1000_down_and_stop(struct e1000_adapter *adapter)
|
|||
* still running after the adapter has been turned down.
|
||||
*/
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
cancel_delayed_work_sync(&adapter->phy_info_task);
|
||||
cancel_delayed_work_sync(&adapter->fifo_stall_task);
|
||||
}
|
||||
|
||||
/* Only kill reset task if adapter is not resetting */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_RESETTING, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_RESETTING, &adapter->flags))
|
||||
cancel_work_sync(&adapter->reset_task);
|
||||
}
|
||||
|
||||
|
|
@ -526,7 +526,7 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||
ew32(RCTL, rctl & ~E1000_RCTL_EN);
|
||||
/* flush and sleep below */
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_tx_disable(netdev);
|
||||
}
|
||||
|
||||
|
|
@ -546,7 +546,7 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||
* in the hardware until the next IFF_DOWN+IFF_UP cycle.
|
||||
*/
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_carrier_off(netdev);
|
||||
napi_disable(&adapter->napi);
|
||||
|
||||
|
|
@ -1001,6 +1001,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
|
||||
adapter->bars = bars;
|
||||
adapter->need_ioport = need_ioport;
|
||||
adapter->ecdev_initialized = 0;
|
||||
|
||||
hw = &adapter->hw;
|
||||
hw->back = adapter;
|
||||
|
|
@ -1231,12 +1232,13 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
e1000_reset(adapter);
|
||||
|
||||
// offer device to EtherCAT master module
|
||||
adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
|
||||
if (adapter->ecdev) {
|
||||
adapter->ecdev_ = ecdev_offer(netdev, ec_poll, THIS_MODULE);
|
||||
adapter->ecdev_initialized = 1;
|
||||
if (get_ecdev(adapter)) {
|
||||
init_irq_work(&adapter->ec_watchdog_kicker, ec_kick_watchdog);
|
||||
err = ecdev_open(adapter->ecdev);
|
||||
err = ecdev_open(get_ecdev(adapter));
|
||||
if (err) {
|
||||
ecdev_withdraw(adapter->ecdev);
|
||||
ecdev_withdraw(get_ecdev(adapter));
|
||||
goto err_register;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1258,7 +1260,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
((hw->bus_width == e1000_bus_width_64) ? 64 : 32),
|
||||
netdev->dev_addr);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
/* carrier off reporting is important to ethtool even BEFORE open */
|
||||
netif_carrier_off(netdev);
|
||||
}
|
||||
|
|
@ -1308,15 +1310,15 @@ static void e1000_remove(struct pci_dev *pdev)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
bool disable_dev;
|
||||
|
||||
if (adapter->ecdev)
|
||||
if (get_ecdev(adapter))
|
||||
irq_work_sync(&adapter->ec_watchdog_kicker);
|
||||
|
||||
e1000_down_and_stop(adapter);
|
||||
e1000_release_manageability(adapter);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_close(adapter->ecdev);
|
||||
ecdev_withdraw(adapter->ecdev);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_close(get_ecdev(adapter));
|
||||
ecdev_withdraw(get_ecdev(adapter));
|
||||
} else {
|
||||
unregister_netdev(netdev);
|
||||
}
|
||||
|
|
@ -1449,7 +1451,7 @@ int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->flags);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
|
|
@ -1911,7 +1913,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 rdlen, rctl, rxcsum;
|
||||
|
||||
if (!adapter->ecdev && adapter->netdev->mtu > ETH_DATA_LEN) {
|
||||
if (!get_ecdev(adapter) && adapter->netdev->mtu > ETH_DATA_LEN) {
|
||||
rdlen = adapter->rx_ring[0].count *
|
||||
sizeof(struct e1000_rx_desc);
|
||||
adapter->clean_rx = e1000_clean_jumbo_rx_irq;
|
||||
|
|
@ -2012,7 +2014,7 @@ e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
|
|||
struct e1000_tx_buffer *buffer_info,
|
||||
int budget)
|
||||
{
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2222,7 +2224,7 @@ static void e1000_enter_82542_rst(struct e1000_adapter *adapter)
|
|||
E1000_WRITE_FLUSH();
|
||||
mdelay(5);
|
||||
|
||||
if (!adapter->ecdev && netif_running(netdev))
|
||||
if (!get_ecdev(adapter) && netif_running(netdev))
|
||||
e1000_clean_all_rx_rings(adapter);
|
||||
}
|
||||
|
||||
|
|
@ -2245,7 +2247,7 @@ static void e1000_leave_82542_rst(struct e1000_adapter *adapter)
|
|||
/* No need to loop, because 82542 supports only 1 queue */
|
||||
struct e1000_rx_ring *ring = &adapter->rx_ring[0];
|
||||
e1000_configure_rx(adapter);
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
/* fill rx ring completely! */
|
||||
adapter->alloc_rx_buf(adapter, ring, ring->count);
|
||||
} else {
|
||||
|
|
@ -2501,12 +2503,12 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
u32 link, tctl;
|
||||
|
||||
link = e1000_has_link(adapter);
|
||||
if (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)
|
||||
if (!get_ecdev(adapter) && (netif_carrier_ok(netdev)) && link)
|
||||
goto link_up;
|
||||
|
||||
if (link) {
|
||||
if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) ||
|
||||
(!adapter->ecdev && !netif_carrier_ok(netdev))) {
|
||||
if ((get_ecdev(adapter) && !ecdev_get_link(get_ecdev(adapter))) ||
|
||||
(!get_ecdev(adapter) && !netif_carrier_ok(netdev))) {
|
||||
u32 ctrl;
|
||||
/* update snapshot of PHY registers on LSC */
|
||||
e1000_get_speed_and_duplex(hw,
|
||||
|
|
@ -2541,8 +2543,8 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
tctl |= E1000_TCTL_EN;
|
||||
ew32(TCTL, tctl);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_set_link(adapter->ecdev, 1);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_set_link(get_ecdev(adapter), 1);
|
||||
}
|
||||
else {
|
||||
netif_carrier_on(netdev);
|
||||
|
|
@ -2553,15 +2555,15 @@ static void e1000_watchdog(struct work_struct *work)
|
|||
adapter->smartspeed = 0;
|
||||
}
|
||||
} else {
|
||||
if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
|
||||
|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
|
||||
if ((get_ecdev(adapter) && ecdev_get_link(get_ecdev(adapter)))
|
||||
|| (!get_ecdev(adapter) && netif_carrier_ok(netdev))) {
|
||||
adapter->link_speed = 0;
|
||||
adapter->link_duplex = 0;
|
||||
pr_info("%s NIC Link is Down\n",
|
||||
netdev->name);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
ecdev_set_link(adapter->ecdev, 0);
|
||||
if (get_ecdev(adapter)) {
|
||||
ecdev_set_link(get_ecdev(adapter), 0);
|
||||
} else {
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
|
|
@ -2589,7 +2591,7 @@ link_up:
|
|||
|
||||
e1000_update_adaptive(hw);
|
||||
|
||||
if (!adapter->ecdev && !netif_carrier_ok(netdev)) {
|
||||
if (!get_ecdev(adapter) && !netif_carrier_ok(netdev)) {
|
||||
if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
|
||||
/* We've lost link, so the controller stops DMA,
|
||||
* but we've got queued Tx work that's never going
|
||||
|
|
@ -2625,7 +2627,7 @@ link_up:
|
|||
adapter->detect_tx_hung = true;
|
||||
|
||||
/* Reschedule the task */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->watchdog_task, 2 * HZ);
|
||||
}
|
||||
|
||||
|
|
@ -3146,7 +3148,7 @@ static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
|
|||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_tx_ring *tx_ring = adapter->tx_ring;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -3242,7 +3244,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
if (!__pskb_pull_tail(skb, pull_size)) {
|
||||
e_err(drv, "__pskb_pull_tail "
|
||||
"failed.\n");
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
return NETDEV_TX_OK;
|
||||
|
|
@ -3293,7 +3295,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
|
||||
if (unlikely((hw->mac_type == e1000_82547) &&
|
||||
(e1000_82547_fifo_workaround(adapter, skb)))) {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_stop_queue(netdev);
|
||||
if (!test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->fifo_stall_task, 1);
|
||||
|
|
@ -3311,7 +3313,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
|
||||
tso = e1000_tso(adapter, tx_ring, skb, protocol);
|
||||
if (tso < 0) {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
return NETDEV_TX_OK;
|
||||
|
|
@ -3343,7 +3345,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
*/
|
||||
int desc_needed = MAX_SKB_FRAGS + 7;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netdev_sent_queue(netdev, skb->len);
|
||||
skb_tx_timestamp(skb);
|
||||
}
|
||||
|
|
@ -3360,12 +3362,12 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||
/* Make sure there is space in the ring for the next send. */
|
||||
e1000_maybe_stop_tx(netdev, tx_ring, desc_needed);
|
||||
|
||||
if (adapter->ecdev || !netdev_xmit_more() ||
|
||||
if (get_ecdev(adapter) || !netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
|
||||
writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt);
|
||||
}
|
||||
} else {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
tx_ring->buffer_info[first].time_stamp = 0;
|
||||
|
|
@ -3616,7 +3618,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -3702,7 +3704,7 @@ void e1000_update_stats(struct e1000_adapter *adapter)
|
|||
if (pci_channel_offline(pdev))
|
||||
return;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
spin_lock_irqsave(&adapter->stats_lock, flags);
|
||||
}
|
||||
|
||||
|
|
@ -3833,7 +3835,7 @@ void e1000_update_stats(struct e1000_adapter *adapter)
|
|||
adapter->stats.mgpdc += er32(MGTPDC);
|
||||
}
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
spin_unlock_irqrestore(&adapter->stats_lock, flags);
|
||||
}
|
||||
}
|
||||
|
|
@ -3882,11 +3884,11 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) {
|
||||
hw->get_link_status = 1;
|
||||
/* guard against interrupt when we're going down */
|
||||
if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
if (!get_ecdev(adapter) && !test_bit(__E1000_DOWN, &adapter->flags))
|
||||
schedule_delayed_work(&adapter->watchdog_task, 1);
|
||||
}
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
int i, ec_work_done = 0;
|
||||
for (i = 0; i < E1000_MAX_INTR; i++) {
|
||||
if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring,
|
||||
|
|
@ -4005,12 +4007,12 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
|
|||
*/
|
||||
smp_store_release(&tx_ring->next_to_clean, i);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netdev_completed_queue(netdev, pkts_compl, bytes_compl);
|
||||
}
|
||||
|
||||
#define TX_WAKE_THRESHOLD 32
|
||||
if (!adapter->ecdev && unlikely(count && netif_carrier_ok(netdev) &&
|
||||
if (!get_ecdev(adapter) && unlikely(count && netif_carrier_ok(netdev) &&
|
||||
E1000_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD)) {
|
||||
/* Make sure that anybody stopping the queue after this
|
||||
* sees the new next_to_clean.
|
||||
|
|
@ -4024,7 +4026,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
|
|||
}
|
||||
}
|
||||
|
||||
if (!adapter->ecdev && adapter->detect_tx_hung) {
|
||||
if (!get_ecdev(adapter) && adapter->detect_tx_hung) {
|
||||
/* Detect a transmit hang in hardware, this serializes the
|
||||
* check with the clearing of time_stamp and movement of i
|
||||
*/
|
||||
|
|
@ -4512,7 +4514,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
length = le16_to_cpu(rx_desc->length);
|
||||
|
||||
data = buffer_info->rxbuf.data;
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
prefetch(data);
|
||||
skb = e1000_copybreak(adapter, buffer_info, length, data);
|
||||
if (!skb) {
|
||||
|
|
@ -4556,7 +4558,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
if (adapter->discarding) {
|
||||
/* All receives must fit into a single buffer */
|
||||
netdev_dbg(netdev, "Receive packet consumed multiple buffers\n");
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb(skb);
|
||||
}
|
||||
if (status & E1000_RXD_STAT_EOP)
|
||||
|
|
@ -4572,7 +4574,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
} else if (netdev->features & NETIF_F_RXALL) {
|
||||
goto process_skb;
|
||||
} else {
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
dev_kfree_skb(skb);
|
||||
}
|
||||
goto next_desc;
|
||||
|
|
@ -4589,7 +4591,7 @@ process_skb:
|
|||
*/
|
||||
length -= 4;
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
if (buffer_info->rxbuf.data == NULL)
|
||||
skb_put(skb, length);
|
||||
else /* copybreak skb */
|
||||
|
|
@ -4602,10 +4604,10 @@ process_skb:
|
|||
le16_to_cpu(rx_desc->csum), skb);
|
||||
}
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
dma_sync_single_for_cpu(&adapter->pdev->dev, buffer_info->dma,
|
||||
adapter->rx_buffer_len, DMA_FROM_DEVICE);
|
||||
ecdev_receive(adapter->ecdev, data, length);
|
||||
ecdev_receive(get_ecdev(adapter), data, length);
|
||||
|
||||
// No need to detect link status as
|
||||
// long as frames are received: Reset watchdog.
|
||||
|
|
@ -4924,7 +4926,7 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
|
|||
data->phy_id = hw->phy_addr;
|
||||
break;
|
||||
case SIOCGMIIREG:
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EPERM;
|
||||
}
|
||||
spin_lock_irqsave(&adapter->stats_lock, flags);
|
||||
|
|
@ -4936,7 +4938,7 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
|
|||
spin_unlock_irqrestore(&adapter->stats_lock, flags);
|
||||
break;
|
||||
case SIOCSMIIREG:
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EPERM;
|
||||
}
|
||||
if (data->reg_num & ~(0x1F))
|
||||
|
|
@ -5226,7 +5228,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
|
|||
u32 ctrl, ctrl_ext, rctl, status;
|
||||
u32 wufc = adapter->wol;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -5322,7 +5324,7 @@ static int __maybe_unused e1000_resume(struct device *dev)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 err;
|
||||
|
||||
if (adapter->ecdev) {
|
||||
if (get_ecdev(adapter)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -5358,7 +5360,7 @@ static int __maybe_unused e1000_resume(struct device *dev)
|
|||
if (netif_running(netdev))
|
||||
e1000_up(adapter);
|
||||
|
||||
if (!adapter->ecdev) {
|
||||
if (!get_ecdev(adapter)) {
|
||||
netif_device_attach(netdev);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue