xref: /linux/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie_ipc.h (revision 597473720f4dc69749542bfcfed4a927a43d935e)
1*e401fa25SSergey Matyukevich /* SPDX-License-Identifier: GPL-2.0+ */
2*e401fa25SSergey Matyukevich /* Copyright (c) 2018 Quantenna Communications */
3*e401fa25SSergey Matyukevich 
4*e401fa25SSergey Matyukevich #ifndef _QTN_FMAC_PCIE_IPC_H_
5*e401fa25SSergey Matyukevich #define _QTN_FMAC_PCIE_IPC_H_
6*e401fa25SSergey Matyukevich 
7*e401fa25SSergey Matyukevich #include <linux/types.h>
8*e401fa25SSergey Matyukevich 
9*e401fa25SSergey Matyukevich #include "shm_ipc_defs.h"
10*e401fa25SSergey Matyukevich 
11*e401fa25SSergey Matyukevich /* EP/RC status and flags */
12*e401fa25SSergey Matyukevich #define QTN_BDA_PCIE_INIT		0x01
13*e401fa25SSergey Matyukevich #define QTN_BDA_PCIE_RDY		0x02
14*e401fa25SSergey Matyukevich #define QTN_BDA_FW_LOAD_RDY		0x03
15*e401fa25SSergey Matyukevich #define QTN_BDA_FW_LOAD_DONE		0x04
16*e401fa25SSergey Matyukevich #define QTN_BDA_FW_START		0x05
17*e401fa25SSergey Matyukevich #define QTN_BDA_FW_RUN			0x06
18*e401fa25SSergey Matyukevich #define QTN_BDA_FW_HOST_RDY		0x07
19*e401fa25SSergey Matyukevich #define QTN_BDA_FW_TARGET_RDY		0x11
20*e401fa25SSergey Matyukevich #define QTN_BDA_FW_TARGET_BOOT		0x12
21*e401fa25SSergey Matyukevich #define QTN_BDA_FW_FLASH_BOOT		0x13
22*e401fa25SSergey Matyukevich #define QTN_BDA_FW_QLINK_DONE		0x14
23*e401fa25SSergey Matyukevich #define QTN_BDA_FW_HOST_LOAD		0x08
24*e401fa25SSergey Matyukevich #define QTN_BDA_FW_BLOCK_DONE		0x09
25*e401fa25SSergey Matyukevich #define QTN_BDA_FW_BLOCK_RDY		0x0A
26*e401fa25SSergey Matyukevich #define QTN_BDA_FW_EP_RDY		0x0B
27*e401fa25SSergey Matyukevich #define QTN_BDA_FW_BLOCK_END		0x0C
28*e401fa25SSergey Matyukevich #define QTN_BDA_FW_CONFIG		0x0D
29*e401fa25SSergey Matyukevich #define QTN_BDA_FW_RUNNING		0x0E
30*e401fa25SSergey Matyukevich #define QTN_BDA_PCIE_FAIL		0x82
31*e401fa25SSergey Matyukevich #define QTN_BDA_FW_LOAD_FAIL		0x85
32*e401fa25SSergey Matyukevich 
33*e401fa25SSergey Matyukevich #define QTN_BDA_RCMODE			BIT(1)
34*e401fa25SSergey Matyukevich #define QTN_BDA_MSI			BIT(2)
35*e401fa25SSergey Matyukevich #define QTN_BDA_HOST_CALCMD		BIT(3)
36*e401fa25SSergey Matyukevich #define QTN_BDA_FLASH_PRESENT		BIT(4)
37*e401fa25SSergey Matyukevich #define QTN_BDA_FLASH_BOOT		BIT(5)
38*e401fa25SSergey Matyukevich #define QTN_BDA_XMIT_UBOOT		BIT(6)
39*e401fa25SSergey Matyukevich #define QTN_BDA_HOST_QLINK_DRV		BIT(7)
40*e401fa25SSergey Matyukevich #define QTN_BDA_TARGET_FBOOT_ERR	BIT(8)
41*e401fa25SSergey Matyukevich #define QTN_BDA_TARGET_FWLOAD_ERR	BIT(9)
42*e401fa25SSergey Matyukevich #define QTN_BDA_HOST_NOFW_ERR		BIT(12)
43*e401fa25SSergey Matyukevich #define QTN_BDA_HOST_MEMALLOC_ERR	BIT(13)
44*e401fa25SSergey Matyukevich #define QTN_BDA_HOST_MEMMAP_ERR		BIT(14)
45*e401fa25SSergey Matyukevich #define QTN_BDA_VER(x)			(((x) >> 4) & 0xFF)
46*e401fa25SSergey Matyukevich #define QTN_BDA_ERROR_MASK		0xFF00
47*e401fa25SSergey Matyukevich 
48*e401fa25SSergey Matyukevich /* registers and shmem address macros */
49*e401fa25SSergey Matyukevich #if BITS_PER_LONG == 64
50*e401fa25SSergey Matyukevich #define QTN_HOST_HI32(a)	((u32)(((u64)a) >> 32))
51*e401fa25SSergey Matyukevich #define QTN_HOST_LO32(a)	((u32)(((u64)a) & 0xffffffffUL))
52*e401fa25SSergey Matyukevich #define QTN_HOST_ADDR(h, l)	((((u64)h) << 32) | ((u64)l))
53*e401fa25SSergey Matyukevich #elif BITS_PER_LONG == 32
54*e401fa25SSergey Matyukevich #define QTN_HOST_HI32(a)	0
55*e401fa25SSergey Matyukevich #define QTN_HOST_LO32(a)	((u32)(((u32)a) & 0xffffffffUL))
56*e401fa25SSergey Matyukevich #define QTN_HOST_ADDR(h, l)	((u32)l)
57*e401fa25SSergey Matyukevich #else
58*e401fa25SSergey Matyukevich #error Unexpected BITS_PER_LONG value
59*e401fa25SSergey Matyukevich #endif
60*e401fa25SSergey Matyukevich 
61*e401fa25SSergey Matyukevich #define QTN_PCIE_BDA_VERSION		0x1001
62*e401fa25SSergey Matyukevich 
63*e401fa25SSergey Matyukevich #define PCIE_BDA_NAMELEN		32
64*e401fa25SSergey Matyukevich 
65*e401fa25SSergey Matyukevich #define QTN_PCIE_RC_TX_QUEUE_LEN	256
66*e401fa25SSergey Matyukevich #define QTN_PCIE_TX_VALID_PKT		0x80000000
67*e401fa25SSergey Matyukevich #define QTN_PCIE_PKT_LEN_MASK		0xffff
68*e401fa25SSergey Matyukevich 
69*e401fa25SSergey Matyukevich #define QTN_BD_EMPTY		((uint32_t)0x00000001)
70*e401fa25SSergey Matyukevich #define QTN_BD_WRAP		((uint32_t)0x00000002)
71*e401fa25SSergey Matyukevich #define QTN_BD_MASK_LEN		((uint32_t)0xFFFF0000)
72*e401fa25SSergey Matyukevich #define QTN_BD_MASK_OFFSET	((uint32_t)0x0000FF00)
73*e401fa25SSergey Matyukevich 
74*e401fa25SSergey Matyukevich #define QTN_GET_LEN(x)		(((x) >> 16) & 0xFFFF)
75*e401fa25SSergey Matyukevich #define QTN_GET_OFFSET(x)	(((x) >> 8) & 0xFF)
76*e401fa25SSergey Matyukevich #define QTN_SET_LEN(len)	(((len) & 0xFFFF) << 16)
77*e401fa25SSergey Matyukevich #define QTN_SET_OFFSET(of)	(((of) & 0xFF) << 8)
78*e401fa25SSergey Matyukevich 
79*e401fa25SSergey Matyukevich #define RX_DONE_INTR_MSK	((0x1 << 6) - 1)
80*e401fa25SSergey Matyukevich 
81*e401fa25SSergey Matyukevich #define PCIE_DMA_OFFSET_ERROR		0xFFFF
82*e401fa25SSergey Matyukevich #define PCIE_DMA_OFFSET_ERROR_MASK	0xFFFF
83*e401fa25SSergey Matyukevich 
84*e401fa25SSergey Matyukevich #define QTN_PCI_ENDIAN_DETECT_DATA	0x12345678
85*e401fa25SSergey Matyukevich #define QTN_PCI_ENDIAN_REVERSE_DATA	0x78563412
86*e401fa25SSergey Matyukevich #define QTN_PCI_ENDIAN_VALID_STATUS	0x3c3c3c3c
87*e401fa25SSergey Matyukevich #define QTN_PCI_ENDIAN_INVALID_STATUS	0
88*e401fa25SSergey Matyukevich #define QTN_PCI_LITTLE_ENDIAN		0
89*e401fa25SSergey Matyukevich #define QTN_PCI_BIG_ENDIAN		0xffffffff
90*e401fa25SSergey Matyukevich 
91*e401fa25SSergey Matyukevich #define NBLOCKS(size, blksize)		\
92*e401fa25SSergey Matyukevich 	((size) / (blksize) + (((size) % (blksize) > 0) ? 1 : 0))
93*e401fa25SSergey Matyukevich 
94*e401fa25SSergey Matyukevich #endif /* _QTN_FMAC_PCIE_IPC_H_ */
95