diff options
author | Michael Reiss <michael.f.reiss@freescale.com> | 2007-04-13 02:26:11 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-28 11:01:04 -0400 |
commit | 702ff12ce7e9643084232a8d50b0b1eec26026ae (patch) | |
tree | d00d43218efdc3f6e5356c638438f2f0a2bc3774 /drivers/net/ucc_geth.h | |
parent | 728de4c927a3544b6d3da331b634035d4c75ca17 (diff) |
ucc_geth: NAPI-related bug fixes
Based partly on the gianfar driver, this patch fixes several
bugs which were causing NAPI to be completely unusable.
* An IRQ is still needed in NAPI, to kick off NAPI task,
and for Tx processing. Request the IRQ.
* If rx_work_limit = 0 we are not complete.
* While running Rx NAPI processing we must mask Rx events,
including Rx busy.
* ucc_geth_rx function does not need a lock.
Could lead to deadlock in NAPI case.
* There's no need to loop reading ucce multiple times in the ISR,
so while adding the call to schedule NAPI which was not there,
simplify the event processing into if-else format.
* Rx Busy now kicks off NAPI processing, while still
being counted as an error.
Signed-off-by: Michael Reiss <michael.f.reiss@freescale.com>
Signed-off-by: Michael Barkowski <michael.barkowski@freescale.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/ucc_geth.h')
-rw-r--r-- | drivers/net/ucc_geth.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ucc_geth.h b/drivers/net/ucc_geth.h index 6e97c20b92aa..7cf3dbc9fd4c 100644 --- a/drivers/net/ucc_geth.h +++ b/drivers/net/ucc_geth.h | |||
@@ -205,6 +205,9 @@ struct ucc_geth { | |||
205 | #define UCCE_OTHER (UCCE_SCAR | UCCE_GRA | UCCE_CBPR | UCCE_BSY |\ | 205 | #define UCCE_OTHER (UCCE_SCAR | UCCE_GRA | UCCE_CBPR | UCCE_BSY |\ |
206 | UCCE_RXC | UCCE_TXC | UCCE_TXE) | 206 | UCCE_RXC | UCCE_TXC | UCCE_TXE) |
207 | 207 | ||
208 | #define UCCE_RX_EVENTS (UCCE_RXF | UCCE_BSY) | ||
209 | #define UCCE_TX_EVENTS (UCCE_TXB | UCCE_TXE) | ||
210 | |||
208 | /* UCC GETH UPSMR (Protocol Specific Mode Register) */ | 211 | /* UCC GETH UPSMR (Protocol Specific Mode Register) */ |
209 | #define UPSMR_ECM 0x04000000 /* Enable CAM | 212 | #define UPSMR_ECM 0x04000000 /* Enable CAM |
210 | Miss or | 213 | Miss or |