mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Update code according to the reviews
* move emac driver to COMPONENT folder * use mbed rtos C++ API instead of CMSIS APIpull/8668/head
							parent
							
								
									eea7245d41
								
							
						
					
					
						commit
						78b186ec56
					
				| 
						 | 
				
			
			@ -43,21 +43,9 @@
 | 
			
		|||
#define PHY_TASK_PERIOD_MS      200
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fvp_EMAC::fvp_EMAC()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
fvp_EMAC::fvp_EMAC() : _thread(THREAD_PRIORITY,THREAD_STACKSIZE,NULL,"fvp_emac_thread")
 | 
			
		||||
 | 
			
		||||
/** \brief Create a new thread for TX/RX. */
 | 
			
		||||
static osThreadId_t create_new_thread(const char *threadName, void (*thread)(void *arg), void *arg, int stacksize, osPriority_t priority, mbed_rtos_storage_thread_t *_thread_cb)
 | 
			
		||||
{
 | 
			
		||||
    osThreadAttr_t attr = {0};
 | 
			
		||||
    attr.name = threadName;
 | 
			
		||||
    attr.stack_mem  = malloc(stacksize);
 | 
			
		||||
    attr.cb_mem  = _thread_cb;
 | 
			
		||||
    attr.stack_size = stacksize;
 | 
			
		||||
    attr.cb_size = sizeof(mbed_rtos_storage_thread_t);
 | 
			
		||||
    attr.priority = priority;
 | 
			
		||||
    return osThreadNew(thread, arg, &attr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fvp_EMAC::ethernet_callback(lan91_event_t event, void *param)
 | 
			
		||||
| 
						 | 
				
			
			@ -79,15 +67,13 @@ void fvp_EMAC::ethernet_callback(lan91_event_t event, void *param)
 | 
			
		|||
/** \brief Ethernet receive interrupt handler */
 | 
			
		||||
void fvp_EMAC::rx_isr()
 | 
			
		||||
{
 | 
			
		||||
    if (_thread) {
 | 
			
		||||
        osThreadFlagsSet(_thread, FLAG_RX);
 | 
			
		||||
    }
 | 
			
		||||
    _thread.flags_set(FLAG_RX);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Ethernet transmit interrupt handler */
 | 
			
		||||
void fvp_EMAC::tx_isr()
 | 
			
		||||
{
 | 
			
		||||
    osThreadFlagsSet(_thread, FLAG_TX);
 | 
			
		||||
    _thread.flags_set(FLAG_TX);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Low level init of the MAC and PHY. */
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +95,7 @@ void fvp_EMAC::thread_function(void* pvParameters)
 | 
			
		|||
    struct fvp_EMAC *fvp_enet = static_cast<fvp_EMAC *>(pvParameters);
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        uint32_t flags = osThreadFlagsWait(FLAG_RX|FLAG_TX, osFlagsWaitAny, osWaitForever);
 | 
			
		||||
        uint32_t flags = ThisThread::flags_wait_any(FLAG_RX|FLAG_TX);
 | 
			
		||||
        if (flags & FLAG_RX) {
 | 
			
		||||
            fvp_enet->packet_rx();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -234,8 +220,8 @@ bool fvp_EMAC::power_up()
 | 
			
		|||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* ethernet Worker thread */
 | 
			
		||||
    _thread = create_new_thread("FVP_EMAC_thread", &fvp_EMAC::thread_function, this, THREAD_STACKSIZE, THREAD_PRIORITY, &_thread_cb);
 | 
			
		||||
    /* Start ethernet Worker thread */
 | 
			
		||||
    _thread.start(callback(&fvp_EMAC::thread_function, this));
 | 
			
		||||
 | 
			
		||||
    /* Trigger thread to deal with any RX packets that arrived before thread was started */
 | 
			
		||||
    rx_isr();
 | 
			
		||||
| 
						 | 
				
			
			@ -246,7 +232,7 @@ bool fvp_EMAC::power_up()
 | 
			
		|||
    mbed::mbed_event_queue()->call(mbed::callback(this, &fvp_EMAC::phy_task));
 | 
			
		||||
 | 
			
		||||
    /* Allow the PHY task to detect the initial link state and set up the proper flags */
 | 
			
		||||
    osDelay(10);
 | 
			
		||||
    wait_ms(10);
 | 
			
		||||
 | 
			
		||||
    _phy_task_handle = mbed::mbed_event_queue()->call_every(PHY_TASK_PERIOD_MS, mbed::callback(this, &fvp_EMAC::phy_task));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
#define FVP_EMAC_H_
 | 
			
		||||
 | 
			
		||||
#include "EMAC.h"
 | 
			
		||||
#include "rtos/Semaphore.h"
 | 
			
		||||
#include "mbed.h"
 | 
			
		||||
#include "rtos/Mutex.h"
 | 
			
		||||
#include "lan91c111.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -163,8 +163,7 @@ private:
 | 
			
		|||
    void phy_task();
 | 
			
		||||
    static void ethernet_callback(lan91_event_t event, void *param); 
 | 
			
		||||
 | 
			
		||||
    mbed_rtos_storage_thread_t _thread_cb;
 | 
			
		||||
    osThreadId_t _thread;        /* Processing thread */
 | 
			
		||||
    Thread _thread;        /* Processing thread */
 | 
			
		||||
    rtos::Mutex _TXLockMutex;    /* TX critical section mutex */
 | 
			
		||||
 | 
			
		||||
    emac_link_input_cb_t _emac_link_input_cb;        /* Callback for incoming data */
 | 
			
		||||
| 
						 | 
				
			
			@ -7134,7 +7134,7 @@
 | 
			
		|||
            "USTICKER"
 | 
			
		||||
        ],
 | 
			
		||||
        "release_versions": ["5"],
 | 
			
		||||
        "extra_labels": ["ARM_FM_EMAC"],
 | 
			
		||||
        "components": ["LAN91C111"],
 | 
			
		||||
        "overrides": {
 | 
			
		||||
            "network-default-interface-type": "ETHERNET"
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue