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_init_mac_addr(struct ks8842_adapter *adapter)
358 addr[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i);
359 eth_hw_addr_set(adapter->netdev, addr);
361 if (adapter->conf_flags & MICREL_KS884X) {
367 mac = ks8842_read16(adapter, 2, REG_MARL);
368 ks8842_write16(adapter, 39, mac, REG_MACAR3);
369 mac = ks8842_read16(adapter, 2, REG_MARM);
370 ks8842_write16(adapter, 39, mac, REG_MACAR2);
371 mac = ks8842_read16(adapter, 2, REG_MARH);
372 ks8842_write16(adapter, 39, mac, REG_MACAR1);
376 mac = ks8842_read16(adapter, 2, REG_MARL);
377 ks8842_write16(adapter, 39, mac, REG_MACAR1);
378 mac = ks8842_read16(adapter, 2, REG_MARM);
379 ks8842_write16(adapter, 39, mac, REG_MACAR2);
380 mac = ks8842_read16(adapter, 2, REG_MARH);
381 ks8842_write16(adapter, 39, mac, REG_MACAR3);
385 static void ks8842_write_mac_addr(struct ks8842_adapter *adapter, const u8 *mac)
390 spin_lock_irqsave(&adapter->lock, flags);
392 ks8842_write8(adapter, 2, mac[ETH_ALEN - i - 1], REG_MARL + i);
393 if (!(adapter->conf_flags & MICREL_KS884X))
394 ks8842_write8(adapter, 39, mac[ETH_ALEN - i - 1],
398 if (adapter->conf_flags & MICREL_KS884X) {
406 mac = ks8842_read16(adapter, 2, REG_MARL);
407 ks8842_write16(adapter, 39, mac, REG_MACAR3);
408 mac = ks8842_read16(adapter, 2, REG_MARM);
409 ks8842_write16(adapter, 39, mac, REG_MACAR2);
410 mac = ks8842_read16(adapter, 2, REG_MARH);
411 ks8842_write16(adapter, 39, mac, REG_MACAR1);
413 spin_unlock_irqrestore(&adapter->lock, flags);
416 static inline u16 ks8842_tx_fifo_space(struct ks8842_adapter *adapter)
418 return ks8842_read16(adapter, 16, REG_TXMIR) & 0x1fff;
423 struct ks8842_adapter *adapter = netdev_priv(netdev);
424 struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
443 dma_sync_single_range_for_device(adapter->dev,
469 struct ks8842_adapter *adapter = netdev_priv(netdev);
477 if (ks8842_tx_fifo_space(adapter) < len + 8)
480 if (adapter->conf_flags & KS884X_16BIT) {
482 ks8842_write16(adapter, 17, 0x8000 | 0x100, REG_QMU_DATA_LO);
483 ks8842_write16(adapter, 17, (u16)len, REG_QMU_DATA_HI);
488 iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_LO);
489 iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_HI);
498 ks8842_write32(adapter, 17, ctrl, REG_QMU_DATA_LO);
504 iowrite32(*ptr, adapter->hw_addr + REG_QMU_DATA_LO);
511 ks8842_write16(adapter, 17, 1, REG_TXQCR);
544 struct ks8842_adapter *adapter = netdev_priv(netdev);
545 struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
552 sg_dma_address(sg) = dma_map_single(adapter->dev,
554 if (dma_mapping_error(adapter->dev, sg_dma_address(sg))) {
582 dma_unmap_single(adapter->dev, sg_dma_address(sg),
594 struct ks8842_adapter *adapter = from_tasklet(adapter, t, dma_rx.tasklet);
595 struct net_device *netdev = adapter->netdev;
596 struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
607 dma_unmap_single(adapter->dev, addr, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
633 struct ks8842_adapter *adapter)
638 if (adapter->conf_flags & KS884X_16BIT) {
639 status = ks8842_read16(adapter, 17, REG_QMU_DATA_LO);
640 len = ks8842_read16(adapter, 17, REG_QMU_DATA_HI);
644 status = ks8842_read32(adapter, 17, REG_QMU_DATA_LO);
659 if (adapter->conf_flags & KS884X_16BIT) {
661 ks8842_select_bank(adapter, 17);
663 *data16++ = ioread16(adapter->hw_addr +
665 *data16++ = ioread16(adapter->hw_addr +
672 ks8842_select_bank(adapter, 17);
674 *data++ = ioread32(adapter->hw_addr +
687 ks8842_clear_bits(adapter, 0, 1 << 12, REG_QRFCR);
690 ks8842_write16(adapter, 17, 0x01, REG_RXQCR);
693 ks8842_enable_bits(adapter, 0, 1 << 12, REG_QRFCR);
697 struct ks8842_adapter *adapter)
699 u16 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
702 ks8842_rx_frame(netdev, adapter);
703 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
708 struct ks8842_adapter *adapter)
710 u16 sr = ks8842_read16(adapter, 16, REG_TXSR);
718 struct ks8842_adapter *adapter)
727 struct ks8842_adapter *adapter = from_tasklet(adapter, t, tasklet);
728 struct net_device *netdev = adapter->netdev;
734 spin_lock_irqsave(&adapter->lock, flags);
735 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
736 spin_unlock_irqrestore(&adapter->lock, flags);
738 isr = ks8842_read16(adapter, 18, REG_ISR);
744 if (KS8842_USE_DMA(adapter))
748 ks8842_write16(adapter, 18, isr, REG_ISR);
750 if (!(adapter->conf_flags & MICREL_KS884X))
752 iowrite32(0x1, adapter->hw_addr + REG_TIMB_IAR);
758 ks8842_update_link_status(netdev, adapter);
761 if (isr & (IRQ_RX | IRQ_RX_ERROR) && !KS8842_USE_DMA(adapter))
762 ks8842_handle_rx(netdev, adapter);
766 ks8842_handle_tx(netdev, adapter);
769 ks8842_handle_rx_overrun(netdev, adapter);
772 ks8842_disable_tx(adapter);
773 ks8842_enable_tx(adapter);
777 ks8842_disable_rx(adapter);
778 ks8842_enable_rx(adapter);
782 spin_lock_irqsave(&adapter->lock, flags);
783 if (KS8842_USE_DMA(adapter))
784 ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
786 ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
787 iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
791 if (KS8842_USE_DMA(adapter))
792 ks8842_resume_dma(adapter);
794 spin_unlock_irqrestore(&adapter->lock, flags);
800 struct ks8842_adapter *adapter = netdev_priv(netdev);
802 u16 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
805 isr = ks8842_read16(adapter, 18, REG_ISR);
809 if (KS8842_USE_DMA(adapter))
811 ks8842_write16(adapter, 18, IRQ_RX, REG_IER);
814 ks8842_write16(adapter, 18, 0x00, REG_IER);
817 tasklet_schedule(&adapter->tasklet);
822 iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
827 ks8842_resume_dma(adapter);
835 struct ks8842_adapter *adapter = netdev_priv(netdev);
839 if (adapter->dma_rx.adesc)
840 tasklet_schedule(&adapter->dma_rx.tasklet);
846 struct ks8842_adapter *adapter = netdev_priv(netdev);
847 struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
861 static void ks8842_stop_dma(struct ks8842_adapter *adapter)
863 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
864 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
875 dma_unmap_single(adapter->dev, sg_dma_address(&rx_ctl->sg),
883 static void ks8842_dealloc_dma_bufs(struct ks8842_adapter *adapter)
885 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
886 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
888 ks8842_stop_dma(adapter);
901 dma_unmap_single(adapter->dev, sg_dma_address(&tx_ctl->sg),
916 struct ks8842_adapter *adapter = netdev_priv(netdev);
917 struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
918 struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
943 sg_dma_address(&tx_ctl->sg) = dma_map_single(adapter->dev,
945 if (dma_mapping_error(adapter->dev, sg_dma_address(&tx_ctl->sg))) {
962 ks8842_dealloc_dma_bufs(adapter);
970 struct ks8842_adapter *adapter = netdev_priv(netdev);
975 if (KS8842_USE_DMA(adapter)) {
982 ks8842_dealloc_dma_bufs(adapter);
988 ks8842_dealloc_dma_bufs(adapter);
989 adapter->dma_rx.channel = -1;
990 adapter->dma_tx.channel = -1;
995 ks8842_reset_hw(adapter);
997 ks8842_write_mac_addr(adapter, netdev->dev_addr);
999 ks8842_update_link_status(netdev, adapter);
1001 err = request_irq(adapter->irq, ks8842_irq, IRQF_SHARED, DRV_NAME,
1004 pr_err("Failed to request IRQ: %d: %d\n", adapter->irq, err);
1013 struct ks8842_adapter *adapter = netdev_priv(netdev);
1017 cancel_work_sync(&adapter->timeout_work);
1019 if (KS8842_USE_DMA(adapter))
1020 ks8842_dealloc_dma_bufs(adapter);
1023 free_irq(adapter->irq, netdev);
1026 ks8842_write16(adapter, 32, 0x0, REG_SW_ID_AND_ENABLE);
1035 struct ks8842_adapter *adapter = netdev_priv(netdev);
1039 if (KS8842_USE_DMA(adapter)) {
1043 spin_lock_irqsave(&adapter->lock, flags);
1044 if (adapter->dma_tx.adesc)
1046 spin_unlock_irqrestore(&adapter->lock, flags);
1052 if (ks8842_tx_fifo_space(adapter) < netdev->mtu + 8)
1060 struct ks8842_adapter *adapter = netdev_priv(netdev);
1071 ks8842_write_mac_addr(adapter, mac);
1077 struct ks8842_adapter *adapter =
1079 struct net_device *netdev = adapter->netdev;
1084 spin_lock_irqsave(&adapter->lock, flags);
1086 if (KS8842_USE_DMA(adapter))
1087 ks8842_stop_dma(adapter);
1090 ks8842_write16(adapter, 18, 0, REG_IER);
1091 ks8842_write16(adapter, 18, 0xFFFF, REG_ISR);
1095 spin_unlock_irqrestore(&adapter->lock, flags);
1097 ks8842_reset_hw(adapter);
1099 ks8842_write_mac_addr(adapter, netdev->dev_addr);
1101 ks8842_update_link_status(netdev, adapter);
1103 if (KS8842_USE_DMA(adapter))
1109 struct ks8842_adapter *adapter = netdev_priv(netdev);
1113 schedule_work(&adapter->timeout_work);
1134 struct ks8842_adapter *adapter;
1153 adapter = netdev_priv(netdev);
1154 adapter->netdev = netdev;
1155 INIT_WORK(&adapter->timeout_work, ks8842_tx_timeout_work);
1156 adapter->hw_addr = ioremap(iomem->start, resource_size(iomem));
1157 adapter->conf_flags = iomem->flags;
1159 if (!adapter->hw_addr)
1162 adapter->irq = platform_get_irq(pdev, 0);
1163 if (adapter->irq < 0) {
1164 err = adapter->irq;
1168 adapter->dev = (pdev->dev.parent) ? pdev->dev.parent : &pdev->dev;
1171 if (!(adapter->conf_flags & MICREL_KS884X) && pdata &&
1174 adapter->dma_rx.channel = pdata->rx_dma_channel;
1175 adapter->dma_tx.channel = pdata->tx_dma_channel;
1177 adapter->dma_rx.channel = -1;
1178 adapter->dma_tx.channel = -1;
1181 tasklet_setup(&adapter->tasklet, ks8842_tasklet);
1182 spin_lock_init(&adapter->lock);
1200 ks8842_init_mac_addr(adapter);
1206 id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);
1222 iounmap(adapter->hw_addr);
1234 struct ks8842_adapter *adapter = netdev_priv(netdev);
1238 tasklet_kill(&adapter->tasklet);
1239 iounmap(adapter->hw_addr);