aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-10-04 15:49:16 -0400
committerDavid S. Miller <davem@davemloft.net>2012-10-04 15:49:16 -0400
commite7b565e73d94e42619bbab7ea1ab5626d1952701 (patch)
tree41da721dc5203eab4b4bdb8297c9aef602ee77c4 /drivers/net
parentf4ef85bbda96324785097356336bc79cdd37db0a (diff)
parentdf376f0de167754da9b3ece4afdb5bb8bf3fbf3e (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net
Jeff Kirsher says: ==================== This series contains fixes/updates to ixgbe only. There are three PTP fixes, polling loop fix and the addition of a device id (X540-AT1). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_common.c1
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c5
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c15
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c202
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_type.h1
6 files changed, 112 insertions, 114 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
index 18bf08c9d7a4..1077cb2b38db 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
@@ -1099,7 +1099,7 @@ s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw)
1099 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) & 1099 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1100 IXGBE_FDIRCTRL_INIT_DONE) 1100 IXGBE_FDIRCTRL_INIT_DONE)
1101 break; 1101 break;
1102 udelay(10); 1102 usleep_range(1000, 2000);
1103 } 1103 }
1104 if (i >= IXGBE_FDIR_INIT_DONE_POLL) { 1104 if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1105 hw_dbg(hw, "Flow Director Signature poll time exceeded!\n"); 1105 hw_dbg(hw, "Flow Director Signature poll time exceeded!\n");
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
index 90e41db3cb69..dbf37e4a45fd 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
@@ -70,6 +70,7 @@ static s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
70 70
71 switch (hw->device_id) { 71 switch (hw->device_id) {
72 case IXGBE_DEV_ID_X540T: 72 case IXGBE_DEV_ID_X540T:
73 case IXGBE_DEV_ID_X540T1:
73 return 0; 74 return 0;
74 case IXGBE_DEV_ID_82599_T3_LOM: 75 case IXGBE_DEV_ID_82599_T3_LOM:
75 return 0; 76 return 0;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index 4104ea25d818..56b20d17d0e4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -2690,10 +2690,7 @@ static int ixgbe_get_ts_info(struct net_device *dev,
2690 (1 << HWTSTAMP_FILTER_NONE) | 2690 (1 << HWTSTAMP_FILTER_NONE) |
2691 (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) | 2691 (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
2692 (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) | 2692 (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
2693 (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) | 2693 (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
2694 (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ) |
2695 (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
2696 (1 << HWTSTAMP_FILTER_SOME);
2697 break; 2694 break;
2698#endif /* CONFIG_IXGBE_PTP */ 2695#endif /* CONFIG_IXGBE_PTP */
2699 default: 2696 default:
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 868af6938219..fa3d552e1f4a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -114,6 +114,7 @@ static DEFINE_PCI_DEVICE_TABLE(ixgbe_pci_tbl) = {
114 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_LS), board_82599 }, 114 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_LS), board_82599 },
115 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599EN_SFP), board_82599 }, 115 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599EN_SFP), board_82599 },
116 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF_QP), board_82599 }, 116 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF_QP), board_82599 },
117 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540T1), board_X540 },
117 /* required last entry */ 118 /* required last entry */
118 {0, } 119 {0, }
119}; 120};
@@ -2322,6 +2323,12 @@ static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter, bool queues,
2322 default: 2323 default:
2323 break; 2324 break;
2324 } 2325 }
2326
2327#ifdef CONFIG_IXGBE_PTP
2328 if (adapter->hw.mac.type == ixgbe_mac_X540)
2329 mask |= IXGBE_EIMS_TIMESYNC;
2330#endif
2331
2325 if ((adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) && 2332 if ((adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) &&
2326 !(adapter->flags2 & IXGBE_FLAG2_FDIR_REQUIRES_REINIT)) 2333 !(adapter->flags2 & IXGBE_FLAG2_FDIR_REQUIRES_REINIT))
2327 mask |= IXGBE_EIMS_FLOW_DIR; 2334 mask |= IXGBE_EIMS_FLOW_DIR;
@@ -2385,8 +2392,10 @@ static irqreturn_t ixgbe_msix_other(int irq, void *data)
2385 } 2392 }
2386 2393
2387 ixgbe_check_fan_failure(adapter, eicr); 2394 ixgbe_check_fan_failure(adapter, eicr);
2395
2388#ifdef CONFIG_IXGBE_PTP 2396#ifdef CONFIG_IXGBE_PTP
2389 ixgbe_ptp_check_pps_event(adapter, eicr); 2397 if (unlikely(eicr & IXGBE_EICR_TIMESYNC))
2398 ixgbe_ptp_check_pps_event(adapter, eicr);
2390#endif 2399#endif
2391 2400
2392 /* re-enable the original interrupt state, no lsc, no queues */ 2401 /* re-enable the original interrupt state, no lsc, no queues */
@@ -2580,7 +2589,8 @@ static irqreturn_t ixgbe_intr(int irq, void *data)
2580 2589
2581 ixgbe_check_fan_failure(adapter, eicr); 2590 ixgbe_check_fan_failure(adapter, eicr);
2582#ifdef CONFIG_IXGBE_PTP 2591#ifdef CONFIG_IXGBE_PTP
2583 ixgbe_ptp_check_pps_event(adapter, eicr); 2592 if (unlikely(eicr & IXGBE_EICR_TIMESYNC))
2593 ixgbe_ptp_check_pps_event(adapter, eicr);
2584#endif 2594#endif
2585 2595
2586 /* would disable interrupts here but EIAM disabled it */ 2596 /* would disable interrupts here but EIAM disabled it */
@@ -7045,6 +7055,7 @@ int ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id,
7045 is_wol_supported = 1; 7055 is_wol_supported = 1;
7046 break; 7056 break;
7047 case IXGBE_DEV_ID_X540T: 7057 case IXGBE_DEV_ID_X540T:
7058 case IXGBE_DEV_ID_X540T1:
7048 /* check eeprom to see if enabled wol */ 7059 /* check eeprom to see if enabled wol */
7049 if ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0_1) || 7060 if ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0_1) ||
7050 ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0) && 7061 ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0) &&
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
index 39881cb17a4b..d9291316ee9f 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
@@ -106,6 +106,83 @@ static struct sock_filter ptp_filter[] = {
106}; 106};
107 107
108/** 108/**
109 * ixgbe_ptp_setup_sdp
110 * @hw: the hardware private structure
111 *
112 * this function enables or disables the clock out feature on SDP0 for
113 * the X540 device. It will create a 1second periodic output that can
114 * be used as the PPS (via an interrupt).
115 *
116 * It calculates when the systime will be on an exact second, and then
117 * aligns the start of the PPS signal to that value. The shift is
118 * necessary because it can change based on the link speed.
119 */
120static void ixgbe_ptp_setup_sdp(struct ixgbe_adapter *adapter)
121{
122 struct ixgbe_hw *hw = &adapter->hw;
123 int shift = adapter->cc.shift;
124 u32 esdp, tsauxc, clktiml, clktimh, trgttiml, trgttimh, rem;
125 u64 ns = 0, clock_edge = 0;
126
127 if ((adapter->flags2 & IXGBE_FLAG2_PTP_PPS_ENABLED) &&
128 (hw->mac.type == ixgbe_mac_X540)) {
129
130 /* disable the pin first */
131 IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, 0x0);
132 IXGBE_WRITE_FLUSH(hw);
133
134 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
135
136 /*
137 * enable the SDP0 pin as output, and connected to the
138 * native function for Timesync (ClockOut)
139 */
140 esdp |= (IXGBE_ESDP_SDP0_DIR |
141 IXGBE_ESDP_SDP0_NATIVE);
142
143 /*
144 * enable the Clock Out feature on SDP0, and allow
145 * interrupts to occur when the pin changes
146 */
147 tsauxc = (IXGBE_TSAUXC_EN_CLK |
148 IXGBE_TSAUXC_SYNCLK |
149 IXGBE_TSAUXC_SDP0_INT);
150
151 /* clock period (or pulse length) */
152 clktiml = (u32)(NSECS_PER_SEC << shift);
153 clktimh = (u32)((NSECS_PER_SEC << shift) >> 32);
154
155 /*
156 * Account for the cyclecounter wrap-around value by
157 * using the converted ns value of the current time to
158 * check for when the next aligned second would occur.
159 */
160 clock_edge |= (u64)IXGBE_READ_REG(hw, IXGBE_SYSTIML);
161 clock_edge |= (u64)IXGBE_READ_REG(hw, IXGBE_SYSTIMH) << 32;
162 ns = timecounter_cyc2time(&adapter->tc, clock_edge);
163
164 div_u64_rem(ns, NSECS_PER_SEC, &rem);
165 clock_edge += ((NSECS_PER_SEC - (u64)rem) << shift);
166
167 /* specify the initial clock start time */
168 trgttiml = (u32)clock_edge;
169 trgttimh = (u32)(clock_edge >> 32);
170
171 IXGBE_WRITE_REG(hw, IXGBE_CLKTIML, clktiml);
172 IXGBE_WRITE_REG(hw, IXGBE_CLKTIMH, clktimh);
173 IXGBE_WRITE_REG(hw, IXGBE_TRGTTIML0, trgttiml);
174 IXGBE_WRITE_REG(hw, IXGBE_TRGTTIMH0, trgttimh);
175
176 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
177 IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, tsauxc);
178 } else {
179 IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, 0x0);
180 }
181
182 IXGBE_WRITE_FLUSH(hw);
183}
184
185/**
109 * ixgbe_ptp_read - read raw cycle counter (to be used by time counter) 186 * ixgbe_ptp_read - read raw cycle counter (to be used by time counter)
110 * @cc: the cyclecounter structure 187 * @cc: the cyclecounter structure
111 * 188 *
@@ -198,6 +275,9 @@ static int ixgbe_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
198 now); 275 now);
199 276
200 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); 277 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
278
279 ixgbe_ptp_setup_sdp(adapter);
280
201 return 0; 281 return 0;
202} 282}
203 283
@@ -251,6 +331,7 @@ static int ixgbe_ptp_settime(struct ptp_clock_info *ptp,
251 timecounter_init(&adapter->tc, &adapter->cc, ns); 331 timecounter_init(&adapter->tc, &adapter->cc, ns);
252 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); 332 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
253 333
334 ixgbe_ptp_setup_sdp(adapter);
254 return 0; 335 return 0;
255} 336}
256 337
@@ -281,8 +362,9 @@ static int ixgbe_ptp_enable(struct ptp_clock_info *ptp,
281 if (on) 362 if (on)
282 adapter->flags2 |= IXGBE_FLAG2_PTP_PPS_ENABLED; 363 adapter->flags2 |= IXGBE_FLAG2_PTP_PPS_ENABLED;
283 else 364 else
284 adapter->flags2 &= 365 adapter->flags2 &= ~IXGBE_FLAG2_PTP_PPS_ENABLED;
285 ~IXGBE_FLAG2_PTP_PPS_ENABLED; 366
367 ixgbe_ptp_setup_sdp(adapter);
286 return 0; 368 return 0;
287 default: 369 default:
288 break; 370 break;
@@ -305,109 +387,15 @@ void ixgbe_ptp_check_pps_event(struct ixgbe_adapter *adapter, u32 eicr)
305 struct ixgbe_hw *hw = &adapter->hw; 387 struct ixgbe_hw *hw = &adapter->hw;
306 struct ptp_clock_event event; 388 struct ptp_clock_event event;
307 389
308 event.type = PTP_CLOCK_PPS;
309
310 /* Make sure ptp clock is valid, and PPS event enabled */
311 if (!adapter->ptp_clock ||
312 !(adapter->flags2 & IXGBE_FLAG2_PTP_PPS_ENABLED))
313 return;
314
315 if (unlikely(eicr & IXGBE_EICR_TIMESYNC)) {
316 switch (hw->mac.type) {
317 case ixgbe_mac_X540:
318 ptp_clock_event(adapter->ptp_clock, &event);
319 break;
320 default:
321 break;
322 }
323 }
324}
325
326/**
327 * ixgbe_ptp_enable_sdp
328 * @hw: the hardware private structure
329 * @shift: the clock shift for calculating nanoseconds
330 *
331 * this function enables the clock out feature on the sdp0 for the
332 * X540 device. It will create a 1second periodic output that can be
333 * used as the PPS (via an interrupt).
334 *
335 * It calculates when the systime will be on an exact second, and then
336 * aligns the start of the PPS signal to that value. The shift is
337 * necessary because it can change based on the link speed.
338 */
339static void ixgbe_ptp_enable_sdp(struct ixgbe_hw *hw, int shift)
340{
341 u32 esdp, tsauxc, clktiml, clktimh, trgttiml, trgttimh;
342 u64 clock_edge = 0;
343 u32 rem;
344
345 switch (hw->mac.type) { 390 switch (hw->mac.type) {
346 case ixgbe_mac_X540: 391 case ixgbe_mac_X540:
347 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP); 392 ptp_clock_event(adapter->ptp_clock, &event);
348
349 /*
350 * enable the SDP0 pin as output, and connected to the native
351 * function for Timesync (ClockOut)
352 */
353 esdp |= (IXGBE_ESDP_SDP0_DIR |
354 IXGBE_ESDP_SDP0_NATIVE);
355
356 /*
357 * enable the Clock Out feature on SDP0, and allow interrupts
358 * to occur when the pin changes
359 */
360 tsauxc = (IXGBE_TSAUXC_EN_CLK |
361 IXGBE_TSAUXC_SYNCLK |
362 IXGBE_TSAUXC_SDP0_INT);
363
364 /* clock period (or pulse length) */
365 clktiml = (u32)(NSECS_PER_SEC << shift);
366 clktimh = (u32)((NSECS_PER_SEC << shift) >> 32);
367
368 clock_edge |= (u64)IXGBE_READ_REG(hw, IXGBE_SYSTIML);
369 clock_edge |= (u64)IXGBE_READ_REG(hw, IXGBE_SYSTIMH) << 32;
370
371 /*
372 * account for the fact that we can't do u64 division
373 * with remainder, by converting the clock values into
374 * nanoseconds first
375 */
376 clock_edge >>= shift;
377 div_u64_rem(clock_edge, NSECS_PER_SEC, &rem);
378 clock_edge += (NSECS_PER_SEC - rem);
379 clock_edge <<= shift;
380
381 /* specify the initial clock start time */
382 trgttiml = (u32)clock_edge;
383 trgttimh = (u32)(clock_edge >> 32);
384
385 IXGBE_WRITE_REG(hw, IXGBE_CLKTIML, clktiml);
386 IXGBE_WRITE_REG(hw, IXGBE_CLKTIMH, clktimh);
387 IXGBE_WRITE_REG(hw, IXGBE_TRGTTIML0, trgttiml);
388 IXGBE_WRITE_REG(hw, IXGBE_TRGTTIMH0, trgttimh);
389
390 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
391 IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, tsauxc);
392
393 IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EICR_TIMESYNC);
394 break; 393 break;
395 default: 394 default:
396 break; 395 break;
397 } 396 }
398} 397}
399 398
400/**
401 * ixgbe_ptp_disable_sdp
402 * @hw: the private hardware structure
403 *
404 * this function disables the auxiliary SDP clock out feature
405 */
406static void ixgbe_ptp_disable_sdp(struct ixgbe_hw *hw)
407{
408 IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_EICR_TIMESYNC);
409 IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, 0);
410}
411 399
412/** 400/**
413 * ixgbe_ptp_overflow_check - delayed work to detect SYSTIME overflow 401 * ixgbe_ptp_overflow_check - delayed work to detect SYSTIME overflow
@@ -822,9 +810,6 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
822 if (adapter->cycle_speed == cycle_speed && timinca) 810 if (adapter->cycle_speed == cycle_speed && timinca)
823 return; 811 return;
824 812
825 /* disable the SDP clock out */
826 ixgbe_ptp_disable_sdp(hw);
827
828 /** 813 /**
829 * Scale the NIC cycle counter by a large factor so that 814 * Scale the NIC cycle counter by a large factor so that
830 * relatively small corrections to the frequency can be added 815 * relatively small corrections to the frequency can be added
@@ -877,10 +862,6 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
877 IXGBE_WRITE_REG(hw, IXGBE_SYSTIMH, 0x00000000); 862 IXGBE_WRITE_REG(hw, IXGBE_SYSTIMH, 0x00000000);
878 IXGBE_WRITE_FLUSH(hw); 863 IXGBE_WRITE_FLUSH(hw);
879 864
880 /* now that the shift has been calculated and the systime
881 * registers reset, (re-)enable the Clock out feature*/
882 ixgbe_ptp_enable_sdp(hw, shift);
883
884 /* store the new cycle speed */ 865 /* store the new cycle speed */
885 adapter->cycle_speed = cycle_speed; 866 adapter->cycle_speed = cycle_speed;
886 867
@@ -901,6 +882,12 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
901 ktime_to_ns(ktime_get_real())); 882 ktime_to_ns(ktime_get_real()));
902 883
903 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); 884 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
885
886 /*
887 * Now that the shift has been calculated and the systime
888 * registers reset, (re-)enable the Clock out feature
889 */
890 ixgbe_ptp_setup_sdp(adapter);
904} 891}
905 892
906/** 893/**
@@ -979,10 +966,11 @@ void ixgbe_ptp_init(struct ixgbe_adapter *adapter)
979 */ 966 */
980void ixgbe_ptp_stop(struct ixgbe_adapter *adapter) 967void ixgbe_ptp_stop(struct ixgbe_adapter *adapter)
981{ 968{
982 ixgbe_ptp_disable_sdp(&adapter->hw);
983
984 /* stop the overflow check task */ 969 /* stop the overflow check task */
985 adapter->flags2 &= ~IXGBE_FLAG2_OVERFLOW_CHECK_ENABLED; 970 adapter->flags2 &= ~(IXGBE_FLAG2_OVERFLOW_CHECK_ENABLED |
971 IXGBE_FLAG2_PTP_PPS_ENABLED);
972
973 ixgbe_ptp_setup_sdp(adapter);
986 974
987 if (adapter->ptp_clock) { 975 if (adapter->ptp_clock) {
988 ptp_clock_unregister(adapter->ptp_clock); 976 ptp_clock_unregister(adapter->ptp_clock);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
index 400f86a31174..0722f3368092 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
@@ -65,6 +65,7 @@
65#define IXGBE_DEV_ID_82599_LS 0x154F 65#define IXGBE_DEV_ID_82599_LS 0x154F
66#define IXGBE_DEV_ID_X540T 0x1528 66#define IXGBE_DEV_ID_X540T 0x1528
67#define IXGBE_DEV_ID_82599_SFP_SF_QP 0x154A 67#define IXGBE_DEV_ID_82599_SFP_SF_QP 0x154A
68#define IXGBE_DEV_ID_X540T1 0x1560
68 69
69/* VF Device IDs */ 70/* VF Device IDs */
70#define IXGBE_DEV_ID_82599_VF 0x10ED 71#define IXGBE_DEV_ID_82599_VF 0x10ED