Lines Matching +full:tx +full:- +full:csum +full:- +full:limit

1 // SPDX-License-Identifier: GPL-2.0-only
17 #include <linux/dma-mapping.h>
66 return (idx + 1) & (qlen - 1); in slic_next_queue_idx()
74 return (qlen - (put_idx - done_idx) - 1); in slic_get_free_queue_descs()
75 return (done_idx - put_idx - 1); in slic_get_free_queue_descs()
80 struct slic_stat_queue *stq = &sdev->stq; in slic_next_compl_idx()
81 unsigned int active = stq->active_array; in slic_next_compl_idx()
86 descs = stq->descs[active]; in slic_next_compl_idx()
87 stat = &descs[stq->done_idx]; in slic_next_compl_idx()
89 if (!stat->status) in slic_next_compl_idx()
92 idx = (le32_to_cpu(stat->hnd) & 0xffff) - 1; in slic_next_compl_idx()
94 stat->hnd = 0; in slic_next_compl_idx()
95 stat->status = 0; in slic_next_compl_idx()
97 stq->done_idx = slic_next_queue_idx(stq->done_idx, stq->len); in slic_next_compl_idx()
99 if (!stq->done_idx) { in slic_next_compl_idx()
100 dma_addr_t paddr = stq->paddr[active]; in slic_next_compl_idx()
103 stq->len); in slic_next_compl_idx()
107 active &= (SLIC_NUM_STAT_DESC_ARRAYS - 1); in slic_next_compl_idx()
108 stq->active_array = active; in slic_next_compl_idx()
117 return slic_get_free_queue_descs(txq->put_idx, txq->done_idx, txq->len); in slic_get_free_tx_descs()
122 return slic_get_free_queue_descs(rxq->put_idx, rxq->done_idx, rxq->len); in slic_get_free_rx_descs()
130 spin_lock_bh(&upr_list->lock); in slic_clear_upr_list()
131 list_for_each_entry_safe(upr, tmp, &upr_list->list, list) { in slic_clear_upr_list()
132 list_del(&upr->list); in slic_clear_upr_list()
135 upr_list->pending = false; in slic_clear_upr_list()
136 spin_unlock_bh(&upr_list->lock); in slic_clear_upr_list()
143 reg = (upr->type == SLIC_UPR_CONFIG) ? SLIC_REG_RCONFIG : in slic_start_upr()
145 slic_write(sdev, reg, lower_32_bits(upr->paddr)); in slic_start_upr()
151 struct slic_upr_list *upr_list = &sdev->upr_list; in slic_queue_upr()
154 spin_lock_bh(&upr_list->lock); in slic_queue_upr()
155 pending = upr_list->pending; in slic_queue_upr()
156 INIT_LIST_HEAD(&upr->list); in slic_queue_upr()
157 list_add_tail(&upr->list, &upr_list->list); in slic_queue_upr()
158 upr_list->pending = true; in slic_queue_upr()
159 spin_unlock_bh(&upr_list->lock); in slic_queue_upr()
167 struct slic_upr_list *upr_list = &sdev->upr_list; in slic_dequeue_upr()
171 spin_lock_bh(&upr_list->lock); in slic_dequeue_upr()
172 if (!list_empty(&upr_list->list)) { in slic_dequeue_upr()
173 upr = list_first_entry(&upr_list->list, struct slic_upr, list); in slic_dequeue_upr()
174 list_del(&upr->list); in slic_dequeue_upr()
176 if (list_empty(&upr_list->list)) in slic_dequeue_upr()
177 upr_list->pending = false; in slic_dequeue_upr()
179 next_upr = list_first_entry(&upr_list->list, in slic_dequeue_upr()
182 spin_unlock_bh(&upr_list->lock); in slic_dequeue_upr()
197 return -ENOMEM; in slic_new_upr()
198 upr->type = type; in slic_new_upr()
199 upr->paddr = paddr; in slic_new_upr()
210 /* Get the CRC polynomial for the mac address: we use bits 1-8 (lsb), in slic_set_mcast_bit()
229 if (sdev->duplex == DUPLEX_FULL) in slic_configure_rcv()
232 if (sdev->promisc) in slic_configure_rcv()
245 if (sdev->duplex == DUPLEX_FULL) in slic_configure_xmt()
256 if (sdev->speed == SPEED_1000) { in slic_configure_mac()
267 if (sdev->duplex == DUPLEX_FULL) in slic_configure_mac()
276 struct net_device *dev = sdev->netdev; in slic_configure_link_locked()
278 if (sdev->speed == speed && sdev->duplex == duplex) in slic_configure_link_locked()
281 sdev->speed = speed; in slic_configure_link_locked()
282 sdev->duplex = duplex; in slic_configure_link_locked()
284 if (sdev->speed == SPEED_UNKNOWN) { in slic_configure_link_locked()
302 spin_lock_bh(&sdev->link_lock); in slic_configure_link()
304 spin_unlock_bh(&sdev->link_lock); in slic_configure_link()
314 if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) { in slic_set_rx_mode()
325 slic_set_mcast_bit(&mcmask, hwaddr->addr); in slic_set_rx_mode()
332 set_promisc = !!(dev->flags & IFF_PROMISC); in slic_set_rx_mode()
334 spin_lock_bh(&sdev->link_lock); in slic_set_rx_mode()
335 if (sdev->promisc != set_promisc) { in slic_set_rx_mode()
336 sdev->promisc = set_promisc; in slic_set_rx_mode()
339 spin_unlock_bh(&sdev->link_lock); in slic_set_rx_mode()
344 struct slic_tx_queue *txq = &sdev->txq; in slic_xmit_complete()
345 struct net_device *dev = sdev->netdev; in slic_xmit_complete()
351 /* Limit processing to SLIC_MAX_TX_COMPLETIONS frames to avoid that new in slic_xmit_complete()
359 txq->done_idx = idx; in slic_xmit_complete()
360 buff = &txq->txbuffs[idx]; in slic_xmit_complete()
362 if (unlikely(!buff->skb)) { in slic_xmit_complete()
367 dma_unmap_single(&sdev->pdev->dev, in slic_xmit_complete()
371 bytes += buff->skb->len; in slic_xmit_complete()
374 dev_kfree_skb_any(buff->skb); in slic_xmit_complete()
375 buff->skb = NULL; in slic_xmit_complete()
380 u64_stats_update_begin(&sdev->stats.syncp); in slic_xmit_complete()
381 sdev->stats.tx_bytes += bytes; in slic_xmit_complete()
382 sdev->stats.tx_packets += frames; in slic_xmit_complete()
383 u64_stats_update_end(&sdev->stats.syncp); in slic_xmit_complete()
394 const unsigned int ALIGN_MASK = SLIC_RX_BUFF_ALIGN - 1; in slic_refill_rx_queue()
396 struct slic_rx_queue *rxq = &sdev->rxq; in slic_refill_rx_queue()
397 struct net_device *dev = sdev->netdev; in slic_refill_rx_queue()
410 paddr = dma_map_single(&sdev->pdev->dev, skb->data, maplen, in slic_refill_rx_queue()
412 if (dma_mapping_error(&sdev->pdev->dev, paddr)) { in slic_refill_rx_queue()
422 offset = SLIC_RX_BUFF_ALIGN - misalign; in slic_refill_rx_queue()
426 desc = (struct slic_rx_desc *)skb->data; in slic_refill_rx_queue()
428 dma_sync_single_for_cpu(&sdev->pdev->dev, paddr, in slic_refill_rx_queue()
431 desc->status = 0; in slic_refill_rx_queue()
433 dma_sync_single_for_device(&sdev->pdev->dev, paddr, in slic_refill_rx_queue()
437 buff = &rxq->rxbuffs[rxq->put_idx]; in slic_refill_rx_queue()
438 buff->skb = skb; in slic_refill_rx_queue()
441 buff->addr_offset = offset; in slic_refill_rx_queue()
446 rxq->put_idx = slic_next_queue_idx(rxq->put_idx, rxq->len); in slic_refill_rx_queue()
453 struct slic_stats *stats = &sdev->stats; in slic_handle_frame_error()
455 if (sdev->model == SLIC_MODEL_OASIS) { in slic_handle_frame_error()
460 info = (struct slic_rx_info_oasis *)skb->data; in slic_handle_frame_error()
461 status = le32_to_cpu(info->frame_status); in slic_handle_frame_error()
462 status_b = le32_to_cpu(info->frame_status_b); in slic_handle_frame_error()
498 info = (struct slic_rx_info_mojave *)skb->data; in slic_handle_frame_error()
499 status = le32_to_cpu(info->frame_status); in slic_handle_frame_error()
549 struct slic_rx_queue *rxq = &sdev->rxq; in slic_handle_receive()
550 struct net_device *dev = sdev->netdev; in slic_handle_receive()
559 while (todo && (rxq->done_idx != rxq->put_idx)) { in slic_handle_receive()
560 buff = &rxq->rxbuffs[rxq->done_idx]; in slic_handle_receive()
562 skb = buff->skb; in slic_handle_receive()
566 desc = (struct slic_rx_desc *)skb->data; in slic_handle_receive()
568 dma_sync_single_for_cpu(&sdev->pdev->dev, in slic_handle_receive()
570 buff->addr_offset + sizeof(*desc), in slic_handle_receive()
573 status = le32_to_cpu(desc->status); in slic_handle_receive()
575 dma_sync_single_for_device(&sdev->pdev->dev, in slic_handle_receive()
578 buff->addr_offset + in slic_handle_receive()
584 buff->skb = NULL; in slic_handle_receive()
586 dma_unmap_single(&sdev->pdev->dev, in slic_handle_receive()
598 struct ethhdr *eh = (struct ethhdr *)skb->data; in slic_handle_receive()
600 if (is_multicast_ether_addr(eh->h_dest)) in slic_handle_receive()
601 SLIC_INC_STATS_COUNTER(&sdev->stats, rx_mcasts); in slic_handle_receive()
603 len = le32_to_cpu(desc->length) & SLIC_IRHDDR_FLEN_MSK; in slic_handle_receive()
605 skb->protocol = eth_type_trans(skb, dev); in slic_handle_receive()
606 skb->ip_summed = CHECKSUM_UNNECESSARY; in slic_handle_receive()
608 napi_gro_receive(&sdev->napi, skb); in slic_handle_receive()
613 rxq->done_idx = slic_next_queue_idx(rxq->done_idx, rxq->len); in slic_handle_receive()
614 todo--; in slic_handle_receive()
617 u64_stats_update_begin(&sdev->stats.syncp); in slic_handle_receive()
618 sdev->stats.rx_bytes += bytes; in slic_handle_receive()
619 sdev->stats.rx_packets += frames; in slic_handle_receive()
620 u64_stats_update_end(&sdev->stats.syncp); in slic_handle_receive()
627 struct slic_shmem *sm = &sdev->shmem; in slic_handle_link_irq()
628 struct slic_shmem_data *sm_data = sm->shmem_data; in slic_handle_link_irq()
633 link = le32_to_cpu(sm_data->link); in slic_handle_link_irq()
659 netdev_warn(sdev->netdev, "no upr found on list\n"); in slic_handle_upr_irq()
663 if (upr->type == SLIC_UPR_LSTAT) { in slic_handle_upr_irq()
676 return slic_new_upr(sdev, SLIC_UPR_LSTAT, sdev->shmem.link_paddr); in slic_handle_link_change()
681 struct slic_stats *stats = &sdev->stats; in slic_handle_err_irq()
713 struct slic_shmem *sm = &sdev->shmem; in slic_poll()
714 struct slic_shmem_data *sm_data = sm->shmem_data; in slic_poll()
715 u32 isr = le32_to_cpu(sm_data->isr); in slic_poll()
723 sm_data->isr = 0; in slic_poll()
724 /* make sure sm_data->isr is cleard before irqs are reenabled */ in slic_poll()
736 struct slic_shmem *sm = &sdev->shmem; in slic_irq()
737 struct slic_shmem_data *sm_data = sm->shmem_data; in slic_irq()
741 /* make sure sm_data->isr is read after ICR_INT_MASK is set */ in slic_irq()
744 if (!sm_data->isr) { in slic_irq()
752 napi_schedule_irqoff(&sdev->napi); in slic_irq()
763 pci_read_config_word(sdev->pdev, PCI_COMMAND, &cmd); in slic_card_reset()
769 const unsigned int DESC_ALIGN_MASK = SLIC_STATS_DESC_ALIGN - 1; in slic_init_stat_queue()
770 struct slic_stat_queue *stq = &sdev->stq; in slic_init_stat_queue()
779 stq->len = SLIC_NUM_STAT_DESCS; in slic_init_stat_queue()
780 stq->active_array = 0; in slic_init_stat_queue()
781 stq->done_idx = 0; in slic_init_stat_queue()
783 size = stq->len * sizeof(*descs) + DESC_ALIGN_MASK; in slic_init_stat_queue()
786 descs = dma_alloc_coherent(&sdev->pdev->dev, size, &paddr, in slic_init_stat_queue()
789 netdev_err(sdev->netdev, in slic_init_stat_queue()
791 err = -ENOMEM; in slic_init_stat_queue()
798 offset = SLIC_STATS_DESC_ALIGN - misalign; in slic_init_stat_queue()
804 stq->len); in slic_init_stat_queue()
805 stq->descs[i] = descs; in slic_init_stat_queue()
806 stq->paddr[i] = paddr; in slic_init_stat_queue()
807 stq->addr_offset[i] = offset; in slic_init_stat_queue()
810 stq->mem_size = size; in slic_init_stat_queue()
815 while (i--) { in slic_init_stat_queue()
816 dma_free_coherent(&sdev->pdev->dev, stq->mem_size, in slic_init_stat_queue()
817 stq->descs[i] - stq->addr_offset[i], in slic_init_stat_queue()
818 stq->paddr[i] - stq->addr_offset[i]); in slic_init_stat_queue()
826 struct slic_stat_queue *stq = &sdev->stq; in slic_free_stat_queue()
830 dma_free_coherent(&sdev->pdev->dev, stq->mem_size, in slic_free_stat_queue()
831 stq->descs[i] - stq->addr_offset[i], in slic_free_stat_queue()
832 stq->paddr[i] - stq->addr_offset[i]); in slic_free_stat_queue()
838 struct slic_tx_queue *txq = &sdev->txq; in slic_init_tx_queue()
844 txq->len = SLIC_NUM_TX_DESCS; in slic_init_tx_queue()
845 txq->put_idx = 0; in slic_init_tx_queue()
846 txq->done_idx = 0; in slic_init_tx_queue()
848 txq->txbuffs = kcalloc(txq->len, sizeof(*buff), GFP_KERNEL); in slic_init_tx_queue()
849 if (!txq->txbuffs) in slic_init_tx_queue()
850 return -ENOMEM; in slic_init_tx_queue()
852 txq->dma_pool = dma_pool_create("slic_pool", &sdev->pdev->dev, in slic_init_tx_queue()
855 if (!txq->dma_pool) { in slic_init_tx_queue()
856 err = -ENOMEM; in slic_init_tx_queue()
857 netdev_err(sdev->netdev, "failed to create dma pool\n"); in slic_init_tx_queue()
861 for (i = 0; i < txq->len; i++) { in slic_init_tx_queue()
862 buff = &txq->txbuffs[i]; in slic_init_tx_queue()
863 desc = dma_pool_zalloc(txq->dma_pool, GFP_KERNEL, in slic_init_tx_queue()
864 &buff->desc_paddr); in slic_init_tx_queue()
866 netdev_err(sdev->netdev, in slic_init_tx_queue()
868 err = -ENOMEM; in slic_init_tx_queue()
872 desc->hnd = cpu_to_le32((u32)(i + 1)); in slic_init_tx_queue()
873 desc->cmd = SLIC_CMD_XMT_REQ; in slic_init_tx_queue()
874 desc->flags = 0; in slic_init_tx_queue()
875 desc->type = cpu_to_le32(SLIC_CMD_TYPE_DUMB); in slic_init_tx_queue()
876 buff->desc = desc; in slic_init_tx_queue()
882 while (i--) { in slic_init_tx_queue()
883 buff = &txq->txbuffs[i]; in slic_init_tx_queue()
884 dma_pool_free(txq->dma_pool, buff->desc, buff->desc_paddr); in slic_init_tx_queue()
886 dma_pool_destroy(txq->dma_pool); in slic_init_tx_queue()
889 kfree(txq->txbuffs); in slic_init_tx_queue()
896 struct slic_tx_queue *txq = &sdev->txq; in slic_free_tx_queue()
900 for (i = 0; i < txq->len; i++) { in slic_free_tx_queue()
901 buff = &txq->txbuffs[i]; in slic_free_tx_queue()
902 dma_pool_free(txq->dma_pool, buff->desc, buff->desc_paddr); in slic_free_tx_queue()
903 if (!buff->skb) in slic_free_tx_queue()
906 dma_unmap_single(&sdev->pdev->dev, in slic_free_tx_queue()
909 consume_skb(buff->skb); in slic_free_tx_queue()
911 dma_pool_destroy(txq->dma_pool); in slic_free_tx_queue()
913 kfree(txq->txbuffs); in slic_free_tx_queue()
918 struct slic_rx_queue *rxq = &sdev->rxq; in slic_init_rx_queue()
921 rxq->len = SLIC_NUM_RX_LES; in slic_init_rx_queue()
922 rxq->done_idx = 0; in slic_init_rx_queue()
923 rxq->put_idx = 0; in slic_init_rx_queue()
925 buff = kcalloc(rxq->len, sizeof(*buff), GFP_KERNEL); in slic_init_rx_queue()
927 return -ENOMEM; in slic_init_rx_queue()
929 rxq->rxbuffs = buff; in slic_init_rx_queue()
937 struct slic_rx_queue *rxq = &sdev->rxq; in slic_free_rx_queue()
942 for (i = 0; i < rxq->len; i++) { in slic_free_rx_queue()
943 buff = &rxq->rxbuffs[i]; in slic_free_rx_queue()
945 if (!buff->skb) in slic_free_rx_queue()
948 dma_unmap_single(&sdev->pdev->dev, in slic_free_rx_queue()
952 consume_skb(buff->skb); in slic_free_rx_queue()
954 kfree(rxq->rxbuffs); in slic_free_rx_queue()
959 unsigned int subid = sdev->pdev->subsystem_device; in slic_set_link_autoneg()
962 if (sdev->is_fiber) { in slic_set_link_autoneg()
971 /* reset phy, enable auto-neg */ in slic_set_link_autoneg()
997 /* reset phy, enable auto-neg */ in slic_set_link_autoneg()
1002 /* enable and restart auto-neg (don't reset) */ in slic_set_link_autoneg()
1011 const u8 *addr = sdev->netdev->dev_addr; in slic_set_mac_address()
1031 memcpy(&val, fw->data + *offset, sizeof(val)); in slic_read_dword_from_firmware()
1051 file = (sdev->model == SLIC_MODEL_OASIS) ? SLIC_RCV_FIRMWARE_OASIS : in slic_load_rcvseq_firmware()
1053 err = request_firmware(&fw, file, &sdev->pdev->dev); in slic_load_rcvseq_firmware()
1055 dev_err(&sdev->pdev->dev, in slic_load_rcvseq_firmware()
1062 if (fw->size < SLIC_FIRMWARE_MIN_SIZE) { in slic_load_rcvseq_firmware()
1063 dev_err(&sdev->pdev->dev, in slic_load_rcvseq_firmware()
1065 fw->size, SLIC_FIRMWARE_MIN_SIZE); in slic_load_rcvseq_firmware()
1066 err = -EINVAL; in slic_load_rcvseq_firmware()
1073 if ((codelen + 4) > fw->size) { in slic_load_rcvseq_firmware()
1074 dev_err(&sdev->pdev->dev, in slic_load_rcvseq_firmware()
1075 "invalid rcv-sequencer firmware size %zu\n", fw->size); in slic_load_rcvseq_firmware()
1076 err = -EINVAL; in slic_load_rcvseq_firmware()
1091 val = (__le32)fw->data[idx]; in slic_load_rcvseq_firmware()
1126 file = (sdev->model == SLIC_MODEL_OASIS) ? SLIC_FIRMWARE_OASIS : in slic_load_firmware()
1128 err = request_firmware(&fw, file, &sdev->pdev->dev); in slic_load_firmware()
1130 dev_err(&sdev->pdev->dev, "failed to load firmware %s\n", file); in slic_load_firmware()
1136 if (fw->size < SLIC_FIRMWARE_MIN_SIZE) { in slic_load_firmware()
1137 dev_err(&sdev->pdev->dev, in slic_load_firmware()
1138 "invalid firmware size %zu (min is %u)\n", fw->size, in slic_load_firmware()
1140 err = -EINVAL; in slic_load_firmware()
1146 dev_err(&sdev->pdev->dev, in slic_load_firmware()
1148 err = -EINVAL; in slic_load_firmware()
1159 if (datalen > fw->size) { in slic_load_firmware()
1160 dev_err(&sdev->pdev->dev, in slic_load_firmware()
1162 fw->size, datalen); in slic_load_firmware()
1163 err = -EINVAL; in slic_load_firmware()
1227 struct slic_shmem *sm = &sdev->shmem; in slic_init_shmem()
1231 sm_data = dma_alloc_coherent(&sdev->pdev->dev, sizeof(*sm_data), in slic_init_shmem()
1234 dev_err(&sdev->pdev->dev, "failed to allocate shared memory\n"); in slic_init_shmem()
1235 return -ENOMEM; in slic_init_shmem()
1238 sm->shmem_data = sm_data; in slic_init_shmem()
1239 sm->isr_paddr = paddr; in slic_init_shmem()
1240 sm->link_paddr = paddr + offsetof(struct slic_shmem_data, link); in slic_init_shmem()
1247 struct slic_shmem *sm = &sdev->shmem; in slic_free_shmem()
1248 struct slic_shmem_data *sm_data = sm->shmem_data; in slic_free_shmem()
1250 dma_free_coherent(&sdev->pdev->dev, sizeof(*sm_data), sm_data, in slic_free_shmem()
1251 sm->isr_paddr); in slic_free_shmem()
1256 struct slic_shmem *sm = &sdev->shmem; in slic_init_iface()
1259 sdev->upr_list.pending = false; in slic_init_iface()
1263 netdev_err(sdev->netdev, "failed to init shared memory\n"); in slic_init_iface()
1269 netdev_err(sdev->netdev, "failed to load firmware\n"); in slic_init_iface()
1275 netdev_err(sdev->netdev, in slic_init_iface()
1286 netdev_err(sdev->netdev, "failed to init rx queue: %u\n", err); in slic_init_iface()
1292 netdev_err(sdev->netdev, "failed to init tx queue: %u\n", err); in slic_init_iface()
1298 netdev_err(sdev->netdev, "failed to init status queue: %u\n", in slic_init_iface()
1303 slic_write(sdev, SLIC_REG_ISP, lower_32_bits(sm->isr_paddr)); in slic_init_iface()
1304 napi_enable(&sdev->napi); in slic_init_iface()
1312 spin_lock_bh(&sdev->link_lock); in slic_init_iface()
1313 sdev->duplex = DUPLEX_UNKNOWN; in slic_init_iface()
1314 sdev->speed = SPEED_UNKNOWN; in slic_init_iface()
1315 spin_unlock_bh(&sdev->link_lock); in slic_init_iface()
1319 err = request_irq(sdev->pdev->irq, slic_irq, IRQF_SHARED, DRV_NAME, in slic_init_iface()
1322 netdev_err(sdev->netdev, "failed to request irq: %u\n", err); in slic_init_iface()
1331 netdev_warn(sdev->netdev, in slic_init_iface()
1336 napi_disable(&sdev->napi); in slic_init_iface()
1375 napi_disable(&sdev->napi); in slic_close()
1380 free_irq(sdev->pdev->irq, sdev); in slic_close()
1393 slic_clear_upr_list(&sdev->upr_list); in slic_close()
1410 struct slic_tx_queue *txq = &sdev->txq; in slic_xmit()
1418 netdev_err(dev, "BUG! not enough tx LEs left: %u\n", in slic_xmit()
1424 paddr = dma_map_single(&sdev->pdev->dev, skb->data, maplen, in slic_xmit()
1426 if (dma_mapping_error(&sdev->pdev->dev, paddr)) { in slic_xmit()
1427 netdev_err(dev, "failed to map tx buffer\n"); in slic_xmit()
1431 buff = &txq->txbuffs[txq->put_idx]; in slic_xmit()
1432 buff->skb = skb; in slic_xmit()
1436 desc = buff->desc; in slic_xmit()
1437 desc->totlen = cpu_to_le32(maplen); in slic_xmit()
1438 desc->paddrl = cpu_to_le32(lower_32_bits(paddr)); in slic_xmit()
1439 desc->paddrh = cpu_to_le32(upper_32_bits(paddr)); in slic_xmit()
1440 desc->len = cpu_to_le32(maplen); in slic_xmit()
1442 txq->put_idx = slic_next_queue_idx(txq->put_idx, txq->len); in slic_xmit()
1444 cbar_val = lower_32_bits(buff->desc_paddr) | 1; in slic_xmit()
1464 struct slic_stats *stats = &sdev->stats; in slic_get_stats()
1466 SLIC_GET_STATS_COUNTER(lst->rx_packets, stats, rx_packets); in slic_get_stats()
1467 SLIC_GET_STATS_COUNTER(lst->tx_packets, stats, tx_packets); in slic_get_stats()
1468 SLIC_GET_STATS_COUNTER(lst->rx_bytes, stats, rx_bytes); in slic_get_stats()
1469 SLIC_GET_STATS_COUNTER(lst->tx_bytes, stats, tx_bytes); in slic_get_stats()
1470 SLIC_GET_STATS_COUNTER(lst->rx_errors, stats, rx_errors); in slic_get_stats()
1471 SLIC_GET_STATS_COUNTER(lst->rx_dropped, stats, rx_buff_miss); in slic_get_stats()
1472 SLIC_GET_STATS_COUNTER(lst->tx_dropped, stats, tx_dropped); in slic_get_stats()
1473 SLIC_GET_STATS_COUNTER(lst->multicast, stats, rx_mcasts); in slic_get_stats()
1474 SLIC_GET_STATS_COUNTER(lst->rx_over_errors, stats, rx_buffoflow); in slic_get_stats()
1475 SLIC_GET_STATS_COUNTER(lst->rx_crc_errors, stats, rx_crc); in slic_get_stats()
1476 SLIC_GET_STATS_COUNTER(lst->rx_fifo_errors, stats, rx_oflow802); in slic_get_stats()
1477 SLIC_GET_STATS_COUNTER(lst->tx_carrier_errors, stats, tx_carrier); in slic_get_stats()
1486 return -EOPNOTSUPP; in slic_get_sset_count()
1494 struct slic_stats *stats = &sdev->stats; in slic_get_ethtool_stats()
1532 strscpy(info->driver, DRV_NAME, sizeof(info->driver)); in slic_get_drvinfo()
1533 strscpy(info->bus_info, pci_name(sdev->pdev), sizeof(info->bus_info)); in slic_get_drvinfo()
1557 u32 csum = 0; in slic_eeprom_csum() local
1562 csum += le16_to_cpu(data); in slic_eeprom_csum()
1564 len -= 2; in slic_eeprom_csum()
1567 csum += *(u8 *)ptr; in slic_eeprom_csum()
1568 while (csum >> 16) in slic_eeprom_csum()
1569 csum = (csum & 0xFFFF) + ((csum >> 16) & 0xFFFF); in slic_eeprom_csum()
1570 return ~csum; in slic_eeprom_csum()
1579 __le16 csum; in slic_eeprom_valid() local
1587 size -= 2; in slic_eeprom_valid()
1588 memcpy(&csum, eeprom + size, sizeof(csum)); in slic_eeprom_valid()
1590 return (le16_to_cpu(csum) == slic_eeprom_csum(eeprom, size)); in slic_eeprom_valid()
1595 unsigned int devfn = PCI_FUNC(sdev->pdev->devfn); in slic_read_eeprom()
1596 struct slic_shmem *sm = &sdev->shmem; in slic_read_eeprom()
1597 struct slic_shmem_data *sm_data = sm->shmem_data; in slic_read_eeprom()
1607 eeprom = dma_alloc_coherent(&sdev->pdev->dev, SLIC_EEPROM_SIZE, in slic_read_eeprom()
1610 return -ENOMEM; in slic_read_eeprom()
1614 slic_write(sdev, SLIC_REG_ISP, lower_32_bits(sm->isr_paddr)); in slic_read_eeprom()
1619 if (le32_to_cpu(sm_data->isr) & SLIC_ISR_UPC) in slic_read_eeprom()
1624 dev_err(&sdev->pdev->dev, in slic_read_eeprom()
1626 err = -ETIMEDOUT; in slic_read_eeprom()
1639 if (sdev->model == SLIC_MODEL_OASIS) { in slic_read_eeprom()
1643 mac[0] = oee->mac; in slic_read_eeprom()
1644 mac[1] = oee->mac2; in slic_read_eeprom()
1645 codesize = le16_to_cpu(oee->eeprom_code_size); in slic_read_eeprom()
1650 mac[0] = mee->mac; in slic_read_eeprom()
1651 mac[1] = mee->mac2; in slic_read_eeprom()
1652 codesize = le16_to_cpu(mee->eeprom_code_size); in slic_read_eeprom()
1656 dev_err(&sdev->pdev->dev, "invalid checksum in eeprom\n"); in slic_read_eeprom()
1657 err = -EINVAL; in slic_read_eeprom()
1661 eth_hw_addr_set(sdev->netdev, mac[devfn]); in slic_read_eeprom()
1663 dma_free_coherent(&sdev->pdev->dev, SLIC_EEPROM_SIZE, eeprom, paddr); in slic_read_eeprom()
1672 spin_lock_init(&sdev->upper_lock); in slic_init()
1673 spin_lock_init(&sdev->link_lock); in slic_init()
1674 INIT_LIST_HEAD(&sdev->upr_list.list); in slic_init()
1675 spin_lock_init(&sdev->upr_list.lock); in slic_init()
1676 u64_stats_init(&sdev->stats.syncp); in slic_init()
1682 return dev_err_probe(&sdev->pdev->dev, err, in slic_init()
1688 return dev_err_probe(&sdev->pdev->dev, err, in slic_init()
1693 dev_err(&sdev->pdev->dev, "failed to read eeprom\n"); in slic_init()
1743 return dev_err_probe(&pdev->dev, err, in slic_probe()
1751 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); in slic_probe()
1753 dev_err(&pdev->dev, "failed to setup DMA\n"); in slic_probe()
1757 dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); in slic_probe()
1761 dev_err(&pdev->dev, "failed to obtain PCI regions\n"); in slic_probe()
1767 dev_err(&pdev->dev, "failed to alloc ethernet device\n"); in slic_probe()
1768 err = -ENOMEM; in slic_probe()
1772 SET_NETDEV_DEV(dev, &pdev->dev); in slic_probe()
1774 dev->irq = pdev->irq; in slic_probe()
1775 dev->netdev_ops = &slic_netdev_ops; in slic_probe()
1776 dev->hw_features = NETIF_F_RXCSUM; in slic_probe()
1777 dev->features |= dev->hw_features; in slic_probe()
1779 dev->ethtool_ops = &slic_ethtool_ops; in slic_probe()
1782 sdev->model = (pdev->device == PCI_DEVICE_ID_ALACRITECH_OASIS) ? in slic_probe()
1784 sdev->is_fiber = slic_is_fiber(pdev->subsystem_device); in slic_probe()
1785 sdev->pdev = pdev; in slic_probe()
1786 sdev->netdev = dev; in slic_probe()
1787 sdev->regs = ioremap(pci_resource_start(pdev, 0), in slic_probe()
1789 if (!sdev->regs) { in slic_probe()
1790 dev_err(&pdev->dev, "failed to map registers\n"); in slic_probe()
1791 err = -ENOMEM; in slic_probe()
1797 dev_err(&pdev->dev, "failed to initialize driver\n"); in slic_probe()
1801 netif_napi_add(dev, &sdev->napi, slic_poll); in slic_probe()
1806 dev_err(&pdev->dev, "failed to register net device: %i\n", err); in slic_probe()
1813 iounmap(sdev->regs); in slic_probe()
1830 iounmap(sdev->regs); in slic_remove()
1845 MODULE_DESCRIPTION("Alacritech non-accelerated SLIC driver");