1d89f8841SSasha Neftin /* SPDX-License-Identifier: GPL-2.0 */
2d89f8841SSasha Neftin /* Copyright (c)  2018 Intel Corporation */
3d89f8841SSasha Neftin 
4d89f8841SSasha Neftin #ifndef _IGC_HW_H_
5d89f8841SSasha Neftin #define _IGC_HW_H_
6d89f8841SSasha Neftin 
7146740f9SSasha Neftin #include <linux/types.h>
8146740f9SSasha Neftin #include <linux/if_ether.h>
9146740f9SSasha Neftin #include "igc_regs.h"
10146740f9SSasha Neftin #include "igc_defines.h"
11146740f9SSasha Neftin #include "igc_mac.h"
12146740f9SSasha Neftin #include "igc_i225.h"
1313b5b7fdSSasha Neftin #include "igc_base.h"
14146740f9SSasha Neftin 
15d89f8841SSasha Neftin #define IGC_DEV_ID_I225_LM			0x15F2
16d89f8841SSasha Neftin #define IGC_DEV_ID_I225_V			0x15F3
17d89f8841SSasha Neftin 
18146740f9SSasha Neftin /* Function pointers for the MAC. */
19146740f9SSasha Neftin struct igc_mac_operations {
20146740f9SSasha Neftin };
21146740f9SSasha Neftin 
22146740f9SSasha Neftin enum igc_mac_type {
23146740f9SSasha Neftin 	igc_undefined = 0,
24146740f9SSasha Neftin 	igc_i225,
25146740f9SSasha Neftin 	igc_num_macs  /* List is 1-based, so subtract 1 for true count. */
26146740f9SSasha Neftin };
27146740f9SSasha Neftin 
28146740f9SSasha Neftin enum igc_phy_type {
29146740f9SSasha Neftin 	igc_phy_unknown = 0,
30146740f9SSasha Neftin 	igc_phy_none,
31146740f9SSasha Neftin 	igc_phy_i225,
32146740f9SSasha Neftin };
33146740f9SSasha Neftin 
34146740f9SSasha Neftin struct igc_mac_info {
35146740f9SSasha Neftin 	struct igc_mac_operations ops;
36146740f9SSasha Neftin 
37146740f9SSasha Neftin 	u8 addr[ETH_ALEN];
38146740f9SSasha Neftin 	u8 perm_addr[ETH_ALEN];
39146740f9SSasha Neftin 
40146740f9SSasha Neftin 	enum igc_mac_type type;
41146740f9SSasha Neftin 
42146740f9SSasha Neftin 	u32 collision_delta;
43146740f9SSasha Neftin 	u32 ledctl_default;
44146740f9SSasha Neftin 	u32 ledctl_mode1;
45146740f9SSasha Neftin 	u32 ledctl_mode2;
46146740f9SSasha Neftin 	u32 mc_filter_type;
47146740f9SSasha Neftin 	u32 tx_packet_delta;
48146740f9SSasha Neftin 	u32 txcw;
49146740f9SSasha Neftin 
50146740f9SSasha Neftin 	u16 mta_reg_count;
51146740f9SSasha Neftin 	u16 uta_reg_count;
52146740f9SSasha Neftin 
53146740f9SSasha Neftin 	u16 rar_entry_count;
54146740f9SSasha Neftin 
55146740f9SSasha Neftin 	u8 forced_speed_duplex;
56146740f9SSasha Neftin 
57146740f9SSasha Neftin 	bool adaptive_ifs;
58146740f9SSasha Neftin 	bool has_fwsm;
59146740f9SSasha Neftin 	bool arc_subsystem_valid;
60146740f9SSasha Neftin 
61146740f9SSasha Neftin 	bool autoneg;
62146740f9SSasha Neftin 	bool autoneg_failed;
63c9a11c23SSasha Neftin 	bool get_link_status;
64146740f9SSasha Neftin };
65146740f9SSasha Neftin 
66146740f9SSasha Neftin struct igc_bus_info {
67146740f9SSasha Neftin 	u16 func;
68146740f9SSasha Neftin 	u16 pci_cmd_word;
69146740f9SSasha Neftin };
70146740f9SSasha Neftin 
71146740f9SSasha Neftin struct igc_hw {
72146740f9SSasha Neftin 	void *back;
73146740f9SSasha Neftin 
74146740f9SSasha Neftin 	u8 __iomem *hw_addr;
75146740f9SSasha Neftin 	unsigned long io_base;
76146740f9SSasha Neftin 
77146740f9SSasha Neftin 	struct igc_mac_info  mac;
78146740f9SSasha Neftin 
79146740f9SSasha Neftin 	struct igc_bus_info bus;
80146740f9SSasha Neftin 
81146740f9SSasha Neftin 	u16 device_id;
82146740f9SSasha Neftin 	u16 subsystem_vendor_id;
83146740f9SSasha Neftin 	u16 subsystem_device_id;
84146740f9SSasha Neftin 	u16 vendor_id;
85146740f9SSasha Neftin 
86146740f9SSasha Neftin 	u8 revision_id;
87146740f9SSasha Neftin };
88146740f9SSasha Neftin 
893df25e4cSSasha Neftin /* Statistics counters collected by the MAC */
903df25e4cSSasha Neftin struct igc_hw_stats {
913df25e4cSSasha Neftin 	u64 crcerrs;
923df25e4cSSasha Neftin 	u64 algnerrc;
933df25e4cSSasha Neftin 	u64 symerrs;
943df25e4cSSasha Neftin 	u64 rxerrc;
953df25e4cSSasha Neftin 	u64 mpc;
963df25e4cSSasha Neftin 	u64 scc;
973df25e4cSSasha Neftin 	u64 ecol;
983df25e4cSSasha Neftin 	u64 mcc;
993df25e4cSSasha Neftin 	u64 latecol;
1003df25e4cSSasha Neftin 	u64 colc;
1013df25e4cSSasha Neftin 	u64 dc;
1023df25e4cSSasha Neftin 	u64 tncrs;
1033df25e4cSSasha Neftin 	u64 sec;
1043df25e4cSSasha Neftin 	u64 cexterr;
1053df25e4cSSasha Neftin 	u64 rlec;
1063df25e4cSSasha Neftin 	u64 xonrxc;
1073df25e4cSSasha Neftin 	u64 xontxc;
1083df25e4cSSasha Neftin 	u64 xoffrxc;
1093df25e4cSSasha Neftin 	u64 xofftxc;
1103df25e4cSSasha Neftin 	u64 fcruc;
1113df25e4cSSasha Neftin 	u64 prc64;
1123df25e4cSSasha Neftin 	u64 prc127;
1133df25e4cSSasha Neftin 	u64 prc255;
1143df25e4cSSasha Neftin 	u64 prc511;
1153df25e4cSSasha Neftin 	u64 prc1023;
1163df25e4cSSasha Neftin 	u64 prc1522;
1173df25e4cSSasha Neftin 	u64 gprc;
1183df25e4cSSasha Neftin 	u64 bprc;
1193df25e4cSSasha Neftin 	u64 mprc;
1203df25e4cSSasha Neftin 	u64 gptc;
1213df25e4cSSasha Neftin 	u64 gorc;
1223df25e4cSSasha Neftin 	u64 gotc;
1233df25e4cSSasha Neftin 	u64 rnbc;
1243df25e4cSSasha Neftin 	u64 ruc;
1253df25e4cSSasha Neftin 	u64 rfc;
1263df25e4cSSasha Neftin 	u64 roc;
1273df25e4cSSasha Neftin 	u64 rjc;
1283df25e4cSSasha Neftin 	u64 mgprc;
1293df25e4cSSasha Neftin 	u64 mgpdc;
1303df25e4cSSasha Neftin 	u64 mgptc;
1313df25e4cSSasha Neftin 	u64 tor;
1323df25e4cSSasha Neftin 	u64 tot;
1333df25e4cSSasha Neftin 	u64 tpr;
1343df25e4cSSasha Neftin 	u64 tpt;
1353df25e4cSSasha Neftin 	u64 ptc64;
1363df25e4cSSasha Neftin 	u64 ptc127;
1373df25e4cSSasha Neftin 	u64 ptc255;
1383df25e4cSSasha Neftin 	u64 ptc511;
1393df25e4cSSasha Neftin 	u64 ptc1023;
1403df25e4cSSasha Neftin 	u64 ptc1522;
1413df25e4cSSasha Neftin 	u64 mptc;
1423df25e4cSSasha Neftin 	u64 bptc;
1433df25e4cSSasha Neftin 	u64 tsctc;
1443df25e4cSSasha Neftin 	u64 tsctfc;
1453df25e4cSSasha Neftin 	u64 iac;
1463df25e4cSSasha Neftin 	u64 icrxptc;
1473df25e4cSSasha Neftin 	u64 icrxatc;
1483df25e4cSSasha Neftin 	u64 ictxptc;
1493df25e4cSSasha Neftin 	u64 ictxatc;
1503df25e4cSSasha Neftin 	u64 ictxqec;
1513df25e4cSSasha Neftin 	u64 ictxqmtc;
1523df25e4cSSasha Neftin 	u64 icrxdmtc;
1533df25e4cSSasha Neftin 	u64 icrxoc;
1543df25e4cSSasha Neftin 	u64 cbtmpc;
1553df25e4cSSasha Neftin 	u64 htdpmc;
1563df25e4cSSasha Neftin 	u64 cbrdpc;
1573df25e4cSSasha Neftin 	u64 cbrmpc;
1583df25e4cSSasha Neftin 	u64 rpthc;
1593df25e4cSSasha Neftin 	u64 hgptc;
1603df25e4cSSasha Neftin 	u64 htcbdpc;
1613df25e4cSSasha Neftin 	u64 hgorc;
1623df25e4cSSasha Neftin 	u64 hgotc;
1633df25e4cSSasha Neftin 	u64 lenerrs;
1643df25e4cSSasha Neftin 	u64 scvpc;
1653df25e4cSSasha Neftin 	u64 hrmpc;
1663df25e4cSSasha Neftin 	u64 doosync;
1673df25e4cSSasha Neftin 	u64 o2bgptc;
1683df25e4cSSasha Neftin 	u64 o2bspc;
1693df25e4cSSasha Neftin 	u64 b2ospc;
1703df25e4cSSasha Neftin 	u64 b2ogprc;
1713df25e4cSSasha Neftin };
1723df25e4cSSasha Neftin 
173146740f9SSasha Neftin s32  igc_read_pcie_cap_reg(struct igc_hw *hw, u32 reg, u16 *value);
174146740f9SSasha Neftin s32  igc_write_pcie_cap_reg(struct igc_hw *hw, u32 reg, u16 *value);
175146740f9SSasha Neftin void igc_read_pci_cfg(struct igc_hw *hw, u32 reg, u16 *value);
176146740f9SSasha Neftin void igc_write_pci_cfg(struct igc_hw *hw, u32 reg, u16 *value);
177146740f9SSasha Neftin 
178d89f8841SSasha Neftin #endif /* _IGC_HW_H_ */
179