drivers/netdev: use netdev_trigger_event_isr function

This commit is contained in:
Jose Alamos 2020-03-05 15:11:20 +01:00
parent 67bc0e13af
commit 3ad574a822
28 changed files with 43 additions and 65 deletions

View File

@ -36,9 +36,7 @@ static netdev_t *_dev;
void _irq_handler(void) void _irq_handler(void)
{ {
if (_dev->event_callback) { netdev_trigger_event_isr(_dev);
_dev->event_callback(_dev, NETDEV_EVENT_ISR);
}
} }
static int _get(netdev_t *netdev, netopt_t opt, void *value, size_t max_len) static int _get(netdev_t *netdev, netopt_t opt, void *value, size_t max_len)

View File

@ -99,7 +99,7 @@ static esp_err_t IRAM_ATTR _eth_input_callback(void *buffer, uint16_t len, void
memcpy(_esp_eth_dev.rx_buf, buffer, len); memcpy(_esp_eth_dev.rx_buf, buffer, len);
_esp_eth_dev.rx_len = len; _esp_eth_dev.rx_len = len;
_esp_eth_dev.event = SYSTEM_EVENT_ETH_RX_DONE; _esp_eth_dev.event = SYSTEM_EVENT_ETH_RX_DONE;
_esp_eth_dev.netdev.event_callback(&_esp_eth_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_eth_dev.netdev);
mutex_unlock(&_esp_eth_dev.dev_lock); mutex_unlock(&_esp_eth_dev.dev_lock);
@ -351,7 +351,7 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
_esp_eth_dev.link_up = true; _esp_eth_dev.link_up = true;
if (SYSTEM_EVENT_MAX) { if (SYSTEM_EVENT_MAX) {
_esp_eth_dev.event = SYSTEM_EVENT_ETH_CONNECTED; _esp_eth_dev.event = SYSTEM_EVENT_ETH_CONNECTED;
_esp_eth_dev.netdev.event_callback(&_esp_eth_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_eth_dev.netdev);
} }
break; break;
case SYSTEM_EVENT_ETH_DISCONNECTED: case SYSTEM_EVENT_ETH_DISCONNECTED:
@ -359,7 +359,7 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
_esp_eth_dev.link_up = false; _esp_eth_dev.link_up = false;
if (SYSTEM_EVENT_MAX) { if (SYSTEM_EVENT_MAX) {
_esp_eth_dev.event = SYSTEM_EVENT_ETH_DISCONNECTED; _esp_eth_dev.event = SYSTEM_EVENT_ETH_DISCONNECTED;
_esp_eth_dev.netdev.event_callback(&_esp_eth_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_eth_dev.netdev);
} }
break; break;
default: default:

View File

@ -185,7 +185,7 @@ static void IRAM_ATTR esp_now_scan_peers_timer_cb(void* arg)
if (dev->netdev.event_callback) { if (dev->netdev.event_callback) {
dev->scan_event++; dev->scan_event++;
dev->netdev.event_callback((netdev_t*)dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t*)dev);
} }
} }

View File

@ -353,7 +353,7 @@ esp_err_t _esp_wifi_rx_cb(void *buffer, uint16_t len, void *eb)
/* trigger netdev event to read the data */ /* trigger netdev event to read the data */
_esp_wifi_dev.event_recv++; _esp_wifi_dev.event_recv++;
_esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_wifi_dev.netdev);
/* reset IRQ nesting counter */ /* reset IRQ nesting counter */
irq_interrupt_nesting--; irq_interrupt_nesting--;
@ -434,7 +434,7 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
_esp_wifi_dev.connected = true; _esp_wifi_dev.connected = true;
_esp_wifi_dev.event_conn++; _esp_wifi_dev.event_conn++;
_esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_wifi_dev.netdev);
break; break;
@ -455,7 +455,7 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
_esp_wifi_dev.connected = false; _esp_wifi_dev.connected = false;
_esp_wifi_dev.event_disc++; _esp_wifi_dev.event_disc++;
_esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&_esp_wifi_dev.netdev);
/* call disconnect to reset internal state */ /* call disconnect to reset internal state */
result = esp_wifi_disconnect(); result = esp_wifi_disconnect();

