1 /*
2  * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 // The HAL layer for PAU (Power Assist Unit)
8 
9 #pragma once
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #include "soc/soc_caps.h"
16 #include "hal/pau_ll.h"
17 #include "hal/pau_types.h"
18 
19 typedef struct {
20     pau_dev_t *dev;
21 } pau_hal_context_t;
22 
23 /**
24  * @brief Set regdma entry link address
25  *
26  * @param hal           regdma hal context
27  * @param link_addr     entry link address value
28  */
29 void pau_hal_set_regdma_entry_link_addr(pau_hal_context_t *hal, pau_regdma_link_addr_t *link_addr);
30 
31 #if SOC_PM_SUPPORT_PMU_MODEM_STATE
32 /**
33  * @brief Set regdma modem link address
34  *
35  * @param hal           regdma hal context
36  * @param link_addr     modem link address value
37  */
38 #define pau_hal_set_regdma_modem_link_addr(hal, addr)   pau_ll_set_regdma_wifimac_link_addr((hal)->dev, (addr))
39 
40 /**
41  * @brief Start transmission on regdma modem link
42  *
43  * @param hal           regdma hal context
44  * @param backup_or_restore        false:restore true:backup
45  */
46 void pau_hal_start_regdma_modem_link(pau_hal_context_t *hal, bool backup_or_restore);
47 
48 /**
49  * @brief Stop transmission on regdma modem link
50  *
51  * @param hal           regdma hal context
52  */
53 void pau_hal_stop_regdma_modem_link(pau_hal_context_t *hal);
54 #endif
55 
56 #if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
57 /**
58  * @brief Set regdma system link address
59  *
60  * @param hal           regdma hal context
61  * @param link_addr     main link address value
62  */
63 #define pau_hal_set_regdma_system_link_addr(hal, addr)   pau_ll_set_regdma_link0_addr(hal->dev, (addr))
64 
65 /**
66  * @brief Start transmission on regdma system link
67  *
68  * @param hal           regdma hal context
69  * @param backup_or_restore        false:restore true:backup
70  */
71 void pau_hal_start_regdma_system_link(pau_hal_context_t *hal, bool backup_or_restore);
72 /**
73  * @brief Stop transmission on regdma system link
74  *
75  * @param hal           regdma hal context
76  */
77 void pau_hal_stop_regdma_system_link(pau_hal_context_t *hal);
78 #endif
79 
80 /**
81  * @brief Set regdma extra link address
82  *
83  * @param hal           regdma hal context
84  * @param link_addr     extra link address value
85  */
86 #define pau_hal_set_regdma_extra_link_addr(hal, addr)   pau_ll_set_regdma_link3_addr(hal->dev, (addr))
87 
88 /**
89  * @brief Start transmission on regdma extra link
90  *
91  * @param hal           regdma hal context
92  * @param backup_or_restore        false:restore true:backup
93  */
94 void pau_hal_start_regdma_extra_link(pau_hal_context_t *hal, bool backup_or_restore);
95 
96 /**
97  * @brief Stop transmission on regdma extra link
98  *
99  * @param hal           regdma hal context
100  */
101 void pau_hal_stop_regdma_extra_link(pau_hal_context_t *hal);
102 
103 #if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
104 /**
105  * @brief Enable or disable PAU module clock
106  *
107  * @param hal           regdma hal context
108  */
109 void pau_hal_regdma_clock_configure(pau_hal_context_t *hal, bool enable);
110 #endif
111 
112 #ifdef __cplusplus
113 }
114 #endif
115