Put rx_buf_sz on rtl_cfg_info structure and add new parameter rx_buf_coef.Param rx_buf_sz may be different by nic's and same rx_buf_coef On RTL 8101 series rx_buf_coef is not equal with rx_buf_sz. Add --whitespace=warn on git
Signed-off-by: Corcodel Marian <corcodel.mar...@gmail.com> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 6882eab..fecb7c9 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -344,7 +344,7 @@ static const struct pci_device_id rtl8169_pci_tbl[] = { MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl); -static int rx_buf_sz = 16383; +//static int rx_buf_sz = 16383; static int use_dac; static struct { u32 msg_enable; @@ -784,6 +784,8 @@ struct rtl8169_private { u16 cp_cmd; u16 event_slow; + u16 rx_buf_sz; + u16 rx_buf_coef; struct mdio_ops { void (*write)(struct rtl8169_private *, int, int); @@ -5321,7 +5323,7 @@ static void rtl_hw_start_8169(struct net_device *dev) RTL_W8(EarlyTxThres, NoEarlyTx); - rtl_set_rx_max_size(ioaddr, rx_buf_sz); + rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz); if (tp->mac_version == RTL_GIGA_MAC_VER_01 || tp->mac_version == RTL_GIGA_MAC_VER_02 || @@ -6229,7 +6231,7 @@ static void rtl_hw_start_8168(struct net_device *dev) RTL_W8(MaxTxPacketSize, TxPacketMax); - rtl_set_rx_max_size(ioaddr, rx_buf_sz); + rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz); tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1; @@ -6523,7 +6525,7 @@ static void rtl_hw_start_8101(struct net_device *dev) RTL_W8(MaxTxPacketSize, TxPacketMax); - rtl_set_rx_max_size(ioaddr, rx_buf_sz); + rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz); tp->cp_cmd &= ~R810X_CPCMD_QUIRK_MASK; RTL_W16(CPlusCmd, tp->cp_cmd); @@ -6609,7 +6611,7 @@ static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc) static void rtl8169_free_rx_databuff(struct rtl8169_private *tp, void **data_buff, struct RxDesc *desc) { - dma_unmap_single(&tp->pci_dev->dev, le64_to_cpu(desc->addr), rx_buf_sz, + dma_unmap_single(&tp->pci_dev->dev, le64_to_cpu(desc->addr), tp->rx_buf_sz, DMA_FROM_DEVICE); kfree(*data_buff); @@ -6617,21 +6619,22 @@ static void rtl8169_free_rx_databuff(struct rtl8169_private *tp, rtl8169_make_unusable_by_asic(desc); } -static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz) +static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz, + u32 rx_buf_coef) { u32 eor = le32_to_cpu(desc->opts1) & RingEnd; /* Force memory writes to complete before releasing descriptor */ dma_wmb(); - desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz); + desc->opts1 = cpu_to_le32(DescOwn | eor | (rx_buf_sz & rx_buf_coef)); } static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping, - u32 rx_buf_sz) + u32 rx_buf_sz, u32 rx_buf_coef) { desc->addr = cpu_to_le64(mapping); - rtl8169_mark_to_asic(desc, rx_buf_sz); + rtl8169_mark_to_asic(desc, rx_buf_sz, rx_buf_coef); } static inline void *rtl8169_align(void *data) @@ -6648,18 +6651,18 @@ static struct sk_buff *rtl8169_alloc_rx_data(struct rtl8169_private *tp, struct net_device *dev = tp->dev; int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1; - data = kmalloc_node(rx_buf_sz, GFP_KERNEL, node); + data = kmalloc_node(tp->rx_buf_sz, GFP_KERNEL, node); if (!data) return NULL; if (rtl8169_align(data) != data) { kfree(data); - data = kmalloc_node(rx_buf_sz + 15, GFP_KERNEL, node); + data = kmalloc_node(tp->rx_buf_sz + 15, GFP_KERNEL, node); if (!data) return NULL; } - mapping = dma_map_single(d, rtl8169_align(data), rx_buf_sz, + mapping = dma_map_single(d, rtl8169_align(data), tp->rx_buf_sz, DMA_FROM_DEVICE); if (unlikely(dma_mapping_error(d, mapping))) { if (net_ratelimit()) @@ -6667,7 +6670,7 @@ static struct sk_buff *rtl8169_alloc_rx_data(struct rtl8169_private *tp, goto err_out; } - rtl8169_map_to_asic(desc, mapping, rx_buf_sz); + rtl8169_map_to_asic(desc, mapping, tp->rx_buf_sz, tp->rx_buf_coef); return data; err_out: @@ -6785,7 +6788,8 @@ static void rtl_reset_work(struct rtl8169_private *tp) rtl8169_hw_reset(tp); for (i = 0; i < NUM_RX_DESC; i++) - rtl8169_mark_to_asic(tp->RxDescArray + i, rx_buf_sz); + rtl8169_mark_to_asic(tp->RxDescArray + i, tp->rx_buf_sz, + tp->rx_buf_coef); rtl8169_tx_clear(tp); rtl8169_init_ring_indexes(tp); @@ -7368,7 +7372,7 @@ process_pkt: } release_descriptor: desc->opts2 = 0; - rtl8169_mark_to_asic(desc, rx_buf_sz); + rtl8169_mark_to_asic(desc, tp->rx_buf_sz, tp->rx_buf_coef); } count = cur_rx - tp->cur_rx; @@ -7929,6 +7933,8 @@ static const struct rtl_cfg_info { unsigned int region; unsigned int align; u16 event_slow; + u16 rx_buf_sz; + u16 rx_buf_coef; unsigned features; u8 default_ver; } rtl_cfg_infos [] = { @@ -7937,6 +7943,8 @@ static const struct rtl_cfg_info { .region = 1, .align = 0, .event_slow = SYSErr | LinkChg | RxOverflow | RxFIFOOver, + .rx_buf_sz = 16383, + .rx_buf_coef = 0x3fff, .features = RTL_FEATURE_GMII, .default_ver = RTL_GIGA_MAC_VER_01, }, @@ -7945,6 +7953,8 @@ static const struct rtl_cfg_info { .region = 2, .align = 8, .event_slow = SYSErr | LinkChg | RxOverflow, + .rx_buf_sz = 16383, + .rx_buf_coef = 0x3fff, .features = RTL_FEATURE_GMII | RTL_FEATURE_MSI, .default_ver = RTL_GIGA_MAC_VER_11, }, @@ -7952,6 +7962,8 @@ static const struct rtl_cfg_info { .hw_start = rtl_hw_start_8101, .region = 2, .align = 8, + .rx_buf_sz = 16000, + .rx_buf_coef = 0x1ff8, .event_slow = LinkChg | RxOverflow | RxFIFOOver | PCSTimeout, .features = RTL_FEATURE_MSI, .default_ver = RTL_GIGA_MAC_VER_13, @@ -8307,6 +8319,8 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) tp->hw_start = cfg->hw_start; tp->event_slow = cfg->event_slow; + tp->rx_buf_sz = cfg->rx_buf_sz; + tp->rx_buf_coef = cfg->rx_buf_coef; tp->opts1_mask = (tp->mac_version != RTL_GIGA_MAC_VER_01) ? ~(RxBOVF | RxFOVF) : ~0; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html