/** * e1000_irq - enable or Disable interrupts * * @v adapter e1000 adapter * @v action requested interrupt action **/ static void e1000_irq ( struct net_device *netdev, int enable ) { struct e1000_adapter *adapter = netdev_priv(netdev); DBG ( "e1000_irq\n" ); if ( enable ) e1000_irq_enable ( adapter ); else e1000_irq_disable ( adapter ); }
int wait_packet_function_ptr(void *data, int mode) { struct e1000_adapter *adapter = (struct e1000_adapter*)data; if(unlikely(enable_debug)) printk("[wait_packet_function_ptr] called [mode=%d]\n", mode); if(mode == 1) { struct e1000_ring *rx_ring = adapter->rx_ring; union e1000_rx_desc_extended *rx_desc; u16 i = E1000_READ_REG(&adapter->hw, E1000_RDT(0)); /* Very important: update the value from the register set from userland. * Here i is the last I've read (zero-copy implementation) */ if(++i == rx_ring->count) i = 0; /* Here i is the next I have to read */ rx_ring->next_to_clean = i; rx_desc = E1000_RX_DESC_EXT(*rx_ring, rx_ring->next_to_clean); if(unlikely(enable_debug)) printk("[wait_packet_function_ptr] Check if a packet is arrived\n"); prefetch(rx_desc); if(!(le32_to_cpu(rx_desc->wb.upper.status_error) & E1000_RXD_STAT_DD)) { adapter->dna.interrupt_received = 0; #if 0 if(!adapter->dna.interrupt_enabled) { e1000_irq_enable(adapter), adapter->dna.interrupt_enabled = 1; if(unlikely(enable_debug)) printk("[wait_packet_function_ptr] Packet not arrived yet: enabling interrupts\n"); } #endif } else adapter->dna.interrupt_received = 1; return(le32_to_cpu(rx_desc->wb.upper.status_error) & E1000_RXD_STAT_DD); } else { if(adapter->dna.interrupt_enabled) { e1000_irq_disable(adapter); adapter->dna.interrupt_enabled = 0; if(unlikely(enable_debug)) printk("[wait_packet_function_ptr] Disabled interrupts\n"); } return(0); } }
/** * e1000_irq - enable or Disable interrupts * * @v adapter e1000 adapter * @v action requested interrupt action **/ static void e1000_irq ( struct net_device *netdev, int enable ) { struct e1000_adapter *adapter = netdev_priv(netdev); DBG ( "e1000_irq\n" ); switch ( enable ) { case 0 : e1000_irq_disable ( adapter ); break; case 1 : e1000_irq_enable ( adapter ); break; case 2 : e1000_irq_force ( adapter ); break; } }