View File

@ -302,7 +302,7 @@ static void _tap_isr(int fd, void *arg) {
netdev_t *netdev = (netdev_t *)arg; netdev_t *netdev = (netdev_t *)arg;
if (netdev->event_callback) { if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(netdev);
} }
else { else {
puts("netdev_tap: _isr: no event callback."); puts("netdev_tap: _isr: no event callback.");

View File

@ -112,7 +112,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
/* simulate TX_STARTED interrupt */ /* simulate TX_STARTED interrupt */
if (netdev->event_callback) { if (netdev->event_callback) {
dev->last_event = NETDEV_EVENT_TX_STARTED; dev->last_event = NETDEV_EVENT_TX_STARTED;
netdev->event_callback(netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(netdev);
thread_yield(); thread_yield();
} }
res = writev(dev->sock_fd, v, n + 2); res = writev(dev->sock_fd, v, n + 2);
@ -123,7 +123,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
/* simulate TX_COMPLETE interrupt */ /* simulate TX_COMPLETE interrupt */
if (netdev->event_callback) { if (netdev->event_callback) {
dev->last_event = NETDEV_EVENT_TX_COMPLETE; dev->last_event = NETDEV_EVENT_TX_COMPLETE;
netdev->event_callback(netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(netdev);
thread_yield(); thread_yield();
} }
@ -283,7 +283,7 @@ static void _socket_isr(int fd, void *arg)
socket_zep_t *dev = (socket_zep_t *)netdev; socket_zep_t *dev = (socket_zep_t *)netdev;
dev->last_event = NETDEV_EVENT_RX_COMPLETE; dev->last_event = NETDEV_EVENT_RX_COMPLETE;
netdev->event_callback(netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(netdev);
} }
} }

View File

@ -526,7 +526,7 @@ void isr_radio(void)
DEBUG("[nrf802154] Unhandled state: %x\n", (uint8_t)NRF_RADIO->STATE); DEBUG("[nrf802154] Unhandled state: %x\n", (uint8_t)NRF_RADIO->STATE);
} }
if (_state) { if (_state) {
nrf802154_dev.netdev.event_callback(&nrf802154_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&nrf802154_dev.netdev);
} }
} }
else { else {

View File

@ -307,7 +307,7 @@ void isr_radio(void)
} }
else { else {
rx_lock = 0; rx_lock = 0;
nrfmin_dev.event_callback(&nrfmin_dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&nrfmin_dev);
} }
} }
else if (state == STATE_TX) { else if (state == STATE_TX) {

View File

@ -65,11 +65,7 @@ static netdev_t *at86rfmega_dev;
#else #else
static void _irq_handler(void *arg) static void _irq_handler(void *arg)
{ {
netdev_t *dev = (netdev_t *) arg; netdev_trigger_event_isr(arg);
if (dev->event_callback) {
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
} }
#endif #endif
@ -762,7 +758,7 @@ ISR(TRX24_RX_END_vect, ISR_BLOCK)
((at86rf2xx_t *)at86rfmega_dev)->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__RX_END; ((at86rf2xx_t *)at86rfmega_dev)->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__RX_END;
/* Call upper layer to process received data */ /* Call upper layer to process received data */
at86rfmega_dev->event_callback(at86rfmega_dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(at86rfmega_dev);
atmega_exit_isr(); atmega_exit_isr();
} }
@ -806,7 +802,7 @@ ISR(TRX24_TX_END_vect, ISR_BLOCK)
dev->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__TX_END; dev->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__TX_END;
/* Call upper layer to process if data was send successful */ /* Call upper layer to process if data was send successful */
at86rfmega_dev->event_callback(at86rfmega_dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(at86rfmega_dev);
} }
atmega_exit_isr(); atmega_exit_isr();

View File

@ -89,7 +89,7 @@ void cc110x_on_gdo(void *_dev)
mutex_unlock(&dev->isr_signal); mutex_unlock(&dev->isr_signal);
} }
else { else {
dev->netdev.event_callback(&dev->netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&dev->netdev);
} }
} }

