···1172117211731173config NE200011741174 tristate "NE2000/NE1000 support"11751175- depends on NET_ISA || (Q40 && m) || M32R || TOSHIBA_RBTX4927 || TOSHIBA_RBTX493811751175+ depends on NET_ISA || (Q40 && m) || M32R || MACH_TX49XX11761176 select CRC3211771177 ---help---11781178 If you have a network (Ethernet) card of this type, say Y and read
···510510 netdev_alloc_skb(netdev, length + NET_IP_ALIGN);511511 if (new_skb) {512512 skb_reserve(new_skb, NET_IP_ALIGN);513513- memcpy(new_skb->data - NET_IP_ALIGN,514514- skb->data - NET_IP_ALIGN,515515- length + NET_IP_ALIGN);513513+ skb_copy_to_linear_data_offset(new_skb,514514+ -NET_IP_ALIGN,515515+ (skb->data -516516+ NET_IP_ALIGN),517517+ (length +518518+ NET_IP_ALIGN));516519 /* save the skb in buffer_info as good */517520 buffer_info->skb = skb;518521 skb = new_skb;···12361233 return IRQ_HANDLED;12371234}1238123512361236+/**12371237+ * e1000_request_irq - initialize interrupts12381238+ *12391239+ * Attempts to configure interrupts using the best available12401240+ * capabilities of the hardware and kernel.12411241+ **/12391242static int e1000_request_irq(struct e1000_adapter *adapter)12401243{12411244 struct net_device *netdev = adapter->netdev;12421242- irq_handler_t handler = e1000_intr;12431245 int irq_flags = IRQF_SHARED;12441246 int err;1245124712461246- if (!pci_enable_msi(adapter->pdev)) {12471247- adapter->flags |= FLAG_MSI_ENABLED;12481248- handler = e1000_intr_msi;12491249- irq_flags = 0;12481248+ if (!(adapter->flags & FLAG_MSI_TEST_FAILED)) {12491249+ err = pci_enable_msi(adapter->pdev);12501250+ if (!err) {12511251+ adapter->flags |= FLAG_MSI_ENABLED;12521252+ irq_flags = 0;12531253+ }12501254 }1251125512521252- err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name,12531253- netdev);12561256+ err = request_irq(adapter->pdev->irq,12571257+ ((adapter->flags & FLAG_MSI_ENABLED) ?12581258+ &e1000_intr_msi : &e1000_intr),12591259+ irq_flags, netdev->name, netdev);12541260 if (err) {12551255- e_err("Unable to allocate %s interrupt (return: %d)\n",12561256- adapter->flags & FLAG_MSI_ENABLED ? "MSI":"INTx", err);12571257- if (adapter->flags & FLAG_MSI_ENABLED)12611261+ if (adapter->flags & FLAG_MSI_ENABLED) {12581262 pci_disable_msi(adapter->pdev);12631263+ adapter->flags &= ~FLAG_MSI_ENABLED;12641264+ }12651265+ e_err("Unable to allocate interrupt, Error: %d\n", err);12591266 }1260126712611268 return err;···26052592}2606259326072594/**25952595+ * e1000_intr_msi_test - Interrupt Handler25962596+ * @irq: interrupt number25972597+ * @data: pointer to a network interface device structure25982598+ **/25992599+static irqreturn_t e1000_intr_msi_test(int irq, void *data)26002600+{26012601+ struct net_device *netdev = data;26022602+ struct e1000_adapter *adapter = netdev_priv(netdev);26032603+ struct e1000_hw *hw = &adapter->hw;26042604+ u32 icr = er32(ICR);26052605+26062606+ e_dbg("%s: icr is %08X\n", netdev->name, icr);26072607+ if (icr & E1000_ICR_RXSEQ) {26082608+ adapter->flags &= ~FLAG_MSI_TEST_FAILED;26092609+ wmb();26102610+ }26112611+26122612+ return IRQ_HANDLED;26132613+}26142614+26152615+/**26162616+ * e1000_test_msi_interrupt - Returns 0 for successful test26172617+ * @adapter: board private struct26182618+ *26192619+ * code flow taken from tg3.c26202620+ **/26212621+static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)26222622+{26232623+ struct net_device *netdev = adapter->netdev;26242624+ struct e1000_hw *hw = &adapter->hw;26252625+ int err;26262626+26272627+ /* poll_enable hasn't been called yet, so don't need disable */26282628+ /* clear any pending events */26292629+ er32(ICR);26302630+26312631+ /* free the real vector and request a test handler */26322632+ e1000_free_irq(adapter);26332633+26342634+ /* Assume that the test fails, if it succeeds then the test26352635+ * MSI irq handler will unset this flag */26362636+ adapter->flags |= FLAG_MSI_TEST_FAILED;26372637+26382638+ err = pci_enable_msi(adapter->pdev);26392639+ if (err)26402640+ goto msi_test_failed;26412641+26422642+ err = request_irq(adapter->pdev->irq, &e1000_intr_msi_test, 0,26432643+ netdev->name, netdev);26442644+ if (err) {26452645+ pci_disable_msi(adapter->pdev);26462646+ goto msi_test_failed;26472647+ }26482648+26492649+ wmb();26502650+26512651+ e1000_irq_enable(adapter);26522652+26532653+ /* fire an unusual interrupt on the test handler */26542654+ ew32(ICS, E1000_ICS_RXSEQ);26552655+ e1e_flush();26562656+ msleep(50);26572657+26582658+ e1000_irq_disable(adapter);26592659+26602660+ rmb();26612661+26622662+ if (adapter->flags & FLAG_MSI_TEST_FAILED) {26632663+ err = -EIO;26642664+ e_info("MSI interrupt test failed!\n");26652665+ }26662666+26672667+ free_irq(adapter->pdev->irq, netdev);26682668+ pci_disable_msi(adapter->pdev);26692669+26702670+ if (err == -EIO)26712671+ goto msi_test_failed;26722672+26732673+ /* okay so the test worked, restore settings */26742674+ e_dbg("%s: MSI interrupt test succeeded!\n", netdev->name);26752675+msi_test_failed:26762676+ /* restore the original vector, even if it failed */26772677+ e1000_request_irq(adapter);26782678+ return err;26792679+}26802680+26812681+/**26822682+ * e1000_test_msi - Returns 0 if MSI test succeeds or INTx mode is restored26832683+ * @adapter: board private struct26842684+ *26852685+ * code flow taken from tg3.c, called with e1000 interrupts disabled.26862686+ **/26872687+static int e1000_test_msi(struct e1000_adapter *adapter)26882688+{26892689+ int err;26902690+ u16 pci_cmd;26912691+26922692+ if (!(adapter->flags & FLAG_MSI_ENABLED))26932693+ return 0;26942694+26952695+ /* disable SERR in case the MSI write causes a master abort */26962696+ pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd);26972697+ pci_write_config_word(adapter->pdev, PCI_COMMAND,26982698+ pci_cmd & ~PCI_COMMAND_SERR);26992699+27002700+ err = e1000_test_msi_interrupt(adapter);27012701+27022702+ /* restore previous setting of command word */27032703+ pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd);27042704+27052705+ /* success ! */27062706+ if (!err)27072707+ return 0;27082708+27092709+ /* EIO means MSI test failed */27102710+ if (err != -EIO)27112711+ return err;27122712+27132713+ /* back to INTx mode */27142714+ e_warn("MSI interrupt test failed, using legacy interrupt.\n");27152715+27162716+ e1000_free_irq(adapter);27172717+27182718+ err = e1000_request_irq(adapter);27192719+27202720+ return err;27212721+}27222722+27232723+/**26082724 * e1000_open - Called when a network interface is made active26092725 * @netdev: network interface device structure26102726 *···27902648 err = e1000_request_irq(adapter);27912649 if (err)27922650 goto err_req_irq;26512651+26522652+ /*26532653+ * Work around PCIe errata with MSI interrupts causing some chipsets to26542654+ * ignore e1000e MSI messages, which means we need to test our MSI26552655+ * interrupt now26562656+ */26572657+ {26582658+ err = e1000_test_msi(adapter);26592659+ if (err) {26602660+ e_err("Interrupt allocation failed\n");26612661+ goto err_req_irq;26622662+ }26632663+ }2793266427942665 /* From here on the code is the same as e1000e_up() */27952666 clear_bit(__E1000_DOWN, &adapter->state);···32103055 case SPEED_10:32113056 txb2b = 0;32123057 netdev->tx_queue_len = 10;32133213- adapter->tx_timeout_factor = 14;30583058+ adapter->tx_timeout_factor = 16;32143059 break;32153060 case SPEED_100:32163061 txb2b = 0;···38763721 struct e1000_adapter *adapter = netdev_priv(netdev);38773722 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;3878372338793879- if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) ||37243724+ if ((new_mtu < ETH_ZLEN + ETH_FCS_LEN + VLAN_HLEN) ||38803725 (max_frame > MAX_JUMBO_FRAME_SIZE)) {38813726 e_err("Invalid MTU setting\n");38823727 return -EINVAL;
+19-6
drivers/net/e1000e/param.c
···324324 adapter->itr = 20000;325325 break;326326 default:327327- e1000_validate_option(&adapter->itr, &opt,328328- adapter);329327 /*330330- * save the setting, because the dynamic bits331331- * change itr. clear the lower two bits332332- * because they are used as control328328+ * Save the setting, because the dynamic bits329329+ * change itr.333330 */334334- adapter->itr_setting = adapter->itr & ~3;331331+ if (e1000_validate_option(&adapter->itr, &opt,332332+ adapter) &&333333+ (adapter->itr == 3)) {334334+ /*335335+ * In case of invalid user value,336336+ * default to conservative mode.337337+ */338338+ adapter->itr_setting = adapter->itr;339339+ adapter->itr = 20000;340340+ } else {341341+ /*342342+ * Clear the lower two bits because343343+ * they are used as control.344344+ */345345+ adapter->itr_setting =346346+ adapter->itr & ~3;347347+ }335348 break;336349 }337350 } else {
+2-4
drivers/net/gianfar.c
···134134static void gfar_vlan_rx_register(struct net_device *netdev,135135 struct vlan_group *grp);136136void gfar_halt(struct net_device *dev);137137-#ifdef CONFIG_PM138137static void gfar_halt_nodisable(struct net_device *dev);139139-#endif140138void gfar_start(struct net_device *dev);141139static void gfar_clear_exact_match(struct net_device *dev);142140static void gfar_set_mac_for_addr(struct net_device *dev, int num, u8 *addr);···629631}630632631633632632-#ifdef CONFIG_PM633634/* Halt the receive and transmit queues */634635static void gfar_halt_nodisable(struct net_device *dev)635636{···654657 cpu_relax();655658 }656659}657657-#endif658660659661/* Halt the receive and transmit queues */660662void gfar_halt(struct net_device *dev)···661665 struct gfar_private *priv = netdev_priv(dev);662666 struct gfar __iomem *regs = priv->regs;663667 u32 tempval;668668+669669+ gfar_halt_nodisable(dev);664670665671 /* Disable Rx and Tx */666672 tempval = gfar_read(®s->maccfg1);
···190190 case IXGBE_DEV_ID_82598AF_DUAL_PORT:191191 case IXGBE_DEV_ID_82598AF_SINGLE_PORT:192192 case IXGBE_DEV_ID_82598EB_CX4:193193+ case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:193194 media_type = ixgbe_media_type_fiber;194195 break;195196 case IXGBE_DEV_ID_82598AT_DUAL_PORT:
···1079107910801080void netxen_free_adapter_offload(struct netxen_adapter *adapter)10811081{10821082- int i;10821082+ int i = 100;1083108310841084- if (adapter->dummy_dma.addr) {10851085- i = 100;10841084+ if (!adapter->dummy_dma.addr)10851085+ return;10861086+10871087+ if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {10861088 do {10871089 if (dma_watchdog_shutdown_request(adapter) == 1)10881090 break;···10921090 if (dma_watchdog_shutdown_poll_result(adapter) == 1)10931091 break;10941092 } while (--i);10931093+ }1095109410961096- if (i) {10971097- pci_free_consistent(adapter->pdev,10981098- NETXEN_HOST_DUMMY_DMA_SIZE,10991099- adapter->dummy_dma.addr,11001100- adapter->dummy_dma.phys_addr);11011101- adapter->dummy_dma.addr = NULL;11021102- } else {11031103- printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",11041104- adapter->netdev->name);11051105- }10951095+ if (i) {10961096+ pci_free_consistent(adapter->pdev,10971097+ NETXEN_HOST_DUMMY_DMA_SIZE,10981098+ adapter->dummy_dma.addr,10991099+ adapter->dummy_dma.phys_addr);11001100+ adapter->dummy_dma.addr = NULL;11011101+ } else {11021102+ printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",11031103+ adapter->netdev->name);11061104 }11071105}11081106
+96-114
drivers/net/netxen/netxen_nic_main.c
···149149150150static struct netxen_legacy_intr_set legacy_intr[] = NX_LEGACY_INTR_CONFIG;151151152152-static void netxen_nic_disable_int(struct netxen_adapter *adapter)152152+static inline void netxen_nic_disable_int(struct netxen_adapter *adapter)153153{154154- u32 mask = 0x7ff;155155- int retries = 32;156156- int pci_fn = adapter->ahw.pci_func;157157-158158- if (adapter->msi_mode != MSI_MODE_MULTIFUNC)159159- adapter->pci_write_normalize(adapter,160160- adapter->crb_intr_mask, 0);161161-162162- if (adapter->intr_scheme != -1 &&163163- adapter->intr_scheme != INTR_SCHEME_PERPORT)164164- adapter->pci_write_immediate(adapter, ISR_INT_MASK, mask);165165-166166- if (!NETXEN_IS_MSI_FAMILY(adapter)) {167167- do {168168- adapter->pci_write_immediate(adapter,169169- adapter->legacy_intr.tgt_status_reg,170170- 0xffffffff);171171- mask = adapter->pci_read_immediate(adapter,172172- ISR_INT_VECTOR);173173- if (!(mask & 0x80))174174- break;175175- udelay(10);176176- } while (--retries);177177-178178- if (!retries) {179179- printk(KERN_NOTICE "%s: Failed to disable interrupt\n",180180- netxen_nic_driver_name);181181- }182182- } else {183183- if (adapter->msi_mode == MSI_MODE_MULTIFUNC) {184184- adapter->pci_write_immediate(adapter,185185- msi_tgt_status[pci_fn], 0xffffffff);186186- }187187- }154154+ adapter->pci_write_normalize(adapter, adapter->crb_intr_mask, 0);188155}189156190190-static void netxen_nic_enable_int(struct netxen_adapter *adapter)157157+static inline void netxen_nic_enable_int(struct netxen_adapter *adapter)191158{192192- u32 mask;193193-194194- if (adapter->intr_scheme != -1 &&195195- adapter->intr_scheme != INTR_SCHEME_PERPORT) {196196- switch (adapter->ahw.board_type) {197197- case NETXEN_NIC_GBE:198198- mask = 0x77b;199199- break;200200- case NETXEN_NIC_XGBE:201201- mask = 0x77f;202202- break;203203- default:204204- mask = 0x7ff;205205- break;206206- }207207-208208- adapter->pci_write_immediate(adapter, ISR_INT_MASK, mask);209209- }210210-211159 adapter->pci_write_normalize(adapter, adapter->crb_intr_mask, 0x1);212160213213- if (!NETXEN_IS_MSI_FAMILY(adapter)) {214214- mask = 0xbff;215215- if (adapter->intr_scheme == INTR_SCHEME_PERPORT)216216- adapter->pci_write_immediate(adapter,217217- adapter->legacy_intr.tgt_mask_reg, mask);218218- else219219- adapter->pci_write_normalize(adapter,220220- CRB_INT_VECTOR, 0);221221- }161161+ if (!NETXEN_IS_MSI_FAMILY(adapter))162162+ adapter->pci_write_immediate(adapter,163163+ adapter->legacy_intr.tgt_mask_reg, 0xfbff);222164}223165224166static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id)···443501 adapter->msix_entries[i].entry = i;444502}445503504504+static int505505+netxen_read_mac_addr(struct netxen_adapter *adapter)506506+{507507+ int i;508508+ unsigned char *p;509509+ __le64 mac_addr;510510+ DECLARE_MAC_BUF(mac);511511+ struct net_device *netdev = adapter->netdev;512512+ struct pci_dev *pdev = adapter->pdev;513513+514514+ if (netxen_is_flash_supported(adapter) != 0)515515+ return -EIO;516516+517517+ if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {518518+ if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0)519519+ return -EIO;520520+ } else {521521+ if (netxen_get_flash_mac_addr(adapter, &mac_addr) != 0)522522+ return -EIO;523523+ }524524+525525+ p = (unsigned char *)&mac_addr;526526+ for (i = 0; i < 6; i++)527527+ netdev->dev_addr[i] = *(p + 5 - i);528528+529529+ memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);530530+531531+ /* set station address */532532+533533+ if (!is_valid_ether_addr(netdev->perm_addr)) {534534+ dev_warn(&pdev->dev, "Bad MAC address %s.\n",535535+ print_mac(mac, netdev->dev_addr));536536+ } else537537+ adapter->macaddr_set(adapter, netdev->dev_addr);538538+539539+ return 0;540540+}541541+446542/*447543 * netxen_nic_probe()448544 *···509529 unsigned long mem_base, mem_len, db_base, db_len, pci_len0 = 0;510530 int i = 0, err;511531 int first_driver, first_boot;512512- __le64 mac_addr[FLASH_NUM_PORTS + 1];513532 u32 val;514533 int pci_func_id = PCI_FUNC(pdev->devfn);515515- DECLARE_MAC_BUF(mac);516534 struct netxen_legacy_intr_set *legacy_intrp;517535 uint8_t revision_id;518536···520542 if (pdev->class != 0x020000) {521543 printk(KERN_DEBUG "NetXen function %d, class %x will not "522544 "be enabled.\n",pci_func_id, pdev->class);545545+ return -ENODEV;546546+ }547547+548548+ if (pdev->revision >= NX_P3_A0 && pdev->revision < NX_P3_B1) {549549+ printk(KERN_WARNING "NetXen chip revisions between 0x%x-0x%x"550550+ "will not be enabled.\n",551551+ NX_P3_A0, NX_P3_B1);523552 return -ENODEV;524553 }525554···883898 goto err_out_disable_msi;884899885900 init_timer(&adapter->watchdog_timer);886886- adapter->ahw.linkup = 0;887901 adapter->watchdog_timer.function = &netxen_watchdog;888902 adapter->watchdog_timer.data = (unsigned long)adapter;889903 INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task);890904 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task);891905892892- if (netxen_is_flash_supported(adapter) == 0 &&893893- netxen_get_flash_mac_addr(adapter, mac_addr) == 0) {894894- unsigned char *p;895895-896896- p = (unsigned char *)&mac_addr[adapter->portnum];897897- netdev->dev_addr[0] = *(p + 5);898898- netdev->dev_addr[1] = *(p + 4);899899- netdev->dev_addr[2] = *(p + 3);900900- netdev->dev_addr[3] = *(p + 2);901901- netdev->dev_addr[4] = *(p + 1);902902- netdev->dev_addr[5] = *(p + 0);903903-904904- memcpy(netdev->perm_addr, netdev->dev_addr,905905- netdev->addr_len);906906- if (!is_valid_ether_addr(netdev->perm_addr)) {907907- printk(KERN_ERR "%s: Bad MAC address %s.\n",908908- netxen_nic_driver_name,909909- print_mac(mac, netdev->dev_addr));910910- } else {911911- adapter->macaddr_set(adapter, netdev->dev_addr);912912- }913913- }906906+ err = netxen_read_mac_addr(adapter);907907+ if (err)908908+ dev_warn(&pdev->dev, "failed to read mac addr\n");914909915910 netif_carrier_off(netdev);916911 netif_stop_queue(netdev);···96510009661001 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {9671002 netxen_free_hw_resources(adapter);10031003+ netxen_release_rx_buffers(adapter);9681004 netxen_free_sw_resources(adapter);9691005 }9701006···10351069 goto err_out_free_sw;10361070 }1037107110721072+ if ((adapter->msi_mode != MSI_MODE_MULTIFUNC) ||10731073+ (adapter->intr_scheme != INTR_SCHEME_PERPORT)) {10741074+ printk(KERN_ERR "%s: Firmware interrupt scheme is "10751075+ "incompatible with driver\n",10761076+ netdev->name);10771077+ adapter->driver_mismatch = 1;10781078+ goto err_out_free_hw;10791079+ }10801080+10381081 if (adapter->fw_major < 4) {10391082 adapter->crb_addr_cmd_producer =10401083 crb_cmd_producer[adapter->portnum];···10691094 flags, netdev->name, adapter);10701095 if (err) {10711096 printk(KERN_ERR "request_irq failed with: %d\n", err);10721072- goto err_out_free_hw;10971097+ goto err_out_free_rxbuf;10731098 }1074109910751100 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC;···10911116 if (adapter->set_mtu)10921117 adapter->set_mtu(adapter, netdev->mtu);1093111811191119+ adapter->ahw.linkup = 0;10941120 mod_timer(&adapter->watchdog_timer, jiffies);1095112110961122 napi_enable(&adapter->napi);···1103112711041128err_out_free_irq:11051129 free_irq(adapter->irq, adapter);11301130+err_out_free_rxbuf:11311131+ netxen_release_rx_buffers(adapter);11061132err_out_free_hw:11071133 netxen_free_hw_resources(adapter);11081134err_out_free_sw:···1130115211311153 netxen_release_tx_buffers(adapter);1132115411331133- if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {11341134- FLUSH_SCHEDULED_WORK();11351135- del_timer_sync(&adapter->watchdog_timer);11361136- }11551155+ FLUSH_SCHEDULED_WORK();11561156+ del_timer_sync(&adapter->watchdog_timer);1137115711381158 return 0;11391159}···1434145814351459 netxen_nic_handle_phy_intr(adapter);1436146014371437- mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);14611461+ if (netif_running(adapter->netdev))14621462+ mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);14381463}1439146414401465static void netxen_tx_timeout(struct net_device *netdev)···14951518 return stats;14961519}1497152014981498-static inline void14991499-netxen_handle_int(struct netxen_adapter *adapter)15001500-{15011501- netxen_nic_disable_int(adapter);15021502- napi_schedule(&adapter->napi);15031503-}15041504-15051521static irqreturn_t netxen_intr(int irq, void *data)15061522{15071523 struct netxen_adapter *adapter = data;15081508- u32 our_int = 0;15091509-15101524 u32 status = 0;1511152515121526 status = adapter->pci_read_immediate(adapter, ISR_INT_VECTOR);···15121544 if (!ISR_LEGACY_INT_TRIGGERED(status))15131545 return IRQ_NONE;1514154615151515- } else if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {15471547+ } else {15481548+ unsigned long our_int = 0;1516154915171550 our_int = adapter->pci_read_normalize(adapter, CRB_INT_VECTOR);15511551+15181552 /* not our interrupt */15191519- if ((our_int & (0x80 << adapter->portnum)) == 0)15531553+ if (!test_and_clear_bit((7 + adapter->portnum), &our_int))15201554 return IRQ_NONE;1521155515221522- if (adapter->intr_scheme == INTR_SCHEME_PERPORT) {15231523- /* claim interrupt */15241524- adapter->pci_write_normalize(adapter,15251525- CRB_INT_VECTOR,15261526- our_int & ~((u32)(0x80 << adapter->portnum)));15271527- }15561556+ /* claim interrupt */15571557+ adapter->pci_write_normalize(adapter,15581558+ CRB_INT_VECTOR, (our_int & 0xffffffff));15281559 }1529156015301530- netxen_handle_int(adapter);15611561+ /* clear interrupt */15621562+ if (adapter->fw_major < 4)15631563+ netxen_nic_disable_int(adapter);15641564+15651565+ adapter->pci_write_immediate(adapter,15661566+ adapter->legacy_intr.tgt_status_reg,15671567+ 0xffffffff);15681568+ /* read twice to ensure write is flushed */15691569+ adapter->pci_read_immediate(adapter, ISR_INT_VECTOR);15701570+ adapter->pci_read_immediate(adapter, ISR_INT_VECTOR);15711571+15721572+ napi_schedule(&adapter->napi);1531157315321574 return IRQ_HANDLED;15331575}···15461568{15471569 struct netxen_adapter *adapter = data;1548157015491549- netxen_handle_int(adapter);15711571+ /* clear interrupt */15721572+ adapter->pci_write_immediate(adapter,15731573+ msi_tgt_status[adapter->ahw.pci_func], 0xffffffff);15741574+15751575+ napi_schedule(&adapter->napi);15501576 return IRQ_HANDLED;15511577}15521578
+2
drivers/net/netxen/netxen_nic_phan_reg.h
···125125#define CRB_SW_INT_MASK_2 NETXEN_NIC_REG(0x1e4)126126#define CRB_SW_INT_MASK_3 NETXEN_NIC_REG(0x1e8)127127128128+#define CRB_MAC_BLOCK_START NETXEN_CAM_RAM(0x1c0)129129+128130/*129131 * capabilities register, can be used to selectively enable/disable features130132 * for backward compability
···154154 This driver creates an interface named "ethX", where X depends on155155 what other networking devices you have in use.156156157157-config USB_HSO158158- tristate "Option USB High Speed Mobile Devices"159159- depends on USB && RFKILL160160- default n161161- help162162- Choose this option if you have an Option HSDPA/HSUPA card.163163- These cards support downlink speeds of 7.2Mbps or greater.164164-165165- To compile this driver as a module, choose M here: the166166- module will be called hso.167167-168157config USB_NET_CDCETHER169158 tristate "CDC Ethernet support (smart devices such as cable modems)"170159 depends on USB_USBNET···326337 really need this non-conformant variant of CDC Ethernet (or in327338 some cases CDC MDLM) protocol, not "g_ether".328339340340+config USB_HSO341341+ tristate "Option USB High Speed Mobile Devices"342342+ depends on USB && RFKILL343343+ default n344344+ help345345+ Choose this option if you have an Option HSDPA/HSUPA card.346346+ These cards support downlink speeds of 7.2Mbps or greater.347347+348348+ To compile this driver as a module, choose M here: the349349+ module will be called hso.329350330351endmenu
+30-23
drivers/net/usb/hso.c
···102102103103#define MAX_RX_URBS 2104104105105-#define get_serial_by_tty(x) \106106- (x ? (struct hso_serial *)x->driver_data : NULL)105105+static inline struct hso_serial *get_serial_by_tty(struct tty_struct *tty)106106+{107107+ if (tty)108108+ return tty->driver_data;109109+ return NULL;110110+}107111108112/*****************************************************************************/109113/* Debugging functions */···298294299295/* #define DEBUG */300296301301-#define dev2net(x) (x->port_data.dev_net)302302-#define dev2ser(x) (x->port_data.dev_serial)297297+static inline struct hso_net *dev2net(struct hso_device *hso_dev)298298+{299299+ return hso_dev->port_data.dev_net;300300+}301301+302302+static inline struct hso_serial *dev2ser(struct hso_device *hso_dev)303303+{304304+ return hso_dev->port_data.dev_serial;305305+}303306304307/* Debugging functions */305308#ifdef DEBUG306309static void dbg_dump(int line_count, const char *func_name, unsigned char *buf,307310 unsigned int len)308311{309309- u8 i = 0;312312+ static char name[255];310313311311- printk(KERN_DEBUG "[%d:%s]: len %d", line_count, func_name, len);312312-313313- for (i = 0; i < len; i++) {314314- if (!(i % 16))315315- printk("\n 0x%03x: ", i);316316- printk("%02x ", (unsigned char)buf[i]);317317- }318318- printk("\n");314314+ sprintf(name, "hso[%d:%s]", line_count, func_name);315315+ print_hex_dump_bytes(name, DUMP_PREFIX_NONE, buf, len);319316}320317321318#define DUMP(buf_, len_) \···533528534529static struct hso_serial *get_serial_by_index(unsigned index)535530{536536- struct hso_serial *serial;531531+ struct hso_serial *serial = NULL;537532 unsigned long flags;538533539539- if (!serial_table[index])540540- return NULL;541534 spin_lock_irqsave(&serial_table_lock, flags);542542- serial = dev2ser(serial_table[index]);535535+ if (serial_table[index])536536+ serial = dev2ser(serial_table[index]);543537 spin_unlock_irqrestore(&serial_table_lock, flags);544538545539 return serial;···565561static void set_serial_by_index(unsigned index, struct hso_serial *serial)566562{567563 unsigned long flags;564564+568565 spin_lock_irqsave(&serial_table_lock, flags);569566 if (serial)570567 serial_table[index] = serial->parent;···574569 spin_unlock_irqrestore(&serial_table_lock, flags);575570}576571577577-/* log a meaningfull explanation of an USB status */572572+/* log a meaningful explanation of an USB status */578573static void log_usb_status(int status, const char *function)579574{580575 char *explanation;···11081103 /* reset the rts and dtr */11091104 /* do the actual close */11101105 serial->open_count--;11061106+ kref_put(&serial->parent->ref, hso_serial_ref_free);11111107 if (serial->open_count <= 0) {11121112- kref_put(&serial->parent->ref, hso_serial_ref_free);11131108 serial->open_count = 0;11141109 if (serial->tty) {11151110 serial->tty->driver_data = NULL;···14721467 return;14731468 }14741469 hso_put_activity(serial->parent);14751475- tty_wakeup(serial->tty);14701470+ if (serial->tty)14711471+ tty_wakeup(serial->tty);14761472 hso_kick_transmit(serial);1477147314781474 D1(" ");···15441538 clear_bit(HSO_SERIAL_FLAG_RX_SENT, &serial->flags);15451539 } else {15461540 hso_put_activity(serial->parent);15471547- tty_wakeup(serial->tty);15411541+ if (serial->tty)15421542+ tty_wakeup(serial->tty);15481543 /* response to a write command */15491544 hso_kick_transmit(serial);15501545 }···26592652 hso_stop_net_device(network_table[i]);26602653 cancel_work_sync(&network_table[i]->async_put_intf);26612654 cancel_work_sync(&network_table[i]->async_get_intf);26622662- if(rfk)26552655+ if (rfk)26632656 rfkill_unregister(rfk);26642657 hso_free_net_device(network_table[i]);26652658 }···27302723}2731272427322725/* operations setup of the serial interface */27332733-static struct tty_operations hso_serial_ops = {27262726+static const struct tty_operations hso_serial_ops = {27342727 .open = hso_serial_open,27352728 .close = hso_serial_close,27362729 .write = hso_serial_write,