#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/spinlock.h>
+#include <linux/bitops.h>
#ifdef CONFIG_FEC_PACKETHOOK
#include <linux/pkthook.h>
#endif
#include <asm/pgtable.h>
#include <asm/mpc8xx.h>
#include <asm/irq.h>
-#include <asm/bitops.h>
#include <asm/uaccess.h>
#include <asm/commproc.h>
flush_dcache_range((unsigned long)skb->data,
(unsigned long)skb->data + skb->len);
+ /* disable interrupts while triggering transmit */
spin_lock_irq(&fep->lock);
/* Send it on its way. Tell FEC its ready, interrupt when done,
struct sk_buff *skb;
fep = dev->priv;
+ /* lock while transmitting */
spin_lock(&fep->lock);
bdp = fep->dirty_tx;
if ((mip = mii_head) != NULL) {
ep->fec_mii_data = mip->mii_regval;
+
}
}
retval = 0;
- save_flags(flags);
- cli();
+ /* lock while modifying mii_list */
+ spin_lock_irqsave(&fep->lock, flags);
if ((mip = mii_free) != NULL) {
mii_free = mip->mii_next;
retval = 1;
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&fep->lock, flags);
return(retval);
}
/* Install our interrupt handler.
*/
- if (request_8xxirq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) != 0)
+ if (request_irq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) != 0)
panic("Could not allocate FEC IRQ!");
#ifdef CONFIG_RPXCLASSIC
((immap_t *)IMAP_ADDR)->im_siu_conf.sc_siel |=
(0x80000000 >> PHY_INTERRUPT);
- if (request_8xxirq(PHY_INTERRUPT, mii_link_interrupt, 0, "mii", dev) != 0)
+ if (request_irq(PHY_INTERRUPT, mii_link_interrupt, 0, "mii", dev) != 0)
panic("Could not allocate MII IRQ!");
#endif