Fix creation of dma tags and TSO settings
TSO settings were not reflecting real HW capabilities. DMA tags were created with wrong window - high address was the same as low, so excluding window was not working. Capabilities of TX dma transaction were not set properly - TSO max size had been increased and size of one segment had been adjusted. Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon.com Inc.
This commit is contained in:
parent
63b4364a9a
commit
8a573700af
@ -227,8 +227,8 @@ ena_dma_alloc(device_t dmadev, bus_size_t size,
|
||||
dma_space_addr = BUS_SPACE_MAXADDR;
|
||||
error = bus_dma_tag_create(bus_get_dma_tag(dmadev), /* parent */
|
||||
8, 0, /* alignment, bounds */
|
||||
dma_space_addr, /* lowaddr */
|
||||
dma_space_addr, /* highaddr */
|
||||
dma_space_addr, /* lowaddr of exclusion window */
|
||||
BUS_SPACE_MAXADDR,/* highaddr of exclusion window */
|
||||
NULL, NULL, /* filter, filterarg */
|
||||
maxsize, /* maxsize */
|
||||
1, /* nsegments */
|
||||
@ -531,11 +531,11 @@ ena_setup_tx_dma_tag(struct ena_adapter *adapter)
|
||||
/* Create DMA tag for Tx buffers */
|
||||
ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev),
|
||||
1, 0, /* alignment, bounds */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* highaddr */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
|
||||
BUS_SPACE_MAXADDR, /* highaddr of excl window */
|
||||
NULL, NULL, /* filter, filterarg */
|
||||
ENA_TSO_MAXSIZE, /* maxsize */
|
||||
adapter->max_tx_sgl_size, /* nsegments */
|
||||
adapter->max_tx_sgl_size - 1, /* nsegments */
|
||||
ENA_TSO_MAXSIZE, /* maxsegsize */
|
||||
0, /* flags */
|
||||
NULL, /* lockfunc */
|
||||
@ -569,8 +569,8 @@ ena_setup_rx_dma_tag(struct ena_adapter *adapter)
|
||||
/* Create DMA tag for Rx buffers*/
|
||||
ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */
|
||||
1, 0, /* alignment, bounds */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* highaddr */
|
||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
|
||||
BUS_SPACE_MAXADDR, /* highaddr of excl window */
|
||||
NULL, NULL, /* filter, filterarg */
|
||||
MJUM16BYTES, /* maxsize */
|
||||
1, /* nsegments */
|
||||
@ -2479,9 +2479,10 @@ ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter,
|
||||
if_setcapabilitiesbit(ifp, caps, 0);
|
||||
|
||||
/* TSO parameters */
|
||||
ifp->if_hw_tsomax = ENA_TSO_MAXSIZE;
|
||||
ifp->if_hw_tsomaxsegcount = ENA_TSO_NSEGS;
|
||||
ifp->if_hw_tsomaxsegsize = MCLBYTES;
|
||||
ifp->if_hw_tsomax = ENA_TSO_MAXSIZE -
|
||||
(ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN);
|
||||
ifp->if_hw_tsomaxsegcount = adapter->max_tx_sgl_size - 1;
|
||||
ifp->if_hw_tsomaxsegsize = ENA_TSO_MAXSIZE;
|
||||
|
||||
if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
|
||||
if_setcapenable(ifp, if_getcapabilities(ifp));
|
||||
|
@ -112,7 +112,7 @@
|
||||
#define TX_IRQ_INTERVAL 50
|
||||
|
||||
#define ENA_MAX_MTU 9216
|
||||
#define ENA_TSO_MAXSIZE PAGE_SIZE
|
||||
#define ENA_TSO_MAXSIZE 65536
|
||||
#define ENA_TSO_NSEGS ENA_PKT_MAX_BUFS
|
||||
#define ENA_RX_OFFSET NET_SKB_PAD + NET_IP_ALIGN
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user