Lines Matching +full:iommu +full:- +full:v1

1 // SPDX-License-Identifier: GPL-2.0-or-later
31 #include <linux/dma-mapping.h>
63 card->irq_mask |= GELIC_CARD_RXINT; in gelic_card_rx_irq_on()
64 gelic_card_set_irq_mask(card, card->irq_mask); in gelic_card_rx_irq_on()
68 card->irq_mask &= ~GELIC_CARD_RXINT; in gelic_card_rx_irq_off()
69 gelic_card_set_irq_mask(card, card->irq_mask); in gelic_card_rx_irq_off()
81 &card->ether_port_status, &v2); in gelic_card_get_ether_port_status()
84 ether_netdev = card->netdev[GELIC_PORT_ETHERNET_0]; in gelic_card_get_ether_port_status()
85 if (card->ether_port_status & GELIC_LV1_ETHER_LINK_UP) in gelic_card_get_ether_port_status()
93 * gelic_descr_get_status -- returns the status of a descriptor
101 return be32_to_cpu(descr->dmac_cmd_status) & GELIC_DESCR_DMA_STAT_MASK; in gelic_descr_get_status()
107 u64 v1, v2; in gelic_card_set_link_mode() local
111 GELIC_LV1_PHY_ETHERNET_0, mode, 0, &v1, &v2); in gelic_card_set_link_mode()
115 return -EBUSY; in gelic_card_set_link_mode()
118 card->link_mode = mode; in gelic_card_set_link_mode()
123 * gelic_card_disable_txdmac - disables the transmit DMA controller
141 * gelic_card_enable_rxdmac - enables the receive DMA controller
152 if (gelic_descr_get_status(card->rx_chain.head) != in gelic_card_enable_rxdmac()
155 be32_to_cpu(card->rx_chain.head->dmac_cmd_status)); in gelic_card_enable_rxdmac()
157 be32_to_cpu(card->rx_chain.head->next_descr_addr)); in gelic_card_enable_rxdmac()
159 card->rx_chain.head); in gelic_card_enable_rxdmac()
163 card->rx_chain.head->bus_addr, 0); in gelic_card_enable_rxdmac()
170 * gelic_card_disable_rxdmac - disables the receive DMA controller
188 * gelic_descr_set_status -- sets the status of a descriptor
198 descr->dmac_cmd_status = cpu_to_be32(status | in gelic_descr_set_status()
199 (be32_to_cpu(descr->dmac_cmd_status) & in gelic_descr_set_status()
211 * gelic_card_reset_chain - reset status of a descriptor chain
217 * and re-initialize the hardware chain for later use
225 for (descr = start_descr; start_descr != descr->next; descr++) { in gelic_card_reset_chain()
227 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); in gelic_card_reset_chain()
230 chain->head = start_descr; in gelic_card_reset_chain()
231 chain->tail = (descr - 1); in gelic_card_reset_chain()
233 (descr - 1)->next_descr_addr = 0; in gelic_card_reset_chain()
239 mutex_lock(&card->updown_lock); in gelic_card_up()
240 if (atomic_inc_return(&card->users) == 1) { in gelic_card_up()
243 gelic_card_set_irq_mask(card, card->irq_mask); in gelic_card_up()
247 napi_enable(&card->napi); in gelic_card_up()
249 mutex_unlock(&card->updown_lock); in gelic_card_up()
257 mutex_lock(&card->updown_lock); in gelic_card_down()
258 if (atomic_dec_if_positive(&card->users) == 0) { in gelic_card_down()
260 napi_disable(&card->napi); in gelic_card_down()
265 mask = card->irq_mask & (GELIC_CARD_WLAN_EVENT_RECEIVED | in gelic_card_down()
270 gelic_card_reset_chain(card, &card->rx_chain, in gelic_card_down()
271 card->descr + GELIC_NET_TX_DESCRIPTORS); in gelic_card_down()
275 mutex_unlock(&card->updown_lock); in gelic_card_down()
280 * gelic_card_free_chain - free descriptor chain
289 for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) { in gelic_card_free_chain()
290 dma_unmap_single(ctodev(card), descr->bus_addr, in gelic_card_free_chain()
292 descr->bus_addr = 0; in gelic_card_free_chain()
297 * gelic_card_init_chain - links descriptor chain
321 descr->bus_addr = in gelic_card_init_chain()
326 if (!descr->bus_addr) in gelic_card_init_chain()
329 descr->next = descr + 1; in gelic_card_init_chain()
330 descr->prev = descr - 1; in gelic_card_init_chain()
333 (descr - 1)->next = start_descr; in gelic_card_init_chain()
334 start_descr->prev = (descr - 1); in gelic_card_init_chain()
339 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); in gelic_card_init_chain()
342 chain->head = start_descr; in gelic_card_init_chain()
343 chain->tail = start_descr; in gelic_card_init_chain()
346 (descr - 1)->next_descr_addr = 0; in gelic_card_init_chain()
351 for (i--, descr--; 0 <= i; i--, descr--) in gelic_card_init_chain()
352 if (descr->bus_addr) in gelic_card_init_chain()
353 dma_unmap_single(ctodev(card), descr->bus_addr, in gelic_card_init_chain()
356 return -ENOMEM; in gelic_card_init_chain()
360 * gelic_descr_prepare_rx - reinitializes a rx descriptor
362 * @descr: descriptor to re-init
366 * allocates a new rx skb, iommu-maps it and attaches it to the descriptor.
367 * Activate the descriptor state-wise
382 descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1); in gelic_descr_prepare_rx()
383 if (!descr->skb) { in gelic_descr_prepare_rx()
384 descr->buf_addr = 0; /* tell DMAC don't touch memory */ in gelic_descr_prepare_rx()
385 return -ENOMEM; in gelic_descr_prepare_rx()
387 descr->buf_size = cpu_to_be32(bufsize); in gelic_descr_prepare_rx()
388 descr->dmac_cmd_status = 0; in gelic_descr_prepare_rx()
389 descr->result_size = 0; in gelic_descr_prepare_rx()
390 descr->valid_size = 0; in gelic_descr_prepare_rx()
391 descr->data_error = 0; in gelic_descr_prepare_rx()
393 offset = ((unsigned long)descr->skb->data) & in gelic_descr_prepare_rx()
394 (GELIC_NET_RXBUF_ALIGN - 1); in gelic_descr_prepare_rx()
396 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset); in gelic_descr_prepare_rx()
397 /* io-mmu-map the skb */ in gelic_descr_prepare_rx()
398 descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card), in gelic_descr_prepare_rx()
399 descr->skb->data, in gelic_descr_prepare_rx()
402 if (!descr->buf_addr) { in gelic_descr_prepare_rx()
403 dev_kfree_skb_any(descr->skb); in gelic_descr_prepare_rx()
404 descr->skb = NULL; in gelic_descr_prepare_rx()
406 "%s:Could not iommu-map rx buffer\n", __func__); in gelic_descr_prepare_rx()
408 return -ENOMEM; in gelic_descr_prepare_rx()
416 * gelic_card_release_rx_chain - free all skb of rx descr
422 struct gelic_descr *descr = card->rx_chain.head; in gelic_card_release_rx_chain()
425 if (descr->skb) { in gelic_card_release_rx_chain()
427 be32_to_cpu(descr->buf_addr), in gelic_card_release_rx_chain()
428 descr->skb->len, in gelic_card_release_rx_chain()
430 descr->buf_addr = 0; in gelic_card_release_rx_chain()
431 dev_kfree_skb_any(descr->skb); in gelic_card_release_rx_chain()
432 descr->skb = NULL; in gelic_card_release_rx_chain()
436 descr = descr->next; in gelic_card_release_rx_chain()
437 } while (descr != card->rx_chain.head); in gelic_card_release_rx_chain()
441 * gelic_card_fill_rx_chain - fills descriptors/skbs in the rx chains
445 * and iommu-maps them.
450 struct gelic_descr *descr = card->rx_chain.head; in gelic_card_fill_rx_chain()
454 if (!descr->skb) { in gelic_card_fill_rx_chain()
459 descr = descr->next; in gelic_card_fill_rx_chain()
460 } while (descr != card->rx_chain.head); in gelic_card_fill_rx_chain()
469 * gelic_card_alloc_rx_skbs - allocates rx skbs in rx descriptor chains
478 chain = &card->rx_chain; in gelic_card_alloc_rx_skbs()
480 chain->tail = card->rx_top->prev; /* point to the last */ in gelic_card_alloc_rx_skbs()
485 * gelic_descr_release_tx - processes a used tx descriptor
494 struct sk_buff *skb = descr->skb; in gelic_descr_release_tx()
496 BUG_ON(!(be32_to_cpu(descr->data_status) & GELIC_DESCR_TX_TAIL)); in gelic_descr_release_tx()
498 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), skb->len, in gelic_descr_release_tx()
502 descr->buf_addr = 0; in gelic_descr_release_tx()
503 descr->buf_size = 0; in gelic_descr_release_tx()
504 descr->next_descr_addr = 0; in gelic_descr_release_tx()
505 descr->result_size = 0; in gelic_descr_release_tx()
506 descr->valid_size = 0; in gelic_descr_release_tx()
507 descr->data_status = 0; in gelic_descr_release_tx()
508 descr->data_error = 0; in gelic_descr_release_tx()
509 descr->skb = NULL; in gelic_descr_release_tx()
517 netif_stop_queue(card->netdev[GELIC_PORT_ETHERNET_0]); in gelic_card_stop_queues()
519 if (card->netdev[GELIC_PORT_WIRELESS]) in gelic_card_stop_queues()
520 netif_stop_queue(card->netdev[GELIC_PORT_WIRELESS]); in gelic_card_stop_queues()
524 netif_wake_queue(card->netdev[GELIC_PORT_ETHERNET_0]); in gelic_card_wake_queues()
526 if (card->netdev[GELIC_PORT_WIRELESS]) in gelic_card_wake_queues()
527 netif_wake_queue(card->netdev[GELIC_PORT_WIRELESS]); in gelic_card_wake_queues()
530 * gelic_card_release_tx_chain - processes sent tx descriptors
543 for (tx_chain = &card->tx_chain; in gelic_card_release_tx_chain()
544 tx_chain->head != tx_chain->tail && tx_chain->tail; in gelic_card_release_tx_chain()
545 tx_chain->tail = tx_chain->tail->next) { in gelic_card_release_tx_chain()
546 status = gelic_descr_get_status(tx_chain->tail); in gelic_card_release_tx_chain()
547 netdev = tx_chain->tail->skb->dev; in gelic_card_release_tx_chain()
557 netdev->stats.tx_dropped++; in gelic_card_release_tx_chain()
561 if (tx_chain->tail->skb) { in gelic_card_release_tx_chain()
562 netdev->stats.tx_packets++; in gelic_card_release_tx_chain()
563 netdev->stats.tx_bytes += in gelic_card_release_tx_chain()
564 tx_chain->tail->skb->len; in gelic_card_release_tx_chain()
575 gelic_descr_release_tx(card, tx_chain->tail); in gelic_card_release_tx_chain()
584 * gelic_net_set_multi - sets multicast addresses and promisc flags
615 if ((netdev->flags & IFF_ALLMULTI) || in gelic_net_set_multi()
630 p = ha->addr; in gelic_net_set_multi()
646 * gelic_net_stop - called upon ifconfig down
668 * gelic_card_get_next_tx_descr - returns the next available tx descriptor
676 if (!card->tx_chain.head) in gelic_card_get_next_tx_descr()
679 if (card->tx_chain.tail != card->tx_chain.head->next && in gelic_card_get_next_tx_descr()
680 gelic_descr_get_status(card->tx_chain.head) == in gelic_card_get_next_tx_descr()
682 return card->tx_chain.head; in gelic_card_get_next_tx_descr()
689 * gelic_net_set_txdescr_cmdstat - sets the tx descriptor command field
700 if (skb->ip_summed != CHECKSUM_PARTIAL) in gelic_descr_set_tx_cmdstat()
701 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
707 if (skb->protocol == htons(ETH_P_IP)) { in gelic_descr_set_tx_cmdstat()
708 if (ip_hdr(skb)->protocol == IPPROTO_TCP) in gelic_descr_set_tx_cmdstat()
709 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
713 else if (ip_hdr(skb)->protocol == IPPROTO_UDP) in gelic_descr_set_tx_cmdstat()
714 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
718 * the stack should checksum non-tcp and non-udp in gelic_descr_set_tx_cmdstat()
721 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
745 memmove(skb->data, skb->data + VLAN_HLEN, 2 * ETH_ALEN); in gelic_put_vlan_tag()
747 veth->h_vlan_proto = cpu_to_be16(ETH_P_8021Q); in gelic_put_vlan_tag()
748 veth->h_vlan_TCI = htons(tag); in gelic_put_vlan_tag()
754 * gelic_descr_prepare_tx - setup a descriptor for sending packets
768 if (card->vlan_required) { in gelic_descr_prepare_tx()
772 type = netdev_port(skb->dev)->type; in gelic_descr_prepare_tx()
774 card->vlan[type].tx); in gelic_descr_prepare_tx()
776 return -ENOMEM; in gelic_descr_prepare_tx()
780 buf = dma_map_single(ctodev(card), skb->data, skb->len, DMA_TO_DEVICE); in gelic_descr_prepare_tx()
785 skb->data, skb->len); in gelic_descr_prepare_tx()
786 return -ENOMEM; in gelic_descr_prepare_tx()
789 descr->buf_addr = cpu_to_be32(buf); in gelic_descr_prepare_tx()
790 descr->buf_size = cpu_to_be32(skb->len); in gelic_descr_prepare_tx()
791 descr->skb = skb; in gelic_descr_prepare_tx()
792 descr->data_status = 0; in gelic_descr_prepare_tx()
793 descr->next_descr_addr = 0; /* terminate hw descr */ in gelic_descr_prepare_tx()
797 card->tx_chain.head = descr->next; in gelic_descr_prepare_tx()
802 * gelic_card_kick_txdma - enables TX DMA processing
812 if (card->tx_dma_progress) in gelic_card_kick_txdma()
816 card->tx_dma_progress = 1; in gelic_card_kick_txdma()
818 descr->bus_addr, 0); in gelic_card_kick_txdma()
820 card->tx_dma_progress = 0; in gelic_card_kick_txdma()
829 * gelic_net_xmit - transmits a frame over the device
842 spin_lock_irqsave(&card->tx_lock, flags); in gelic_net_xmit()
852 spin_unlock_irqrestore(&card->tx_lock, flags); in gelic_net_xmit()
862 netdev->stats.tx_dropped++; in gelic_net_xmit()
864 spin_unlock_irqrestore(&card->tx_lock, flags); in gelic_net_xmit()
871 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); in gelic_net_xmit()
882 netdev->stats.tx_dropped++; in gelic_net_xmit()
884 descr->data_status = cpu_to_be32(GELIC_DESCR_TX_TAIL); in gelic_net_xmit()
887 card->tx_chain.head = descr; in gelic_net_xmit()
889 descr->prev->next_descr_addr = 0; in gelic_net_xmit()
893 spin_unlock_irqrestore(&card->tx_lock, flags); in gelic_net_xmit()
898 * gelic_net_pass_skb_up - takes an skb from a descriptor and passes it on
903 * iommu-unmaps the skb, fills out skb structure and passes the data to the
911 struct sk_buff *skb = descr->skb; in gelic_net_pass_skb_up()
914 data_status = be32_to_cpu(descr->data_status); in gelic_net_pass_skb_up()
915 data_error = be32_to_cpu(descr->data_error); in gelic_net_pass_skb_up()
917 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), in gelic_net_pass_skb_up()
921 skb_put(skb, be32_to_cpu(descr->valid_size)? in gelic_net_pass_skb_up()
922 be32_to_cpu(descr->valid_size) : in gelic_net_pass_skb_up()
923 be32_to_cpu(descr->result_size)); in gelic_net_pass_skb_up()
924 if (!descr->valid_size) in gelic_net_pass_skb_up()
926 be32_to_cpu(descr->result_size), in gelic_net_pass_skb_up()
927 be32_to_cpu(descr->buf_size), in gelic_net_pass_skb_up()
928 be32_to_cpu(descr->dmac_cmd_status)); in gelic_net_pass_skb_up()
930 descr->skb = NULL; in gelic_net_pass_skb_up()
936 skb->protocol = eth_type_trans(skb, netdev); in gelic_net_pass_skb_up()
939 if (netdev->features & NETIF_F_RXCSUM) { in gelic_net_pass_skb_up()
942 skb->ip_summed = CHECKSUM_UNNECESSARY; in gelic_net_pass_skb_up()
949 netdev->stats.rx_packets++; in gelic_net_pass_skb_up()
950 netdev->stats.rx_bytes += skb->len; in gelic_net_pass_skb_up()
957 * gelic_card_decode_one_descr - processes an rx descriptor
962 * processes an rx descriptor by iommu-unmapping the data buffer and passing
968 struct gelic_descr_chain *chain = &card->rx_chain; in gelic_card_decode_one_descr()
969 struct gelic_descr *descr = chain->head; in gelic_card_decode_one_descr()
984 if (card->vlan_required) { in gelic_card_decode_one_descr()
987 vid = *(u16 *)(descr->skb->data) & VLAN_VID_MASK; in gelic_card_decode_one_descr()
989 if (card->vlan[i].rx == vid) { in gelic_card_decode_one_descr()
990 netdev = card->netdev[i]; in gelic_card_decode_one_descr()
999 netdev = card->netdev[GELIC_PORT_ETHERNET_0]; in gelic_card_decode_one_descr()
1006 netdev->stats.rx_dropped++; in gelic_card_decode_one_descr()
1039 be32_to_cpu(descr->dmac_cmd_status) & in gelic_card_decode_one_descr()
1046 descr->next_descr_addr = 0; in gelic_card_decode_one_descr()
1057 chain->tail = descr; in gelic_card_decode_one_descr()
1058 chain->head = descr->next; in gelic_card_decode_one_descr()
1063 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); in gelic_card_decode_one_descr()
1067 * thus re-enable it in gelic_card_decode_one_descr()
1077 * gelic_net_poll - NAPI poll function called by the stack to return packets
1104 * gelic_card_interrupt - event handler for gelic_net
1112 status = card->irq_status; in gelic_card_interrupt()
1117 status &= card->irq_mask; in gelic_card_interrupt()
1121 napi_schedule(&card->napi); in gelic_card_interrupt()
1125 spin_lock_irqsave(&card->tx_lock, flags); in gelic_card_interrupt()
1126 card->tx_dma_progress = 0; in gelic_card_interrupt()
1129 gelic_card_kick_txdma(card, card->tx_chain.tail); in gelic_card_interrupt()
1130 spin_unlock_irqrestore(&card->tx_lock, flags); in gelic_card_interrupt()
1140 gelic_wl_interrupt(card->netdev[GELIC_PORT_WIRELESS], status); in gelic_card_interrupt()
1148 * gelic_net_poll_controller - artificial interrupt for netconsole etc.
1158 gelic_card_interrupt(netdev->irq, netdev); in gelic_net_poll_controller()
1159 gelic_card_set_irq_mask(card, card->irq_mask); in gelic_net_poll_controller()
1164 * gelic_net_open - called upon ifconfig up
1176 dev_dbg(ctodev(card), " -> %s %p\n", __func__, netdev); in gelic_net_open()
1183 dev_dbg(ctodev(card), " <- %s\n", __func__); in gelic_net_open()
1190 strscpy(info->driver, DRV_NAME, sizeof(info->driver)); in gelic_net_get_drvinfo()
1191 strscpy(info->version, DRV_VERSION, sizeof(info->version)); in gelic_net_get_drvinfo()
1202 if (card->ether_port_status & GELIC_LV1_ETHER_FULL_DUPLEX) in gelic_ether_get_link_ksettings()
1203 cmd->base.duplex = DUPLEX_FULL; in gelic_ether_get_link_ksettings()
1205 cmd->base.duplex = DUPLEX_HALF; in gelic_ether_get_link_ksettings()
1207 switch (card->ether_port_status & GELIC_LV1_ETHER_SPEED_MASK) { in gelic_ether_get_link_ksettings()
1209 cmd->base.speed = SPEED_10; in gelic_ether_get_link_ksettings()
1212 cmd->base.speed = SPEED_100; in gelic_ether_get_link_ksettings()
1215 cmd->base.speed = SPEED_1000; in gelic_ether_get_link_ksettings()
1219 cmd->base.speed = SPEED_10; in gelic_ether_get_link_ksettings()
1228 if (card->link_mode & GELIC_LV1_ETHER_AUTO_NEG) { in gelic_ether_get_link_ksettings()
1229 cmd->base.autoneg = AUTONEG_ENABLE; in gelic_ether_get_link_ksettings()
1231 cmd->base.autoneg = AUTONEG_DISABLE; in gelic_ether_get_link_ksettings()
1234 cmd->base.port = PORT_TP; in gelic_ether_get_link_ksettings()
1236 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, in gelic_ether_get_link_ksettings()
1238 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, in gelic_ether_get_link_ksettings()
1252 if (cmd->base.autoneg == AUTONEG_ENABLE) { in gelic_ether_set_link_ksettings()
1255 switch (cmd->base.speed) { in gelic_ether_set_link_ksettings()
1266 return -EINVAL; in gelic_ether_set_link_ksettings()
1268 if (cmd->base.duplex == DUPLEX_FULL) { in gelic_ether_set_link_ksettings()
1270 } else if (cmd->base.speed == SPEED_1000) { in gelic_ether_set_link_ksettings()
1272 return -EINVAL; in gelic_ether_set_link_ksettings()
1288 wol->supported = WAKE_MAGIC; in gelic_net_get_wol()
1290 wol->supported = 0; in gelic_net_get_wol()
1292 wol->wolopts = ps3_sys_manager_get_wol() ? wol->supported : 0; in gelic_net_get_wol()
1293 memset(&wol->sopass, 0, sizeof(wol->sopass)); in gelic_net_get_wol()
1300 u64 v1, v2; in gelic_net_set_wol() local
1304 return -EPERM; in gelic_net_set_wol()
1306 if (wol->wolopts & ~WAKE_MAGIC) in gelic_net_set_wol()
1307 return -EINVAL; in gelic_net_set_wol()
1310 if (wol->wolopts & WAKE_MAGIC) { in gelic_net_set_wol()
1315 &v1, &v2); in gelic_net_set_wol()
1319 status = -EIO; in gelic_net_set_wol()
1326 &v1, &v2); in gelic_net_set_wol()
1332 status = -EIO; in gelic_net_set_wol()
1339 &v1, &v2); in gelic_net_set_wol()
1343 status = -EIO; in gelic_net_set_wol()
1350 &v1, &v2); in gelic_net_set_wol()
1356 status = -EIO; in gelic_net_set_wol()
1373 * gelic_net_tx_timeout_task - task scheduled by the watchdog timeout
1383 struct net_device *netdev = card->netdev[GELIC_PORT_ETHERNET_0]; in gelic_net_tx_timeout_task()
1387 if (!(netdev->flags & IFF_UP)) in gelic_net_tx_timeout_task()
1397 atomic_dec(&card->tx_timeout_task_counter); in gelic_net_tx_timeout_task()
1401 * gelic_net_tx_timeout - called when the tx timeout watchdog kicks in.
1412 atomic_inc(&card->tx_timeout_task_counter); in gelic_net_tx_timeout()
1413 if (netdev->flags & IFF_UP) in gelic_net_tx_timeout()
1414 schedule_work(&card->tx_timeout_task); in gelic_net_tx_timeout()
1416 atomic_dec(&card->tx_timeout_task_counter); in gelic_net_tx_timeout()
1433 * gelic_ether_setup_netdev_ops - initialization of net_device operations
1442 netdev->watchdog_timeo = GELIC_NET_WATCHDOG_TIMEOUT; in gelic_ether_setup_netdev_ops()
1445 netdev->ethtool_ops = &gelic_ether_ethtool_ops; in gelic_ether_setup_netdev_ops()
1446 netdev->netdev_ops = &gelic_netdevice_ops; in gelic_ether_setup_netdev_ops()
1450 * gelic_ether_setup_netdev - initialization of net_device
1462 u64 v1, v2; in gelic_net_setup_netdev() local
1464 netdev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM; in gelic_net_setup_netdev()
1466 netdev->features = NETIF_F_IP_CSUM; in gelic_net_setup_netdev()
1468 netdev->features |= NETIF_F_RXCSUM; in gelic_net_setup_netdev()
1472 0, 0, 0, &v1, &v2); in gelic_net_setup_netdev()
1473 v1 <<= 16; in gelic_net_setup_netdev()
1474 if (status || !is_valid_ether_addr((u8 *)&v1)) { in gelic_net_setup_netdev()
1478 return -EINVAL; in gelic_net_setup_netdev()
1480 eth_hw_addr_set(netdev, (u8 *)&v1); in gelic_net_setup_netdev()
1482 if (card->vlan_required) { in gelic_net_setup_netdev()
1483 netdev->hard_header_len += VLAN_HLEN; in gelic_net_setup_netdev()
1488 netdev->features |= NETIF_F_VLAN_CHALLENGED; in gelic_net_setup_netdev()
1491 /* MTU range: 64 - 1518 */ in gelic_net_setup_netdev()
1492 netdev->min_mtu = GELIC_NET_MIN_MTU; in gelic_net_setup_netdev()
1493 netdev->max_mtu = GELIC_NET_MAX_MTU; in gelic_net_setup_netdev()
1498 __func__, netdev->name, status); in gelic_net_setup_netdev()
1502 netdev->name, netdev->dev_addr); in gelic_net_setup_netdev()
1508 * gelic_alloc_card_net - allocates net_device and card structure
1531 GELIC_ALIGN - 1; in gelic_alloc_card_net()
1537 card->unalign = p; in gelic_alloc_card_net()
1544 kfree(card->unalign); in gelic_alloc_card_net()
1550 port->netdev = *netdev; in gelic_alloc_card_net()
1551 port->card = card; in gelic_alloc_card_net()
1552 port->type = GELIC_PORT_ETHERNET_0; in gelic_alloc_card_net()
1555 card->netdev[GELIC_PORT_ETHERNET_0] = *netdev; in gelic_alloc_card_net()
1557 INIT_WORK(&card->tx_timeout_task, gelic_net_tx_timeout_task); in gelic_alloc_card_net()
1558 init_waitqueue_head(&card->waitq); in gelic_alloc_card_net()
1559 atomic_set(&card->tx_timeout_task_counter, 0); in gelic_alloc_card_net()
1560 mutex_init(&card->updown_lock); in gelic_alloc_card_net()
1561 atomic_set(&card->users, 0); in gelic_alloc_card_net()
1568 u64 v1, v2; in gelic_card_get_vlan_info() local
1590 0, 0, &v1, &v2); in gelic_card_get_vlan_info()
1591 if (status || !v1) { in gelic_card_get_vlan_info()
1596 card->vlan[i].tx = 0; in gelic_card_get_vlan_info()
1597 card->vlan[i].rx = 0; in gelic_card_get_vlan_info()
1600 card->vlan[i].tx = (u16)v1; in gelic_card_get_vlan_info()
1606 0, 0, &v1, &v2); in gelic_card_get_vlan_info()
1607 if (status || !v1) { in gelic_card_get_vlan_info()
1612 card->vlan[i].tx = 0; in gelic_card_get_vlan_info()
1613 card->vlan[i].rx = 0; in gelic_card_get_vlan_info()
1616 card->vlan[i].rx = (u16)v1; in gelic_card_get_vlan_info()
1619 i, card->vlan[i].tx, card->vlan[i].rx); in gelic_card_get_vlan_info()
1622 if (card->vlan[GELIC_PORT_ETHERNET_0].tx) { in gelic_card_get_vlan_info()
1623 BUG_ON(!card->vlan[GELIC_PORT_WIRELESS].tx); in gelic_card_get_vlan_info()
1624 card->vlan_required = 1; in gelic_card_get_vlan_info()
1626 card->vlan_required = 0; in gelic_card_get_vlan_info()
1630 card->vlan[GELIC_PORT_WIRELESS].tx = 0; in gelic_card_get_vlan_info()
1631 card->vlan[GELIC_PORT_WIRELESS].rx = 0; in gelic_card_get_vlan_info()
1635 card->vlan_required? "enabled" : "disabled"); in gelic_card_get_vlan_info()
1638 * ps3_gelic_driver_probe - add a device to the control of this driver
1653 dev_dbg(&dev->core, "%s:ps3_open_hv_device failed\n", in ps3_gelic_driver_probe()
1658 result = ps3_dma_region_create(dev->d_region); in ps3_gelic_driver_probe()
1661 dev_dbg(&dev->core, "%s:ps3_dma_region_create failed(%d)\n", in ps3_gelic_driver_probe()
1670 dev_info(&dev->core, "%s:gelic_net_alloc_card failed\n", in ps3_gelic_driver_probe()
1672 result = -ENOMEM; in ps3_gelic_driver_probe()
1676 card->dev = dev; in ps3_gelic_driver_probe()
1681 card->link_mode = GELIC_LV1_ETHER_AUTO_NEG; in ps3_gelic_driver_probe()
1686 ps3_mm_phys_to_lpar(__pa(&card->irq_status)), in ps3_gelic_driver_probe()
1690 dev_dbg(&dev->core, in ps3_gelic_driver_probe()
1693 result = -EIO; in ps3_gelic_driver_probe()
1698 &card->irq); in ps3_gelic_driver_probe()
1704 result = -EPERM; in ps3_gelic_driver_probe()
1707 result = request_irq(card->irq, gelic_card_interrupt, in ps3_gelic_driver_probe()
1708 0, netdev->name, card); in ps3_gelic_driver_probe()
1717 card->irq_mask = GELIC_CARD_RXINT | GELIC_CARD_TXINT | in ps3_gelic_driver_probe()
1721 result = gelic_card_init_chain(card, &card->tx_chain, in ps3_gelic_driver_probe()
1722 card->descr, GELIC_NET_TX_DESCRIPTORS); in ps3_gelic_driver_probe()
1725 result = gelic_card_init_chain(card, &card->rx_chain, in ps3_gelic_driver_probe()
1726 card->descr + GELIC_NET_TX_DESCRIPTORS, in ps3_gelic_driver_probe()
1732 card->tx_top = card->tx_chain.head; in ps3_gelic_driver_probe()
1733 card->rx_top = card->rx_chain.head; in ps3_gelic_driver_probe()
1735 card->rx_top, card->tx_top, sizeof(struct gelic_descr), in ps3_gelic_driver_probe()
1742 spin_lock_init(&card->tx_lock); in ps3_gelic_driver_probe()
1743 card->tx_dma_progress = 0; in ps3_gelic_driver_probe()
1746 netdev->irq = card->irq; in ps3_gelic_driver_probe()
1747 SET_NETDEV_DEV(netdev, &card->dev->core); in ps3_gelic_driver_probe()
1748 gelic_ether_setup_netdev_ops(netdev, &card->napi); in ps3_gelic_driver_probe()
1751 dev_dbg(&dev->core, "%s: setup_netdev failed %d\n", in ps3_gelic_driver_probe()
1759 dev_dbg(&dev->core, "%s: WL init failed\n", __func__); in ps3_gelic_driver_probe()
1768 gelic_card_free_chain(card, card->rx_chain.head); in ps3_gelic_driver_probe()
1770 gelic_card_free_chain(card, card->tx_chain.head); in ps3_gelic_driver_probe()
1772 free_irq(card->irq, card); in ps3_gelic_driver_probe()
1773 netdev->irq = 0; in ps3_gelic_driver_probe()
1775 ps3_sb_event_receive_port_destroy(dev, card->irq); in ps3_gelic_driver_probe()
1782 kfree(netdev_card(netdev)->unalign); in ps3_gelic_driver_probe()
1785 ps3_dma_region_free(dev->d_region); in ps3_gelic_driver_probe()
1793 * ps3_gelic_driver_remove - remove a device from the control of this driver
1802 /* set auto-negotiation */ in ps3_gelic_driver_remove()
1819 gelic_card_free_chain(card, card->tx_top); in ps3_gelic_driver_remove()
1820 gelic_card_free_chain(card, card->rx_top); in ps3_gelic_driver_remove()
1822 netdev0 = card->netdev[GELIC_PORT_ETHERNET_0]; in ps3_gelic_driver_remove()
1824 free_irq(card->irq, card); in ps3_gelic_driver_remove()
1825 netdev0->irq = 0; in ps3_gelic_driver_remove()
1826 ps3_sb_event_receive_port_destroy(card->dev, card->irq); in ps3_gelic_driver_remove()
1828 wait_event(card->waitq, in ps3_gelic_driver_remove()
1829 atomic_read(&card->tx_timeout_task_counter) == 0); in ps3_gelic_driver_remove()
1835 kfree(netdev_card(netdev0)->unalign); in ps3_gelic_driver_remove()
1840 ps3_dma_region_free(dev->d_region); in ps3_gelic_driver_remove()
1860 : -ENODEV; in ps3_gelic_driver_init()