Changeset 928 in vbox
- Timestamp:
- Feb 15, 2007 4:22:32 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18661
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r927 r928 1922 1922 } 1923 1923 1924 /**1925 * Fails a TMD with a generic error.1926 */1927 static void pcnetXmitFailTMDGeneric(PCNetState *pData, TMD *pTmd)1928 {1929 /* make carrier error - hope this is correct. */1930 pTmd->tmd2.lcar = pTmd->tmd1.err = 1;1931 pData->aCSR[0] |= BIT(15) | BIT(13); /* ERR | CERR */1932 pData->Led.Asserted.s.fError = pData->Led.Actual.s.fError = 1;1933 Log(("#%d pcnetTransmit: Signaling send error. swstyle=%#x\n",1934 PCNETSTATE_2_DEVINS(pData)->iInstance, pData->aBCR[BCR_SWS]));1935 }1936 1937 1924 1938 1925 /** … … 2063 2050 RTR3PTR pv; 2064 2051 2052 /* From the manual: ``A zero length buffers is acceptable as 2053 * long as it is not the last buffer in a chain (STP = 0 and 2054 * ENP = 1).'' That means that the first buffer might have a 2055 * zero length if it is not the last one in the chain. */ 2065 2056 if (RT_LIKELY(cb < 4096)) 2066 2057 { … … 2090 2081 * which causes transmit to stall for about 10 seconds). 2091 2082 * This is just a workaround, not a final solution. */ 2083 /* r=frank: IMHO this is the correct implementation. The 2084 * manual says: ``If the OWN bit is set and the buffer 2085 * length is 0, the OWN bit will be cleared. In the C-LANCE 2086 * the buffer length of 0 is interpreted as a 4096-byte 2087 * buffer.'' */ 2092 2088 LogRel(("PCNET: pcnetAsyncTransmit: illegal 4kb frame -> ignoring\n")); 2093 2089 pcnetTmdStorePassHost(pData, &tmd, PHYSADDR(pData, CSR_CXDA(pData))); 2094 2090 break; 2095 }2096 else2097 {2098 /* This is only acceptable if it's not the last buffer in the chain (stp=1, enp=0) */2099 LogRel(("PCNET: pcnetAsyncTransmit: illegal 4kb frame -> signalling error\n"));2100 2101 pcnetXmitFailTMDGeneric(pData, &tmd);2102 2091 } 2103 2092 }
Note:
See TracChangeset
for help on using the changeset viewer.