xref: /linux/drivers/net/ethernet/broadcom/bnge/bnge_db.h (revision ec2e0fb07d789976c601bec19ecced7a501c3705)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2025 Broadcom */
3 
4 #ifndef _BNGE_DB_H_
5 #define _BNGE_DB_H_
6 
7 /* 64-bit doorbell */
8 #define DBR_EPOCH_SFT					24
9 #define DBR_TOGGLE_SFT					25
10 #define DBR_XID_SFT					32
11 #define DBR_PATH_L2					(0x1ULL << 56)
12 #define DBR_VALID					(0x1ULL << 58)
13 #define DBR_TYPE_SQ					(0x0ULL << 60)
14 #define DBR_TYPE_SRQ					(0x2ULL << 60)
15 #define DBR_TYPE_CQ					(0x4ULL << 60)
16 #define DBR_TYPE_CQ_ARMALL				(0x6ULL << 60)
17 #define DBR_TYPE_NQ					(0xaULL << 60)
18 #define DBR_TYPE_NQ_ARM					(0xbULL << 60)
19 #define DBR_TYPE_NQ_MASK				(0xeULL << 60)
20 
21 struct bnge_db_info {
22 	void __iomem		*doorbell;
23 	u64			db_key64;
24 	u32			db_ring_mask;
25 	u32			db_epoch_mask;
26 	u8			db_epoch_shift;
27 };
28 
29 #define DB_EPOCH(db, idx)	(((idx) & (db)->db_epoch_mask) <<	\
30 				 ((db)->db_epoch_shift))
31 #define DB_RING_IDX(db, idx)	(((idx) & (db)->db_ring_mask) |		\
32 				 DB_EPOCH(db, idx))
33 
34 #endif /* _BNGE_DB_H_ */
35