Various patches related to MACv2 and LWIP.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13889 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
35d38d71c5
commit
d903736f25
|
@ -30,6 +30,39 @@
|
|||
|
||||
#include "hal_mii.h"
|
||||
|
||||
/* Fixes for errors in ST headers.*/
|
||||
#if ETH_DMADSR_RPS_FETCHING_Pos == 12
|
||||
#undef ETH_DMADSR_RPS_FETCHING_Pos
|
||||
#define ETH_DMADSR_RPS_FETCHING_Pos (8U)
|
||||
#endif
|
||||
|
||||
#if ETH_DMADSR_RPS_WAITING_Pos == 12
|
||||
#undef ETH_DMADSR_RPS_WAITING_Pos
|
||||
#define ETH_DMADSR_RPS_WAITING_Pos (9U)
|
||||
#endif
|
||||
|
||||
#if ETH_DMADSR_RPS_SUSPENDED_Pos == 14
|
||||
#undef ETH_DMADSR_RPS_SUSPENDED_Pos
|
||||
#define ETH_DMADSR_RPS_SUSPENDED_Pos (10U)
|
||||
#endif
|
||||
|
||||
#if ETH_DMADSR_RPS_CLOSING_Pos == 12
|
||||
#undef ETH_DMADSR_RPS_CLOSING_Pos
|
||||
#define ETH_DMADSR_RPS_CLOSING_Pos (10U)
|
||||
#endif
|
||||
|
||||
#if ETH_DMADSR_RPS_TIMESTAMP_WR_Pos == 13
|
||||
#undef ETH_DMADSR_RPS_TIMESTAMP_WR_Pos
|
||||
#undef ETH_DMADSR_RPS_TIMESTAMP_WR_Msk
|
||||
#define ETH_DMADSR_RPS_TIMESTAMP_WR_Pos (10U)
|
||||
#define ETH_DMADSR_RPS_TIMESTAMP_WR_Msk (0x6UL << ETH_DMADSR_RPS_TIMESTAMP_WR_Pos)
|
||||
#endif
|
||||
|
||||
#if ETH_DMADSR_RPS_TRANSFERRING_Pos == 12
|
||||
#undef ETH_DMADSR_RPS_TRANSFERRING_Pos
|
||||
#define ETH_DMADSR_RPS_TRANSFERRING_Pos (10U)
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
@ -519,7 +552,7 @@ void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) {
|
|||
__DSB();
|
||||
|
||||
/* If the DMA engine is stalled then a restart request is issued.*/
|
||||
if ((ETH->DMACSR & ETH_DMACSR_TPS) == ETH_DMADSR_TPS_SUSPENDED) {
|
||||
if ((ETH->DMADSR & ETH_DMADSR_TPS) == ETH_DMADSR_TPS_SUSPENDED) {
|
||||
ETH->DMACSR = ETH_DMACSR_TBU;
|
||||
}
|
||||
ETH->DMACTDTPR = 0;
|
||||
|
@ -596,7 +629,7 @@ void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) {
|
|||
__DSB();
|
||||
|
||||
/* If the DMA engine is stalled then a restart request is issued.*/
|
||||
if ((ETH->DMACSR & ETH_DMACSR_RPS) == ETH_DMADSR_RPS_SUSPENDED) {
|
||||
if ((ETH->DMADSR & ETH_DMADSR_RPS) == ETH_DMADSR_RPS_SUSPENDED) {
|
||||
ETH->DMACSR = ETH_DMACSR_RBU;
|
||||
}
|
||||
ETH->DMACRDTPR = 0;
|
||||
|
|
|
@ -61,6 +61,17 @@
|
|||
|
||||
#include "arch/cc.h"
|
||||
#include "arch/sys_arch.h"
|
||||
#include "lwipopts.h"
|
||||
|
||||
#ifndef CH_LWIP_USE_MEM_POOLS
|
||||
#define CH_LWIP_USE_MEM_POOLS FALSE
|
||||
#endif
|
||||
|
||||
#if CH_LWIP_USE_MEM_POOLS
|
||||
static MEMORYPOOL_DECL(lwip_sys_arch_sem_pool, sizeof(semaphore_t), 4, chCoreAllocAlignedI);
|
||||
static MEMORYPOOL_DECL(lwip_sys_arch_mbox_pool, sizeof(mailbox_t) + sizeof(msg_t) * TCPIP_MBOX_SIZE, 4, chCoreAllocAlignedI);
|
||||
static MEMORYPOOL_DECL(lwip_sys_arch_thread_pool, THD_WORKING_AREA_SIZE(TCPIP_THREAD_STACKSIZE), PORT_WORKING_AREA_ALIGN, chCoreAllocAlignedI);
|
||||
#endif
|
||||
|
||||
void sys_init(void) {
|
||||
|
||||
|
@ -68,7 +79,12 @@ void sys_init(void) {
|
|||
|
||||
err_t sys_sem_new(sys_sem_t *sem, u8_t count) {
|
||||
|
||||
#if !CH_LWIP_USE_MEM_POOLS
|
||||
*sem = chHeapAlloc(NULL, sizeof(semaphore_t));
|
||||
#else
|
||||
*sem = chPoolAlloc(&lwip_sys_arch_sem_pool);
|
||||
#endif
|
||||
|
||||
if (*sem == 0) {
|
||||
SYS_STATS_INC(sem.err);
|
||||
return ERR_MEM;
|
||||
|
@ -82,7 +98,11 @@ err_t sys_sem_new(sys_sem_t *sem, u8_t count) {
|
|||
|
||||
void sys_sem_free(sys_sem_t *sem) {
|
||||
|
||||
#if !CH_LWIP_USE_MEM_POOLS
|
||||
chHeapFree(*sem);
|
||||
#else
|
||||
chPoolFree(&lwip_sys_arch_sem_pool, *sem);
|
||||
#endif
|
||||
*sem = SYS_SEM_NULL;
|
||||
SYS_STATS_DEC(sem.used);
|
||||
}
|
||||
|
@ -128,7 +148,11 @@ void sys_sem_set_invalid(sys_sem_t *sem) {
|
|||
|
||||
err_t sys_mbox_new(sys_mbox_t *mbox, int size) {
|
||||
|
||||
#if !CH_LWIP_USE_MEM_POOLS
|
||||
*mbox = chHeapAlloc(NULL, sizeof(mailbox_t) + sizeof(msg_t) * size);
|
||||
#else
|
||||
*mbox = chPoolAlloc(&lwip_sys_arch_mbox_pool);
|
||||
#endif
|
||||
if (*mbox == 0) {
|
||||
SYS_STATS_INC(mbox.err);
|
||||
return ERR_MEM;
|
||||
|
@ -154,7 +178,11 @@ void sys_mbox_free(sys_mbox_t *mbox) {
|
|||
SYS_STATS_INC(mbox.err);
|
||||
chMBReset(*mbox);
|
||||
}
|
||||
#if !CH_LWIP_USE_MEM_POOLS
|
||||
chHeapFree(*mbox);
|
||||
#else
|
||||
chPoolFree(&lwip_sys_arch_mbox_pool, *mbox);
|
||||
#endif
|
||||
*mbox = SYS_MBOX_NULL;
|
||||
SYS_STATS_DEC(mbox.used);
|
||||
}
|
||||
|
@ -210,8 +238,14 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread,
|
|||
void *arg, int stacksize, int prio) {
|
||||
thread_t *tp;
|
||||
|
||||
#if !CH_LWIP_USE_MEM_POOLS
|
||||
tp = chThdCreateFromHeap(NULL, THD_WORKING_AREA_SIZE(stacksize),
|
||||
name, prio, (tfunc_t)thread, arg);
|
||||
#else
|
||||
(void) stacksize;
|
||||
tp = chThdCreateFromMemoryPool(&lwip_sys_arch_thread_pool, name,
|
||||
prio, (tfunc_t)thread, arg);
|
||||
#endif
|
||||
return (sys_thread_t)tp;
|
||||
}
|
||||
|
||||
|
|
|
@ -74,6 +74,8 @@
|
|||
*****************************************************************************
|
||||
|
||||
*** Next ***
|
||||
- NEW: Added option to LWIP bindings to use memory pools instead of heap
|
||||
allocator.
|
||||
- NEW: Added MACv2 driver for STM32H7xx.
|
||||
- NEW: Added support for UART9 and UART10 in STM32 USARTv1 drivers.
|
||||
- NEW: Added board support for ST_STM32G474RE_DISCOVERY_DPOW1, added demo.
|
||||
|
|
Loading…
Reference in New Issue