diff options
Diffstat (limited to 'drivers/net/s2io.c')
-rw-r--r-- | drivers/net/s2io.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index a2b073097e5c..6a1375f9cbb8 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -371,9 +371,6 @@ static void s2io_vlan_rx_register(struct net_device *dev, | |||
371 | flags[i]); | 371 | flags[i]); |
372 | } | 372 | } |
373 | 373 | ||
374 | /* A flag indicating whether 'RX_PA_CFG_STRIP_VLAN_TAG' bit is set or not */ | ||
375 | static int vlan_strip_flag; | ||
376 | |||
377 | /* Unregister the vlan */ | 374 | /* Unregister the vlan */ |
378 | static void s2io_vlan_rx_kill_vid(struct net_device *dev, unsigned long vid) | 375 | static void s2io_vlan_rx_kill_vid(struct net_device *dev, unsigned long vid) |
379 | { | 376 | { |
@@ -2303,7 +2300,7 @@ static int start_nic(struct s2io_nic *nic) | |||
2303 | val64 = readq(&bar0->rx_pa_cfg); | 2300 | val64 = readq(&bar0->rx_pa_cfg); |
2304 | val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG; | 2301 | val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG; |
2305 | writeq(val64, &bar0->rx_pa_cfg); | 2302 | writeq(val64, &bar0->rx_pa_cfg); |
2306 | vlan_strip_flag = 0; | 2303 | nic->vlan_strip_flag = 0; |
2307 | } | 2304 | } |
2308 | 2305 | ||
2309 | /* | 2306 | /* |
@@ -3136,7 +3133,7 @@ static void tx_intr_handler(struct fifo_info *fifo_data) | |||
3136 | if (skb == NULL) { | 3133 | if (skb == NULL) { |
3137 | spin_unlock_irqrestore(&fifo_data->tx_lock, flags); | 3134 | spin_unlock_irqrestore(&fifo_data->tx_lock, flags); |
3138 | DBG_PRINT(ERR_DBG, "%s: Null skb ", | 3135 | DBG_PRINT(ERR_DBG, "%s: Null skb ", |
3139 | __FUNCTION__); | 3136 | __func__); |
3140 | DBG_PRINT(ERR_DBG, "in Tx Free Intr\n"); | 3137 | DBG_PRINT(ERR_DBG, "in Tx Free Intr\n"); |
3141 | return; | 3138 | return; |
3142 | } | 3139 | } |
@@ -3496,7 +3493,7 @@ static void s2io_reset(struct s2io_nic * sp) | |||
3496 | unsigned long long mem_alloc_cnt, mem_free_cnt, watchdog_cnt; | 3493 | unsigned long long mem_alloc_cnt, mem_free_cnt, watchdog_cnt; |
3497 | 3494 | ||
3498 | DBG_PRINT(INIT_DBG,"%s - Resetting XFrame card %s\n", | 3495 | DBG_PRINT(INIT_DBG,"%s - Resetting XFrame card %s\n", |
3499 | __FUNCTION__, sp->dev->name); | 3496 | __func__, sp->dev->name); |
3500 | 3497 | ||
3501 | /* Back up the PCI-X CMD reg, dont want to lose MMRBC, OST settings */ | 3498 | /* Back up the PCI-X CMD reg, dont want to lose MMRBC, OST settings */ |
3502 | pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd)); | 3499 | pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd)); |
@@ -3518,7 +3515,7 @@ static void s2io_reset(struct s2io_nic * sp) | |||
3518 | } | 3515 | } |
3519 | 3516 | ||
3520 | if (check_pci_device_id(val16) == (u16)PCI_ANY_ID) { | 3517 | if (check_pci_device_id(val16) == (u16)PCI_ANY_ID) { |
3521 | DBG_PRINT(ERR_DBG,"%s SW_Reset failed!\n", __FUNCTION__); | 3518 | DBG_PRINT(ERR_DBG,"%s SW_Reset failed!\n", __func__); |
3522 | } | 3519 | } |
3523 | 3520 | ||
3524 | pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd); | 3521 | pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd); |
@@ -3768,7 +3765,7 @@ static void restore_xmsi_data(struct s2io_nic *nic) | |||
3768 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6)); | 3765 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6)); |
3769 | writeq(val64, &bar0->xmsi_access); | 3766 | writeq(val64, &bar0->xmsi_access); |
3770 | if (wait_for_msix_trans(nic, msix_index)) { | 3767 | if (wait_for_msix_trans(nic, msix_index)) { |
3771 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3768 | DBG_PRINT(ERR_DBG, "failed in %s\n", __func__); |
3772 | continue; | 3769 | continue; |
3773 | } | 3770 | } |
3774 | } | 3771 | } |
@@ -3789,7 +3786,7 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
3789 | val64 = (s2BIT(15) | vBIT(msix_index, 26, 6)); | 3786 | val64 = (s2BIT(15) | vBIT(msix_index, 26, 6)); |
3790 | writeq(val64, &bar0->xmsi_access); | 3787 | writeq(val64, &bar0->xmsi_access); |
3791 | if (wait_for_msix_trans(nic, msix_index)) { | 3788 | if (wait_for_msix_trans(nic, msix_index)) { |
3792 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3789 | DBG_PRINT(ERR_DBG, "failed in %s\n", __func__); |
3793 | continue; | 3790 | continue; |
3794 | } | 3791 | } |
3795 | addr = readq(&bar0->xmsi_address); | 3792 | addr = readq(&bar0->xmsi_address); |
@@ -3812,7 +3809,7 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
3812 | GFP_KERNEL); | 3809 | GFP_KERNEL); |
3813 | if (!nic->entries) { | 3810 | if (!nic->entries) { |
3814 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ | 3811 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ |
3815 | __FUNCTION__); | 3812 | __func__); |
3816 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; | 3813 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; |
3817 | return -ENOMEM; | 3814 | return -ENOMEM; |
3818 | } | 3815 | } |
@@ -3826,7 +3823,7 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
3826 | GFP_KERNEL); | 3823 | GFP_KERNEL); |
3827 | if (!nic->s2io_entries) { | 3824 | if (!nic->s2io_entries) { |
3828 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", | 3825 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", |
3829 | __FUNCTION__); | 3826 | __func__); |
3830 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; | 3827 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; |
3831 | kfree(nic->entries); | 3828 | kfree(nic->entries); |
3832 | nic->mac_control.stats_info->sw_stat.mem_freed | 3829 | nic->mac_control.stats_info->sw_stat.mem_freed |
@@ -5010,7 +5007,7 @@ static void s2io_set_multicast(struct net_device *dev) | |||
5010 | val64 = readq(&bar0->rx_pa_cfg); | 5007 | val64 = readq(&bar0->rx_pa_cfg); |
5011 | val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG; | 5008 | val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG; |
5012 | writeq(val64, &bar0->rx_pa_cfg); | 5009 | writeq(val64, &bar0->rx_pa_cfg); |
5013 | vlan_strip_flag = 0; | 5010 | sp->vlan_strip_flag = 0; |
5014 | } | 5011 | } |
5015 | 5012 | ||
5016 | val64 = readq(&bar0->mac_cfg); | 5013 | val64 = readq(&bar0->mac_cfg); |
@@ -5032,7 +5029,7 @@ static void s2io_set_multicast(struct net_device *dev) | |||
5032 | val64 = readq(&bar0->rx_pa_cfg); | 5029 | val64 = readq(&bar0->rx_pa_cfg); |
5033 | val64 |= RX_PA_CFG_STRIP_VLAN_TAG; | 5030 | val64 |= RX_PA_CFG_STRIP_VLAN_TAG; |
5034 | writeq(val64, &bar0->rx_pa_cfg); | 5031 | writeq(val64, &bar0->rx_pa_cfg); |
5035 | vlan_strip_flag = 1; | 5032 | sp->vlan_strip_flag = 1; |
5036 | } | 5033 | } |
5037 | 5034 | ||
5038 | val64 = readq(&bar0->mac_cfg); | 5035 | val64 = readq(&bar0->mac_cfg); |
@@ -6746,7 +6743,7 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu) | |||
6746 | ret = s2io_card_up(sp); | 6743 | ret = s2io_card_up(sp); |
6747 | if (ret) { | 6744 | if (ret) { |
6748 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", | 6745 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", |
6749 | __FUNCTION__); | 6746 | __func__); |
6750 | return ret; | 6747 | return ret; |
6751 | } | 6748 | } |
6752 | s2io_wake_all_tx_queue(sp); | 6749 | s2io_wake_all_tx_queue(sp); |
@@ -7530,7 +7527,7 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp) | |||
7530 | default: | 7527 | default: |
7531 | DBG_PRINT(ERR_DBG, | 7528 | DBG_PRINT(ERR_DBG, |
7532 | "%s: Samadhana!!\n", | 7529 | "%s: Samadhana!!\n", |
7533 | __FUNCTION__); | 7530 | __func__); |
7534 | BUG(); | 7531 | BUG(); |
7535 | } | 7532 | } |
7536 | } | 7533 | } |
@@ -7781,7 +7778,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
7781 | return -ENOMEM; | 7778 | return -ENOMEM; |
7782 | } | 7779 | } |
7783 | if ((ret = pci_request_regions(pdev, s2io_driver_name))) { | 7780 | if ((ret = pci_request_regions(pdev, s2io_driver_name))) { |
7784 | DBG_PRINT(ERR_DBG, "%s: Request Regions failed - %x \n", __FUNCTION__, ret); | 7781 | DBG_PRINT(ERR_DBG, "%s: Request Regions failed - %x \n", __func__, ret); |
7785 | pci_disable_device(pdev); | 7782 | pci_disable_device(pdev); |
7786 | return -ENODEV; | 7783 | return -ENODEV; |
7787 | } | 7784 | } |
@@ -7998,7 +7995,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
7998 | if (sp->device_type & XFRAME_II_DEVICE) { | 7995 | if (sp->device_type & XFRAME_II_DEVICE) { |
7999 | mode = s2io_verify_pci_mode(sp); | 7996 | mode = s2io_verify_pci_mode(sp); |
8000 | if (mode < 0) { | 7997 | if (mode < 0) { |
8001 | DBG_PRINT(ERR_DBG, "%s: ", __FUNCTION__); | 7998 | DBG_PRINT(ERR_DBG, "%s: ", __func__); |
8002 | DBG_PRINT(ERR_DBG, " Unsupported PCI bus mode\n"); | 7999 | DBG_PRINT(ERR_DBG, " Unsupported PCI bus mode\n"); |
8003 | ret = -EBADSLT; | 8000 | ret = -EBADSLT; |
8004 | goto set_swap_failed; | 8001 | goto set_swap_failed; |
@@ -8175,8 +8172,8 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
8175 | break; | 8172 | break; |
8176 | } | 8173 | } |
8177 | if (sp->config.multiq) { | 8174 | if (sp->config.multiq) { |
8178 | for (i = 0; i < sp->config.tx_fifo_num; i++) | 8175 | for (i = 0; i < sp->config.tx_fifo_num; i++) |
8179 | mac_control->fifos[i].multiq = config->multiq; | 8176 | mac_control->fifos[i].multiq = config->multiq; |
8180 | DBG_PRINT(ERR_DBG, "%s: Multiqueue support enabled\n", | 8177 | DBG_PRINT(ERR_DBG, "%s: Multiqueue support enabled\n", |
8181 | dev->name); | 8178 | dev->name); |
8182 | } else | 8179 | } else |
@@ -8206,6 +8203,11 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
8206 | /* Initialize device name */ | 8203 | /* Initialize device name */ |
8207 | sprintf(sp->name, "%s Neterion %s", dev->name, sp->product_name); | 8204 | sprintf(sp->name, "%s Neterion %s", dev->name, sp->product_name); |
8208 | 8205 | ||
8206 | if (vlan_tag_strip) | ||
8207 | sp->vlan_strip_flag = 1; | ||
8208 | else | ||
8209 | sp->vlan_strip_flag = 0; | ||
8210 | |||
8209 | /* | 8211 | /* |
8210 | * Make Link state as off at this point, when the Link change | 8212 | * Make Link state as off at this point, when the Link change |
8211 | * interrupt comes the state will be automatically changed to | 8213 | * interrupt comes the state will be automatically changed to |
@@ -8299,7 +8301,7 @@ static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip, | |||
8299 | 8301 | ||
8300 | if (!(rxdp->Control_1 & RXD_FRAME_PROTO_TCP)) { | 8302 | if (!(rxdp->Control_1 & RXD_FRAME_PROTO_TCP)) { |
8301 | DBG_PRINT(INIT_DBG,"%s: Non-TCP frames not supported for LRO\n", | 8303 | DBG_PRINT(INIT_DBG,"%s: Non-TCP frames not supported for LRO\n", |
8302 | __FUNCTION__); | 8304 | __func__); |
8303 | return -1; | 8305 | return -1; |
8304 | } | 8306 | } |
8305 | 8307 | ||
@@ -8311,7 +8313,7 @@ static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip, | |||
8311 | * If vlan stripping is disabled and the frame is VLAN tagged, | 8313 | * If vlan stripping is disabled and the frame is VLAN tagged, |
8312 | * shift the offset by the VLAN header size bytes. | 8314 | * shift the offset by the VLAN header size bytes. |
8313 | */ | 8315 | */ |
8314 | if ((!vlan_strip_flag) && | 8316 | if ((!sp->vlan_strip_flag) && |
8315 | (rxdp->Control_1 & RXD_FRAME_VLAN_TAG)) | 8317 | (rxdp->Control_1 & RXD_FRAME_VLAN_TAG)) |
8316 | ip_off += HEADER_VLAN_SIZE; | 8318 | ip_off += HEADER_VLAN_SIZE; |
8317 | } else { | 8319 | } else { |
@@ -8330,7 +8332,7 @@ static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip, | |||
8330 | static int check_for_socket_match(struct lro *lro, struct iphdr *ip, | 8332 | static int check_for_socket_match(struct lro *lro, struct iphdr *ip, |
8331 | struct tcphdr *tcp) | 8333 | struct tcphdr *tcp) |
8332 | { | 8334 | { |
8333 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __FUNCTION__); | 8335 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __func__); |
8334 | if ((lro->iph->saddr != ip->saddr) || (lro->iph->daddr != ip->daddr) || | 8336 | if ((lro->iph->saddr != ip->saddr) || (lro->iph->daddr != ip->daddr) || |
8335 | (lro->tcph->source != tcp->source) || (lro->tcph->dest != tcp->dest)) | 8337 | (lro->tcph->source != tcp->source) || (lro->tcph->dest != tcp->dest)) |
8336 | return -1; | 8338 | return -1; |
@@ -8345,7 +8347,7 @@ static inline int get_l4_pyld_length(struct iphdr *ip, struct tcphdr *tcp) | |||
8345 | static void initiate_new_session(struct lro *lro, u8 *l2h, | 8347 | static void initiate_new_session(struct lro *lro, u8 *l2h, |
8346 | struct iphdr *ip, struct tcphdr *tcp, u32 tcp_pyld_len, u16 vlan_tag) | 8348 | struct iphdr *ip, struct tcphdr *tcp, u32 tcp_pyld_len, u16 vlan_tag) |
8347 | { | 8349 | { |
8348 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __FUNCTION__); | 8350 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __func__); |
8349 | lro->l2h = l2h; | 8351 | lro->l2h = l2h; |
8350 | lro->iph = ip; | 8352 | lro->iph = ip; |
8351 | lro->tcph = tcp; | 8353 | lro->tcph = tcp; |
@@ -8375,7 +8377,7 @@ static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro) | |||
8375 | struct tcphdr *tcp = lro->tcph; | 8377 | struct tcphdr *tcp = lro->tcph; |
8376 | __sum16 nchk; | 8378 | __sum16 nchk; |
8377 | struct stat_block *statinfo = sp->mac_control.stats_info; | 8379 | struct stat_block *statinfo = sp->mac_control.stats_info; |
8378 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __FUNCTION__); | 8380 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __func__); |
8379 | 8381 | ||
8380 | /* Update L3 header */ | 8382 | /* Update L3 header */ |
8381 | ip->tot_len = htons(lro->total_len); | 8383 | ip->tot_len = htons(lro->total_len); |
@@ -8403,7 +8405,7 @@ static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro) | |||
8403 | static void aggregate_new_rx(struct lro *lro, struct iphdr *ip, | 8405 | static void aggregate_new_rx(struct lro *lro, struct iphdr *ip, |
8404 | struct tcphdr *tcp, u32 l4_pyld) | 8406 | struct tcphdr *tcp, u32 l4_pyld) |
8405 | { | 8407 | { |
8406 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __FUNCTION__); | 8408 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __func__); |
8407 | lro->total_len += l4_pyld; | 8409 | lro->total_len += l4_pyld; |
8408 | lro->frags_len += l4_pyld; | 8410 | lro->frags_len += l4_pyld; |
8409 | lro->tcp_next_seq += l4_pyld; | 8411 | lro->tcp_next_seq += l4_pyld; |
@@ -8427,7 +8429,7 @@ static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip, | |||
8427 | { | 8429 | { |
8428 | u8 *ptr; | 8430 | u8 *ptr; |
8429 | 8431 | ||
8430 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __FUNCTION__); | 8432 | DBG_PRINT(INFO_DBG,"%s: Been here...\n", __func__); |
8431 | 8433 | ||
8432 | if (!tcp_pyld_len) { | 8434 | if (!tcp_pyld_len) { |
8433 | /* Runt frame or a pure ack */ | 8435 | /* Runt frame or a pure ack */ |
@@ -8509,7 +8511,7 @@ s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer, u8 **tcp, | |||
8509 | 8511 | ||
8510 | if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) { | 8512 | if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) { |
8511 | DBG_PRINT(INFO_DBG, "%s:Out of order. expected " | 8513 | DBG_PRINT(INFO_DBG, "%s:Out of order. expected " |
8512 | "0x%x, actual 0x%x\n", __FUNCTION__, | 8514 | "0x%x, actual 0x%x\n", __func__, |
8513 | (*lro)->tcp_next_seq, | 8515 | (*lro)->tcp_next_seq, |
8514 | ntohl(tcph->seq)); | 8516 | ntohl(tcph->seq)); |
8515 | 8517 | ||
@@ -8549,7 +8551,7 @@ s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer, u8 **tcp, | |||
8549 | 8551 | ||
8550 | if (ret == 0) { /* sessions exceeded */ | 8552 | if (ret == 0) { /* sessions exceeded */ |
8551 | DBG_PRINT(INFO_DBG,"%s:All LRO sessions already in use\n", | 8553 | DBG_PRINT(INFO_DBG,"%s:All LRO sessions already in use\n", |
8552 | __FUNCTION__); | 8554 | __func__); |
8553 | *lro = NULL; | 8555 | *lro = NULL; |
8554 | return ret; | 8556 | return ret; |
8555 | } | 8557 | } |
@@ -8571,7 +8573,7 @@ s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer, u8 **tcp, | |||
8571 | break; | 8573 | break; |
8572 | default: | 8574 | default: |
8573 | DBG_PRINT(ERR_DBG,"%s:Dont know, can't say!!\n", | 8575 | DBG_PRINT(ERR_DBG,"%s:Dont know, can't say!!\n", |
8574 | __FUNCTION__); | 8576 | __func__); |
8575 | break; | 8577 | break; |
8576 | } | 8578 | } |
8577 | 8579 | ||
@@ -8592,7 +8594,7 @@ static void queue_rx_frame(struct sk_buff *skb, u16 vlan_tag) | |||
8592 | 8594 | ||
8593 | skb->protocol = eth_type_trans(skb, dev); | 8595 | skb->protocol = eth_type_trans(skb, dev); |
8594 | if (sp->vlgrp && vlan_tag | 8596 | if (sp->vlgrp && vlan_tag |
8595 | && (vlan_strip_flag)) { | 8597 | && (sp->vlan_strip_flag)) { |
8596 | /* Queueing the vlan frame to the upper layer */ | 8598 | /* Queueing the vlan frame to the upper layer */ |
8597 | if (sp->config.napi) | 8599 | if (sp->config.napi) |
8598 | vlan_hwaccel_receive_skb(skb, sp->vlgrp, vlan_tag); | 8600 | vlan_hwaccel_receive_skb(skb, sp->vlgrp, vlan_tag); |