[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/20] eepro100: Support RNR interrupt
From: |
Stefan Weil |
Subject: |
[Qemu-devel] [PATCH 13/20] eepro100: Support RNR interrupt |
Date: |
Sun, 14 Feb 2010 17:16:22 +0100 |
The RNR interrupt is triggered under these conditions:
* the RU is not ready to receive a frame due to missing resources
* the RU is ready and a RU abort command was requested
Signed-off-by: Stefan Weil <address@hidden>
---
hw/eepro100.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/hw/eepro100.c b/hw/eepro100.c
index b5bd05b..37176cd 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -120,7 +120,7 @@
#define RU_NOP 0x0000
#define RX_START 0x0001
#define RX_RESUME 0x0002
-#define RX_ABORT 0x0004
+#define RU_ABORT 0x0004
#define RX_ADDR_LOAD 0x0006
#define RX_RESUMENR 0x0007
#define INT_MASK 0x0100
@@ -426,13 +426,11 @@ static void eepro100_fr_interrupt(EEPRO100State * s)
eepro100_interrupt(s, 0x40);
}
-#if 0
static void eepro100_rnr_interrupt(EEPRO100State * s)
{
/* RU is not ready. */
eepro100_interrupt(s, 0x10);
}
-#endif
static void eepro100_mdi_interrupt(EEPRO100State * s)
{
@@ -1065,6 +1063,13 @@ static void eepro100_ru_command(EEPRO100State * s,
uint8_t val)
}
set_ru_state(s, ru_ready);
break;
+ case RU_ABORT:
+ /* RU abort. */
+ if (get_ru_state(s) == ru_ready) {
+ eepro100_rnr_interrupt(s);
+ }
+ set_ru_state(s, ru_idle);
+ break;
case RX_ADDR_LOAD:
/* Load RU base. */
TRACE(OTHER, logout("val=0x%02x (RU base address)\n", val));
@@ -1747,6 +1752,8 @@ static ssize_t nic_receive(VLANClientState *nc, const
uint8_t * buf, size_t size
if (get_ru_state(s) != ru_ready) {
/* No resources available. */
logout("no resources, state=%u\n", get_ru_state(s));
+ /* TODO: RNR interrupt only at first failed frame? */
+ eepro100_rnr_interrupt(s);
s->statistics.rx_resource_errors++;
//~ assert(!"no resources");
return -1;
--
1.6.6.1
- [Qemu-devel] [PATCH 03/20] eepro100: Fix PXE boot, (continued)
- [Qemu-devel] [PATCH 03/20] eepro100: Fix PXE boot, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 04/20] eepro100: Support gpxe boot for all eepro100 devices, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 05/20] eepro100: Add all supported devices to pci.c, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 06/20] eepro100: Add TODO list, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 07/20] eepro100: Update copyright notice, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 08/20] eepro100: Add device descriptions, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 09/20] eepro100: Use symbolic names and BIT macros in binary operations, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 10/20] eepro100: Remove old unused code, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 11/20] eepro100: Use symbolic names for bits in EEPROM id, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 12/20] eepro100: Replace variable name to fix a compiler warning, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 13/20] eepro100: Support RNR interrupt,
Stefan Weil <=
- [Qemu-devel] [PATCH 14/20] eepro100: Fix CU Start command, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 15/20] eepro100: Prettify code (no functional changes), Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 16/20] eepro100: Use tx.status, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 17/20] eepro100: New function for reading command block, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 18/20] eepro100: Add diagnose command, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 19/20] eepro100: Remove C++ comments, Stefan Weil, 2010/02/14
- [Qemu-devel] [PATCH 20/20] eepro100: Keep includes sorted, Stefan Weil, 2010/02/14
- [Qemu-devel] Re: [PATCH 11/20] eepro100: Use symbolic names for bits in EEPROM id, Michael S. Tsirkin, 2010/02/21
- [Qemu-devel] Re: [PATCH 11/20] eepro100: Use symbolic names for bits in EEPROM id, Stefan Weil, 2010/02/21
- [Qemu-devel] Re: [PATCH 11/20] eepro100: Use symbolic names for bits in EEPROM id, Michael S. Tsirkin, 2010/02/22