hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/**
 ******************************************************************************
 *
 * @file ipc_host.h
 *
 * @brief IPC module.
 *
 * Copyright (C) RivieraWaves 2011-2019
 *
 ******************************************************************************
 */
#ifndef _IPC_HOST_H_
#define _IPC_HOST_H_
 
/*
 * INCLUDE FILES
 ******************************************************************************
 */
#include "ipc_shared.h"
#ifndef __KERNEL__
#include "arch.h"
#else
#include "ipc_compat.h"
#endif
 
/**
 ******************************************************************************
 * @brief This structure is used to initialize the MAC SW
 *
 * The WLAN device driver provides functions call-back with this structure
 ******************************************************************************
 */
struct ipc_host_cb_tag {
   /// WLAN driver call-back function: send_data_cfm
   int (*send_data_cfm)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_data_ind
   uint8_t (*recv_data_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_radar_ind
   uint8_t (*recv_radar_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_unsup_rx_vec_ind
   uint8_t (*recv_unsup_rx_vec_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_msg_ind
   uint8_t (*recv_msg_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_msgack_ind
   uint8_t (*recv_msgack_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: recv_dbg_ind
   uint8_t (*recv_dbg_ind)(void *pthis, void *host_id);
 
   /// WLAN driver call-back function: prim_tbtt_ind
   void (*prim_tbtt_ind)(void *pthis);
 
   /// WLAN driver call-back function: sec_tbtt_ind
   void (*sec_tbtt_ind)(void *pthis);
 
};
 
/*
 * Struct used to store information about host buffers (DMA Address and local pointer)
 */
struct ipc_hostbuf {
   void    *hostid;     ///< ptr to hostbuf client (ipc_host client) structure
   uint32_t dma_addr;   ///< ptr to real hostbuf dma address
};
 
/// Definition of the IPC Host environment structure.
struct ipc_host_env_tag {
   /// Structure containing the callback pointers
   struct ipc_host_cb_tag cb;
 
   /// Pointer to the shared environment
   struct ipc_shared_env_tag *shared;
 
   #ifdef CONFIG_RWNX_FULLMAC
   // Array used to store the descriptor addresses
   struct ipc_hostbuf ipc_host_rxdesc_array[IPC_RXDESC_CNT];
   // Index of the host RX descriptor array (ipc_shared environment)
   uint8_t ipc_host_rxdesc_idx;
   /// Store the number of RX Descriptors
   uint8_t rxdesc_nb;
   #endif //(CONFIG_RWNX_FULLMAC)
 
   /// Fields for Data Rx handling
   // Index used for ipc_host_rxbuf_array to point to current buffer
   uint8_t ipc_host_rxbuf_idx;
   // Store the number of Rx Data buffers
   uint32_t rx_bufnb;
   // Store the size of the Rx Data buffers
   uint32_t rx_bufsz;
 
   /// Fields for Radar events handling
   // Global array used to store the hostid and hostbuf addresses
   struct ipc_hostbuf ipc_host_radarbuf_array[IPC_RADARBUF_CNT];
   // Index used for ipc_host_rxbuf_array to point to current buffer
   uint8_t ipc_host_radarbuf_idx;
   // Store the number of radar event buffers
   uint32_t radar_bufnb;
   // Store the size of the radar event buffers
   uint32_t radar_bufsz;
 
   ///Fields for Unsupported frame handling
   // Global array used to store the hostid and hostbuf addresses
   struct ipc_hostbuf ipc_host_unsuprxvecbuf_array[IPC_UNSUPRXVECBUF_CNT];
   // Index used for ipc_host_unsuprxvecbuf_array to point to current buffer
   uint8_t ipc_host_unsuprxvecbuf_idx;
   // Store the number of unsupported rx vector buffers
   uint32_t unsuprxvec_bufnb;
   // Store the size of unsupported rx vector buffers
   uint32_t unsuprxvec_bufsz;
 
   // Index used that points to the first free TX desc
   uint32_t txdesc_free_idx[IPC_TXQUEUE_CNT][CONFIG_USER_MAX];
   // Index used that points to the first used TX desc
   uint32_t txdesc_used_idx[IPC_TXQUEUE_CNT][CONFIG_USER_MAX];
   // Array storing the currently pushed host ids for the BK queue
   void *tx_host_id0[CONFIG_USER_MAX][NX_TXDESC_CNT0];
   // Array storing the currently pushed host ids for the BE queue
   void *tx_host_id1[CONFIG_USER_MAX][NX_TXDESC_CNT1];
   // Array storing the currently pushed host ids for the VI queue
   void *tx_host_id2[CONFIG_USER_MAX][NX_TXDESC_CNT2];
   // Array storing the currently pushed host ids for the VO queue
   void *tx_host_id3[CONFIG_USER_MAX][NX_TXDESC_CNT3];
   #if NX_TXQ_CNT == 5
   // Array storing the currently pushed host ids for the BCN queue
   void *tx_host_id4[1][NX_TXDESC_CNT4];
   #endif
   // Pointer to the different host ids arrays, per IPC queue
   void **tx_host_id[IPC_TXQUEUE_CNT][CONFIG_USER_MAX];
   // Pointer to the different TX descriptor arrays, per IPC queue
   volatile struct txdesc_host *txdesc[IPC_TXQUEUE_CNT][CONFIG_USER_MAX];
 
   /// Fields for Emb->App MSGs handling
   // Global array used to store the hostid and hostbuf addresses for msg/ind
   struct ipc_hostbuf ipc_host_msgbuf_array[IPC_MSGE2A_BUF_CNT];
   // Index of the MSG E2A buffers array to point to current buffer
   uint8_t ipc_host_msge2a_idx;
   // Store the number of E2A MSG buffers
   uint32_t ipc_e2amsg_bufnb;
   // Store the size of the E2A MSG buffers
   uint32_t ipc_e2amsg_bufsz;
 
   /// E2A ACKs of A2E MSGs
   uint8_t msga2e_cnt;
   void *msga2e_hostid;
 
   /// Fields for Debug MSGs handling
   // Global array used to store the hostid and hostbuf addresses for Debug messages
   struct ipc_hostbuf ipc_host_dbgbuf_array[IPC_DBGBUF_CNT];
   // Index of the Debug messages buffers array to point to current buffer
   uint8_t ipc_host_dbg_idx;
   // Store the number of Debug messages buffers
   uint32_t ipc_dbg_bufnb;
   // Store the size of the Debug messages buffers
   uint32_t ipc_dbg_bufsz;
 
   /// Pointer to the attached object (used in callbacks and register accesses)
   void *pthis;
};
 
extern const int nx_txdesc_cnt[];
extern const int nx_txuser_cnt[];
 
#endif // _IPC_HOST_H_