Skip to content

Commit 231f1ff

Browse files
committed
soc: stm32: add parameter in link_layer_register_isr() function
add parameter to the link_layer_register_isr() to force or not the link layer isr registration in case of multiple function calls Signed-off-by: Vincent Tardy <vincent.tardy@st.com>
1 parent 2cfd924 commit 231f1ff

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

soc/st/stm32/stm32wbax/hci_if/linklayer_plat_adapt.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ static uint32_t primask_bit;
3838
/* Radio SW low ISR global variable */
3939
volatile uint8_t radio_sw_low_isr_is_running_high_prio;
4040

41+
/* ISR registration state variable */
42+
static uint8_t is_isr_registered = 0;
4143

4244
void LINKLAYER_PLAT_DelayUs(uint32_t delay)
4345
{
@@ -96,27 +98,33 @@ void radio_low_prio_isr(void)
9698
}
9799

98100

99-
void link_layer_register_isr(void)
101+
void link_layer_register_isr(uint8_t force)
100102
{
101-
ARM_IRQ_DIRECT_DYNAMIC_CONNECT(RADIO_INTR_NUM, 0, 0, reschedule);
102103

103-
/* Ensure the IRQ is disabled before enabling it at run time */
104-
irq_disable(RADIO_INTR_NUM);
104+
if ((force == 1) || (is_isr_registered == 0)) {
105105

106-
irq_connect_dynamic(RADIO_INTR_NUM, RADIO_INTR_PRIO_HIGH_Z,
107-
(void (*)(const void *))radio_high_prio_isr, NULL, 0);
106+
is_isr_registered = 1;
108107

109-
irq_enable(RADIO_INTR_NUM);
108+
ARM_IRQ_DIRECT_DYNAMIC_CONNECT(RADIO_INTR_NUM, 0, 0, reschedule);
110109

111-
ARM_IRQ_DIRECT_DYNAMIC_CONNECT(RADIO_SW_LOW_INTR_NUM, 0, 0, reschedule);
110+
/* Ensure the IRQ is disabled before enabling it at run time */
111+
irq_disable(RADIO_INTR_NUM);
112112

113-
/* Ensure the IRQ is disabled before enabling it at run time */
114-
irq_disable(RADIO_SW_LOW_INTR_NUM);
113+
irq_connect_dynamic(RADIO_INTR_NUM, RADIO_INTR_PRIO_HIGH_Z,
114+
(void (*)(const void *))radio_high_prio_isr, NULL, 0);
115115

116-
irq_connect_dynamic(RADIO_SW_LOW_INTR_NUM, RADIO_SW_LOW_INTR_PRIO,
117-
(void (*)(const void *))radio_low_prio_isr, NULL, 0);
116+
irq_enable(RADIO_INTR_NUM);
118117

119-
irq_enable(RADIO_SW_LOW_INTR_NUM);
118+
ARM_IRQ_DIRECT_DYNAMIC_CONNECT(RADIO_SW_LOW_INTR_NUM, 0, 0, reschedule);
119+
120+
/* Ensure the IRQ is disabled before enabling it at run time */
121+
irq_disable(RADIO_SW_LOW_INTR_NUM);
122+
123+
irq_connect_dynamic(RADIO_SW_LOW_INTR_NUM, RADIO_SW_LOW_INTR_PRIO,
124+
(void (*)(const void *))radio_low_prio_isr, NULL, 0);
125+
126+
irq_enable(RADIO_SW_LOW_INTR_NUM);
127+
}
120128
}
121129

122130

soc/st/stm32/stm32wbax/hci_if/linklayer_plat_local.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
#ifndef _STM32WBA_LINK_LAYER_PLAT_LOCAL_H_
99
#define _STM32WBA_LINK_LAYER_PLAT_LOCAL_H_
1010

11-
void link_layer_register_isr(void);
11+
void link_layer_register_isr(uint8_t force);
1212

1313
#endif /* _STM32WBA_LINK_LAYER_PLAT_LOCAL_H_ */

0 commit comments

Comments
 (0)