1 /*! *********************************************************************************
2 * Copyright 2022-2024 NXP
3 * All rights reserved.
4 *
5 * \file
6 *
7 * SPDX-License-Identifier: BSD-3-Clause
8 ********************************************************************************** */
9 
10 #ifndef __PHY_TIME_H__
11 #define __PHY_TIME_H__
12 
13 #define BM_ZLL_IRQSTS_TMRxMSK (ZLL_IRQSTS_TMR1MSK_MASK | \
14                                ZLL_IRQSTS_TMR2MSK_MASK | \
15                                ZLL_IRQSTS_TMR3MSK_MASK | \
16                                ZLL_IRQSTS_TMR4MSK_MASK )
17 
18 #define TMR_REG_EN_1            (ZLL_PHY_CTRL_TMR1CMP_EN_MASK)
19 #define TMR_REG_EN_2            (ZLL_PHY_CTRL_TMR2CMP_EN_MASK | ZLL_PHY_CTRL_TMRTRIGEN_MASK)
20 #define TMR_REG_EN_3            (ZLL_PHY_CTRL_TMR3CMP_EN_MASK | ZLL_PHY_CTRL_TC3TMOUT_MASK)
21 #define TMR_REG_EN_4            (ZLL_PHY_CTRL_TMR4CMP_EN_MASK)
22 
23 #define TMR_REG_SET_1           (ZLL->T1CMP)
24 #define TMR_REG_SET_2           (ZLL->T2CMP)
25 #define TMR_REG_SET_3           (ZLL->T3CMP)
26 #define TMR_REG_SET_4           (ZLL->T4CMP)
27 
28 #define TMR_REG_EN(__tmr__)     TMR_REG_EN_ ## __tmr__
29 #define TMR_REG_SET(__tmr__)    TMR_REG_SET_ ## __tmr__
30 #define TMR_REG_MSK(__tmr__)    ZLL_IRQSTS_TMR ## __tmr__ ## MSK_MASK
31 #define TMR_REG_IRQ(__tmr__)    ZLL_IRQSTS_TMR ## __tmr__ ## IRQ_MASK
32 
33 #define ENABLE_TMR(__tmr__)             ZLL->PHY_CTRL |= (TMR_REG_EN(__tmr__))
34 #define DISABLE_TMR(__tmr__)            ZLL->PHY_CTRL &= ~(TMR_REG_EN(__tmr__))
35 #define SET_TMR(__tmr__, __time__)      TMR_REG_SET(__tmr__) = __time__
36 
37 #define CLEAR_TMR_IRQ(__tmr__)  do {                \
38     uint32_t irq_sts;                               \
39                                                     \
40     irq_sts  = ZLL->IRQSTS & BM_ZLL_IRQSTS_TMRxMSK; \
41     irq_sts |= (TMR_REG_IRQ(__tmr__));              \
42     ZLL->IRQSTS = irq_sts;                          \
43 } while(0)
44 
45 #define UNMASK_AND_CLEAR_TMR_IRQ(__tmr__)  do {     \
46     uint32_t irq_sts;                               \
47                                                     \
48     irq_sts  = ZLL->IRQSTS & BM_ZLL_IRQSTS_TMRxMSK; \
49     irq_sts &= ~(TMR_REG_MSK(__tmr__));             \
50     irq_sts |= (TMR_REG_IRQ(__tmr__));              \
51     ZLL->IRQSTS = irq_sts;                          \
52 } while(0)
53 
54 #define MASK_TMR_IRQ(__tmr__)  do {                             \
55     uint32_t irq_sts;                                           \
56                                                                 \
57     irq_sts  = ZLL->IRQSTS & BM_ZLL_IRQSTS_TMRxMSK;             \
58     irq_sts |= (TMR_REG_MSK(__tmr__) | TMR_REG_IRQ(__tmr__));   \
59     ZLL->IRQSTS = irq_sts;                                      \
60 } while(0)
61 
62 #define TMR_SET(__tmr__, __time__) do {                \
63     OSA_InterruptDisable();                            \
64                                                        \
65     DISABLE_TMR(__tmr__);                              \
66     SET_TMR(__tmr__, __time__);                        \
67     CLEAR_TMR_IRQ(__tmr__);                            \
68     ENABLE_TMR(__tmr__);                               \
69                                                        \
70     OSA_InterruptEnable();                             \
71 } while(0)
72 
73 #define TMR_UNMASK_AND_SET(__tmr__, __time__) do {     \
74     OSA_InterruptDisable();                            \
75                                                        \
76     DISABLE_TMR(__tmr__);                              \
77     SET_TMR(__tmr__, __time__);                        \
78     UNMASK_AND_CLEAR_TMR_IRQ(__tmr__);                 \
79     ENABLE_TMR(__tmr__);                               \
80                                                        \
81     OSA_InterruptEnable();                             \
82 } while(0)
83 
84 #define TMR_CLEAR(__tmr__) do {    \
85     OSA_InterruptDisable();        \
86                                    \
87     DISABLE_TMR(__tmr__);          \
88     MASK_TMR_IRQ(__tmr__);         \
89                                    \
90     OSA_InterruptEnable();         \
91 } while(0)
92 
93 #define PhyTimeDisableEventTrigger() 		TMR_CLEAR(2)
94 #define PhyTimeSetEventTrigger(__time__)    TMR_UNMASK_AND_SET(2, __time__)
95 
96 #define PhyTimeDisableEventTimeout()        TMR_CLEAR(3)
97 #define PhyTimeSetEventTimeout(__time__)    TMR_SET(3, __time__)
98 
99 #define PhyTimeDisableWaitTimeout()         TMR_CLEAR(1)
100 #define PhyTimeSetWaitTimeout(__time__)     TMR_UNMASK_AND_SET(1, __time__)
101 
102 #endif /* __PHY_TIME_H__ */
103