diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/bnx2x.h | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/bnx2x.h')
-rw-r--r-- | drivers/net/bnx2x.h | 148 |
1 files changed, 96 insertions, 52 deletions
diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h index bbf842284ebb..3c48a7a68308 100644 --- a/drivers/net/bnx2x.h +++ b/drivers/net/bnx2x.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* bnx2x.h: Broadcom Everest network driver. | 1 | /* bnx2x.h: Broadcom Everest network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2007-2009 Broadcom Corporation | 3 | * Copyright (c) 2007-2010 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -24,6 +24,10 @@ | |||
24 | #define BCM_VLAN 1 | 24 | #define BCM_VLAN 1 |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE) | ||
28 | #define BCM_CNIC 1 | ||
29 | #include "cnic_if.h" | ||
30 | #endif | ||
27 | 31 | ||
28 | #define BNX2X_MULTI_QUEUE | 32 | #define BNX2X_MULTI_QUEUE |
29 | 33 | ||
@@ -40,7 +44,6 @@ | |||
40 | /* error/debug prints */ | 44 | /* error/debug prints */ |
41 | 45 | ||
42 | #define DRV_MODULE_NAME "bnx2x" | 46 | #define DRV_MODULE_NAME "bnx2x" |
43 | #define PFX DRV_MODULE_NAME ": " | ||
44 | 47 | ||
45 | /* for messages that are currently off */ | 48 | /* for messages that are currently off */ |
46 | #define BNX2X_MSG_OFF 0 | 49 | #define BNX2X_MSG_OFF 0 |
@@ -54,30 +57,40 @@ | |||
54 | #define DP_LEVEL KERN_NOTICE /* was: KERN_DEBUG */ | 57 | #define DP_LEVEL KERN_NOTICE /* was: KERN_DEBUG */ |
55 | 58 | ||
56 | /* regular debug print */ | 59 | /* regular debug print */ |
57 | #define DP(__mask, __fmt, __args...) do { \ | 60 | #define DP(__mask, __fmt, __args...) \ |
58 | if (bp->msglevel & (__mask)) \ | 61 | do { \ |
59 | printk(DP_LEVEL "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ | 62 | if (bp->msg_enable & (__mask)) \ |
60 | bp->dev ? (bp->dev->name) : "?", ##__args); \ | 63 | printk(DP_LEVEL "[%s:%d(%s)]" __fmt, \ |
61 | } while (0) | 64 | __func__, __LINE__, \ |
65 | bp->dev ? (bp->dev->name) : "?", \ | ||
66 | ##__args); \ | ||
67 | } while (0) | ||
62 | 68 | ||
63 | /* errors debug print */ | 69 | /* errors debug print */ |
64 | #define BNX2X_DBG_ERR(__fmt, __args...) do { \ | 70 | #define BNX2X_DBG_ERR(__fmt, __args...) \ |
65 | if (bp->msglevel & NETIF_MSG_PROBE) \ | 71 | do { \ |
66 | printk(KERN_ERR "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ | 72 | if (netif_msg_probe(bp)) \ |
67 | bp->dev ? (bp->dev->name) : "?", ##__args); \ | 73 | pr_err("[%s:%d(%s)]" __fmt, \ |
68 | } while (0) | 74 | __func__, __LINE__, \ |
75 | bp->dev ? (bp->dev->name) : "?", \ | ||
76 | ##__args); \ | ||
77 | } while (0) | ||
69 | 78 | ||
70 | /* for errors (never masked) */ | 79 | /* for errors (never masked) */ |
71 | #define BNX2X_ERR(__fmt, __args...) do { \ | 80 | #define BNX2X_ERR(__fmt, __args...) \ |
72 | printk(KERN_ERR "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ | 81 | do { \ |
73 | bp->dev ? (bp->dev->name) : "?", ##__args); \ | 82 | pr_err("[%s:%d(%s)]" __fmt, \ |
74 | } while (0) | 83 | __func__, __LINE__, \ |
84 | bp->dev ? (bp->dev->name) : "?", \ | ||
85 | ##__args); \ | ||
86 | } while (0) | ||
75 | 87 | ||
76 | /* before we have a dev->name use dev_info() */ | 88 | /* before we have a dev->name use dev_info() */ |
77 | #define BNX2X_DEV_INFO(__fmt, __args...) do { \ | 89 | #define BNX2X_DEV_INFO(__fmt, __args...) \ |
78 | if (bp->msglevel & NETIF_MSG_PROBE) \ | 90 | do { \ |
79 | dev_info(&bp->pdev->dev, __fmt, ##__args); \ | 91 | if (netif_msg_probe(bp)) \ |
80 | } while (0) | 92 | dev_info(&bp->pdev->dev, __fmt, ##__args); \ |
93 | } while (0) | ||
81 | 94 | ||
82 | 95 | ||
83 | #ifdef BNX2X_STOP_ON_ERROR | 96 | #ifdef BNX2X_STOP_ON_ERROR |
@@ -126,7 +139,7 @@ | |||
126 | offset, len32); \ | 139 | offset, len32); \ |
127 | } while (0) | 140 | } while (0) |
128 | 141 | ||
129 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32) \ | 142 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32, le32_swap) \ |
130 | do { \ | 143 | do { \ |
131 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ | 144 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ |
132 | bnx2x_write_big_buf_wb(bp, addr, len32); \ | 145 | bnx2x_write_big_buf_wb(bp, addr, len32); \ |
@@ -255,9 +268,6 @@ struct bnx2x_eth_q_stats { | |||
255 | struct bnx2x_fastpath { | 268 | struct bnx2x_fastpath { |
256 | 269 | ||
257 | struct napi_struct napi; | 270 | struct napi_struct napi; |
258 | |||
259 | u8 is_rx_queue; | ||
260 | |||
261 | struct host_status_block *status_blk; | 271 | struct host_status_block *status_blk; |
262 | dma_addr_t status_blk_mapping; | 272 | dma_addr_t status_blk_mapping; |
263 | 273 | ||
@@ -762,7 +772,11 @@ struct bnx2x_eth_stats { | |||
762 | (offsetof(struct bnx2x_eth_stats, stat_name) / 4) | 772 | (offsetof(struct bnx2x_eth_stats, stat_name) / 4) |
763 | 773 | ||
764 | 774 | ||
775 | #ifdef BCM_CNIC | ||
776 | #define MAX_CONTEXT 15 | ||
777 | #else | ||
765 | #define MAX_CONTEXT 16 | 778 | #define MAX_CONTEXT 16 |
779 | #endif | ||
766 | 780 | ||
767 | union cdu_context { | 781 | union cdu_context { |
768 | struct eth_context eth; | 782 | struct eth_context eth; |
@@ -811,13 +825,21 @@ struct bnx2x { | |||
811 | struct bnx2x_fastpath fp[MAX_CONTEXT]; | 825 | struct bnx2x_fastpath fp[MAX_CONTEXT]; |
812 | void __iomem *regview; | 826 | void __iomem *regview; |
813 | void __iomem *doorbells; | 827 | void __iomem *doorbells; |
828 | #ifdef BCM_CNIC | ||
829 | #define BNX2X_DB_SIZE (18*BCM_PAGE_SIZE) | ||
830 | #else | ||
814 | #define BNX2X_DB_SIZE (16*BCM_PAGE_SIZE) | 831 | #define BNX2X_DB_SIZE (16*BCM_PAGE_SIZE) |
832 | #endif | ||
815 | 833 | ||
816 | struct net_device *dev; | 834 | struct net_device *dev; |
817 | struct pci_dev *pdev; | 835 | struct pci_dev *pdev; |
818 | 836 | ||
819 | atomic_t intr_sem; | 837 | atomic_t intr_sem; |
838 | #ifdef BCM_CNIC | ||
839 | struct msix_entry msix_table[MAX_CONTEXT+2]; | ||
840 | #else | ||
820 | struct msix_entry msix_table[MAX_CONTEXT+1]; | 841 | struct msix_entry msix_table[MAX_CONTEXT+1]; |
842 | #endif | ||
821 | #define INT_MODE_INTx 1 | 843 | #define INT_MODE_INTx 1 |
822 | #define INT_MODE_MSI 2 | 844 | #define INT_MODE_MSI 2 |
823 | #define INT_MODE_MSIX 3 | 845 | #define INT_MODE_MSIX 3 |
@@ -863,13 +885,13 @@ struct bnx2x { | |||
863 | 885 | ||
864 | /* Flags for marking that there is a STAT_QUERY or | 886 | /* Flags for marking that there is a STAT_QUERY or |
865 | SET_MAC ramrod pending */ | 887 | SET_MAC ramrod pending */ |
866 | u8 stats_pending; | 888 | int stats_pending; |
867 | u8 set_mac_pending; | 889 | int set_mac_pending; |
868 | 890 | ||
869 | /* End of fields used in the performance code paths */ | 891 | /* End of fields used in the performance code paths */ |
870 | 892 | ||
871 | int panic; | 893 | int panic; |
872 | int msglevel; | 894 | int msg_enable; |
873 | 895 | ||
874 | u32 flags; | 896 | u32 flags; |
875 | #define PCIX_FLAG 1 | 897 | #define PCIX_FLAG 1 |
@@ -884,6 +906,7 @@ struct bnx2x { | |||
884 | #define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) | 906 | #define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) |
885 | #define HW_VLAN_TX_FLAG 0x400 | 907 | #define HW_VLAN_TX_FLAG 0x400 |
886 | #define HW_VLAN_RX_FLAG 0x800 | 908 | #define HW_VLAN_RX_FLAG 0x800 |
909 | #define MF_FUNC_DIS 0x1000 | ||
887 | 910 | ||
888 | int func; | 911 | int func; |
889 | #define BP_PORT(bp) (bp->func % PORT_MAX) | 912 | #define BP_PORT(bp) (bp->func % PORT_MAX) |
@@ -891,6 +914,11 @@ struct bnx2x { | |||
891 | #define BP_E1HVN(bp) (bp->func >> 1) | 914 | #define BP_E1HVN(bp) (bp->func >> 1) |
892 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) | 915 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) |
893 | 916 | ||
917 | #ifdef BCM_CNIC | ||
918 | #define BCM_CNIC_CID_START 16 | ||
919 | #define BCM_ISCSI_ETH_CL_ID 17 | ||
920 | #endif | ||
921 | |||
894 | int pm_cap; | 922 | int pm_cap; |
895 | int pcie_cap; | 923 | int pcie_cap; |
896 | int mrrs; | 924 | int mrrs; |
@@ -944,13 +972,11 @@ struct bnx2x { | |||
944 | #define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 | 972 | #define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 |
945 | #define BNX2X_STATE_CLOSING_WAIT4_DELETE 0x5000 | 973 | #define BNX2X_STATE_CLOSING_WAIT4_DELETE 0x5000 |
946 | #define BNX2X_STATE_CLOSING_WAIT4_UNLOAD 0x6000 | 974 | #define BNX2X_STATE_CLOSING_WAIT4_UNLOAD 0x6000 |
947 | #define BNX2X_STATE_DISABLED 0xd000 | ||
948 | #define BNX2X_STATE_DIAG 0xe000 | 975 | #define BNX2X_STATE_DIAG 0xe000 |
949 | #define BNX2X_STATE_ERROR 0xf000 | 976 | #define BNX2X_STATE_ERROR 0xf000 |
950 | 977 | ||
951 | int multi_mode; | 978 | int multi_mode; |
952 | int num_rx_queues; | 979 | int num_queues; |
953 | int num_tx_queues; | ||
954 | 980 | ||
955 | u32 rx_mode; | 981 | u32 rx_mode; |
956 | #define BNX2X_RX_MODE_NONE 0 | 982 | #define BNX2X_RX_MODE_NONE 0 |
@@ -960,28 +986,51 @@ struct bnx2x { | |||
960 | #define BNX2X_MAX_MULTICAST 64 | 986 | #define BNX2X_MAX_MULTICAST 64 |
961 | #define BNX2X_MAX_EMUL_MULTI 16 | 987 | #define BNX2X_MAX_EMUL_MULTI 16 |
962 | 988 | ||
989 | u32 rx_mode_cl_mask; | ||
990 | |||
963 | dma_addr_t def_status_blk_mapping; | 991 | dma_addr_t def_status_blk_mapping; |
964 | 992 | ||
965 | struct bnx2x_slowpath *slowpath; | 993 | struct bnx2x_slowpath *slowpath; |
966 | dma_addr_t slowpath_mapping; | 994 | dma_addr_t slowpath_mapping; |
967 | 995 | ||
968 | #ifdef BCM_ISCSI | ||
969 | void *t1; | ||
970 | dma_addr_t t1_mapping; | ||
971 | void *t2; | ||
972 | dma_addr_t t2_mapping; | ||
973 | void *timers; | ||
974 | dma_addr_t timers_mapping; | ||
975 | void *qm; | ||
976 | dma_addr_t qm_mapping; | ||
977 | #endif | ||
978 | |||
979 | int dropless_fc; | 996 | int dropless_fc; |
980 | 997 | ||
998 | #ifdef BCM_CNIC | ||
999 | u32 cnic_flags; | ||
1000 | #define BNX2X_CNIC_FLAG_MAC_SET 1 | ||
1001 | |||
1002 | void *t1; | ||
1003 | dma_addr_t t1_mapping; | ||
1004 | void *t2; | ||
1005 | dma_addr_t t2_mapping; | ||
1006 | void *timers; | ||
1007 | dma_addr_t timers_mapping; | ||
1008 | void *qm; | ||
1009 | dma_addr_t qm_mapping; | ||
1010 | struct cnic_ops *cnic_ops; | ||
1011 | void *cnic_data; | ||
1012 | u32 cnic_tag; | ||
1013 | struct cnic_eth_dev cnic_eth_dev; | ||
1014 | struct host_status_block *cnic_sb; | ||
1015 | dma_addr_t cnic_sb_mapping; | ||
1016 | #define CNIC_SB_ID(bp) BP_L_ID(bp) | ||
1017 | struct eth_spe *cnic_kwq; | ||
1018 | struct eth_spe *cnic_kwq_prod; | ||
1019 | struct eth_spe *cnic_kwq_cons; | ||
1020 | struct eth_spe *cnic_kwq_last; | ||
1021 | u16 cnic_kwq_pending; | ||
1022 | u16 cnic_spq_pending; | ||
1023 | struct mutex cnic_mutex; | ||
1024 | u8 iscsi_mac[6]; | ||
1025 | #endif | ||
1026 | |||
981 | int dmae_ready; | 1027 | int dmae_ready; |
982 | /* used to synchronize dmae accesses */ | 1028 | /* used to synchronize dmae accesses */ |
983 | struct mutex dmae_mutex; | 1029 | struct mutex dmae_mutex; |
984 | 1030 | ||
1031 | /* used to protect the FW mail box */ | ||
1032 | struct mutex fw_mb_mutex; | ||
1033 | |||
985 | /* used to synchronize stats collecting */ | 1034 | /* used to synchronize stats collecting */ |
986 | int stats_state; | 1035 | int stats_state; |
987 | /* used by dmae command loader */ | 1036 | /* used by dmae command loader */ |
@@ -1030,20 +1079,15 @@ struct bnx2x { | |||
1030 | }; | 1079 | }; |
1031 | 1080 | ||
1032 | 1081 | ||
1033 | #define BNX2X_MAX_QUEUES(bp) (IS_E1HMF(bp) ? (MAX_CONTEXT/(2 * E1HVN_MAX)) \ | 1082 | #define BNX2X_MAX_QUEUES(bp) (IS_E1HMF(bp) ? (MAX_CONTEXT/E1HVN_MAX) \ |
1034 | : (MAX_CONTEXT/2)) | 1083 | : MAX_CONTEXT) |
1035 | #define BNX2X_NUM_QUEUES(bp) (bp->num_rx_queues + bp->num_tx_queues) | 1084 | #define BNX2X_NUM_QUEUES(bp) (bp->num_queues) |
1036 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 2) | 1085 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) |
1037 | 1086 | ||
1038 | #define for_each_rx_queue(bp, var) \ | ||
1039 | for (var = 0; var < bp->num_rx_queues; var++) | ||
1040 | #define for_each_tx_queue(bp, var) \ | ||
1041 | for (var = bp->num_rx_queues; \ | ||
1042 | var < BNX2X_NUM_QUEUES(bp); var++) | ||
1043 | #define for_each_queue(bp, var) \ | 1087 | #define for_each_queue(bp, var) \ |
1044 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) | 1088 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) |
1045 | #define for_each_nondefault_queue(bp, var) \ | 1089 | #define for_each_nondefault_queue(bp, var) \ |
1046 | for (var = 1; var < bp->num_rx_queues; var++) | 1090 | for (var = 1; var < BNX2X_NUM_QUEUES(bp); var++) |
1047 | 1091 | ||
1048 | 1092 | ||
1049 | void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); | 1093 | void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); |
@@ -1147,7 +1191,7 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1147 | #define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) | 1191 | #define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) |
1148 | 1192 | ||
1149 | 1193 | ||
1150 | #define BNX2X_BTR 3 | 1194 | #define BNX2X_BTR 1 |
1151 | #define MAX_SPQ_PENDING 8 | 1195 | #define MAX_SPQ_PENDING 8 |
1152 | 1196 | ||
1153 | 1197 | ||