1*71aec127SJiawen Wu /* SPDX-License-Identifier: BSD-3-Clause
2*71aec127SJiawen Wu * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd.
3*71aec127SJiawen Wu * Copyright(c) 2010-2017 Intel Corporation
4*71aec127SJiawen Wu */
5*71aec127SJiawen Wu
6*71aec127SJiawen Wu #ifndef _NGBE_REGS_GROUP_H_
7*71aec127SJiawen Wu #define _NGBE_REGS_GROUP_H_
8*71aec127SJiawen Wu
9*71aec127SJiawen Wu #include "ngbe_ethdev.h"
10*71aec127SJiawen Wu
11*71aec127SJiawen Wu struct ngbe_hw;
12*71aec127SJiawen Wu struct reg_info {
13*71aec127SJiawen Wu uint32_t base_addr;
14*71aec127SJiawen Wu uint32_t count;
15*71aec127SJiawen Wu uint32_t stride;
16*71aec127SJiawen Wu const char *name;
17*71aec127SJiawen Wu };
18*71aec127SJiawen Wu
19*71aec127SJiawen Wu static inline int
ngbe_read_regs(struct ngbe_hw * hw,const struct reg_info * reg,uint32_t * reg_buf)20*71aec127SJiawen Wu ngbe_read_regs(struct ngbe_hw *hw, const struct reg_info *reg,
21*71aec127SJiawen Wu uint32_t *reg_buf)
22*71aec127SJiawen Wu {
23*71aec127SJiawen Wu unsigned int i;
24*71aec127SJiawen Wu
25*71aec127SJiawen Wu for (i = 0; i < reg->count; i++)
26*71aec127SJiawen Wu reg_buf[i] = rd32(hw, reg->base_addr + i * reg->stride);
27*71aec127SJiawen Wu return reg->count;
28*71aec127SJiawen Wu };
29*71aec127SJiawen Wu
30*71aec127SJiawen Wu static inline int
ngbe_regs_group_count(const struct reg_info * regs)31*71aec127SJiawen Wu ngbe_regs_group_count(const struct reg_info *regs)
32*71aec127SJiawen Wu {
33*71aec127SJiawen Wu int count = 0;
34*71aec127SJiawen Wu int i = 0;
35*71aec127SJiawen Wu
36*71aec127SJiawen Wu while (regs[i].count)
37*71aec127SJiawen Wu count += regs[i++].count;
38*71aec127SJiawen Wu return count;
39*71aec127SJiawen Wu };
40*71aec127SJiawen Wu
41*71aec127SJiawen Wu static inline int
ngbe_read_regs_group(struct rte_eth_dev * dev,uint32_t * reg_buf,const struct reg_info * regs)42*71aec127SJiawen Wu ngbe_read_regs_group(struct rte_eth_dev *dev, uint32_t *reg_buf,
43*71aec127SJiawen Wu const struct reg_info *regs)
44*71aec127SJiawen Wu {
45*71aec127SJiawen Wu int count = 0;
46*71aec127SJiawen Wu int i = 0;
47*71aec127SJiawen Wu struct ngbe_hw *hw = ngbe_dev_hw(dev);
48*71aec127SJiawen Wu
49*71aec127SJiawen Wu while (regs[i].count)
50*71aec127SJiawen Wu count += ngbe_read_regs(hw, ®s[i++], ®_buf[count]);
51*71aec127SJiawen Wu return count;
52*71aec127SJiawen Wu };
53*71aec127SJiawen Wu
54*71aec127SJiawen Wu #endif /* _NGBE_REGS_GROUP_H_ */
55