View File

@ -58,9 +58,7 @@ static void _irq_handler(void *arg)
{ {
netdev_t *dev = (netdev_t *)arg; netdev_t *dev = (netdev_t *)arg;
if(dev->event_callback) { netdev_trigger_event_isr(dev);
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
} }
static inline uint16_t to_u16(const void *buf) static inline uint16_t to_u16(const void *buf)

View File

@ -71,7 +71,7 @@ static dose_signal_t state_transit_blocked(dose_t *ctx, dose_signal_t signal)
* if this frame should be processed. By queuing NETDEV_EVENT_ISR, * if this frame should be processed. By queuing NETDEV_EVENT_ISR,
* the netif thread will call _isr at some time. */ * the netif thread will call _isr at some time. */
SETBIT(ctx->flags, DOSE_FLAG_RECV_BUF_DIRTY); SETBIT(ctx->flags, DOSE_FLAG_RECV_BUF_DIRTY);
ctx->netdev.event_callback((netdev_t *) ctx, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *) ctx);
} }
if (ctx->sense_pin != GPIO_UNDEF) { if (ctx->sense_pin != GPIO_UNDEF) {

View File

@ -253,8 +253,7 @@ static void on_int(void *arg)
/* disable global interrupt enable bit to avoid losing interrupts */ /* disable global interrupt enable bit to avoid losing interrupts */
cmd_bfc((enc28j60_t *)arg, REG_EIE, -1, EIE_INTIE); cmd_bfc((enc28j60_t *)arg, REG_EIE, -1, EIE_INTIE);
netdev_t *netdev = (netdev_t *)arg; netdev_trigger_event_isr(arg);
netdev->event_callback(arg, NETDEV_EVENT_ISR);
} }
static int nd_send(netdev_t *netdev, const iolist_t *iolist) static int nd_send(netdev_t *netdev, const iolist_t *iolist)

View File

@ -99,7 +99,7 @@ static void encx24j600_isr(void *arg)
gpio_irq_disable(dev->int_pin); gpio_irq_disable(dev->int_pin);
/* call netdev hook */ /* call netdev hook */
dev->netdev.event_callback((netdev_t*) dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t*) dev);
} }
static void _isr(netdev_t *netdev) static void _isr(netdev_t *netdev)

View File

@ -123,7 +123,8 @@ static void _end_of_frame(ethos_t *dev)
if (dev->framesize) { if (dev->framesize) {
assert(dev->last_framesize == 0); assert(dev->last_framesize == 0);
dev->last_framesize = dev->framesize; dev->last_framesize = dev->framesize;
dev->netdev.event_callback((netdev_t*) dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t*) dev);
} }
break; break;
case ETHOS_FRAME_TYPE_HELLO: case ETHOS_FRAME_TYPE_HELLO:

View File

@ -63,9 +63,7 @@ static void _irq_handler(void *arg)
/* We use this counter to avoid filling the message queue with redundant ISR events */ /* We use this counter to avoid filling the message queue with redundant ISR events */
if (num_irqs_queued == num_irqs_handled) { if (num_irqs_queued == num_irqs_handled) {
++num_irqs_queued; ++num_irqs_queued;
if (netdev->event_callback) { netdev_trigger_event_isr(netdev);
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
} }
} }

View File

