aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/lib8390.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/net/lib8390.c b/drivers/net/lib8390.c
index 72ffbeb829cc..ed495275b577 100644
--- a/drivers/net/lib8390.c
+++ b/drivers/net/lib8390.c
@@ -150,19 +150,19 @@ static void __NS8390_init(struct net_device *dev, int startp);
150 * card means that approach caused horrible problems like losing serial data 150 * card means that approach caused horrible problems like losing serial data
151 * at 38400 baud on some chips. Remember many 8390 nics on PCI were ISA 151 * at 38400 baud on some chips. Remember many 8390 nics on PCI were ISA
152 * chips with FPGA front ends. 152 * chips with FPGA front ends.
153 * 153 *
154 * Ok the logic behind the 8390 is very simple: 154 * Ok the logic behind the 8390 is very simple:
155 * 155 *
156 * Things to know 156 * Things to know
157 * - IRQ delivery is asynchronous to the PCI bus 157 * - IRQ delivery is asynchronous to the PCI bus
158 * - Blocking the local CPU IRQ via spin locks was too slow 158 * - Blocking the local CPU IRQ via spin locks was too slow
159 * - The chip has register windows needing locking work 159 * - The chip has register windows needing locking work
160 * 160 *
161 * So the path was once (I say once as people appear to have changed it 161 * So the path was once (I say once as people appear to have changed it
162 * in the mean time and it now looks rather bogus if the changes to use 162 * in the mean time and it now looks rather bogus if the changes to use
163 * disable_irq_nosync_irqsave are disabling the local IRQ) 163 * disable_irq_nosync_irqsave are disabling the local IRQ)
164 * 164 *
165 * 165 *
166 * Take the page lock 166 * Take the page lock
167 * Mask the IRQ on chip 167 * Mask the IRQ on chip
168 * Disable the IRQ (but not mask locally- someone seems to have 168 * Disable the IRQ (but not mask locally- someone seems to have
@@ -170,22 +170,22 @@ static void __NS8390_init(struct net_device *dev, int startp);
170 * [This must be _nosync as the page lock may otherwise 170 * [This must be _nosync as the page lock may otherwise
171 * deadlock us] 171 * deadlock us]
172 * Drop the page lock and turn IRQs back on 172 * Drop the page lock and turn IRQs back on
173 * 173 *
174 * At this point an existing IRQ may still be running but we can't 174 * At this point an existing IRQ may still be running but we can't
175 * get a new one 175 * get a new one
176 * 176 *
177 * Take the lock (so we know the IRQ has terminated) but don't mask 177 * Take the lock (so we know the IRQ has terminated) but don't mask
178 * the IRQs on the processor 178 * the IRQs on the processor
179 * Set irqlock [for debug] 179 * Set irqlock [for debug]
180 * 180 *
181 * Transmit (slow as ****) 181 * Transmit (slow as ****)
182 * 182 *
183 * re-enable the IRQ 183 * re-enable the IRQ
184 * 184 *
185 * 185 *
186 * We have to use disable_irq because otherwise you will get delayed 186 * We have to use disable_irq because otherwise you will get delayed
187 * interrupts on the APIC bus deadlocking the transmit path. 187 * interrupts on the APIC bus deadlocking the transmit path.
188 * 188 *
189 * Quite hairy but the chip simply wasn't designed for SMP and you can't 189 * Quite hairy but the chip simply wasn't designed for SMP and you can't
190 * even ACK an interrupt without risking corrupting other parallel 190 * even ACK an interrupt without risking corrupting other parallel
191 * activities on the chip." [lkml, 25 Jul 2007] 191 * activities on the chip." [lkml, 25 Jul 2007]
@@ -553,7 +553,6 @@ static void __ei_poll(struct net_device *dev)
553static void ei_tx_err(struct net_device *dev) 553static void ei_tx_err(struct net_device *dev)
554{ 554{
555 unsigned long e8390_base = dev->base_addr; 555 unsigned long e8390_base = dev->base_addr;
556 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
557 unsigned char txsr = ei_inb_p(e8390_base+EN0_TSR); 556 unsigned char txsr = ei_inb_p(e8390_base+EN0_TSR);
558 unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU); 557 unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
559 558
@@ -816,7 +815,6 @@ static void ei_rx_overrun(struct net_device *dev)
816{ 815{
817 unsigned long e8390_base = dev->base_addr; 816 unsigned long e8390_base = dev->base_addr;
818 unsigned char was_txing, must_resend = 0; 817 unsigned char was_txing, must_resend = 0;
819 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
820 818
821 /* 819 /*
822 * Record whether a Tx was in progress and then issue the 820 * Record whether a Tx was in progress and then issue the