Lines Matching +full:up +full:- +full:counter
1 // SPDX-License-Identifier: GPL-2.0-only
46 * ndev->set_mac_address. Jean II */
53 void __iomem *device_base = priv->device_base; in isl_upload_firmware()
82 rc = request_firmware(&fw_entry, priv->firmware, PRISM_FW_PDEV); in isl_upload_firmware()
86 "prism54", priv->firmware); in isl_upload_firmware()
92 fw_ptr = (u32 *) fw_entry->data; in isl_upload_firmware()
93 fw_len = fw_entry->size; in isl_upload_firmware()
98 "prism54", priv->firmware); in isl_upload_firmware()
100 return -EILSEQ; /* Illegal byte sequence */; in isl_upload_firmware()
117 fw_len -= _fw_len; in isl_upload_firmware()
119 /* write the data to the Direct Memory Window 32bit-wise */ in isl_upload_firmware()
120 /* memcpy_toio() doesn't guarantee 32bit writes :-| */ in isl_upload_firmware()
122 /* use non-swapping writel() */ in isl_upload_firmware()
125 _fw_len -= 4; in isl_upload_firmware()
139 priv->ndev->name, fw_entry->data + 40); in isl_upload_firmware()
181 struct net_device *ndev = priv->ndev; in islpci_interrupt()
182 void __iomem *device = priv->device_base; in islpci_interrupt()
186 spin_lock(&priv->slock); in islpci_interrupt()
197 spin_unlock(&priv->slock); in islpci_interrupt()
230 le32_to_cpu(priv->control_block-> in islpci_interrupt()
232 le32_to_cpu(priv->control_block-> in islpci_interrupt()
234 le32_to_cpu(priv->control_block-> in islpci_interrupt()
236 le32_to_cpu(priv->control_block-> in islpci_interrupt()
238 le32_to_cpu(priv->control_block-> in islpci_interrupt()
240 le32_to_cpu(priv->control_block-> in islpci_interrupt()
246 le32_to_cpu(priv->control_block-> in islpci_interrupt()
248 le32_to_cpu(priv->control_block-> in islpci_interrupt()
250 le32_to_cpu(priv->control_block-> in islpci_interrupt()
252 le32_to_cpu(priv->control_block-> in islpci_interrupt()
254 le32_to_cpu(priv->control_block-> in islpci_interrupt()
256 le32_to_cpu(priv->control_block-> in islpci_interrupt()
262 islpci_eth_cleanup_transmit(priv, priv->control_block); in islpci_interrupt()
271 if (isl38xx_in_queue(priv->control_block, in islpci_interrupt()
288 while (isl38xx_in_queue(priv->control_block, in islpci_interrupt()
298 if (priv->data_low_tx_full) { in islpci_interrupt()
300 if (ISL38XX_CB_TX_QSIZE - in islpci_interrupt()
301 isl38xx_in_queue(priv->control_block, in islpci_interrupt()
305 netif_wake_queue(priv->ndev); in islpci_interrupt()
308 priv->data_low_tx_full = 0; in islpci_interrupt()
319 wake_up(&priv->reset_done); in islpci_interrupt()
327 isl38xx_handle_sleep_request(priv->control_block, in islpci_interrupt()
329 priv->device_base); in islpci_interrupt()
333 /* Device has been woken up to active state */ in islpci_interrupt()
338 isl38xx_handle_wakeup(priv->control_block, in islpci_interrupt()
339 &powerstate, priv->device_base); in islpci_interrupt()
345 spin_unlock(&priv->slock); in islpci_interrupt()
349 /* sleep -> ready */ in islpci_interrupt()
354 /* !sleep -> sleep */ in islpci_interrupt()
360 spin_unlock(&priv->slock); in islpci_interrupt()
383 /* Turn off carrier if in STA or Ad-hoc mode. It will be turned on in islpci_open()
388 if (priv->iw_mode == IW_MODE_INFRA || priv->iw_mode == IW_MODE_ADHOC) in islpci_open()
401 printk(KERN_DEBUG "%s: islpci_close ()\n", ndev->name); in islpci_close()
411 void __iomem *device_base = priv->device_base; in prism54_bring_down()
417 isl38xx_disable_interrupts(priv->device_base); in prism54_bring_down()
423 synchronize_irq(priv->pdev->irq); in prism54_bring_down()
455 printk(KERN_DEBUG "%s: uploading firmware...\n", priv->ndev->name); in islpci_upload_fw()
461 priv->ndev->name, priv->firmware); in islpci_upload_fw()
468 priv->ndev->name); in islpci_upload_fw()
479 int result = -ETIME; in islpci_reset_if()
483 prepare_to_wait(&priv->reset_done, &wait, TASK_UNINTERRUPTIBLE); in islpci_reset_if()
486 isl38xx_interface_reset(priv->device_base, priv->device_host_address); in islpci_reset_if()
491 * Be conservative and wait for up to one second. */ in islpci_reset_if()
503 printk(KERN_ERR "%s: no 'reset complete' IRQ seen - retrying\n", in islpci_reset_if()
504 priv->ndev->name); in islpci_reset_if()
507 finish_wait(&priv->reset_done, &wait); in islpci_reset_if()
510 printk(KERN_ERR "%s: interface reset failure\n", priv->ndev->name); in islpci_reset_if()
516 /* Now that the device is 100% up, let's allow in islpci_reset_if()
517 * for the other interrupts -- in islpci_reset_if()
521 isl38xx_enable_common_interrupts(priv->device_base); in islpci_reset_if()
523 down_write(&priv->mib_sem); in islpci_reset_if()
526 printk(KERN_ERR "%s: interface reset failure\n", priv->ndev->name); in islpci_reset_if()
527 up_write(&priv->mib_sem); in islpci_reset_if()
530 up_write(&priv->mib_sem); in islpci_reset_if()
534 printk(KERN_DEBUG "%s: interface reset complete\n", priv->ndev->name); in islpci_reset_if()
542 (isl38xx_control_block *) priv->control_block; in islpci_reset()
543 unsigned counter; in islpci_reset() local
551 printk(KERN_DEBUG "%s: resetting device...\n", priv->ndev->name); in islpci_reset()
554 isl38xx_disable_interrupts(priv->device_base); in islpci_reset()
557 priv->index_mgmt_tx = 0; in islpci_reset()
558 priv->index_mgmt_rx = 0; in islpci_reset()
561 for (counter = 0; counter < ISL38XX_CB_QCOUNT; counter++) { in islpci_reset()
562 cb->driver_curr_frag[counter] = cpu_to_le32(0); in islpci_reset()
563 cb->device_curr_frag[counter] = cpu_to_le32(0); in islpci_reset()
567 for (counter = 0; counter < ISL38XX_CB_MGMT_QSIZE; counter++) { in islpci_reset()
568 isl38xx_fragment *frag = &cb->rx_data_mgmt[counter]; in islpci_reset()
569 frag->size = cpu_to_le16(MGMT_FRAME_SIZE); in islpci_reset()
570 frag->flags = 0; in islpci_reset()
571 frag->address = cpu_to_le32(priv->mgmt_rx[counter].pci_addr); in islpci_reset()
574 for (counter = 0; counter < ISL38XX_CB_RX_QSIZE; counter++) { in islpci_reset()
575 cb->rx_data_low[counter].address = in islpci_reset()
576 cpu_to_le32((u32) priv->pci_map_rx_address[counter]); in islpci_reset()
581 priv->control_block->driver_curr_frag[ISL38XX_CB_RX_DATA_LQ] = in islpci_reset()
583 priv->control_block->driver_curr_frag[ISL38XX_CB_RX_MGMTQ] = in islpci_reset()
587 priv->free_data_rx = 0; in islpci_reset()
588 priv->free_data_tx = 0; in islpci_reset()
589 priv->data_low_tx_full = 0; in islpci_reset()
592 /* now that the data structures are cleaned up, upload in islpci_reset()
597 priv->ndev->name); in islpci_reset()
615 int counter; in islpci_alloc_memory() local
622 if (!(priv->device_base = in islpci_alloc_memory()
623 ioremap(pci_resource_start(priv->pdev, 0), in islpci_alloc_memory()
627 return -1; in islpci_alloc_memory()
639 priv->driver_mem_address = dma_alloc_coherent(&priv->pdev->dev, in islpci_alloc_memory()
641 &priv->device_host_address, in islpci_alloc_memory()
644 if (!priv->driver_mem_address) { in islpci_alloc_memory()
648 return -1; in islpci_alloc_memory()
652 priv->control_block = in islpci_alloc_memory()
653 (isl38xx_control_block *) priv->driver_mem_address; in islpci_alloc_memory()
656 priv->device_psm_buffer = in islpci_alloc_memory()
657 priv->device_host_address + CONTROL_BLOCK_SIZE; in islpci_alloc_memory()
660 for (counter = 0; counter < ISL38XX_CB_QCOUNT; counter++) { in islpci_alloc_memory()
661 priv->control_block->driver_curr_frag[counter] = cpu_to_le32(0); in islpci_alloc_memory()
662 priv->control_block->device_curr_frag[counter] = cpu_to_le32(0); in islpci_alloc_memory()
665 priv->index_mgmt_rx = 0; in islpci_alloc_memory()
666 memset(priv->mgmt_rx, 0, sizeof(priv->mgmt_rx)); in islpci_alloc_memory()
667 memset(priv->mgmt_tx, 0, sizeof(priv->mgmt_tx)); in islpci_alloc_memory()
670 if (islpci_mgmt_rx_fill(priv->ndev) < 0) in islpci_alloc_memory()
674 memset(priv->data_low_rx, 0, sizeof (priv->data_low_rx)); in islpci_alloc_memory()
675 memset(priv->pci_map_rx_address, 0, sizeof (priv->pci_map_rx_address)); in islpci_alloc_memory()
677 for (counter = 0; counter < ISL38XX_CB_RX_QSIZE; counter++) { in islpci_alloc_memory()
689 skb_reserve(skb, (4 - (long) skb->data) & 0x03); in islpci_alloc_memory()
691 priv->data_low_rx[counter] = skb; in islpci_alloc_memory()
694 priv->pci_map_rx_address[counter] = in islpci_alloc_memory()
695 dma_map_single(&priv->pdev->dev, (void *)skb->data, in islpci_alloc_memory()
697 if (dma_mapping_error(&priv->pdev->dev, priv->pci_map_rx_address[counter])) { in islpci_alloc_memory()
698 priv->pci_map_rx_address[counter] = 0; in islpci_alloc_memory()
706 prism54_acl_init(&priv->acl); in islpci_alloc_memory()
714 return -1; in islpci_alloc_memory()
720 int counter; in islpci_free_memory() local
722 if (priv->device_base) in islpci_free_memory()
723 iounmap(priv->device_base); in islpci_free_memory()
724 priv->device_base = NULL; in islpci_free_memory()
727 if (priv->driver_mem_address) in islpci_free_memory()
728 dma_free_coherent(&priv->pdev->dev, HOST_MEM_BLOCK, in islpci_free_memory()
729 priv->driver_mem_address, in islpci_free_memory()
730 priv->device_host_address); in islpci_free_memory()
733 priv->driver_mem_address = NULL; in islpci_free_memory()
734 priv->device_host_address = 0; in islpci_free_memory()
735 priv->device_psm_buffer = 0; in islpci_free_memory()
736 priv->control_block = NULL; in islpci_free_memory()
738 /* clean up mgmt rx buffers */ in islpci_free_memory()
739 for (counter = 0; counter < ISL38XX_CB_MGMT_QSIZE; counter++) { in islpci_free_memory()
740 struct islpci_membuf *buf = &priv->mgmt_rx[counter]; in islpci_free_memory()
741 if (buf->pci_addr) in islpci_free_memory()
742 dma_unmap_single(&priv->pdev->dev, buf->pci_addr, in islpci_free_memory()
743 buf->size, DMA_FROM_DEVICE); in islpci_free_memory()
744 buf->pci_addr = 0; in islpci_free_memory()
745 kfree(buf->mem); in islpci_free_memory()
746 buf->size = 0; in islpci_free_memory()
747 buf->mem = NULL; in islpci_free_memory()
750 /* clean up data rx buffers */ in islpci_free_memory()
751 for (counter = 0; counter < ISL38XX_CB_RX_QSIZE; counter++) { in islpci_free_memory()
752 if (priv->pci_map_rx_address[counter]) in islpci_free_memory()
753 dma_unmap_single(&priv->pdev->dev, in islpci_free_memory()
754 priv->pci_map_rx_address[counter], in islpci_free_memory()
757 priv->pci_map_rx_address[counter] = 0; in islpci_free_memory()
759 if (priv->data_low_rx[counter]) in islpci_free_memory()
760 dev_kfree_skb(priv->data_low_rx[counter]); in islpci_free_memory()
761 priv->data_low_rx[counter] = NULL; in islpci_free_memory()
765 prism54_acl_clean(&priv->acl); in islpci_free_memory()
783 strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); in islpci_ethtool_get_drvinfo()
784 strlcpy(info->version, DRV_VERSION, sizeof(info->version)); in islpci_ethtool_get_drvinfo()
814 SET_NETDEV_DEV(ndev, &pdev->dev); in islpci_setup()
818 ndev->base_addr = pci_resource_start(pdev, 0); in islpci_setup()
819 ndev->irq = pdev->irq; in islpci_setup()
822 ndev->netdev_ops = &islpci_netdev_ops; in islpci_setup()
823 ndev->wireless_handlers = &prism54_handler_def; in islpci_setup()
824 ndev->ethtool_ops = &islpci_ethtool_ops; in islpci_setup()
826 /* ndev->set_multicast_list = &islpci_set_multicast_list; */ in islpci_setup()
827 ndev->addr_len = ETH_ALEN; in islpci_setup()
828 /* Get a non-zero dummy MAC address for nameif. Jean II */ in islpci_setup()
829 memcpy(ndev->dev_addr, dummy_mac, ETH_ALEN); in islpci_setup()
831 ndev->watchdog_timeo = ISLPCI_TX_TIMEOUT; in islpci_setup()
835 priv->ndev = ndev; in islpci_setup()
836 priv->pdev = pdev; in islpci_setup()
837 priv->monitor_type = ARPHRD_IEEE80211; in islpci_setup()
838 priv->ndev->type = (priv->iw_mode == IW_MODE_MONITOR) ? in islpci_setup()
839 priv->monitor_type : ARPHRD_ETHER; in islpci_setup()
842 priv->wireless_data.spy_data = &priv->spy_data; in islpci_setup()
843 ndev->wireless_data = &priv->wireless_data; in islpci_setup()
846 ndev->mem_start = (unsigned long) priv->device_base; in islpci_setup()
847 ndev->mem_end = ndev->mem_start + ISL38XX_PCI_MEM_SIZE; in islpci_setup()
850 DEBUG(SHOW_TRACING, "PCI Memory remapped to 0x%p\n", priv->device_base); in islpci_setup()
853 init_waitqueue_head(&priv->reset_done); in islpci_setup()
855 /* init the queue read locks, process wait counter */ in islpci_setup()
856 mutex_init(&priv->mgmt_lock); in islpci_setup()
857 priv->mgmt_received = NULL; in islpci_setup()
858 init_waitqueue_head(&priv->mgmt_wqueue); in islpci_setup()
859 mutex_init(&priv->stats_lock); in islpci_setup()
860 spin_lock_init(&priv->slock); in islpci_setup()
863 priv->state = PRV_STATE_OFF; in islpci_setup()
864 priv->state_off = 1; in islpci_setup()
867 INIT_WORK(&priv->stats_work, prism54_update_stats); in islpci_setup()
868 priv->stats_timestamp = 0; in islpci_setup()
870 INIT_WORK(&priv->reset_task, islpci_do_reset_and_wake); in islpci_setup()
871 priv->reset_task_pending = 0; in islpci_setup()
878 switch (pdev->device) { in islpci_setup()
880 strcpy(priv->firmware, ISL3877_IMAGE_FILE); in islpci_setup()
884 strcpy(priv->firmware, ISL3886_IMAGE_FILE); in islpci_setup()
888 strcpy(priv->firmware, ISL3890_IMAGE_FILE); in islpci_setup()
914 old_state = priv->state; in islpci_set_state()
920 priv->state_off++; in islpci_set_state()
923 priv->state = new_state; in islpci_set_state()
927 /* there are actually many off-states, enumerated by in islpci_set_state()
930 priv->state_off--; in islpci_set_state()
935 if (!priv->state_off) in islpci_set_state()
936 priv->state = new_state; in islpci_set_state()
940 printk(KERN_DEBUG "%s: state transition %d -> %d (off#%d)\n", in islpci_set_state()
941 priv->ndev->name, old_state, new_state, priv->state_off); in islpci_set_state()
945 BUG_ON(priv->state_off < 0); in islpci_set_state()
946 BUG_ON(priv->state_off && (priv->state != PRV_STATE_OFF)); in islpci_set_state()
947 BUG_ON(!priv->state_off && (priv->state == PRV_STATE_OFF)); in islpci_set_state()