Revision ef45c914 hw/pcnet.c

b/hw/pcnet.c
77 77
#define CSR_DTX(S)       !!(((S)->csr[15])&0x0002)
78 78
#define CSR_LOOP(S)      !!(((S)->csr[15])&0x0004)
79 79
#define CSR_DXMTFCS(S)   !!(((S)->csr[15])&0x0008)
80
#define CSR_INTL(S)      !!(((S)->csr[15])&0x0040)
80 81
#define CSR_DRCVPA(S)    !!(((S)->csr[15])&0x2000)
81 82
#define CSR_DRCVBC(S)    !!(((S)->csr[15])&0x4000)
82 83
#define CSR_PROM(S)      !!(((S)->csr[15])&0x8000)
......
1234 1235
            if (BCR_SWSTYLE(s) != 1)
1235 1236
                add_crc = GET_FIELD(tmd.status, TMDS, ADDFCS);
1236 1237
        }
1238
        if (s->lnkst == 0 &&
1239
            (!CSR_LOOP(s) || (!CSR_INTL(s) && !BCR_TMAULOOP(s)))) {
1240
            SET_FIELD(&tmd.misc, TMDM, LCAR, 1);
1241
            SET_FIELD(&tmd.status, TMDS, ERR, 1);
1242
            SET_FIELD(&tmd.status, TMDS, OWN, 0);
1243
            s->csr[0] |= 0xa000; /* ERR | CERR */
1244
            s->xmit_pos = -1;
1245
            goto txdone;
1246
        }
1237 1247
        if (!GET_FIELD(tmd.status, TMDS, ENP)) {
1238 1248
            int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT);
1239 1249
            s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr),
......
1262 1272
            s->xmit_pos = -1;
1263 1273
        }
1264 1274

  
1275
    txdone:
1265 1276
        SET_FIELD(&tmd.status, TMDS, OWN, 0);
1266 1277
        TMDSTORE(&tmd, PHYSADDR(s,CSR_CXDA(s)));
1267 1278
        if (!CSR_TOKINTD(s) || (CSR_LTINTEN(s) && GET_FIELD(tmd.status, TMDS, LTINT)))

Also available in: Unified diff