xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/microchip/wilc1000/wlan.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2012 - 2018 Microchip Technology Inc., and its subsidiaries.
4*4882a593Smuzhiyun  * All rights reserved.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef WILC_WLAN_H
8*4882a593Smuzhiyun #define WILC_WLAN_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/types.h>
11*4882a593Smuzhiyun #include <linux/bitfield.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /********************************************
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  *      Mac eth header length
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  ********************************************/
18*4882a593Smuzhiyun #define MAX_MAC_HDR_LEN			26 /* QOS_MAC_HDR_LEN */
19*4882a593Smuzhiyun #define SUB_MSDU_HEADER_LENGTH		14
20*4882a593Smuzhiyun #define SNAP_HDR_LEN			8
21*4882a593Smuzhiyun #define ETHERNET_HDR_LEN		14
22*4882a593Smuzhiyun #define WORD_ALIGNMENT_PAD		0
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define ETH_ETHERNET_HDR_OFFSET		(MAX_MAC_HDR_LEN + \
25*4882a593Smuzhiyun 					 SUB_MSDU_HEADER_LENGTH + \
26*4882a593Smuzhiyun 					 SNAP_HDR_LEN - \
27*4882a593Smuzhiyun 					 ETHERNET_HDR_LEN + \
28*4882a593Smuzhiyun 					 WORD_ALIGNMENT_PAD)
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define HOST_HDR_OFFSET			4
31*4882a593Smuzhiyun #define ETHERNET_HDR_LEN		14
32*4882a593Smuzhiyun #define IP_HDR_LEN			20
33*4882a593Smuzhiyun #define IP_HDR_OFFSET			ETHERNET_HDR_LEN
34*4882a593Smuzhiyun #define UDP_HDR_OFFSET			(IP_HDR_LEN + IP_HDR_OFFSET)
35*4882a593Smuzhiyun #define UDP_HDR_LEN			8
36*4882a593Smuzhiyun #define UDP_DATA_OFFSET			(UDP_HDR_OFFSET + UDP_HDR_LEN)
37*4882a593Smuzhiyun #define ETH_CONFIG_PKT_HDR_LEN		UDP_DATA_OFFSET
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define ETH_CONFIG_PKT_HDR_OFFSET	(ETH_ETHERNET_HDR_OFFSET + \
40*4882a593Smuzhiyun 					 ETH_CONFIG_PKT_HDR_LEN)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /********************************************
43*4882a593Smuzhiyun  *
44*4882a593Smuzhiyun  *      Register Defines
45*4882a593Smuzhiyun  *
46*4882a593Smuzhiyun  ********************************************/
47*4882a593Smuzhiyun #define WILC_PERIPH_REG_BASE		0x1000
48*4882a593Smuzhiyun #define WILC_CHANGING_VIR_IF		0x108c
49*4882a593Smuzhiyun #define WILC_CHIPID			WILC_PERIPH_REG_BASE
50*4882a593Smuzhiyun #define WILC_GLB_RESET_0		(WILC_PERIPH_REG_BASE + 0x400)
51*4882a593Smuzhiyun #define WILC_PIN_MUX_0			(WILC_PERIPH_REG_BASE + 0x408)
52*4882a593Smuzhiyun #define WILC_HOST_TX_CTRL		(WILC_PERIPH_REG_BASE + 0x6c)
53*4882a593Smuzhiyun #define WILC_HOST_RX_CTRL_0		(WILC_PERIPH_REG_BASE + 0x70)
54*4882a593Smuzhiyun #define WILC_HOST_RX_CTRL_1		(WILC_PERIPH_REG_BASE + 0x74)
55*4882a593Smuzhiyun #define WILC_HOST_VMM_CTL		(WILC_PERIPH_REG_BASE + 0x78)
56*4882a593Smuzhiyun #define WILC_HOST_RX_CTRL		(WILC_PERIPH_REG_BASE + 0x80)
57*4882a593Smuzhiyun #define WILC_HOST_RX_EXTRA_SIZE		(WILC_PERIPH_REG_BASE + 0x84)
58*4882a593Smuzhiyun #define WILC_HOST_TX_CTRL_1		(WILC_PERIPH_REG_BASE + 0x88)
59*4882a593Smuzhiyun #define WILC_MISC			(WILC_PERIPH_REG_BASE + 0x428)
60*4882a593Smuzhiyun #define WILC_INTR_REG_BASE		(WILC_PERIPH_REG_BASE + 0xa00)
61*4882a593Smuzhiyun #define WILC_INTR_ENABLE		WILC_INTR_REG_BASE
62*4882a593Smuzhiyun #define WILC_INTR2_ENABLE		(WILC_INTR_REG_BASE + 4)
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #define WILC_INTR_POLARITY		(WILC_INTR_REG_BASE + 0x10)
65*4882a593Smuzhiyun #define WILC_INTR_TYPE			(WILC_INTR_REG_BASE + 0x20)
66*4882a593Smuzhiyun #define WILC_INTR_CLEAR			(WILC_INTR_REG_BASE + 0x30)
67*4882a593Smuzhiyun #define WILC_INTR_STATUS		(WILC_INTR_REG_BASE + 0x40)
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define WILC_RF_REVISION_ID		0x13f4
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #define WILC_VMM_TBL_SIZE		64
72*4882a593Smuzhiyun #define WILC_VMM_TX_TBL_BASE		0x150400
73*4882a593Smuzhiyun #define WILC_VMM_RX_TBL_BASE		0x150500
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #define WILC_VMM_BASE			0x150000
76*4882a593Smuzhiyun #define WILC_VMM_CORE_CTL		WILC_VMM_BASE
77*4882a593Smuzhiyun #define WILC_VMM_TBL_CTL		(WILC_VMM_BASE + 0x4)
78*4882a593Smuzhiyun #define WILC_VMM_TBL_ENTRY		(WILC_VMM_BASE + 0x8)
79*4882a593Smuzhiyun #define WILC_VMM_TBL0_SIZE		(WILC_VMM_BASE + 0xc)
80*4882a593Smuzhiyun #define WILC_VMM_TO_HOST_SIZE		(WILC_VMM_BASE + 0x10)
81*4882a593Smuzhiyun #define WILC_VMM_CORE_CFG		(WILC_VMM_BASE + 0x14)
82*4882a593Smuzhiyun #define WILC_VMM_TBL_ACTIVE		(WILC_VMM_BASE + 040)
83*4882a593Smuzhiyun #define WILC_VMM_TBL_STATUS		(WILC_VMM_BASE + 0x44)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define WILC_SPI_REG_BASE		0xe800
86*4882a593Smuzhiyun #define WILC_SPI_CTL			WILC_SPI_REG_BASE
87*4882a593Smuzhiyun #define WILC_SPI_MASTER_DMA_ADDR	(WILC_SPI_REG_BASE + 0x4)
88*4882a593Smuzhiyun #define WILC_SPI_MASTER_DMA_COUNT	(WILC_SPI_REG_BASE + 0x8)
89*4882a593Smuzhiyun #define WILC_SPI_SLAVE_DMA_ADDR		(WILC_SPI_REG_BASE + 0xc)
90*4882a593Smuzhiyun #define WILC_SPI_SLAVE_DMA_COUNT	(WILC_SPI_REG_BASE + 0x10)
91*4882a593Smuzhiyun #define WILC_SPI_TX_MODE		(WILC_SPI_REG_BASE + 0x20)
92*4882a593Smuzhiyun #define WILC_SPI_PROTOCOL_CONFIG	(WILC_SPI_REG_BASE + 0x24)
93*4882a593Smuzhiyun #define WILC_SPI_INTR_CTL		(WILC_SPI_REG_BASE + 0x2c)
94*4882a593Smuzhiyun #define WILC_SPI_INT_STATUS		(WILC_SPI_REG_BASE + 0x40)
95*4882a593Smuzhiyun #define WILC_SPI_INT_CLEAR		(WILC_SPI_REG_BASE + 0x44)
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define WILC_SPI_WAKEUP_REG		0x1
98*4882a593Smuzhiyun #define WILC_SPI_WAKEUP_BIT		BIT(1)
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun #define WILC_SPI_PROTOCOL_OFFSET	(WILC_SPI_PROTOCOL_CONFIG - \
101*4882a593Smuzhiyun 					 WILC_SPI_REG_BASE)
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun #define WILC_SPI_CLOCKLESS_ADDR_LIMIT	0x30
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun /* Functions IO enables bits */
106*4882a593Smuzhiyun #define WILC_SDIO_CCCR_IO_EN_FUNC1	BIT(1)
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* Function/Interrupt enables bits */
109*4882a593Smuzhiyun #define WILC_SDIO_CCCR_IEN_MASTER	BIT(0)
110*4882a593Smuzhiyun #define WILC_SDIO_CCCR_IEN_FUNC1	BIT(1)
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* Abort CCCR register bits */
113*4882a593Smuzhiyun #define WILC_SDIO_CCCR_ABORT_RESET	BIT(3)
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun /* Vendor specific CCCR registers */
116*4882a593Smuzhiyun #define WILC_SDIO_WAKEUP_REG		0xf0
117*4882a593Smuzhiyun #define WILC_SDIO_WAKEUP_BIT		BIT(0)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #define WILC_SDIO_CLK_STATUS_REG	0xf1
120*4882a593Smuzhiyun #define WILC_SDIO_CLK_STATUS_BIT	BIT(0)
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun #define WILC_SDIO_INTERRUPT_DATA_SZ_REG	0xf2 /* Read size (2 bytes) */
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun #define WILC_SDIO_VMM_TBL_CTRL_REG	0xf6
125*4882a593Smuzhiyun #define WILC_SDIO_IRQ_FLAG_REG		0xf7
126*4882a593Smuzhiyun #define WILC_SDIO_IRQ_CLEAR_FLAG_REG	0xf8
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define WILC_SDIO_HOST_TO_FW_REG	0xfa
129*4882a593Smuzhiyun #define WILC_SDIO_HOST_TO_FW_BIT	BIT(0)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #define WILC_SDIO_FW_TO_HOST_REG	0xfc
132*4882a593Smuzhiyun #define WILC_SDIO_FW_TO_HOST_BIT	BIT(0)
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun /* Function 1 specific FBR register */
135*4882a593Smuzhiyun #define WILC_SDIO_FBR_CSA_REG		0x10C /* CSA pointer (3 bytes) */
136*4882a593Smuzhiyun #define WILC_SDIO_FBR_DATA_REG		0x10F
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #define WILC_SDIO_F1_DATA_REG		0x0
139*4882a593Smuzhiyun #define WILC_SDIO_EXT_IRQ_FLAG_REG	0x4
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #define WILC_AHB_DATA_MEM_BASE		0x30000
142*4882a593Smuzhiyun #define WILC_AHB_SHARE_MEM_BASE		0xd0000
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define WILC_VMM_TBL_RX_SHADOW_BASE	WILC_AHB_SHARE_MEM_BASE
145*4882a593Smuzhiyun #define WILC_VMM_TBL_RX_SHADOW_SIZE	256
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define WILC_FW_HOST_COMM		0x13c0
148*4882a593Smuzhiyun #define WILC_GP_REG_0			0x149c
149*4882a593Smuzhiyun #define WILC_GP_REG_1			0x14a0
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun #define WILC_HAVE_SDIO_IRQ_GPIO		BIT(0)
152*4882a593Smuzhiyun #define WILC_HAVE_USE_PMU		BIT(1)
153*4882a593Smuzhiyun #define WILC_HAVE_SLEEP_CLK_SRC_RTC	BIT(2)
154*4882a593Smuzhiyun #define WILC_HAVE_SLEEP_CLK_SRC_XO	BIT(3)
155*4882a593Smuzhiyun #define WILC_HAVE_EXT_PA_INV_TX_RX	BIT(4)
156*4882a593Smuzhiyun #define WILC_HAVE_LEGACY_RF_SETTINGS	BIT(5)
157*4882a593Smuzhiyun #define WILC_HAVE_XTAL_24		BIT(6)
158*4882a593Smuzhiyun #define WILC_HAVE_DISABLE_WILC_UART	BIT(7)
159*4882a593Smuzhiyun #define WILC_HAVE_USE_IRQ_AS_HOST_WAKE	BIT(8)
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun #define WILC_CORTUS_INTERRUPT_BASE	0x10A8
162*4882a593Smuzhiyun #define WILC_CORTUS_INTERRUPT_1		(WILC_CORTUS_INTERRUPT_BASE + 0x4)
163*4882a593Smuzhiyun #define WILC_CORTUS_INTERRUPT_2		(WILC_CORTUS_INTERRUPT_BASE + 0x8)
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* tx control register 1 to 4 for RX */
166*4882a593Smuzhiyun #define WILC_REG_4_TO_1_RX		0x1e1c
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /* tx control register 1 to 4 for TX Bank_0 */
169*4882a593Smuzhiyun #define WILC_REG_4_TO_1_TX_BANK0	0x1e9c
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #define WILC_CORTUS_RESET_MUX_SEL	0x1118
172*4882a593Smuzhiyun #define WILC_CORTUS_BOOT_REGISTER	0xc0000
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #define WILC_CORTUS_BOOT_FROM_IRAM	0x71
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun #define WILC_1000_BASE_ID		0x100000
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun #define WILC_1000_BASE_ID_2A		0x1002A0
179*4882a593Smuzhiyun #define WILC_1000_BASE_ID_2A_REV1	(WILC_1000_BASE_ID_2A + 1)
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun #define WILC_1000_BASE_ID_2B		0x1002B0
182*4882a593Smuzhiyun #define WILC_1000_BASE_ID_2B_REV1	(WILC_1000_BASE_ID_2B + 1)
183*4882a593Smuzhiyun #define WILC_1000_BASE_ID_2B_REV2	(WILC_1000_BASE_ID_2B + 2)
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun #define WILC_CHIP_REV_FIELD		GENMASK(11, 0)
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun /********************************************
188*4882a593Smuzhiyun  *
189*4882a593Smuzhiyun  *      Wlan Defines
190*4882a593Smuzhiyun  *
191*4882a593Smuzhiyun  ********************************************/
192*4882a593Smuzhiyun #define WILC_CFG_PKT		1
193*4882a593Smuzhiyun #define WILC_NET_PKT		0
194*4882a593Smuzhiyun #define WILC_MGMT_PKT		2
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun #define WILC_CFG_SET		1
197*4882a593Smuzhiyun #define WILC_CFG_QUERY		0
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun #define WILC_CFG_RSP		1
200*4882a593Smuzhiyun #define WILC_CFG_RSP_STATUS	2
201*4882a593Smuzhiyun #define WILC_CFG_RSP_SCAN	3
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun #define WILC_ABORT_REQ_BIT		BIT(31)
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun #define WILC_RX_BUFF_SIZE	(96 * 1024)
206*4882a593Smuzhiyun #define WILC_TX_BUFF_SIZE	(64 * 1024)
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define MODALIAS		"WILC_SPI"
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun #define WILC_PKT_HDR_CONFIG_FIELD	BIT(31)
211*4882a593Smuzhiyun #define WILC_PKT_HDR_OFFSET_FIELD	GENMASK(30, 22)
212*4882a593Smuzhiyun #define WILC_PKT_HDR_TOTAL_LEN_FIELD	GENMASK(21, 11)
213*4882a593Smuzhiyun #define WILC_PKT_HDR_LEN_FIELD		GENMASK(10, 0)
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun #define WILC_INTERRUPT_DATA_SIZE	GENMASK(14, 0)
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun #define WILC_VMM_BUFFER_SIZE		GENMASK(9, 0)
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #define WILC_VMM_HDR_TYPE		BIT(31)
220*4882a593Smuzhiyun #define WILC_VMM_HDR_MGMT_FIELD		BIT(30)
221*4882a593Smuzhiyun #define WILC_VMM_HDR_PKT_SIZE		GENMASK(29, 15)
222*4882a593Smuzhiyun #define WILC_VMM_HDR_BUFF_SIZE		GENMASK(14, 0)
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun #define WILC_VMM_ENTRY_COUNT		GENMASK(8, 3)
225*4882a593Smuzhiyun #define WILC_VMM_ENTRY_AVAILABLE	BIT(2)
226*4882a593Smuzhiyun /*******************************************/
227*4882a593Smuzhiyun /*        E0 and later Interrupt flags.    */
228*4882a593Smuzhiyun /*******************************************/
229*4882a593Smuzhiyun /*******************************************/
230*4882a593Smuzhiyun /*        E0 and later Interrupt flags.    */
231*4882a593Smuzhiyun /*           IRQ Status word               */
232*4882a593Smuzhiyun /* 15:0 = DMA count in words.              */
233*4882a593Smuzhiyun /* 16: INT0 flag                           */
234*4882a593Smuzhiyun /* 17: INT1 flag                           */
235*4882a593Smuzhiyun /* 18: INT2 flag                           */
236*4882a593Smuzhiyun /* 19: INT3 flag                           */
237*4882a593Smuzhiyun /* 20: INT4 flag                           */
238*4882a593Smuzhiyun /* 21: INT5 flag                           */
239*4882a593Smuzhiyun /*******************************************/
240*4882a593Smuzhiyun #define IRG_FLAGS_OFFSET	16
241*4882a593Smuzhiyun #define IRQ_DMA_WD_CNT_MASK	GENMASK(IRG_FLAGS_OFFSET - 1, 0)
242*4882a593Smuzhiyun #define INT_0			BIT(IRG_FLAGS_OFFSET)
243*4882a593Smuzhiyun #define INT_1			BIT(IRG_FLAGS_OFFSET + 1)
244*4882a593Smuzhiyun #define INT_2			BIT(IRG_FLAGS_OFFSET + 2)
245*4882a593Smuzhiyun #define INT_3			BIT(IRG_FLAGS_OFFSET + 3)
246*4882a593Smuzhiyun #define INT_4			BIT(IRG_FLAGS_OFFSET + 4)
247*4882a593Smuzhiyun #define INT_5			BIT(IRG_FLAGS_OFFSET + 5)
248*4882a593Smuzhiyun #define MAX_NUM_INT		5
249*4882a593Smuzhiyun #define IRG_FLAGS_MASK		GENMASK(IRG_FLAGS_OFFSET + MAX_NUM_INT, \
250*4882a593Smuzhiyun 					IRG_FLAGS_OFFSET)
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /*******************************************/
253*4882a593Smuzhiyun /*        E0 and later Interrupt flags.    */
254*4882a593Smuzhiyun /*           IRQ Clear word                */
255*4882a593Smuzhiyun /* 0: Clear INT0                           */
256*4882a593Smuzhiyun /* 1: Clear INT1                           */
257*4882a593Smuzhiyun /* 2: Clear INT2                           */
258*4882a593Smuzhiyun /* 3: Clear INT3                           */
259*4882a593Smuzhiyun /* 4: Clear INT4                           */
260*4882a593Smuzhiyun /* 5: Clear INT5                           */
261*4882a593Smuzhiyun /* 6: Select VMM table 1                   */
262*4882a593Smuzhiyun /* 7: Select VMM table 2                   */
263*4882a593Smuzhiyun /* 8: Enable VMM                           */
264*4882a593Smuzhiyun /*******************************************/
265*4882a593Smuzhiyun #define CLR_INT0		BIT(0)
266*4882a593Smuzhiyun #define CLR_INT1		BIT(1)
267*4882a593Smuzhiyun #define CLR_INT2		BIT(2)
268*4882a593Smuzhiyun #define CLR_INT3		BIT(3)
269*4882a593Smuzhiyun #define CLR_INT4		BIT(4)
270*4882a593Smuzhiyun #define CLR_INT5		BIT(5)
271*4882a593Smuzhiyun #define SEL_VMM_TBL0		BIT(6)
272*4882a593Smuzhiyun #define SEL_VMM_TBL1		BIT(7)
273*4882a593Smuzhiyun #define EN_VMM			BIT(8)
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun #define DATA_INT_EXT		INT_0
276*4882a593Smuzhiyun #define ALL_INT_EXT		DATA_INT_EXT
277*4882a593Smuzhiyun #define NUM_INT_EXT		1
278*4882a593Smuzhiyun #define UNHANDLED_IRQ_MASK	GENMASK(MAX_NUM_INT - 1, NUM_INT_EXT)
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun #define DATA_INT_CLR		CLR_INT0
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun #define ENABLE_RX_VMM		(SEL_VMM_TBL1 | EN_VMM)
283*4882a593Smuzhiyun #define ENABLE_TX_VMM		(SEL_VMM_TBL0 | EN_VMM)
284*4882a593Smuzhiyun /* time for expiring the completion of cfg packets */
285*4882a593Smuzhiyun #define WILC_CFG_PKTS_TIMEOUT	msecs_to_jiffies(2000)
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun #define IS_MANAGMEMENT		0x100
288*4882a593Smuzhiyun #define IS_MANAGMEMENT_CALLBACK	0x080
289*4882a593Smuzhiyun #define IS_MGMT_STATUS_SUCCES	0x040
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun #define WILC_WID_TYPE		GENMASK(15, 12)
292*4882a593Smuzhiyun #define WILC_VMM_ENTRY_FULL_RETRY	1
293*4882a593Smuzhiyun /********************************************
294*4882a593Smuzhiyun  *
295*4882a593Smuzhiyun  *      Tx/Rx Queue Structure
296*4882a593Smuzhiyun  *
297*4882a593Smuzhiyun  ********************************************/
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun struct txq_entry_t {
300*4882a593Smuzhiyun 	struct list_head list;
301*4882a593Smuzhiyun 	int type;
302*4882a593Smuzhiyun 	int ack_idx;
303*4882a593Smuzhiyun 	u8 *buffer;
304*4882a593Smuzhiyun 	int buffer_size;
305*4882a593Smuzhiyun 	void *priv;
306*4882a593Smuzhiyun 	int status;
307*4882a593Smuzhiyun 	struct wilc_vif *vif;
308*4882a593Smuzhiyun 	void (*tx_complete_func)(void *priv, int status);
309*4882a593Smuzhiyun };
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun struct rxq_entry_t {
312*4882a593Smuzhiyun 	struct list_head list;
313*4882a593Smuzhiyun 	u8 *buffer;
314*4882a593Smuzhiyun 	int buffer_size;
315*4882a593Smuzhiyun };
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun /********************************************
318*4882a593Smuzhiyun  *
319*4882a593Smuzhiyun  *      Host IF Structure
320*4882a593Smuzhiyun  *
321*4882a593Smuzhiyun  ********************************************/
322*4882a593Smuzhiyun struct wilc;
323*4882a593Smuzhiyun struct wilc_hif_func {
324*4882a593Smuzhiyun 	int (*hif_init)(struct wilc *wilc, bool resume);
325*4882a593Smuzhiyun 	int (*hif_deinit)(struct wilc *wilc);
326*4882a593Smuzhiyun 	int (*hif_read_reg)(struct wilc *wilc, u32 addr, u32 *data);
327*4882a593Smuzhiyun 	int (*hif_write_reg)(struct wilc *wilc, u32 addr, u32 data);
328*4882a593Smuzhiyun 	int (*hif_block_rx)(struct wilc *wilc, u32 addr, u8 *buf, u32 size);
329*4882a593Smuzhiyun 	int (*hif_block_tx)(struct wilc *wilc, u32 addr, u8 *buf, u32 size);
330*4882a593Smuzhiyun 	int (*hif_read_int)(struct wilc *wilc, u32 *int_status);
331*4882a593Smuzhiyun 	int (*hif_clear_int_ext)(struct wilc *wilc, u32 val);
332*4882a593Smuzhiyun 	int (*hif_read_size)(struct wilc *wilc, u32 *size);
333*4882a593Smuzhiyun 	int (*hif_block_tx_ext)(struct wilc *wilc, u32 addr, u8 *buf, u32 size);
334*4882a593Smuzhiyun 	int (*hif_block_rx_ext)(struct wilc *wilc, u32 addr, u8 *buf, u32 size);
335*4882a593Smuzhiyun 	int (*hif_sync_ext)(struct wilc *wilc, int nint);
336*4882a593Smuzhiyun 	int (*enable_interrupt)(struct wilc *nic);
337*4882a593Smuzhiyun 	void (*disable_interrupt)(struct wilc *nic);
338*4882a593Smuzhiyun };
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun #define WILC_MAX_CFG_FRAME_SIZE		1468
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun struct tx_complete_data {
343*4882a593Smuzhiyun 	int size;
344*4882a593Smuzhiyun 	void *buff;
345*4882a593Smuzhiyun 	struct sk_buff *skb;
346*4882a593Smuzhiyun };
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun struct wilc_cfg_cmd_hdr {
349*4882a593Smuzhiyun 	u8 cmd_type;
350*4882a593Smuzhiyun 	u8 seq_no;
351*4882a593Smuzhiyun 	__le16 total_len;
352*4882a593Smuzhiyun 	__le32 driver_handler;
353*4882a593Smuzhiyun };
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun struct wilc_cfg_frame {
356*4882a593Smuzhiyun 	struct wilc_cfg_cmd_hdr hdr;
357*4882a593Smuzhiyun 	u8 frame[WILC_MAX_CFG_FRAME_SIZE];
358*4882a593Smuzhiyun };
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun struct wilc_cfg_rsp {
361*4882a593Smuzhiyun 	u8 type;
362*4882a593Smuzhiyun 	u8 seq_no;
363*4882a593Smuzhiyun };
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun struct wilc;
366*4882a593Smuzhiyun struct wilc_vif;
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun int wilc_wlan_firmware_download(struct wilc *wilc, const u8 *buffer,
369*4882a593Smuzhiyun 				u32 buffer_size);
370*4882a593Smuzhiyun int wilc_wlan_start(struct wilc *wilc);
371*4882a593Smuzhiyun int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif);
372*4882a593Smuzhiyun int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer,
373*4882a593Smuzhiyun 			      u32 buffer_size,
374*4882a593Smuzhiyun 			      void (*tx_complete_fn)(void *, int));
375*4882a593Smuzhiyun int wilc_wlan_handle_txq(struct wilc *wl, u32 *txq_count);
376*4882a593Smuzhiyun void wilc_handle_isr(struct wilc *wilc);
377*4882a593Smuzhiyun void wilc_wlan_cleanup(struct net_device *dev);
378*4882a593Smuzhiyun int wilc_wlan_cfg_set(struct wilc_vif *vif, int start, u16 wid, u8 *buffer,
379*4882a593Smuzhiyun 		      u32 buffer_size, int commit, u32 drv_handler);
380*4882a593Smuzhiyun int wilc_wlan_cfg_get(struct wilc_vif *vif, int start, u16 wid, int commit,
381*4882a593Smuzhiyun 		      u32 drv_handler);
382*4882a593Smuzhiyun int wilc_wlan_txq_add_mgmt_pkt(struct net_device *dev, void *priv, u8 *buffer,
383*4882a593Smuzhiyun 			       u32 buffer_size, void (*func)(void *, int));
384*4882a593Smuzhiyun void wilc_enable_tcp_ack_filter(struct wilc_vif *vif, bool value);
385*4882a593Smuzhiyun int wilc_wlan_get_num_conn_ifcs(struct wilc *wilc);
386*4882a593Smuzhiyun netdev_tx_t wilc_mac_xmit(struct sk_buff *skb, struct net_device *dev);
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun void wilc_wfi_p2p_rx(struct wilc_vif *vif, u8 *buff, u32 size);
389*4882a593Smuzhiyun void host_wakeup_notify(struct wilc *wilc);
390*4882a593Smuzhiyun void host_sleep_notify(struct wilc *wilc);
391*4882a593Smuzhiyun void chip_allow_sleep(struct wilc *wilc);
392*4882a593Smuzhiyun void chip_wakeup(struct wilc *wilc);
393*4882a593Smuzhiyun int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids,
394*4882a593Smuzhiyun 			 u32 count);
395*4882a593Smuzhiyun int wilc_wlan_init(struct net_device *dev);
396*4882a593Smuzhiyun u32 wilc_get_chipid(struct wilc *wilc, bool update);
397*4882a593Smuzhiyun #endif
398