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