Lines Matching defs:adapter

147 #define KS8842_USE_DMA(adapter) (((adapter)->dma_tx.channel != -1) && \
148 ((adapter)->dma_rx.channel != -1))
166 static inline void ks8842_resume_dma(struct ks8842_adapter *adapter)
168 iowrite32(1, adapter->hw_addr + REQ_TIMB_DMA_RESUME);
171 static inline void ks8842_select_bank(struct ks8842_adapter *adapter, u16 bank)
173 iowrite16(bank, adapter->hw_addr + REG_SELECT_BANK);
176 static inline void ks8842_write8(struct ks8842_adapter *adapter, u16 bank,
179 ks8842_select_bank(adapter, bank);
180 iowrite8(value, adapter->hw_addr + offset);
183 static inline void ks8842_write16(struct ks8842_adapter *adapter, u16 bank,
186 ks8842_select_bank(adapter, bank);
187 iowrite16(value, adapter->hw_addr + offset);
190 static inline void ks8842_enable_bits(struct ks8842_adapter *adapter, u16 bank,
194 ks8842_select_bank(adapter, bank);
195 reg = ioread16(adapter->hw_addr + offset);
197 iowrite16(reg, adapter->hw_addr + offset);
200 static inline void ks8842_clear_bits(struct ks8842_adapter *adapter, u16 bank,
204 ks8842_select_bank(adapter, bank);
205 reg = ioread16(adapter->hw_addr + offset);
207 iowrite16(reg, adapter->hw_addr + offset);
210 static inline void ks8842_write32(struct ks8842_adapter *adapter, u16 bank,
213 ks8842_select_bank(adapter, bank);
214 iowrite32(value, adapter->hw_addr + offset);
217 static inline u8 ks8842_read8(struct ks8842_adapter *adapter, u16 bank,
220 ks8842_select_bank(adapter, bank);
221 return ioread8(adapter->hw_addr + offset);
224 static inline u16 ks8842_read16(struct ks8842_adapter *adapter, u16 bank,
227 ks8842_select_bank(adapter, bank);
228 return ioread16(adapter->hw_addr + offset);
231 static inline u32 ks8842_read32(struct ks8842_adapter *adapter, u16 bank,
234 ks8842_select_bank(adapter, bank);
235 return ioread32(adapter->hw_addr + offset);
238 static void ks8842_reset(struct ks8842_adapter *adapter)
240 if (adapter->conf_flags & MICREL_KS884X) {
241 ks8842_write16(adapter, 3, 1, REG_GRR);
243 iowrite16(0, adapter->hw_addr + REG_GRR);
248 ks8842_write16(adapter, 3, 1, REG_GRR);
250 iowrite16(0, adapter->hw_addr + REG_GRR);
252 iowrite32(0x1, adapter->hw_addr + REG_TIMB_RST);
258 struct ks8842_adapter *adapter)
261 if (ks8842_read16(adapter, 45, REG_P1MBSR) & 0x4) {
270 static void ks8842_enable_tx(struct ks8842_adapter *adapter)
272 ks8842_enable_bits(adapter, 16, 0x01, REG_TXCR);
275 static void ks8842_disable_tx(struct ks8842_adapter *adapter)
277 ks8842_clear_bits(adapter, 16, 0x01, REG_TXCR);
280 static void ks8842_enable_rx(struct ks8842_adapter *adapter)
282 ks8842_enable_bits(adapter, 16, 0x01, REG_RXCR);
285 static void ks8842_disable_rx(struct ks8842_adapter *adapter)
287 ks8842_clear_bits(adapter, 16, 0x01, REG_RXCR);
290 static void ks8842_reset_hw(struct ks8842_adapter *adapter)
293 ks8842_reset(adapter);
296 ks8842_write16(adapter, 16, 0x000E, REG_TXCR);
300 ks8842_write16(adapter, 16, 0x8 | 0x20 | 0x40 | 0x80 | 0x400,
304 ks8842_write16(adapter, 17, 0x4000, REG_TXFDPR);
307 ks8842_write16(adapter, 17, 0x4000, REG_RXFDPR);
310 ks8842_write16(adapter, 0, 0x1000, REG_QRFCR);
313 ks8842_enable_bits(adapter, 32, 1 << 8, REG_SGCR1);
316 ks8842_enable_bits(adapter, 32, 1 << 3, REG_SGCR2);
319 ks8842_write16(adapter, 48, 0x1E07, REG_P1CR2);
322 ks8842_enable_bits(adapter, 49, 1 << 13, REG_P1CR4);
325 ks8842_enable_tx(adapter);
328 ks8842_enable_rx(adapter);
331 ks8842_write16(adapter, 18, 0xffff, REG_ISR);
334 if (KS8842_USE_DMA(adapter)) {
339 iowrite16(ENABLED_IRQS_DMA_IP, adapter->hw_addr + REG_TIMB_IER);
340 ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
342 if (!(adapter->conf_flags & MICREL_KS884X))
344 adapter->hw_addr + REG_TIMB_IER);
345 ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
348 ks8842_write16(adapter, 32, 0x1, REG_SW_ID_AND_ENABLE);
351 static void ks8842_read_mac_addr(struct ks8842_adapter *adapter, u8 *dest)
357 dest[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i);
359 if (adapter->conf_flags & MICREL_KS884X) {
365 mac = ks8842_read16(adapter, 2, REG_MARL);
366 ks8842_write16(adapter, 39, mac, REG_MACAR3);
367 mac = ks8842_read16(adapter, 2, REG_MARM);
368 ks8842_write16(adapter, 39, mac, REG_MACAR2);
369 mac = ks8842_read16(adapter, 2, REG_MARH);
370 ks8842_write16(adapter, 39, mac, REG_MACAR1);
374 mac = ks8842_read16(adapter, 2, REG_MARL);
375 ks8842_write16(adapter, 39, mac, REG_MACAR1);
376 mac = ks8842_read16(adapter, 2, REG_MARM);
377 ks8842_write16(adapter, 39, mac, REG_MACAR2);
378 mac = ks8842_read16(adapter, 2, REG_MARH);
379 ks8842_write16(adapter, 39, mac, REG_MACAR3);
383 static void ks8842_write_mac_addr(struct ks8842_adapter *adapter, u8 *mac)
388 spin_lock_irqsave(&adapter->lock, flags);
390 ks8842_write8(adapter, 2, mac[ETH_ALEN - i - 1], REG_MARL + i);
391 if (!(adapter->conf_flags & MICREL_KS884X))
392 ks8842_write8(adapter, 39, mac[ETH_ALEN - i - 1],
396 if (adapter->conf_flags & MICREL_KS884X) {
404 mac = ks8842_read16(adapter, 2, REG_MARL);
405 ks8842_write16(adapter, 39, mac, REG_MACAR3);
406 mac = ks8842_read16(adapter, 2, REG_MARM);
407 ks8842_write16(adapter, 39, mac, REG_MACAR2);
408 mac = ks8842_read16(adapter, 2, REG_MARH);
409 ks8842_write16(adapter, 39, mac, REG_MACAR1);
411 spin_unlock_irqrestore(&adapter->lock, flags);
414 static inline u16 ks8842_tx_fifo_space(struct ks8842_adapter *adapter)
416 return ks8842_read16(adapter, 16, REG_TXMIR) & 0x1fff;
421 struct ks8842_adapter *adapter = netdev_priv(netdev);
422 struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
441 dma_sync_single_range_for_device(adapter->dev,
467 struct ks8842_adapter *adapter = netdev_priv(netdev);
475 if (ks8842_tx_fifo_space(adapter) < len + 8)
478 if (adapter->conf_flags & KS884X_16BIT) {
480 ks8842_write16(adapter, 17, 0x8000 | 0x100, REG_QMU_DATA_LO);
481 ks8842_write16(adapter, 17, (u16)len, REG_QMU_DATA_HI);
486 iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_LO);
487 iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_HI);
496 ks8842_write32(adapter, 17, ctrl, REG_QMU_DATA_LO);
502 iowrite32(*ptr, adapter->hw_addr + REG_QMU_DATA_LO);
509 ks8842_write16(adapter, 17, 1, REG_TXQCR);
542 struct ks8842_adapter *adapter = netdev_priv(netdev);
543 struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
550 sg_dma_address(sg) = dma_map_single(adapter->dev,
552 if (dma_mapping_error(adapter->dev, sg_dma_address(sg))) {
580 dma_unmap_single(adapter->dev, sg_dma_address(sg),
592 struct ks8842_adapter *adapter = from_tasklet(adapter, t, dma_rx.tasklet);
593 struct net_device *netdev = adapter->netdev;
594 struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
605 dma_unmap_single(adapter->dev, addr, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
631 struct ks8842_adapter *adapter)
636 if (adapter->conf_flags & KS884X_16BIT) {
637 status = ks8842_read16(adapter, 17, REG_QMU_DATA_LO);
638 len = ks8842_read16(adapter, 17, REG_QMU_DATA_HI);
642 status = ks8842_read32(adapter, 17, REG_QMU_DATA_LO);
657 if (adapter->conf_flags & KS884X_16BIT) {
659 ks8842_select_bank(adapter, 17);
661 *data16++ = ioread16(adapter->hw_addr +
663 *data16++ = ioread16(adapter->hw_addr +
670 ks8842_select_bank(adapter, 17);
672 *data++ = ioread32(adapter->hw_addr +
685 ks8842_clear_bits(adapter, 0, 1 << 12, REG_QRFCR);
688 ks8842_write16(adapter, 17, 0x01, REG_RXQCR);
691 ks8842_enable_bits(adapter, 0, 1 << 12, REG_QRFCR);
695 struct ks8842_adapter *adapter)
697 u16 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
700 ks8842_rx_frame(netdev, adapter);
701 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
706 struct ks8842_adapter *adapter)
708 u16 sr = ks8842_read16(adapter, 16, REG_TXSR);
716 struct ks8842_adapter *adapter)
725 struct ks8842_adapter *adapter = from_tasklet(adapter, t, tasklet);
726 struct net_device *netdev = adapter->netdev;
732 spin_lock_irqsave(&adapter->lock, flags);
733 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
734 spin_unlock_irqrestore(&adapter->lock, flags);
736 isr = ks8842_read16(adapter, 18, REG_ISR);
742 if (KS8842_USE_DMA(adapter))
746 ks8842_write16(adapter, 18, isr, REG_ISR);
748 if (!(adapter->conf_flags & MICREL_KS884X))
750 iowrite32(0x1, adapter->hw_addr + REG_TIMB_IAR);
756 ks8842_update_link_status(netdev, adapter);
759 if (isr & (IRQ_RX | IRQ_RX_ERROR) && !KS8842_USE_DMA(adapter))
760 ks8842_handle_rx(netdev, adapter);
764 ks8842_handle_tx(netdev, adapter);
767 ks8842_handle_rx_overrun(netdev, adapter);
770 ks8842_disable_tx(adapter);
771 ks8842_enable_tx(adapter);
775 ks8842_disable_rx(adapter);
776 ks8842_enable_rx(adapter);
780 spin_lock_irqsave(&adapter->lock, flags);
781 if (KS8842_USE_DMA(adapter))
782 ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
784 ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
785 iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
789 if (KS8842_USE_DMA(adapter))
790 ks8842_resume_dma(adapter);
792 spin_unlock_irqrestore(&adapter->lock, flags);
798 struct ks8842_adapter *adapter = netdev_priv(netdev);
800 u16 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
803 isr = ks8842_read16(adapter, 18, REG_ISR);
807 if (KS8842_USE_DMA(adapter))
809 ks8842_write16(adapter, 18, IRQ_RX, REG_IER);
812 ks8842_write16(adapter, 18, 0x00, REG_IER);
815 tasklet_schedule(&adapter->tasklet);
820 iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
825 ks8842_resume_dma(adapter);
833 struct ks8842_adapter *adapter = netdev_priv(netdev);
837 if (adapter->dma_rx.adesc)
838 tasklet_schedule(&adapter->dma_rx.tasklet);
844 struct ks8842_adapter *adapter = netdev_priv(netdev);
845 struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
859 static void ks8842_stop_dma(struct ks8842_adapter *adapter)
861 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
862 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
873 dma_unmap_single(adapter->dev, sg_dma_address(&rx_ctl->sg),
881 static void ks8842_dealloc_dma_bufs(struct ks8842_adapter *adapter)
883 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
884 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
886 ks8842_stop_dma(adapter);
899 dma_unmap_single(adapter->dev, sg_dma_address(&tx_ctl->sg),
914 struct ks8842_adapter *adapter = netdev_priv(netdev);
915 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
916 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
941 sg_dma_address(&tx_ctl->sg) = dma_map_single(adapter->dev,
943 if (dma_mapping_error(adapter->dev, sg_dma_address(&tx_ctl->sg))) {
960 ks8842_dealloc_dma_bufs(adapter);
968 struct ks8842_adapter *adapter = netdev_priv(netdev);
973 if (KS8842_USE_DMA(adapter)) {
980 ks8842_dealloc_dma_bufs(adapter);
986 ks8842_dealloc_dma_bufs(adapter);
987 adapter->dma_rx.channel = -1;
988 adapter->dma_tx.channel = -1;
993 ks8842_reset_hw(adapter);
995 ks8842_write_mac_addr(adapter, netdev->dev_addr);
997 ks8842_update_link_status(netdev, adapter);
999 err = request_irq(adapter->irq, ks8842_irq, IRQF_SHARED, DRV_NAME,
1002 pr_err("Failed to request IRQ: %d: %d\n", adapter->irq, err);
1011 struct ks8842_adapter *adapter = netdev_priv(netdev);
1015 cancel_work_sync(&adapter->timeout_work);
1017 if (KS8842_USE_DMA(adapter))
1018 ks8842_dealloc_dma_bufs(adapter);
1021 free_irq(adapter->irq, netdev);
1024 ks8842_write16(adapter, 32, 0x0, REG_SW_ID_AND_ENABLE);
1033 struct ks8842_adapter *adapter = netdev_priv(netdev);
1037 if (KS8842_USE_DMA(adapter)) {
1041 spin_lock_irqsave(&adapter->lock, flags);
1042 if (adapter->dma_tx.adesc)
1044 spin_unlock_irqrestore(&adapter->lock, flags);
1050 if (ks8842_tx_fifo_space(adapter) < netdev->mtu + 8)
1058 struct ks8842_adapter *adapter = netdev_priv(netdev);
1069 ks8842_write_mac_addr(adapter, mac);
1075 struct ks8842_adapter *adapter =
1077 struct net_device *netdev = adapter->netdev;
1082 spin_lock_irqsave(&adapter->lock, flags);
1084 if (KS8842_USE_DMA(adapter))
1085 ks8842_stop_dma(adapter);
1088 ks8842_write16(adapter, 18, 0, REG_IER);
1089 ks8842_write16(adapter, 18, 0xFFFF, REG_ISR);
1093 spin_unlock_irqrestore(&adapter->lock, flags);
1095 ks8842_reset_hw(adapter);
1097 ks8842_write_mac_addr(adapter, netdev->dev_addr);
1099 ks8842_update_link_status(netdev, adapter);
1101 if (KS8842_USE_DMA(adapter))
1107 struct ks8842_adapter *adapter = netdev_priv(netdev);
1111 schedule_work(&adapter->timeout_work);
1132 struct ks8842_adapter *adapter;
1151 adapter = netdev_priv(netdev);
1152 adapter->netdev = netdev;
1153 INIT_WORK(&adapter->timeout_work, ks8842_tx_timeout_work);
1154 adapter->hw_addr = ioremap(iomem->start, resource_size(iomem));
1155 adapter->conf_flags = iomem->flags;
1157 if (!adapter->hw_addr)
1160 adapter->irq = platform_get_irq(pdev, 0);
1161 if (adapter->irq < 0) {
1162 err = adapter->irq;
1166 adapter->dev = (pdev->dev.parent) ? pdev->dev.parent : &pdev->dev;
1169 if (!(adapter->conf_flags & MICREL_KS884X) && pdata &&
1172 adapter->dma_rx.channel = pdata->rx_dma_channel;
1173 adapter->dma_tx.channel = pdata->tx_dma_channel;
1175 adapter->dma_rx.channel = -1;
1176 adapter->dma_tx.channel = -1;
1179 tasklet_setup(&adapter->tasklet, ks8842_tasklet);
1180 spin_lock_init(&adapter->lock);
1199 ks8842_read_mac_addr(adapter, netdev->dev_addr);
1205 id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);
1221 iounmap(adapter->hw_addr);
1233 struct ks8842_adapter *adapter = netdev_priv(netdev);
1237 tasklet_kill(&adapter->tasklet);
1238 iounmap(adapter->hw_addr);