@ -41,9 +41,8 @@ static void _irq_handler(void *arg)
{ {
netdev_t *dev = (netdev_t *) arg; netdev_t *dev = (netdev_t *) arg;
if (dev->event_callback) { netdev_trigger_event_isr(dev);
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
((mrf24j40_t *)arg)->irq_flag = 1; ((mrf24j40_t *)arg)->irq_flag = 1;
} }

View File

@ -62,15 +62,11 @@ static void _rx_cb(void *arg, uint8_t c)
if (dev->int_state == RN2XX3_INT_STATE_MAC_RX_MESSAGE) { if (dev->int_state == RN2XX3_INT_STATE_MAC_RX_MESSAGE) {
/* RX state: closing RX buffer */ /* RX state: closing RX buffer */
dev->rx_buf[(dev->rx_size + 1) / 2] = 0; dev->rx_buf[(dev->rx_size + 1) / 2] = 0;
if (netdev->event_callback) { netdev_trigger_event_isr(netdev);
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
} }
else if (dev->int_state == RN2XX3_INT_STATE_MAC_TX) { else if (dev->int_state == RN2XX3_INT_STATE_MAC_TX) {
/* still in TX state: transmission complete but no data received */ /* still in TX state: transmission complete but no data received */
if (netdev->event_callback) { netdev_trigger_event_isr(netdev);
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
} }
dev->resp_size = 0; dev->resp_size = 0;
dev->rx_size = 0; dev->rx_size = 0;

View File

@ -64,9 +64,8 @@ static void _slip_rx_cb(void *arg, uint8_t byte)
tsrb_add_one(&dev->inbuf, byte); tsrb_add_one(&dev->inbuf, byte);
check_end: check_end:
if (byte == SLIPDEV_END) { if (byte == SLIPDEV_END) {
if ((dev->state == SLIPDEV_STATE_NET) && if (dev->state == SLIPDEV_STATE_NET) {
(dev->netdev.event_callback != NULL)) { netdev_trigger_event_isr((netdev_t*) dev);
dev->netdev.event_callback((netdev_t *)dev, NETDEV_EVENT_ISR);
} }
dev->state = SLIPDEV_STATE_NONE; dev->state = SLIPDEV_STATE_NONE;
} }

View File

@ -57,7 +57,7 @@ void isr_eth(void)
ETH->DMASR = ETH_DMASR_RS | ETH_DMASR_NIS; ETH->DMASR = ETH_DMASR_RS | ETH_DMASR_NIS;
mutex_unlock(&_rx); mutex_unlock(&_rx);
if (_netdev) { if (_netdev) {
_netdev->event_callback(_netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(_netdev);
} }
} }

View File

@ -221,9 +221,7 @@ uint32_t sx127x_random(sx127x_t *dev)
*/ */
void sx127x_isr(netdev_t *dev) void sx127x_isr(netdev_t *dev)
{ {
if (dev->event_callback) { netdev_trigger_event_isr(dev);
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
} }
static void sx127x_on_dio_isr(sx127x_t *dev, sx127x_flags_t flag) static void sx127x_on_dio_isr(sx127x_t *dev, sx127x_flags_t flag)

View File

@ -106,9 +106,7 @@ static void extint(void *arg)
{ {
w5100_t *dev = (w5100_t *)arg; w5100_t *dev = (w5100_t *)arg;
if (dev->nd.event_callback) { netdev_trigger_event_isr(&dev->nd);
dev->nd.event_callback(&dev->nd, NETDEV_EVENT_ISR);
}
} }
void w5100_setup(w5100_t *dev, const w5100_params_t *params) void w5100_setup(w5100_t *dev, const w5100_params_t *params)

View File

@ -233,9 +233,7 @@ static void _rx_cb(void *arg, uint8_t c)
dev->rx_buf[dev->rx_count++] = c; dev->rx_buf[dev->rx_count++] = c;
if (dev->rx_count == dev->rx_limit) { if (dev->rx_count == dev->rx_limit) {
/* packet is complete */ /* packet is complete */
if (dev->event_callback) { netdev_trigger_event_isr((netdev_t*) dev);
dev->event_callback((netdev_t *)dev, NETDEV_EVENT_ISR);
}
dev->int_state = XBEE_INT_STATE_IDLE; dev->int_state = XBEE_INT_STATE_IDLE;
} }
break; break;

View File

@ -316,8 +316,8 @@ static void _store_frame_chunk(usbus_cdcecm_device_t *cdcecm)
sizeof(size_t)); sizeof(size_t));
memcpy(cdcecm->in_buf + cdcecm->len, buf, len); memcpy(cdcecm->in_buf + cdcecm->len, buf, len);
cdcecm->len += len; cdcecm->len += len;
if (len < USBUS_CDCECM_EP_DATA_SIZE && cdcecm->netdev.event_callback) { if (len < USBUS_CDCECM_EP_DATA_SIZE) {
cdcecm->netdev.event_callback(&cdcecm->netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(&cdcecm->netdev);
} }
} }

