/** * gelic_net_poll_controller - artificial interrupt for netconsole etc. * @netdev: interface device structure * * see Documentation/networking/netconsole.txt */ void gelic_net_poll_controller(struct net_device *netdev) { struct gelic_card *card = netdev_card(netdev); gelic_card_set_irq_mask(card, 0); gelic_card_interrupt(netdev->irq, netdev); gelic_card_set_irq_mask(card, card->irq_mask); }
void gelic_card_down(struct gelic_card *card) { u64 mask; pr_debug("%s: called\n", __func__); mutex_lock(&card->updown_lock); if (atomic_dec_if_positive(&card->users) == 0) { pr_debug("%s: real do\n", __func__); napi_disable(&card->napi); /* * Disable irq. Wireless interrupts will * be disabled later if any */ mask = card->irq_mask & (GELIC_CARD_WLAN_EVENT_RECEIVED | GELIC_CARD_WLAN_COMMAND_COMPLETED); gelic_card_set_irq_mask(card, mask); /* stop rx */ gelic_card_disable_rxdmac(card); gelic_card_reset_chain(card, &card->rx_chain, card->descr + GELIC_NET_TX_DESCRIPTORS); /* stop tx */ gelic_card_disable_txdmac(card); } mutex_unlock(&card->updown_lock); pr_debug("%s: done\n", __func__); }
void gelic_card_up(struct gelic_card *card) { pr_debug("%s: called\n", __func__); mutex_lock(&card->updown_lock); if (atomic_inc_return(&card->users) == 1) { pr_debug("%s: real do\n", __func__); /* enable irq */ gelic_card_set_irq_mask(card, card->irq_mask); /* start rx */ gelic_card_enable_rxdmac(card); napi_enable(&card->napi); } mutex_unlock(&card->updown_lock); pr_debug("%s: done\n", __func__); }
static void gelic_card_rx_irq_off(struct gelic_card *card) { card->irq_mask &= ~GELIC_CARD_RXINT; gelic_card_set_irq_mask(card, card->irq_mask); }
static inline void gelic_card_rx_irq_on(struct gelic_card *card) { card->irq_mask |= GELIC_CARD_RXINT; gelic_card_set_irq_mask(card, card->irq_mask); }