iavf: new driver using new dev infra
[vpp.git] / src / plugins / dev_iavf / iavf_regs.h
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright (c) 2023 Cisco Systems, Inc.
3  */
4
5 #ifndef _IIAVF_REGS_H_
6 #define _IIAVF_REGS_H_
7
8 #include <vppinfra/clib.h>
9 #include <vppinfra/error_bootstrap.h>
10 #include <vppinfra/format.h>
11 #include <vnet/vnet.h>
12 #include <vnet/dev/dev.h>
13
14 #define iavf_reg_ctrl_t_fields                                                \
15   __ (1, full_duplex)                                                         \
16   __ (1, _reserved1)                                                          \
17   __ (1, gio_master_disable)                                                  \
18   __ (3, _reserved3)                                                          \
19   __ (1, set_link_up)                                                         \
20   __ (9, _reserved7)                                                          \
21   __ (1, sdp0_gpien)                                                          \
22   __ (1, sdp1_gpien)                                                          \
23   __ (1, sdp0_data)                                                           \
24   __ (1, sdp1_data)                                                           \
25   __ (1, adww3wuc)                                                            \
26   __ (1, sdp0_wde)                                                            \
27   __ (1, sdp0_iodir)                                                          \
28   __ (1, sdp1_iodir)                                                          \
29   __ (2, _reserved24)                                                         \
30   __ (1, port_sw_reset)                                                       \
31   __ (1, rx_flow_ctl_en)                                                      \
32   __ (1, tx_flow_ctl_en)                                                      \
33   __ (1, device_reset)                                                        \
34   __ (1, vlan_mode_enable)                                                    \
35   __ (1, phy_reset)
36
37 #define iavf_reg_status_t_fields                                              \
38   __ (1, full_duplex)                                                         \
39   __ (1, link_up)                                                             \
40   __ (2, _reserved2)                                                          \
41   __ (1, tx_off)                                                              \
42   __ (1, _reserved5)                                                          \
43   __ (2, speed)                                                               \
44   __ (2, asdv)                                                                \
45   __ (1, phy_reset_asserted)                                                  \
46   __ (8, _reserved11)                                                         \
47   __ (1, gio_master_en_sts)                                                   \
48   __ (1, dev_rst_set)                                                         \
49   __ (1, rst_done)                                                            \
50   __ (1, speed_2p5)                                                           \
51   __ (7, _reserved23)                                                         \
52   __ (1, lpi_ignore)                                                          \
53   __ (1, _reserved31)
54
55 #define iavf_reg_ctrl_ext_t_fields                                            \
56   __ (2, _reserved0)                                                          \
57   __ (1, sdp2_gpien)                                                          \
58   __ (1, sdp3_gpien)                                                          \
59   __ (2, _reserved4)                                                          \
60   __ (1, sdp2_data)                                                           \
61   __ (1, sdp3_data)                                                           \
62   __ (2, _reserved8)                                                          \
63   __ (1, sdp2_iodir)                                                          \
64   __ (1, sdp3_iodir)                                                          \
65   __ (1, _reserved12)                                                         \
66   __ (1, eeprom_block_rst)                                                    \
67   __ (2, _reserved14)                                                         \
68   __ (1, no_snoop_dis)                                                        \
69   __ (1, relaxed_ordering_dis)                                                \
70   __ (2, _reserved18)                                                         \
71   __ (1, phy_power_down_ena)                                                  \
72   __ (5, _reserved121)                                                        \
73   __ (1, ext_vlan_ena)                                                        \
74   __ (1, _reserved127)                                                        \
75   __ (1, driver_loaded)                                                       \
76   __ (3, _reserved29)
77
78 #define iavf_reg_mdic_t_fields                                                \
79   __ (16, data)                                                               \
80   __ (5, regadd)                                                              \
81   __ (5, _reserved21)                                                         \
82   __ (2, opcode)                                                              \
83   __ (1, ready)                                                               \
84   __ (1, mid_ie)                                                              \
85   __ (1, mid_err)                                                             \
86   __ (1, _reserved31)
87
88 #define iavf_reg_rctl_t_fields                                                \
89   __ (1, _reserved0)                                                          \
90   __ (1, rx_enable)                                                           \
91   __ (1, store_bad_packets)                                                   \
92   __ (1, uc_promisc_ena)                                                      \
93   __ (1, mc_promisc_ena)                                                      \
94   __ (1, long_pkt_reception_ena)                                              \
95   __ (2, loopback_mode)                                                       \
96   __ (2, hash_select)                                                         \
97   __ (2, _reserved10)                                                         \
98   __ (2, mc_uc_tbl_off)                                                       \
99   __ (1, _reserved14)                                                         \
100   __ (1, bcast_accept_mode)                                                   \
101   __ (2, rx_buf_sz)                                                           \
102   __ (1, vlan_filter_ena)                                                     \
103   __ (1, cannonical_form_ind_ena)                                             \
104   __ (1, cannonical_form_ind_bit_val)                                         \
105   __ (1, pad_small_rx_pkts)                                                   \
106   __ (1, discard_pause_frames)                                                \
107   __ (1, pass_mac_ctrl_frames)                                                \
108   __ (2, _reserved24)                                                         \
109   __ (1, strip_eth_crc)                                                       \
110   __ (5, _reserved26)
111
112 #define iavf_reg_tctl_t_fields                                                \
113   __ (1, _reserved0)                                                          \
114   __ (1, tx_enable)                                                           \
115   __ (1, _reserved2)                                                          \
116   __ (1, pad_short_pkts)                                                      \
117   __ (8, collision_threshold)                                                 \
118   __ (10, backoff_slot_time)                                                  \
119   __ (1, sw_xoff_tx)                                                          \
120   __ (1, _reserved23)                                                         \
121   __ (1, retransmit_on_late_colision)                                         \
122   __ (7, reserved25)
123
124 #define iavf_reg_phpm_t_fields                                                \
125   __ (1, _reserved0)                                                          \
126   __ (1, restart_autoneg)                                                     \
127   __ (1, _reserved2)                                                          \
128   __ (1, dis_1000_in_non_d0a)                                                 \
129   __ (1, link_energy_detect)                                                  \
130   __ (1, go_link_disc)                                                        \
131   __ (1, disable_1000)                                                        \
132   __ (1, spd_b2b_en)                                                          \
133   __ (1, rst_compl)                                                           \
134   __ (1, dis_100_in_non_d0a)                                                  \
135   __ (1, ulp_req)                                                             \
136   __ (1, disable_2500)                                                        \
137   __ (1, dis_2500_in_non_d0a)                                                 \
138   __ (1, ulp_trig)                                                            \
139   __ (2, ulp_delay)                                                           \
140   __ (1, link_enery_en)                                                       \
141   __ (1, dev_off_en)                                                          \
142   __ (1, dev_off_state)                                                       \
143   __ (1, ulp_en)                                                              \
144   __ (12, _reserved20)
145
146 #define iavf_reg_manc_t_fields                                                \
147   __ (1, flow_ctrl_discard)                                                   \
148   __ (1, ncsi_discard)                                                        \
149   __ (12, _reserved2)                                                         \
150   __ (1, fw_reset)                                                            \
151   __ (1, tco_isolate)                                                         \
152   __ (1, tco_reset)                                                           \
153   __ (1, rcv_tco_en)                                                          \
154   __ (1, keep_phy_link_up)                                                    \
155   __ (1, rcv_all)                                                             \
156   __ (1, inhibit_ulp)                                                         \
157   __ (2, _reserved21)                                                         \
158   __ (1, en_xsum_filter)                                                      \
159   __ (1, en_ipv4_filter)                                                      \
160   __ (1, fixed_net_type)                                                      \
161   __ (1, net_type)                                                            \
162   __ (1, ipv6_adv_only)                                                       \
163   __ (1, en_bmc2os)                                                           \
164   __ (1, en_bmc2net)                                                          \
165   __ (1, mproxye)                                                             \
166   __ (1, mproxya)
167
168 #define iavf_reg_swsm_t_fields                                                \
169   __ (1, smbi)                                                                \
170   __ (1, swesmbi)                                                             \
171   __ (30, _reserved2)
172
173 #define iavf_reg_fwsm_t_fields                                                \
174   __ (1, eep_fw_semaphore)                                                    \
175   __ (3, fw_mode)                                                             \
176   __ (2, _reserved4)                                                          \
177   __ (1, eep_reload_ind)                                                      \
178   __ (8, _reserved7)                                                          \
179   __ (1, fw_val_bit)                                                          \
180   __ (3, reset_ctr)                                                           \
181   __ (6, ext_err_ind)                                                         \
182   __ (1, pcie_config_err_ind)                                                 \
183   __ (5, _reserved26)                                                         \
184   __ (1, factory_mac_addr_restored)
185
186 #define iavf_reg_sw_fw_sync_t_fields                                          \
187   __ (1, sw_flash_sm)                                                         \
188   __ (1, sw_phy_sm)                                                           \
189   __ (1, sw_i2c_sm)                                                           \
190   __ (1, sw_mac_csr_sm)                                                       \
191   __ (3, _reserved4)                                                          \
192   __ (1, sw_svr_sm)                                                           \
193   __ (1, sw_mb_sm)                                                            \
194   __ (1, _reserved9)                                                          \
195   __ (1, sw_mng_sm)                                                           \
196   __ (5, _reserved11)                                                         \
197   __ (1, fw_flash_sm)                                                         \
198   __ (1, fw_phy_sm)                                                           \
199   __ (1, fw_i2c_sm)                                                           \
200   __ (1, fw_mac_csr_sm)                                                       \
201   __ (3, _reserved20)                                                         \
202   __ (1, fw_svr_sm)                                                           \
203   __ (8, _reserved24)
204
205 #define iavf_reg_srrctl_t_fields                                              \
206   __ (7, bsizepacket)                                                         \
207   __ (1, _reserved7)                                                          \
208   __ (6, bsizeheader)                                                         \
209   __ (2, timer1_sel)                                                          \
210   __ (1, _reserved16)                                                         \
211   __ (2, timer0_sel)                                                          \
212   __ (1, use_domain)                                                          \
213   __ (5, rdmts)                                                               \
214   __ (3, desc_type)                                                           \
215   __ (2, _reserved28)                                                         \
216   __ (1, timestamp)                                                           \
217   __ (1, drop_en)
218
219 #define iavf_reg_rxdctl_t_fields                                              \
220   __ (5, pthresh)                                                             \
221   __ (3, _reserved5)                                                          \
222   __ (5, hthresh)                                                             \
223   __ (3, _reserved13)                                                         \
224   __ (5, wthresh)                                                             \
225   __ (4, _reserved21)                                                         \
226   __ (1, enable)                                                              \
227   __ (1, swflush)                                                             \
228   __ (5, _reserved27)
229
230 #define iavf_reg_eec_t_fields                                                 \
231   __ (6, _reserved0)                                                          \
232   __ (1, flash_in_use)                                                        \
233   __ (1, _reserved7)                                                          \
234   __ (1, ee_pres)                                                             \
235   __ (1, auto_rd)                                                             \
236   __ (1, _reservedxi10)                                                       \
237   __ (4, ee_size)                                                             \
238   __ (4, pci_ana_done)                                                        \
239   __ (1, flash_detected)                                                      \
240   __ (2, _reserved20)                                                         \
241   __ (1, shadow_modified)                                                     \
242   __ (1, flupd)                                                               \
243   __ (1, _reserved24)                                                         \
244   __ (1, sec1val)                                                             \
245   __ (1, fludone)                                                             \
246   __ (5, _reserved27)
247
248 #define iavf_reg_eemngctl_t_fields                                            \
249   __ (11, addr)                                                               \
250   __ (4, reserved11)                                                          \
251   __ (1, cmd_valid)                                                           \
252   __ (1, write)                                                               \
253   __ (1, eebusy)                                                              \
254   __ (1, cfg_done)                                                            \
255   __ (12, _reserved19)                                                        \
256   __ (1, done)
257
258 #define IAVF_REG_STRUCT(n)                                                    \
259   typedef union                                                               \
260   {                                                                           \
261     struct                                                                    \
262     {                                                                         \
263       n##_fields;                                                             \
264     };                                                                        \
265     u32 as_u32;                                                               \
266   } n;                                                                        \
267   STATIC_ASSERT_SIZEOF (n, 4);
268
269 #define __(n, f) u32 f : n;
270 IAVF_REG_STRUCT (iavf_reg_status_t);
271 IAVF_REG_STRUCT (iavf_reg_ctrl_t);
272 IAVF_REG_STRUCT (iavf_reg_ctrl_ext_t);
273 IAVF_REG_STRUCT (iavf_reg_mdic_t);
274 IAVF_REG_STRUCT (iavf_reg_rctl_t);
275 IAVF_REG_STRUCT (iavf_reg_tctl_t);
276 IAVF_REG_STRUCT (iavf_reg_phpm_t);
277 IAVF_REG_STRUCT (iavf_reg_manc_t);
278 IAVF_REG_STRUCT (iavf_reg_swsm_t);
279 IAVF_REG_STRUCT (iavf_reg_fwsm_t);
280 IAVF_REG_STRUCT (iavf_reg_sw_fw_sync_t);
281 IAVF_REG_STRUCT (iavf_reg_srrctl_t);
282 IAVF_REG_STRUCT (iavf_reg_rxdctl_t);
283 IAVF_REG_STRUCT (iavf_reg_eec_t);
284 IAVF_REG_STRUCT (iavf_reg_eemngctl_t);
285 #undef __
286
287 #define foreach_iavf_reg                                                      \
288   _ (0x00000, CTRL, iavf_reg_ctrl_t_fields)                                   \
289   _ (0x00008, STATUS, iavf_reg_status_t_fields)                               \
290   _ (0x00018, CTRL_EXT, iavf_reg_ctrl_ext_t_fields)                           \
291   _ (0x00020, MDIC, iavf_reg_mdic_t_fields)                                   \
292   _ (0x00100, RCTL, iavf_reg_rctl_t_fields)                                   \
293   _ (0x00400, TCTL, iavf_reg_tctl_t_fields)                                   \
294   _ (0x00404, TCTL_EXT, )                                                     \
295   _ (0x00e14, PHPM, iavf_reg_phpm_t_fields)                                   \
296   _ (0x01500, ICR, )                                                          \
297   _ (0x0150c, IMC, )                                                          \
298   _ (0x05400, RAL0, )                                                         \
299   _ (0x05404, RAH0, )                                                         \
300   _ (0x05820, MANC, iavf_reg_manc_t_fields)                                   \
301   _ (0x05b50, SWSM, iavf_reg_swsm_t_fields)                                   \
302   _ (0x05b54, FWSM, iavf_reg_fwsm_t_fields)                                   \
303   _ (0x05b5c, SW_FW_SYNC, iavf_reg_sw_fw_sync_t_fields)                       \
304   _ (0x0c000, RDBAL0, )                                                       \
305   _ (0x0c004, RDBAH0, )                                                       \
306   _ (0x0c008, RDLEN0, )                                                       \
307   _ (0x0c00c, SRRCTL0, iavf_reg_srrctl_t_fields)                              \
308   _ (0x0c010, RDH0, )                                                         \
309   _ (0x0c018, RDT0, )                                                         \
310   _ (0x0c028, RXDCTL0, iavf_reg_rxdctl_t_fields)                              \
311   _ (0x12010, EEC, iavf_reg_eec_t_fields)                                     \
312   _ (0x12030, EEMNGCTL, iavf_reg_eemngctl_t_fields)
313
314 #define IAVF_REG_RDBAL(n)  (IAVF_REG_RDBAL0 + (n) *0x40)
315 #define IAVF_REG_RDBAH(n)  (IAVF_REG_RDBAH0 + (n) *0x40)
316 #define IAVF_REG_RDLEN(n)  (IAVF_REG_RDLEN0 + (n) *0x40)
317 #define IAVF_REG_SRRCTL(n) (IAVF_REG_SRRCTL0 + (n) *0x40)
318 #define IAVF_REG_RDH(n)    (IAVF_REG_RDH0 + (n) *0x40)
319 #define IAVF_REG_RDT(n)    (IAVF_REG_RDT0 + (n) *0x40)
320 #define IAVF_REG_RXDCTL(n) (IAVF_REG_RXDCTL0 + (n) *0x40)
321 #define IAVF_REG_SRRCTL(n) (IAVF_REG_SRRCTL0 + (n) *0x40)
322
323 typedef enum
324 {
325 #define _(o, n, f) IAVF_REG_##n = (o),
326   foreach_iavf_reg
327 #undef _
328 } iavf_reg_t;
329
330 typedef union
331 {
332   struct
333   {
334     u32 intena : 1;
335     u32 clearpba : 1;
336     u32 swint_trig : 1;
337     u32 itr_indx : 2;
338     u32 interval : 12;
339     u32 _rsvd23 : 7;
340     u32 sw_itr_indx_ena : 1;
341     u32 sw_itr_indx : 2;
342     u32 _rsvd29 : 3;
343     u32 wb_on_itr : 1;
344     u32 intena_msk : 1;
345   };
346   u32 as_u32;
347 } iavf_dyn_ctln;
348
349 STATIC_ASSERT_SIZEOF (iavf_dyn_ctln, 4);
350
351 #endif /* _IIAVF_REGS_H_ */