diff options
Diffstat (limited to 'ports')
-rw-r--r-- | ports/ARM7-AT91SAM7X/sam7x_emac.c | 8 | ||||
-rw-r--r-- | ports/ARM7-AT91SAM7X/sam7x_emac.h | 6 |
2 files changed, 7 insertions, 7 deletions
diff --git a/ports/ARM7-AT91SAM7X/sam7x_emac.c b/ports/ARM7-AT91SAM7X/sam7x_emac.c index 2ace89608..a8f7bf0a8 100644 --- a/ports/ARM7-AT91SAM7X/sam7x_emac.c +++ b/ports/ARM7-AT91SAM7X/sam7x_emac.c @@ -315,12 +315,12 @@ BufDescriptorEntry *EMACGetTransmitBuffer(void) { void EMACTransmit(BufDescriptorEntry *cptr, size_t size) {
chDbgAssert(size <= EMAC_TRANSMIT_BUFFERS_SIZE, "sam7x_emac.c, EMACTransmit");
-
- cptr->w2 &= ~W2_R_LENGTH_MASK;
- cptr->w2 |= size;
chSysLock();
- cptr->w2 &= ~(W2_T_USED | W2_T_LOCKED);
+ if (cptr < &tent[EMAC_TRANSMIT_BUFFERS - 1])
+ cptr->w2 = size | W2_T_LAST_BUFFER;
+ else
+ cptr->w2 = size | W2_T_LAST_BUFFER | W2_T_WRAP;
AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_TSTART;
chSysUnlock();
}
diff --git a/ports/ARM7-AT91SAM7X/sam7x_emac.h b/ports/ARM7-AT91SAM7X/sam7x_emac.h index 6eac41b00..599549c35 100644 --- a/ports/ARM7-AT91SAM7X/sam7x_emac.h +++ b/ports/ARM7-AT91SAM7X/sam7x_emac.h @@ -50,9 +50,9 @@ typedef struct { #define W2_T_LENGTH_MASK 0x000007FF
#define W2_T_LOCKED 0x00000800 /* Not an EMAC flag, used by the driver */
#define W2_T_RFU1 0x00003000
-#define W2_T_LAST_BUFFER 0x00004000
-#define W2_T_NO_CRC 0x00008000
-#define W2_T_RFU2 0x07FF0000
+#define W2_T_LAST_BUFFER 0x00008000
+#define W2_T_NO_CRC 0x00010000
+#define W2_T_RFU2 0x07FE0000
#define W2_T_BUFFERS_EXHAUSTED 0x08000000
#define W2_T_TRANSMIT_UNDERRUN 0x10000000
#define W2_T_RETRY_LIMIT_EXC 0x20000000
|