git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13543 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2020-04-19 15:35:46 +00:00
parent 241799921e
commit 8acdaf5d31
3 changed files with 12 additions and 15 deletions

View File

@ -427,15 +427,12 @@ msg_t mac_lld_get_transmit_descriptor(MACDriver *macp,
if (!macp->link_up) if (!macp->link_up)
return MSG_TIMEOUT; return MSG_TIMEOUT;
osalSysLock();
/* Get Current TX descriptor.*/ /* Get Current TX descriptor.*/
tdes = macp->txptr; tdes = macp->txptr;
/* Ensure that descriptor isn't owned by the Ethernet DMA or locked by /* Ensure that descriptor isn't owned by the Ethernet DMA or locked by
another thread.*/ another thread.*/
if (tdes->tdes0 & (STM32_TDES0_OWN | STM32_TDES0_LOCKED)) { if (tdes->tdes0 & (STM32_TDES0_OWN | STM32_TDES0_LOCKED)) {
osalSysUnlock();
return MSG_TIMEOUT; return MSG_TIMEOUT;
} }
@ -445,8 +442,6 @@ msg_t mac_lld_get_transmit_descriptor(MACDriver *macp,
/* Next TX descriptor to use.*/ /* Next TX descriptor to use.*/
macp->txptr = (stm32_eth_tx_descriptor_t *)tdes->tdes3; macp->txptr = (stm32_eth_tx_descriptor_t *)tdes->tdes3;
osalSysUnlock();
/* Set the buffer size and configuration.*/ /* Set the buffer size and configuration.*/
tdp->offset = 0; tdp->offset = 0;
tdp->size = STM32_MAC_BUFFERS_SIZE; tdp->size = STM32_MAC_BUFFERS_SIZE;
@ -503,8 +498,6 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp,
MACReceiveDescriptor *rdp) { MACReceiveDescriptor *rdp) {
stm32_eth_rx_descriptor_t *rdes; stm32_eth_rx_descriptor_t *rdes;
osalSysLock();
/* Get Current RX descriptor.*/ /* Get Current RX descriptor.*/
rdes = macp->rxptr; rdes = macp->rxptr;
@ -523,7 +516,6 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp,
rdp->physdesc = rdes; rdp->physdesc = rdes;
macp->rxptr = (stm32_eth_rx_descriptor_t *)rdes->rdes3; macp->rxptr = (stm32_eth_rx_descriptor_t *)rdes->rdes3;
osalSysUnlock();
return MSG_OK; return MSG_OK;
} }
/* Invalid frame found, purging.*/ /* Invalid frame found, purging.*/
@ -534,7 +526,6 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp,
/* Next descriptor to check.*/ /* Next descriptor to check.*/
macp->rxptr = rdes; macp->rxptr = rdes;
osalSysUnlock();
return MSG_TIMEOUT; return MSG_TIMEOUT;
} }

View File

@ -155,16 +155,18 @@ msg_t macWaitTransmitDescriptor(MACDriver *macp,
osalDbgCheck((macp != NULL) && (tdp != NULL)); osalDbgCheck((macp != NULL) && (tdp != NULL));
osalDbgAssert(macp->state == MAC_ACTIVE, "not active"); osalDbgAssert(macp->state == MAC_ACTIVE, "not active");
osalSysLock();
while (((msg = mac_lld_get_transmit_descriptor(macp, tdp)) != MSG_OK) && while (((msg = mac_lld_get_transmit_descriptor(macp, tdp)) != MSG_OK) &&
(timeout > (sysinterval_t)0)) { (timeout > (sysinterval_t)0)) {
osalSysLock();
msg = osalThreadEnqueueTimeoutS(&macp->tdqueue, timeout); msg = osalThreadEnqueueTimeoutS(&macp->tdqueue, timeout);
if (msg == MSG_TIMEOUT) { if (msg == MSG_TIMEOUT) {
osalSysUnlock();
break; break;
} }
osalSysUnlock();
} }
osalSysUnlock();
return msg; return msg;
} }
@ -210,15 +212,17 @@ msg_t macWaitReceiveDescriptor(MACDriver *macp,
osalDbgCheck((macp != NULL) && (rdp != NULL)); osalDbgCheck((macp != NULL) && (rdp != NULL));
osalDbgAssert(macp->state == MAC_ACTIVE, "not active"); osalDbgAssert(macp->state == MAC_ACTIVE, "not active");
osalSysLock();
while (((msg = mac_lld_get_receive_descriptor(macp, rdp)) != MSG_OK)) { while (((msg = mac_lld_get_receive_descriptor(macp, rdp)) != MSG_OK)) {
osalSysLock();
msg = osalThreadEnqueueTimeoutS(&macp->rdqueue, timeout); msg = osalThreadEnqueueTimeoutS(&macp->rdqueue, timeout);
if (msg == MSG_TIMEOUT) { if (msg == MSG_TIMEOUT) {
osalSysUnlock();
break; break;
} }
osalSysUnlock();
} }
osalSysUnlock();
return msg; return msg;
} }

View File

@ -83,6 +83,8 @@
MEMS Accelerometers. MEMS Accelerometers.
- NEW: Safer messages mechanism for sandboxes (to be backported to 20.3.1). - NEW: Safer messages mechanism for sandboxes (to be backported to 20.3.1).
- NEW: Added latency measurement test application. - NEW: Added latency measurement test application.
- FIX: Fixed race condition in HAL MAC driver (bug #1083)
(backported to 20.3.1)(backported to 19.1.4).
- FIX: Fixed early interrupts enable in ARMv7-M port (bug #1081) - FIX: Fixed early interrupts enable in ARMv7-M port (bug #1081)
(backported to 20.3.1). (backported to 20.3.1).
- FIX: Fixed I2CD4 interrupt vectors are swapped versus I2CD1-I2CD3 (bug #1080) - FIX: Fixed I2CD4 interrupt vectors are swapped versus I2CD1-I2CD3 (bug #1080)