Deleted Added
full compact
if_lem.c (270876) if_lem.c (271782)
1/******************************************************************************
2
3 Copyright (c) 2001-2012, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8

--- 16 unchanged lines hidden (view full) ---

25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
1/******************************************************************************
2
3 Copyright (c) 2001-2012, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8

--- 16 unchanged lines hidden (view full) ---

25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: head/sys/dev/e1000/if_lem.c 270876 2014-08-31 12:48:13Z glebius $*/
33/*$FreeBSD: head/sys/dev/e1000/if_lem.c 271782 2014-09-18 15:56:14Z glebius $*/
34
35/*
36 * Uncomment the following extensions for better performance in a VM,
37 * especially if you have support in the hypervisor.
38 * See http://info.iet.unipi.it/~luigi/netmap/
39 */
40// #define BATCH_DISPATCH
41// #define NIC_SEND_COMBINING

--- 133 unchanged lines hidden (view full) ---

175static int lem_attach(device_t);
176static int lem_detach(device_t);
177static int lem_shutdown(device_t);
178static int lem_suspend(device_t);
179static int lem_resume(device_t);
180static void lem_start(if_t);
181static void lem_start_locked(if_t ifp);
182static int lem_ioctl(if_t, u_long, caddr_t);
34
35/*
36 * Uncomment the following extensions for better performance in a VM,
37 * especially if you have support in the hypervisor.
38 * See http://info.iet.unipi.it/~luigi/netmap/
39 */
40// #define BATCH_DISPATCH
41// #define NIC_SEND_COMBINING

--- 133 unchanged lines hidden (view full) ---

175static int lem_attach(device_t);
176static int lem_detach(device_t);
177static int lem_shutdown(device_t);
178static int lem_suspend(device_t);
179static int lem_resume(device_t);
180static void lem_start(if_t);
181static void lem_start_locked(if_t ifp);
182static int lem_ioctl(if_t, u_long, caddr_t);
183static uint64_t lem_get_counter(if_t, ift_counter);
183static void lem_init(void *);
184static void lem_init_locked(struct adapter *);
185static void lem_stop(void *);
186static void lem_media_status(if_t, struct ifmediareq *);
187static int lem_media_change(if_t);
188static void lem_identify_hardware(struct adapter *);
189static int lem_allocate_pci_resources(struct adapter *);
190static int lem_allocate_irq(struct adapter *adapter);

--- 2268 unchanged lines hidden (view full) ---

2459 return (-1);
2460 }
2461 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
2462 if_setinitfn(ifp, lem_init);
2463 if_setsoftc(ifp, adapter);
2464 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
2465 if_setioctlfn(ifp, lem_ioctl);
2466 if_setstartfn(ifp, lem_start);
184static void lem_init(void *);
185static void lem_init_locked(struct adapter *);
186static void lem_stop(void *);
187static void lem_media_status(if_t, struct ifmediareq *);
188static int lem_media_change(if_t);
189static void lem_identify_hardware(struct adapter *);
190static int lem_allocate_pci_resources(struct adapter *);
191static int lem_allocate_irq(struct adapter *adapter);

--- 2268 unchanged lines hidden (view full) ---

