Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

netdev: add netdev_trigger_event_isr() function #13562

Merged
merged 2 commits into from
Mar 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions cpu/cc2538/radio/cc2538_rf_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ static netdev_t *_dev;

void _irq_handler(void)
{
if (_dev->event_callback) {
_dev->event_callback(_dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(_dev);
}

static int _get(netdev_t *netdev, netopt_t opt, void *value, size_t max_len)
Expand Down
6 changes: 3 additions & 3 deletions cpu/esp32/esp-eth/esp_eth_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
_esp_eth_dev.rx_len = len;
_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);

Expand Down Expand Up @@ -351,15 +351,15 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
_esp_eth_dev.link_up = true;
if (SYSTEM_EVENT_MAX) {
_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;
case SYSTEM_EVENT_ETH_DISCONNECTED:
DEBUG("%s: Ethernet link up\n", __func__);
_esp_eth_dev.link_up = false;
if (SYSTEM_EVENT_MAX) {
_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;
default:
Expand Down
2 changes: 1 addition & 1 deletion cpu/esp_common/esp-now/esp_now_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ static void IRAM_ATTR esp_now_scan_peers_timer_cb(void* arg)

if (dev->netdev.event_callback) {
dev->scan_event++;
dev->netdev.event_callback((netdev_t*)dev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr((netdev_t*)dev);
}
}

Expand Down
6 changes: 3 additions & 3 deletions cpu/esp_common/esp-wifi/esp_wifi_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
_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 */
irq_interrupt_nesting--;
Expand Down Expand Up @@ -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.event_conn++;
_esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(&_esp_wifi_dev.netdev);

break;

Expand All @@ -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.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 */
result = esp_wifi_disconnect();
Expand Down
2 changes: 1 addition & 1 deletion cpu/native/netdev_tap/netdev_tap.c
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ static void _tap_isr(int fd, void *arg) {
netdev_t *netdev = (netdev_t *)arg;

if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(netdev);
}
else {
puts("netdev_tap: _isr: no event callback.");
Expand Down
6 changes: 3 additions & 3 deletions cpu/native/socket_zep/socket_zep.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
/* simulate TX_STARTED interrupt */
if (netdev->event_callback) {
dev->last_event = NETDEV_EVENT_TX_STARTED;
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(netdev);
thread_yield();
}
res = writev(dev->sock_fd, v, n + 2);
Expand All @@ -123,7 +123,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
/* simulate TX_COMPLETE interrupt */
if (netdev->event_callback) {
dev->last_event = NETDEV_EVENT_TX_COMPLETE;
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(netdev);
thread_yield();
}

Expand Down Expand Up @@ -283,7 +283,7 @@ static void _socket_isr(int fd, void *arg)
socket_zep_t *dev = (socket_zep_t *)netdev;

dev->last_event = NETDEV_EVENT_RX_COMPLETE;
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(netdev);
}
}

Expand Down
2 changes: 1 addition & 1 deletion cpu/nrf52/radio/nrf802154/nrf802154.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ void isr_radio(void)
DEBUG("[nrf802154] Unhandled state: %x\n", (uint8_t)NRF_RADIO->STATE);
}
if (_state) {
nrf802154_dev.netdev.event_callback(&nrf802154_dev.netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(&nrf802154_dev.netdev);
}
}
else {
Expand Down
2 changes: 1 addition & 1 deletion cpu/nrf5x_common/radio/nrfmin/nrfmin.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ void isr_radio(void)
}
else {
rx_lock = 0;
nrfmin_dev.event_callback(&nrfmin_dev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(&nrfmin_dev);
}
}
else if (state == STATE_TX) {
Expand Down
10 changes: 3 additions & 7 deletions drivers/at86rf2xx/at86rf2xx_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,7 @@ static netdev_t *at86rfmega_dev;
#else
static void _irq_handler(void *arg)
{
netdev_t *dev = (netdev_t *) arg;

if (dev->event_callback) {
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(arg);
}
#endif

Expand Down Expand Up @@ -762,7 +758,7 @@ ISR(TRX24_RX_END_vect, ISR_BLOCK)

((at86rf2xx_t *)at86rfmega_dev)->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__RX_END;
/* 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();
}
Expand Down Expand Up @@ -806,7 +802,7 @@ ISR(TRX24_TX_END_vect, ISR_BLOCK)
dev->irq_status |= AT86RF2XX_IRQ_STATUS_MASK__TX_END;

/* 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();
Expand Down
2 changes: 1 addition & 1 deletion drivers/cc110x/cc110x_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ void cc110x_on_gdo(void *_dev)
mutex_unlock(&dev->isr_signal);
}
else {
dev->netdev.event_callback(&dev->netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(&dev->netdev);
}
}

Expand Down
4 changes: 1 addition & 3 deletions drivers/cc2420/cc2420_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ static void _irq_handler(void *arg)
{
netdev_t *dev = (netdev_t *)arg;

if(dev->event_callback) {
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(dev);
}

static inline uint16_t to_u16(const void *buf)
Expand Down
2 changes: 1 addition & 1 deletion drivers/dose/dose.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
* the netif thread will call _isr at some time. */
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) {
Expand Down
3 changes: 1 addition & 2 deletions drivers/enc28j60/enc28j60.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,7 @@ static void on_int(void *arg)
/* disable global interrupt enable bit to avoid losing interrupts */
cmd_bfc((enc28j60_t *)arg, REG_EIE, -1, EIE_INTIE);

netdev_t *netdev = (netdev_t *)arg;
netdev->event_callback(arg, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(arg);
}

static int nd_send(netdev_t *netdev, const iolist_t *iolist)
Expand Down
2 changes: 1 addition & 1 deletion drivers/encx24j600/encx24j600.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ static void encx24j600_isr(void *arg)
gpio_irq_disable(dev->int_pin);

/* 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)
Expand Down
3 changes: 2 additions & 1 deletion drivers/ethos/ethos.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ static void _end_of_frame(ethos_t *dev)
if (dev->framesize) {
assert(dev->last_framesize == 0);
dev->last_framesize = dev->framesize;
dev->netdev.event_callback((netdev_t*) dev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr((netdev_t*) dev);

}
break;
case ETHOS_FRAME_TYPE_HELLO:
Expand Down
15 changes: 14 additions & 1 deletion drivers/include/net/netdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,20 @@ static inline int netdev_set_notsup(netdev_t *dev, netopt_t opt,
return -ENOTSUP;
}


/**
* @brief Informs netdev there was an interrupt request from the network device.
*
* This function calls @ref netdev_t::event_callback with
* NETDEV_EVENT_ISR event.
*
* @param netdev netdev instance of the device associated to the interrupt.
*/
static inline void netdev_trigger_event_isr(netdev_t *netdev)
{
if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
}
#ifdef __cplusplus
}
#endif
Expand Down
4 changes: 1 addition & 3 deletions drivers/kw2xrf/kw2xrf_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,7 @@ static void _irq_handler(void *arg)
/* We use this counter to avoid filling the message queue with redundant ISR events */
if (num_irqs_queued == num_irqs_handled) {
++num_irqs_queued;
if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(netdev);
}
}

Expand Down
5 changes: 2 additions & 3 deletions drivers/mrf24j40/mrf24j40_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@ static void _irq_handler(void *arg)
{
netdev_t *dev = (netdev_t *) arg;

if (dev->event_callback) {
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(dev);

((mrf24j40_t *)arg)->irq_flag = 1;
}

Expand Down
8 changes: 2 additions & 6 deletions drivers/rn2xx3/rn2xx3.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,11 @@ static void _rx_cb(void *arg, uint8_t c)
if (dev->int_state == RN2XX3_INT_STATE_MAC_RX_MESSAGE) {
/* RX state: closing RX buffer */
dev->rx_buf[(dev->rx_size + 1) / 2] = 0;
if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(netdev);
}
else if (dev->int_state == RN2XX3_INT_STATE_MAC_TX) {
/* still in TX state: transmission complete but no data received */
if (netdev->event_callback) {
netdev->event_callback(netdev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(netdev);
}
dev->resp_size = 0;
dev->rx_size = 0;
Expand Down
5 changes: 2 additions & 3 deletions drivers/slipdev/slipdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,8 @@ static void _slip_rx_cb(void *arg, uint8_t byte)
tsrb_add_one(&dev->inbuf, byte);
check_end:
if (byte == SLIPDEV_END) {
if ((dev->state == SLIPDEV_STATE_NET) &&
(dev->netdev.event_callback != NULL)) {
dev->netdev.event_callback((netdev_t *)dev, NETDEV_EVENT_ISR);
if (dev->state == SLIPDEV_STATE_NET) {
netdev_trigger_event_isr((netdev_t*) dev);
}
dev->state = SLIPDEV_STATE_NONE;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/stm32_eth/stm32_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ void isr_eth(void)
ETH->DMASR = ETH_DMASR_RS | ETH_DMASR_NIS;
mutex_unlock(&_rx);
if (_netdev) {
_netdev->event_callback(_netdev, NETDEV_EVENT_ISR);
netdev_trigger_event_isr(_netdev);
}
}

Expand Down
4 changes: 1 addition & 3 deletions drivers/sx127x/sx127x.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,7 @@ uint32_t sx127x_random(sx127x_t *dev)
*/
void sx127x_isr(netdev_t *dev)
{
if (dev->event_callback) {
dev->event_callback(dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(dev);
}

static void sx127x_on_dio_isr(sx127x_t *dev, sx127x_flags_t flag)
Expand Down
4 changes: 1 addition & 3 deletions drivers/w5100/w5100.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,7 @@ static void extint(void *arg)
{
w5100_t *dev = (w5100_t *)arg;

if (dev->nd.event_callback) {
dev->nd.event_callback(&dev->nd, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr(&dev->nd);
}

void w5100_setup(w5100_t *dev, const w5100_params_t *params)
Expand Down
4 changes: 1 addition & 3 deletions drivers/xbee/xbee.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,7 @@ static void _rx_cb(void *arg, uint8_t c)
dev->rx_buf[dev->rx_count++] = c;
if (dev->rx_count == dev->rx_limit) {
/* packet is complete */
if (dev->event_callback) {
dev->event_callback((netdev_t *)dev, NETDEV_EVENT_ISR);
}
netdev_trigger_event_isr((netdev_t*) dev);
dev->int_state = XBEE_INT_STATE_IDLE;
}
break;
Expand Down
4 changes: 2 additions & 2 deletions sys/usb/usbus/cdc/ecm/cdc_ecm.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,8 @@ static void _store_frame_chunk(usbus_cdcecm_device_t *cdcecm)
sizeof(size_t));
memcpy(cdcecm->in_buf + cdcecm->len, buf, len);
cdcecm->len += len;
if (len < USBUS_CDCECM_EP_DATA_SIZE && cdcecm->netdev.event_callback) {
cdcecm->netdev.event_callback(&cdcecm->netdev, NETDEV_EVENT_ISR);
if (len < USBUS_CDCECM_EP_DATA_SIZE) {
netdev_trigger_event_isr(&cdcecm->netdev);
}
}

Expand Down
2 changes: 1 addition & 1 deletion tests/gnrc_netif/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void _test_trigger_recv(gnrc_netif_t *netif, const uint8_t *data,
tmp_buffer_bytes = 0;
}
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)
Expand Down
4 changes: 2 additions & 2 deletions tests/lwip_sock_ip/stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) +
data_len;
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;
#else
Expand Down Expand Up @@ -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) +
data_len;
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;
#else
Expand Down
4 changes: 2 additions & 2 deletions tests/lwip_sock_udp/stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) +
sizeof(udp_hdr_t) + data_len;
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;
#else
Expand Down Expand Up @@ -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) +
sizeof(udp_hdr_t) + data_len;
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;
#else
Expand Down
2 changes: 1 addition & 1 deletion tests/netdev_test/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ static int test_receive(void)
/* register for GNRC_NETTYPE_UNDEF */
gnrc_netreg_register(GNRC_NETTYPE_UNDEF, &me);
/* 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*/
msg_receive(&msg);
/* check message */
Expand Down