***************
/* For crc32 */
#include <zlib.h>
! //#define DEBUG_FEC 1
#ifdef DEBUG_FEC
#define DPRINTF(fmt, ...) \
/* For crc32 */
#include <zlib.h>
! #define DEBUG_FEC 1
#ifdef DEBUG_FEC
#define DPRINTF(fmt, ...) \
***************
if (bd.flags & FEC_BD_L) {
/* Last buffer in frame. */
DPRINTF("Sending packet\n");
! qemu_send_packet(s->vc, frame, len);
ptr = frame;
frame_size = 0;
s->eir |= FEC_INT_TXF;
if (bd.flags & FEC_BD_L) {
/* Last buffer in frame. */
DPRINTF("Sending packet\n");
! qemu_send_packet(s->vc, frame, frame_size);
ptr = frame;
frame_size = 0;
s->eir |= FEC_INT_TXF;
***************
static uint32_t mcf_fec_read(void *opaque, target_phys_addr_t addr)
{
mcf_fec_state *s = (mcf_fec_state *)opaque;
! switch (addr & 0x3ff) {
case 0x004: return s->eir;
case 0x008: return s->eimr;
case 0x010: return s->rx_enabled ? (1 << 24) : 0; /* RDAR */
static uint32_t mcf_fec_read(void *opaque, target_phys_addr_t addr)
{
mcf_fec_state *s = (mcf_fec_state *)opaque;
! addr &= 0x3ff;
! switch (addr) {
case 0x004: return s->eir;
case 0x008: return s->eimr;
case 0x010: return s->rx_enabled ? (1 << 24) : 0; /* RDAR */
***************
case 0x184: return s->etdsr;
case 0x188: return s->emrbr;
default:
+ if ( addr >= 0x200 && addr < 0x2e4 )
+ return 0xdeadbeef; /* FIXME: MIB counters not implemented */
hw_error("mcf_fec_read: Bad address 0x%x\n", (int)addr);
return 0;
}
***************
static void mcf_fec_write(void *opaque, target_phys_addr_t addr, uint32_t value)
{
mcf_fec_state *s = (mcf_fec_state *)opaque;
! switch (addr & 0x3ff) {
case 0x004:
s->eir &= ~value;
break;
static void mcf_fec_write(void *opaque, target_phys_addr_t addr, uint32_t value)
{
mcf_fec_state *s = (mcf_fec_state *)opaque;
! addr &= 0x3ff;
! switch (addr) {
case 0x004:
s->eir &= ~value;
break;
***************
case 0x040:
/* TODO: Implement MII. */
s->mmfr = value;
+ s->eir |= FEC_INT_MII;
break;
case 0x044:
s->mscr = value & 0xfe;
***************
s->emrbr = value & 0x7f0;
break;
default:
+ if ( addr >= 0x200 && addr < 0x2e4 )
+ return; /* FIXME: MIB counters not implemented */
hw_error("mcf_fec_write Bad address 0x%x\n", (int)addr);
}
mcf_fec_update(s);