View File

@ -81,7 +81,7 @@ void _test_trigger_recv(gnrc_netif_t *netif, const uint8_t *data,
tmp_buffer_bytes = 0; tmp_buffer_bytes = 0;
} }
assert(dev->event_callback); assert(dev->event_callback);
dev->event_callback(dev, NETDEV_EVENT_ISR); netdev_trigger_event_isr(dev);
} }
static int _netdev_recv(netdev_t *dev, char *buf, int len, void *info) static int _netdev_recv(netdev_t *dev, char *buf, int len, void *info)

View File

@ -247,7 +247,7 @@ bool _inject_4packet(uint32_t src, uint32_t dst, uint8_t proto, void *data,
_netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(struct ip_hdr) + _netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(struct ip_hdr) +
data_len; data_len;
mutex_unlock(&_netdev_buffer_mutex); mutex_unlock(&_netdev_buffer_mutex);
((netdev_t *)&netdev)->event_callback((netdev_t *)&netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *)&netdev);
return true; return true;
#else #else
@ -279,7 +279,7 @@ bool _inject_6packet(const ipv6_addr_t *src, const ipv6_addr_t *dst,
_netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(ipv6_hdr_t) + _netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(ipv6_hdr_t) +
data_len; data_len;
mutex_unlock(&_netdev_buffer_mutex); mutex_unlock(&_netdev_buffer_mutex);
((netdev_t *)&netdev)->event_callback((netdev_t *)&netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *)&netdev);
return true; return true;
#else #else

View File

@ -259,7 +259,7 @@ bool _inject_4packet(uint32_t src, uint32_t dst, uint16_t src_port,
_netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(struct ip_hdr) + _netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(struct ip_hdr) +
sizeof(udp_hdr_t) + data_len; sizeof(udp_hdr_t) + data_len;
mutex_unlock(&_netdev_buffer_mutex); mutex_unlock(&_netdev_buffer_mutex);
((netdev_t *)&netdev)->event_callback((netdev_t *)&netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *)&netdev);
return true; return true;
#else #else
@ -308,7 +308,7 @@ bool _inject_6packet(const ipv6_addr_t *src, const ipv6_addr_t *dst,
_netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(ipv6_hdr_t) + _netdev_buffer_size = sizeof(ethernet_hdr_t) + sizeof(ipv6_hdr_t) +
sizeof(udp_hdr_t) + data_len; sizeof(udp_hdr_t) + data_len;
mutex_unlock(&_netdev_buffer_mutex); mutex_unlock(&_netdev_buffer_mutex);
((netdev_t *)&netdev)->event_callback((netdev_t *)&netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *)&netdev);
return true; return true;
#else #else

View File

@ -152,7 +152,7 @@ static int test_receive(void)
/* register for GNRC_NETTYPE_UNDEF */ /* register for GNRC_NETTYPE_UNDEF */
gnrc_netreg_register(GNRC_NETTYPE_UNDEF, &me); gnrc_netreg_register(GNRC_NETTYPE_UNDEF, &me);
/* fire ISR event */ /* fire ISR event */
_dev.netdev.event_callback((netdev_t *)&_dev.netdev, NETDEV_EVENT_ISR); netdev_trigger_event_isr((netdev_t *)&_dev.netdev);
/* wait for packet from MAC layer*/ /* wait for packet from MAC layer*/
msg_receive(&msg); msg_receive(&msg);
/* check message */ /* check message */