2460 return (-1);
2461 }
2462 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
2463 if_setinitfn(ifp, lem_init);
2464 if_setsoftc(ifp, adapter);
2465 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
2466 if_setioctlfn(ifp, lem_ioctl);
2467 if_setstartfn(ifp, lem_start);
2468 if_setgetcounterfn(ifp, lem_get_counter);
2467 if_setsendqlen(ifp, adapter->num_tx_desc - 1);
2468 if_setsendqready(ifp);
2469
2470 ether_ifattach(ifp, adapter->hw.mac.addr);
2471
2472 if_setcapabilities(ifp, 0);
2473
2474 if (adapter->hw.mac.type >= e1000_82543) {

--- 642 unchanged lines hidden (view full) ---

3117 /* We clean the range of the packet */
3118 while (first != done) {
3119 tx_desc->upper.data = 0;
3120 tx_desc->lower.data = 0;
3121 tx_desc->buffer_addr = 0;
3122 ++num_avail;
3123
3124 if (tx_buffer->m_head) {
2469 if_setsendqlen(ifp, adapter->num_tx_desc - 1);
2470 if_setsendqready(ifp);
2471
2472 ether_ifattach(ifp, adapter->hw.mac.addr);
2473
2474 if_setcapabilities(ifp, 0);
2475
2476 if (adapter->hw.mac.type >= e1000_82543) {

--- 642 unchanged lines hidden (view full) ---

3119 /* We clean the range of the packet */
3120 while (first != done) {
3121 tx_desc->upper.data = 0;
3122 tx_desc->lower.data = 0;
3123 tx_desc->buffer_addr = 0;
3124 ++num_avail;
3125
3126 if (tx_buffer->m_head) {
3125 if_incopackets(ifp, 1);
3127 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
3126 bus_dmamap_sync(adapter->txtag,
3127 tx_buffer->map,
3128 BUS_DMASYNC_POSTWRITE);
3129 bus_dmamap_unload(adapter->txtag,
3130 tx_buffer->map);
3131
3132 m_freem(tx_buffer->m_head);
3133 tx_buffer->m_head = NULL;

--- 542 unchanged lines hidden (view full) ---

3676 if (len > 0)
3677 len--;
3678 } else
3679 accept_frame = 0;
3680 }
3681
3682 if (accept_frame) {
3683 if (lem_get_buf(adapter, i) != 0) {
3128 bus_dmamap_sync(adapter->txtag,
3129 tx_buffer->map,
3130 BUS_DMASYNC_POSTWRITE);
3131 bus_dmamap_unload(adapter->txtag,
3132 tx_buffer->map);
3133
3134 m_freem(tx_buffer->m_head);
3135 tx_buffer->m_head = NULL;

--- 542 unchanged lines hidden (view full) ---

3678 if (len > 0)
3679 len--;
3680 } else
3681 accept_frame = 0;
3682 }
3683
3684 if (accept_frame) {
3685 if (lem_get_buf(adapter, i) != 0) {
3684 if_inciqdrops(ifp, 1);
3686 if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
3685 goto discard;
3686 }
3687
3688 /* Assign correct length to the current fragment */
3689 mp->m_len = len;
3690
3691 if (adapter->fmp == NULL) {
3692 mp->m_pkthdr.len = len;

--- 14 unchanged lines hidden (view full) ---

3707 }
3708 adapter->lmp->m_next = mp;
3709 adapter->lmp = adapter->lmp->m_next;
3710 adapter->fmp->m_pkthdr.len += len;
3711 }
3712
3713 if (eop) {
3714 if_setrcvif(adapter->fmp, ifp);
3687 goto discard;
3688 }
3689
3690 /* Assign correct length to the current fragment */
3691 mp->m_len = len;
3692
3693 if (adapter->fmp == NULL) {
3694 mp->m_pkthdr.len = len;

--- 14 unchanged lines hidden (view full) ---

3709 }
3710 adapter->lmp->m_next = mp;
3711 adapter->lmp = adapter->lmp->m_next;
3712 adapter->fmp->m_pkthdr.len += len;
3713 }
3714
3715 if (eop) {
3716 if_setrcvif(adapter->fmp, ifp);
3715 if_incipackets(ifp, 1);
3717 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
3716 lem_receive_checksum(adapter, current_desc,
3717 adapter->fmp);
3718#ifndef __NO_STRICT_ALIGNMENT
3719 if (adapter->max_frame_size >
3720 (MCLBYTES - ETHER_ALIGN) &&
3721 lem_fixup_rx(adapter) != 0)
3722 goto skip;
3723#endif

--- 668 unchanged lines hidden (view full) ---

4392/**********************************************************************
4393 *
4394 * Update the board statistics counters.
4395 *
4396 **********************************************************************/
4397static void
4398lem_update_stats_counters(struct adapter *adapter)
4399{
3718 lem_receive_checksum(adapter, current_desc,
3719 adapter->fmp);
3720#ifndef __NO_STRICT_ALIGNMENT
3721 if (adapter->max_frame_size >
3722 (MCLBYTES - ETHER_ALIGN) &&
3723 lem_fixup_rx(adapter) != 0)
3724 goto skip;
3725#endif

--- 668 unchanged lines hidden (view full) ---

4394/**********************************************************************
4395 *
4396 * Update the board statistics counters.
4397 *
4398 **********************************************************************/
4399static void
4400lem_update_stats_counters(struct adapter *adapter)
4401{
4400 if_t ifp;
4401
4402 if(adapter->hw.phy.media_type == e1000_media_type_copper ||
4403 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
4404 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
4405 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
4406 }
4407 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
4408 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);

--- 58 unchanged lines hidden (view full) ---

4467 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
4468 adapter->stats.cexterr +=
4469 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
4470 adapter->stats.tsctc +=
4471 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
4472 adapter->stats.tsctfc +=
4473 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
4474 }
4402
4403 if(adapter->hw.phy.media_type == e1000_media_type_copper ||
4404 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
4405 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
4406 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
4407 }
4408 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
4409 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);

--- 58 unchanged lines hidden (view full) ---

4468 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
4469 adapter->stats.cexterr +=
4470 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
4471 adapter->stats.tsctc +=
4472 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
4473 adapter->stats.tsctfc +=
4474 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
4475 }
4475 ifp = adapter->ifp;
4476}
4476
4477
4477 if_setcollisions(ifp, adapter->stats.colc);
4478static uint64_t
4479lem_get_counter(if_t ifp, ift_counter cnt)
4480{
4481 struct adapter *adapter;
4478
4482
4479 /* Rx Errors */
4480 if_setierrors(ifp, adapter->dropped_pkts + adapter->stats.rxerrc +
4481 adapter->stats.crcerrs + adapter->stats.algnerrc +
4482 adapter->stats.ruc + adapter->stats.roc +
4483 adapter->stats.mpc + adapter->stats.cexterr);
4483 adapter = if_getsoftc(ifp);
4484
4484
4485 /* Tx Errors */
4486 if_setoerrors(ifp, adapter->stats.ecol + adapter->stats.latecol +
4487 adapter->watchdog_events);
4485 switch (cnt) {
4486 case IFCOUNTER_COLLISIONS:
4487 return (adapter->stats.colc);
4488 case IFCOUNTER_IERRORS:
4489 return (adapter->dropped_pkts + adapter->stats.rxerrc +
4490 adapter->stats.crcerrs + adapter->stats.algnerrc +
4491 adapter->stats.ruc + adapter->stats.roc +
4492 adapter->stats.mpc + adapter->stats.cexterr);
4493 case IFCOUNTER_OERRORS:
4494 return (adapter->stats.ecol + adapter->stats.latecol +
4495 adapter->watchdog_events);
4496 default:
4497 return (if_get_counter_default(ifp, cnt));
4498 }
4488}
4489
4490/* Export a single 32-bit register via a read-only sysctl. */
4491static int
4492lem_sysctl_reg_handler(SYSCTL_HANDLER_ARGS)
4493{
4494 struct adapter *adapter;
4495 u_int val;

--- 369 unchanged lines hidden ---
4499}
4500
4501/* Export a single 32-bit register via a read-only sysctl. */
4502static int
4503lem_sysctl_reg_handler(SYSCTL_HANDLER_ARGS)
4504{
4505 struct adapter *adapter;
4506 u_int val;

--- 369 unchanged lines hidden ---