diff options
Diffstat (limited to 'drivers/net/ethernet/chelsio/cxgb4/cxgb4.h')
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 103 |
1 files changed, 74 insertions, 29 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h index ecd2fb3ef695..56e0415f8cdf 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | |||
@@ -49,13 +49,15 @@ | |||
49 | #include <asm/io.h> | 49 | #include <asm/io.h> |
50 | #include "cxgb4_uld.h" | 50 | #include "cxgb4_uld.h" |
51 | 51 | ||
52 | #define FW_VERSION_MAJOR 1 | 52 | #define T4FW_VERSION_MAJOR 0x01 |
53 | #define FW_VERSION_MINOR 4 | 53 | #define T4FW_VERSION_MINOR 0x06 |
54 | #define FW_VERSION_MICRO 0 | 54 | #define T4FW_VERSION_MICRO 0x18 |
55 | #define T4FW_VERSION_BUILD 0x00 | ||
55 | 56 | ||
56 | #define FW_VERSION_MAJOR_T5 0 | 57 | #define T5FW_VERSION_MAJOR 0x01 |
57 | #define FW_VERSION_MINOR_T5 0 | 58 | #define T5FW_VERSION_MINOR 0x08 |
58 | #define FW_VERSION_MICRO_T5 0 | 59 | #define T5FW_VERSION_MICRO 0x1C |
60 | #define T5FW_VERSION_BUILD 0x00 | ||
59 | 61 | ||
60 | #define CH_WARN(adap, fmt, ...) dev_warn(adap->pdev_dev, fmt, ## __VA_ARGS__) | 62 | #define CH_WARN(adap, fmt, ...) dev_warn(adap->pdev_dev, fmt, ## __VA_ARGS__) |
61 | 63 | ||
@@ -226,6 +228,25 @@ struct tp_params { | |||
226 | 228 | ||
227 | uint32_t dack_re; /* DACK timer resolution */ | 229 | uint32_t dack_re; /* DACK timer resolution */ |
228 | unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */ | 230 | unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */ |
231 | |||
232 | u32 vlan_pri_map; /* cached TP_VLAN_PRI_MAP */ | ||
233 | u32 ingress_config; /* cached TP_INGRESS_CONFIG */ | ||
234 | |||
235 | /* TP_VLAN_PRI_MAP Compressed Filter Tuple field offsets. This is a | ||
236 | * subset of the set of fields which may be present in the Compressed | ||
237 | * Filter Tuple portion of filters and TCP TCB connections. The | ||
238 | * fields which are present are controlled by the TP_VLAN_PRI_MAP. | ||
239 | * Since a variable number of fields may or may not be present, their | ||
240 | * shifted field positions within the Compressed Filter Tuple may | ||
241 | * vary, or not even be present if the field isn't selected in | ||
242 | * TP_VLAN_PRI_MAP. Since some of these fields are needed in various | ||
243 | * places we store their offsets here, or a -1 if the field isn't | ||
244 | * present. | ||
245 | */ | ||
246 | int vlan_shift; | ||
247 | int vnic_shift; | ||
248 | int port_shift; | ||
249 | int protocol_shift; | ||
229 | }; | 250 | }; |
230 | 251 | ||
231 | struct vpd_params { | 252 | struct vpd_params { |
@@ -240,6 +261,26 @@ struct pci_params { | |||
240 | unsigned char width; | 261 | unsigned char width; |
241 | }; | 262 | }; |
242 | 263 | ||
264 | #define CHELSIO_CHIP_CODE(version, revision) (((version) << 4) | (revision)) | ||
265 | #define CHELSIO_CHIP_FPGA 0x100 | ||
266 | #define CHELSIO_CHIP_VERSION(code) (((code) >> 4) & 0xf) | ||
267 | #define CHELSIO_CHIP_RELEASE(code) ((code) & 0xf) | ||
268 | |||
269 | #define CHELSIO_T4 0x4 | ||
270 | #define CHELSIO_T5 0x5 | ||
271 | |||
272 | enum chip_type { | ||
273 | T4_A1 = CHELSIO_CHIP_CODE(CHELSIO_T4, 1), | ||
274 | T4_A2 = CHELSIO_CHIP_CODE(CHELSIO_T4, 2), | ||
275 | T4_FIRST_REV = T4_A1, | ||
276 | T4_LAST_REV = T4_A2, | ||
277 | |||
278 | T5_A0 = CHELSIO_CHIP_CODE(CHELSIO_T5, 0), | ||
279 | T5_A1 = CHELSIO_CHIP_CODE(CHELSIO_T5, 1), | ||
280 | T5_FIRST_REV = T5_A0, | ||
281 | T5_LAST_REV = T5_A1, | ||
282 | }; | ||
283 | |||
243 | struct adapter_params { | 284 | struct adapter_params { |
244 | struct tp_params tp; | 285 | struct tp_params tp; |
245 | struct vpd_params vpd; | 286 | struct vpd_params vpd; |
@@ -259,7 +300,7 @@ struct adapter_params { | |||
259 | 300 | ||
260 | unsigned char nports; /* # of ethernet ports */ | 301 | unsigned char nports; /* # of ethernet ports */ |
261 | unsigned char portvec; | 302 | unsigned char portvec; |
262 | unsigned char rev; /* chip revision */ | 303 | enum chip_type chip; /* chip code */ |
263 | unsigned char offload; | 304 | unsigned char offload; |
264 | 305 | ||
265 | unsigned char bypass; | 306 | unsigned char bypass; |
@@ -267,6 +308,23 @@ struct adapter_params { | |||
267 | unsigned int ofldq_wr_cred; | 308 | unsigned int ofldq_wr_cred; |
268 | }; | 309 | }; |
269 | 310 | ||
311 | #include "t4fw_api.h" | ||
312 | |||
313 | #define FW_VERSION(chip) ( \ | ||
314 | FW_HDR_FW_VER_MAJOR_GET(chip##FW_VERSION_MAJOR) | \ | ||
315 | FW_HDR_FW_VER_MINOR_GET(chip##FW_VERSION_MINOR) | \ | ||
316 | FW_HDR_FW_VER_MICRO_GET(chip##FW_VERSION_MICRO) | \ | ||
317 | FW_HDR_FW_VER_BUILD_GET(chip##FW_VERSION_BUILD)) | ||
318 | #define FW_INTFVER(chip, intf) (FW_HDR_INTFVER_##intf) | ||
319 | |||
320 | struct fw_info { | ||
321 | u8 chip; | ||
322 | char *fs_name; | ||
323 | char *fw_mod_name; | ||
324 | struct fw_hdr fw_hdr; | ||
325 | }; | ||
326 | |||
327 | |||
270 | struct trace_params { | 328 | struct trace_params { |
271 | u32 data[TRACE_LEN / 4]; | 329 | u32 data[TRACE_LEN / 4]; |
272 | u32 mask[TRACE_LEN / 4]; | 330 | u32 mask[TRACE_LEN / 4]; |
@@ -512,25 +570,6 @@ struct sge { | |||
512 | 570 | ||
513 | struct l2t_data; | 571 | struct l2t_data; |
514 | 572 | ||
515 | #define CHELSIO_CHIP_CODE(version, revision) (((version) << 4) | (revision)) | ||
516 | #define CHELSIO_CHIP_VERSION(code) ((code) >> 4) | ||
517 | #define CHELSIO_CHIP_RELEASE(code) ((code) & 0xf) | ||
518 | |||
519 | #define CHELSIO_T4 0x4 | ||
520 | #define CHELSIO_T5 0x5 | ||
521 | |||
522 | enum chip_type { | ||
523 | T4_A1 = CHELSIO_CHIP_CODE(CHELSIO_T4, 0), | ||
524 | T4_A2 = CHELSIO_CHIP_CODE(CHELSIO_T4, 1), | ||
525 | T4_A3 = CHELSIO_CHIP_CODE(CHELSIO_T4, 2), | ||
526 | T4_FIRST_REV = T4_A1, | ||
527 | T4_LAST_REV = T4_A3, | ||
528 | |||
529 | T5_A1 = CHELSIO_CHIP_CODE(CHELSIO_T5, 0), | ||
530 | T5_FIRST_REV = T5_A1, | ||
531 | T5_LAST_REV = T5_A1, | ||
532 | }; | ||
533 | |||
534 | #ifdef CONFIG_PCI_IOV | 573 | #ifdef CONFIG_PCI_IOV |
535 | 574 | ||
536 | /* T4 supports SRIOV on PF0-3 and T5 on PF0-7. However, the Serial | 575 | /* T4 supports SRIOV on PF0-3 and T5 on PF0-7. However, the Serial |
@@ -715,12 +754,12 @@ enum { | |||
715 | 754 | ||
716 | static inline int is_t5(enum chip_type chip) | 755 | static inline int is_t5(enum chip_type chip) |
717 | { | 756 | { |
718 | return (chip >= T5_FIRST_REV && chip <= T5_LAST_REV); | 757 | return CHELSIO_CHIP_VERSION(chip) == CHELSIO_T5; |
719 | } | 758 | } |
720 | 759 | ||
721 | static inline int is_t4(enum chip_type chip) | 760 | static inline int is_t4(enum chip_type chip) |
722 | { | 761 | { |
723 | return (chip >= T4_FIRST_REV && chip <= T4_LAST_REV); | 762 | return CHELSIO_CHIP_VERSION(chip) == CHELSIO_T4; |
724 | } | 763 | } |
725 | 764 | ||
726 | static inline u32 t4_read_reg(struct adapter *adap, u32 reg_addr) | 765 | static inline u32 t4_read_reg(struct adapter *adap, u32 reg_addr) |
@@ -900,8 +939,14 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p); | |||
900 | int t4_load_fw(struct adapter *adapter, const u8 *fw_data, unsigned int size); | 939 | int t4_load_fw(struct adapter *adapter, const u8 *fw_data, unsigned int size); |
901 | unsigned int t4_flash_cfg_addr(struct adapter *adapter); | 940 | unsigned int t4_flash_cfg_addr(struct adapter *adapter); |
902 | int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size); | 941 | int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size); |
903 | int t4_check_fw_version(struct adapter *adapter); | 942 | int t4_get_fw_version(struct adapter *adapter, u32 *vers); |
943 | int t4_get_tp_version(struct adapter *adapter, u32 *vers); | ||
944 | int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info, | ||
945 | const u8 *fw_data, unsigned int fw_size, | ||
946 | struct fw_hdr *card_fw, enum dev_state state, int *reset); | ||
904 | int t4_prep_adapter(struct adapter *adapter); | 947 | int t4_prep_adapter(struct adapter *adapter); |
948 | int t4_init_tp_params(struct adapter *adap); | ||
949 | int t4_filter_field_shift(const struct adapter *adap, int filter_sel); | ||
905 | int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); | 950 | int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); |
906 | void t4_fatal_err(struct adapter *adapter); | 951 | void t4_fatal_err(struct adapter *adapter); |
907 | int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, | 952 | int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, |