Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.30-rc8 1841 lines 48 kB view raw
1/* 2 * PS3 gelic network driver. 3 * 4 * Copyright (C) 2007 Sony Computer Entertainment Inc. 5 * Copyright 2006, 2007 Sony Corporation 6 * 7 * This file is based on: spider_net.c 8 * 9 * (C) Copyright IBM Corp. 2005 10 * 11 * Authors : Utz Bacher <utz.bacher@de.ibm.com> 12 * Jens Osterkamp <Jens.Osterkamp@de.ibm.com> 13 * 14 * This program is free software; you can redistribute it and/or modify 15 * it under the terms of the GNU General Public License as published by 16 * the Free Software Foundation; either version 2, or (at your option) 17 * any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, write to the Free Software 26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 27 */ 28 29#undef DEBUG 30 31#include <linux/kernel.h> 32#include <linux/module.h> 33 34#include <linux/etherdevice.h> 35#include <linux/ethtool.h> 36#include <linux/if_vlan.h> 37 38#include <linux/in.h> 39#include <linux/ip.h> 40#include <linux/tcp.h> 41 42#include <linux/dma-mapping.h> 43#include <net/checksum.h> 44#include <asm/firmware.h> 45#include <asm/ps3.h> 46#include <asm/lv1call.h> 47 48#include "ps3_gelic_net.h" 49#include "ps3_gelic_wireless.h" 50 51#define DRV_NAME "Gelic Network Driver" 52#define DRV_VERSION "2.0" 53 54MODULE_AUTHOR("SCE Inc."); 55MODULE_DESCRIPTION("Gelic Network driver"); 56MODULE_LICENSE("GPL"); 57 58 59static inline void gelic_card_enable_rxdmac(struct gelic_card *card); 60static inline void gelic_card_disable_rxdmac(struct gelic_card *card); 61static inline void gelic_card_disable_txdmac(struct gelic_card *card); 62static inline void gelic_card_reset_chain(struct gelic_card *card, 63 struct gelic_descr_chain *chain, 64 struct gelic_descr *start_descr); 65 66/* set irq_mask */ 67int gelic_card_set_irq_mask(struct gelic_card *card, u64 mask) 68{ 69 int status; 70 71 status = lv1_net_set_interrupt_mask(bus_id(card), dev_id(card), 72 mask, 0); 73 if (status) 74 dev_info(ctodev(card), 75 "%s failed %d\n", __func__, status); 76 return status; 77} 78 79static inline void gelic_card_rx_irq_on(struct gelic_card *card) 80{ 81 card->irq_mask |= GELIC_CARD_RXINT; 82 gelic_card_set_irq_mask(card, card->irq_mask); 83} 84static inline void gelic_card_rx_irq_off(struct gelic_card *card) 85{ 86 card->irq_mask &= ~GELIC_CARD_RXINT; 87 gelic_card_set_irq_mask(card, card->irq_mask); 88} 89 90static void gelic_card_get_ether_port_status(struct gelic_card *card, 91 int inform) 92{ 93 u64 v2; 94 struct net_device *ether_netdev; 95 96 lv1_net_control(bus_id(card), dev_id(card), 97 GELIC_LV1_GET_ETH_PORT_STATUS, 98 GELIC_LV1_VLAN_TX_ETHERNET, 0, 0, 99 &card->ether_port_status, &v2); 100 101 if (inform) { 102 ether_netdev = card->netdev[GELIC_PORT_ETHERNET]; 103 if (card->ether_port_status & GELIC_LV1_ETHER_LINK_UP) 104 netif_carrier_on(ether_netdev); 105 else 106 netif_carrier_off(ether_netdev); 107 } 108} 109 110void gelic_card_up(struct gelic_card *card) 111{ 112 pr_debug("%s: called\n", __func__); 113 mutex_lock(&card->updown_lock); 114 if (atomic_inc_return(&card->users) == 1) { 115 pr_debug("%s: real do\n", __func__); 116 /* enable irq */ 117 gelic_card_set_irq_mask(card, card->irq_mask); 118 /* start rx */ 119 gelic_card_enable_rxdmac(card); 120 121 napi_enable(&card->napi); 122 } 123 mutex_unlock(&card->updown_lock); 124 pr_debug("%s: done\n", __func__); 125} 126 127void gelic_card_down(struct gelic_card *card) 128{ 129 u64 mask; 130 pr_debug("%s: called\n", __func__); 131 mutex_lock(&card->updown_lock); 132 if (atomic_dec_if_positive(&card->users) == 0) { 133 pr_debug("%s: real do\n", __func__); 134 napi_disable(&card->napi); 135 /* 136 * Disable irq. Wireless interrupts will 137 * be disabled later if any 138 */ 139 mask = card->irq_mask & (GELIC_CARD_WLAN_EVENT_RECEIVED | 140 GELIC_CARD_WLAN_COMMAND_COMPLETED); 141 gelic_card_set_irq_mask(card, mask); 142 /* stop rx */ 143 gelic_card_disable_rxdmac(card); 144 gelic_card_reset_chain(card, &card->rx_chain, 145 card->descr + GELIC_NET_TX_DESCRIPTORS); 146 /* stop tx */ 147 gelic_card_disable_txdmac(card); 148 } 149 mutex_unlock(&card->updown_lock); 150 pr_debug("%s: done\n", __func__); 151} 152 153/** 154 * gelic_descr_get_status -- returns the status of a descriptor 155 * @descr: descriptor to look at 156 * 157 * returns the status as in the dmac_cmd_status field of the descriptor 158 */ 159static enum gelic_descr_dma_status 160gelic_descr_get_status(struct gelic_descr *descr) 161{ 162 return be32_to_cpu(descr->dmac_cmd_status) & GELIC_DESCR_DMA_STAT_MASK; 163} 164 165/** 166 * gelic_descr_set_status -- sets the status of a descriptor 167 * @descr: descriptor to change 168 * @status: status to set in the descriptor 169 * 170 * changes the status to the specified value. Doesn't change other bits 171 * in the status 172 */ 173static void gelic_descr_set_status(struct gelic_descr *descr, 174 enum gelic_descr_dma_status status) 175{ 176 descr->dmac_cmd_status = cpu_to_be32(status | 177 (be32_to_cpu(descr->dmac_cmd_status) & 178 ~GELIC_DESCR_DMA_STAT_MASK)); 179 /* 180 * dma_cmd_status field is used to indicate whether the descriptor 181 * is valid or not. 182 * Usually caller of this function wants to inform that to the 183 * hardware, so we assure here the hardware sees the change. 184 */ 185 wmb(); 186} 187 188/** 189 * gelic_card_free_chain - free descriptor chain 190 * @card: card structure 191 * @descr_in: address of desc 192 */ 193static void gelic_card_free_chain(struct gelic_card *card, 194 struct gelic_descr *descr_in) 195{ 196 struct gelic_descr *descr; 197 198 for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) { 199 dma_unmap_single(ctodev(card), descr->bus_addr, 200 GELIC_DESCR_SIZE, DMA_BIDIRECTIONAL); 201 descr->bus_addr = 0; 202 } 203} 204 205/** 206 * gelic_card_init_chain - links descriptor chain 207 * @card: card structure 208 * @chain: address of chain 209 * @start_descr: address of descriptor array 210 * @no: number of descriptors 211 * 212 * we manage a circular list that mirrors the hardware structure, 213 * except that the hardware uses bus addresses. 214 * 215 * returns 0 on success, <0 on failure 216 */ 217static int gelic_card_init_chain(struct gelic_card *card, 218 struct gelic_descr_chain *chain, 219 struct gelic_descr *start_descr, int no) 220{ 221 int i; 222 struct gelic_descr *descr; 223 224 descr = start_descr; 225 memset(descr, 0, sizeof(*descr) * no); 226 227 /* set up the hardware pointers in each descriptor */ 228 for (i = 0; i < no; i++, descr++) { 229 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); 230 descr->bus_addr = 231 dma_map_single(ctodev(card), descr, 232 GELIC_DESCR_SIZE, 233 DMA_BIDIRECTIONAL); 234 235 if (!descr->bus_addr) 236 goto iommu_error; 237 238 descr->next = descr + 1; 239 descr->prev = descr - 1; 240 } 241 /* make them as ring */ 242 (descr - 1)->next = start_descr; 243 start_descr->prev = (descr - 1); 244 245 /* chain bus addr of hw descriptor */ 246 descr = start_descr; 247 for (i = 0; i < no; i++, descr++) { 248 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); 249 } 250 251 chain->head = start_descr; 252 chain->tail = start_descr; 253 254 /* do not chain last hw descriptor */ 255 (descr - 1)->next_descr_addr = 0; 256 257 return 0; 258 259iommu_error: 260 for (i--, descr--; 0 <= i; i--, descr--) 261 if (descr->bus_addr) 262 dma_unmap_single(ctodev(card), descr->bus_addr, 263 GELIC_DESCR_SIZE, 264 DMA_BIDIRECTIONAL); 265 return -ENOMEM; 266} 267 268/** 269 * gelic_card_reset_chain - reset status of a descriptor chain 270 * @card: card structure 271 * @chain: address of chain 272 * @start_descr: address of descriptor array 273 * 274 * Reset the status of dma descriptors to ready state 275 * and re-initialize the hardware chain for later use 276 */ 277static void gelic_card_reset_chain(struct gelic_card *card, 278 struct gelic_descr_chain *chain, 279 struct gelic_descr *start_descr) 280{ 281 struct gelic_descr *descr; 282 283 for (descr = start_descr; start_descr != descr->next; descr++) { 284 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED); 285 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); 286 } 287 288 chain->head = start_descr; 289 chain->tail = (descr - 1); 290 291 (descr - 1)->next_descr_addr = 0; 292} 293/** 294 * gelic_descr_prepare_rx - reinitializes a rx descriptor 295 * @card: card structure 296 * @descr: descriptor to re-init 297 * 298 * return 0 on succes, <0 on failure 299 * 300 * allocates a new rx skb, iommu-maps it and attaches it to the descriptor. 301 * Activate the descriptor state-wise 302 */ 303static int gelic_descr_prepare_rx(struct gelic_card *card, 304 struct gelic_descr *descr) 305{ 306 int offset; 307 unsigned int bufsize; 308 309 if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE) 310 dev_info(ctodev(card), "%s: ERROR status \n", __func__); 311 /* we need to round up the buffer size to a multiple of 128 */ 312 bufsize = ALIGN(GELIC_NET_MAX_MTU, GELIC_NET_RXBUF_ALIGN); 313 314 /* and we need to have it 128 byte aligned, therefore we allocate a 315 * bit more */ 316 descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1); 317 if (!descr->skb) { 318 descr->buf_addr = 0; /* tell DMAC don't touch memory */ 319 dev_info(ctodev(card), 320 "%s:allocate skb failed !!\n", __func__); 321 return -ENOMEM; 322 } 323 descr->buf_size = cpu_to_be32(bufsize); 324 descr->dmac_cmd_status = 0; 325 descr->result_size = 0; 326 descr->valid_size = 0; 327 descr->data_error = 0; 328 329 offset = ((unsigned long)descr->skb->data) & 330 (GELIC_NET_RXBUF_ALIGN - 1); 331 if (offset) 332 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset); 333 /* io-mmu-map the skb */ 334 descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card), 335 descr->skb->data, 336 GELIC_NET_MAX_MTU, 337 DMA_FROM_DEVICE)); 338 if (!descr->buf_addr) { 339 dev_kfree_skb_any(descr->skb); 340 descr->skb = NULL; 341 dev_info(ctodev(card), 342 "%s:Could not iommu-map rx buffer\n", __func__); 343 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); 344 return -ENOMEM; 345 } else { 346 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED); 347 return 0; 348 } 349} 350 351/** 352 * gelic_card_release_rx_chain - free all skb of rx descr 353 * @card: card structure 354 * 355 */ 356static void gelic_card_release_rx_chain(struct gelic_card *card) 357{ 358 struct gelic_descr *descr = card->rx_chain.head; 359 360 do { 361 if (descr->skb) { 362 dma_unmap_single(ctodev(card), 363 be32_to_cpu(descr->buf_addr), 364 descr->skb->len, 365 DMA_FROM_DEVICE); 366 descr->buf_addr = 0; 367 dev_kfree_skb_any(descr->skb); 368 descr->skb = NULL; 369 gelic_descr_set_status(descr, 370 GELIC_DESCR_DMA_NOT_IN_USE); 371 } 372 descr = descr->next; 373 } while (descr != card->rx_chain.head); 374} 375 376/** 377 * gelic_card_fill_rx_chain - fills descriptors/skbs in the rx chains 378 * @card: card structure 379 * 380 * fills all descriptors in the rx chain: allocates skbs 381 * and iommu-maps them. 382 * returns 0 on success, < 0 on failure 383 */ 384static int gelic_card_fill_rx_chain(struct gelic_card *card) 385{ 386 struct gelic_descr *descr = card->rx_chain.head; 387 int ret; 388 389 do { 390 if (!descr->skb) { 391 ret = gelic_descr_prepare_rx(card, descr); 392 if (ret) 393 goto rewind; 394 } 395 descr = descr->next; 396 } while (descr != card->rx_chain.head); 397 398 return 0; 399rewind: 400 gelic_card_release_rx_chain(card); 401 return ret; 402} 403 404/** 405 * gelic_card_alloc_rx_skbs - allocates rx skbs in rx descriptor chains 406 * @card: card structure 407 * 408 * returns 0 on success, < 0 on failure 409 */ 410static int gelic_card_alloc_rx_skbs(struct gelic_card *card) 411{ 412 struct gelic_descr_chain *chain; 413 int ret; 414 chain = &card->rx_chain; 415 ret = gelic_card_fill_rx_chain(card); 416 chain->tail = card->rx_top->prev; /* point to the last */ 417 return ret; 418} 419 420/** 421 * gelic_descr_release_tx - processes a used tx descriptor 422 * @card: card structure 423 * @descr: descriptor to release 424 * 425 * releases a used tx descriptor (unmapping, freeing of skb) 426 */ 427static void gelic_descr_release_tx(struct gelic_card *card, 428 struct gelic_descr *descr) 429{ 430 struct sk_buff *skb = descr->skb; 431 432 BUG_ON(!(be32_to_cpu(descr->data_status) & GELIC_DESCR_TX_TAIL)); 433 434 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), skb->len, 435 DMA_TO_DEVICE); 436 dev_kfree_skb_any(skb); 437 438 descr->buf_addr = 0; 439 descr->buf_size = 0; 440 descr->next_descr_addr = 0; 441 descr->result_size = 0; 442 descr->valid_size = 0; 443 descr->data_status = 0; 444 descr->data_error = 0; 445 descr->skb = NULL; 446 447 /* set descr status */ 448 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); 449} 450 451static void gelic_card_stop_queues(struct gelic_card *card) 452{ 453 netif_stop_queue(card->netdev[GELIC_PORT_ETHERNET]); 454 455 if (card->netdev[GELIC_PORT_WIRELESS]) 456 netif_stop_queue(card->netdev[GELIC_PORT_WIRELESS]); 457} 458static void gelic_card_wake_queues(struct gelic_card *card) 459{ 460 netif_wake_queue(card->netdev[GELIC_PORT_ETHERNET]); 461 462 if (card->netdev[GELIC_PORT_WIRELESS]) 463 netif_wake_queue(card->netdev[GELIC_PORT_WIRELESS]); 464} 465/** 466 * gelic_card_release_tx_chain - processes sent tx descriptors 467 * @card: adapter structure 468 * @stop: net_stop sequence 469 * 470 * releases the tx descriptors that gelic has finished with 471 */ 472static void gelic_card_release_tx_chain(struct gelic_card *card, int stop) 473{ 474 struct gelic_descr_chain *tx_chain; 475 enum gelic_descr_dma_status status; 476 struct net_device *netdev; 477 int release = 0; 478 479 for (tx_chain = &card->tx_chain; 480 tx_chain->head != tx_chain->tail && tx_chain->tail; 481 tx_chain->tail = tx_chain->tail->next) { 482 status = gelic_descr_get_status(tx_chain->tail); 483 netdev = tx_chain->tail->skb->dev; 484 switch (status) { 485 case GELIC_DESCR_DMA_RESPONSE_ERROR: 486 case GELIC_DESCR_DMA_PROTECTION_ERROR: 487 case GELIC_DESCR_DMA_FORCE_END: 488 if (printk_ratelimit()) 489 dev_info(ctodev(card), 490 "%s: forcing end of tx descriptor " \ 491 "with status %x\n", 492 __func__, status); 493 netdev->stats.tx_dropped++; 494 break; 495 496 case GELIC_DESCR_DMA_COMPLETE: 497 if (tx_chain->tail->skb) { 498 netdev->stats.tx_packets++; 499 netdev->stats.tx_bytes += 500 tx_chain->tail->skb->len; 501 } 502 break; 503 504 case GELIC_DESCR_DMA_CARDOWNED: 505 /* pending tx request */ 506 default: 507 /* any other value (== GELIC_DESCR_DMA_NOT_IN_USE) */ 508 if (!stop) 509 goto out; 510 } 511 gelic_descr_release_tx(card, tx_chain->tail); 512 release ++; 513 } 514out: 515 if (!stop && release) 516 gelic_card_wake_queues(card); 517} 518 519/** 520 * gelic_net_set_multi - sets multicast addresses and promisc flags 521 * @netdev: interface device structure 522 * 523 * gelic_net_set_multi configures multicast addresses as needed for the 524 * netdev interface. It also sets up multicast, allmulti and promisc 525 * flags appropriately 526 */ 527void gelic_net_set_multi(struct net_device *netdev) 528{ 529 struct gelic_card *card = netdev_card(netdev); 530 struct dev_mc_list *mc; 531 unsigned int i; 532 uint8_t *p; 533 u64 addr; 534 int status; 535 536 /* clear all multicast address */ 537 status = lv1_net_remove_multicast_address(bus_id(card), dev_id(card), 538 0, 1); 539 if (status) 540 dev_err(ctodev(card), 541 "lv1_net_remove_multicast_address failed %d\n", 542 status); 543 /* set broadcast address */ 544 status = lv1_net_add_multicast_address(bus_id(card), dev_id(card), 545 GELIC_NET_BROADCAST_ADDR, 0); 546 if (status) 547 dev_err(ctodev(card), 548 "lv1_net_add_multicast_address failed, %d\n", 549 status); 550 551 if ((netdev->flags & IFF_ALLMULTI) || 552 (netdev->mc_count > GELIC_NET_MC_COUNT_MAX)) { 553 status = lv1_net_add_multicast_address(bus_id(card), 554 dev_id(card), 555 0, 1); 556 if (status) 557 dev_err(ctodev(card), 558 "lv1_net_add_multicast_address failed, %d\n", 559 status); 560 return; 561 } 562 563 /* set multicast addresses */ 564 for (mc = netdev->mc_list; mc; mc = mc->next) { 565 addr = 0; 566 p = mc->dmi_addr; 567 for (i = 0; i < ETH_ALEN; i++) { 568 addr <<= 8; 569 addr |= *p++; 570 } 571 status = lv1_net_add_multicast_address(bus_id(card), 572 dev_id(card), 573 addr, 0); 574 if (status) 575 dev_err(ctodev(card), 576 "lv1_net_add_multicast_address failed, %d\n", 577 status); 578 } 579} 580 581/** 582 * gelic_card_enable_rxdmac - enables the receive DMA controller 583 * @card: card structure 584 * 585 * gelic_card_enable_rxdmac enables the DMA controller by setting RX_DMA_EN 586 * in the GDADMACCNTR register 587 */ 588static inline void gelic_card_enable_rxdmac(struct gelic_card *card) 589{ 590 int status; 591 592#ifdef DEBUG 593 if (gelic_descr_get_status(card->rx_chain.head) != 594 GELIC_DESCR_DMA_CARDOWNED) { 595 printk(KERN_ERR "%s: status=%x\n", __func__, 596 be32_to_cpu(card->rx_chain.head->dmac_cmd_status)); 597 printk(KERN_ERR "%s: nextphy=%x\n", __func__, 598 be32_to_cpu(card->rx_chain.head->next_descr_addr)); 599 printk(KERN_ERR "%s: head=%p\n", __func__, 600 card->rx_chain.head); 601 } 602#endif 603 status = lv1_net_start_rx_dma(bus_id(card), dev_id(card), 604 card->rx_chain.head->bus_addr, 0); 605 if (status) 606 dev_info(ctodev(card), 607 "lv1_net_start_rx_dma failed, status=%d\n", status); 608} 609 610/** 611 * gelic_card_disable_rxdmac - disables the receive DMA controller 612 * @card: card structure 613 * 614 * gelic_card_disable_rxdmac terminates processing on the DMA controller by 615 * turing off DMA and issueing a force end 616 */ 617static inline void gelic_card_disable_rxdmac(struct gelic_card *card) 618{ 619 int status; 620 621 /* this hvc blocks until the DMA in progress really stopped */ 622 status = lv1_net_stop_rx_dma(bus_id(card), dev_id(card), 0); 623 if (status) 624 dev_err(ctodev(card), 625 "lv1_net_stop_rx_dma faild, %d\n", status); 626} 627 628/** 629 * gelic_card_disable_txdmac - disables the transmit DMA controller 630 * @card: card structure 631 * 632 * gelic_card_disable_txdmac terminates processing on the DMA controller by 633 * turing off DMA and issueing a force end 634 */ 635static inline void gelic_card_disable_txdmac(struct gelic_card *card) 636{ 637 int status; 638 639 /* this hvc blocks until the DMA in progress really stopped */ 640 status = lv1_net_stop_tx_dma(bus_id(card), dev_id(card), 0); 641 if (status) 642 dev_err(ctodev(card), 643 "lv1_net_stop_tx_dma faild, status=%d\n", status); 644} 645 646/** 647 * gelic_net_stop - called upon ifconfig down 648 * @netdev: interface device structure 649 * 650 * always returns 0 651 */ 652int gelic_net_stop(struct net_device *netdev) 653{ 654 struct gelic_card *card; 655 656 pr_debug("%s: start\n", __func__); 657 658 netif_stop_queue(netdev); 659 netif_carrier_off(netdev); 660 661 card = netdev_card(netdev); 662 gelic_card_down(card); 663 664 pr_debug("%s: done\n", __func__); 665 return 0; 666} 667 668/** 669 * gelic_card_get_next_tx_descr - returns the next available tx descriptor 670 * @card: device structure to get descriptor from 671 * 672 * returns the address of the next descriptor, or NULL if not available. 673 */ 674static struct gelic_descr * 675gelic_card_get_next_tx_descr(struct gelic_card *card) 676{ 677 if (!card->tx_chain.head) 678 return NULL; 679 /* see if the next descriptor is free */ 680 if (card->tx_chain.tail != card->tx_chain.head->next && 681 gelic_descr_get_status(card->tx_chain.head) == 682 GELIC_DESCR_DMA_NOT_IN_USE) 683 return card->tx_chain.head; 684 else 685 return NULL; 686 687} 688 689/** 690 * gelic_net_set_txdescr_cmdstat - sets the tx descriptor command field 691 * @descr: descriptor structure to fill out 692 * @skb: packet to consider 693 * 694 * fills out the command and status field of the descriptor structure, 695 * depending on hardware checksum settings. This function assumes a wmb() 696 * has executed before. 697 */ 698static void gelic_descr_set_tx_cmdstat(struct gelic_descr *descr, 699 struct sk_buff *skb) 700{ 701 if (skb->ip_summed != CHECKSUM_PARTIAL) 702 descr->dmac_cmd_status = 703 cpu_to_be32(GELIC_DESCR_DMA_CMD_NO_CHKSUM | 704 GELIC_DESCR_TX_DMA_FRAME_TAIL); 705 else { 706 /* is packet ip? 707 * if yes: tcp? udp? */ 708 if (skb->protocol == htons(ETH_P_IP)) { 709 if (ip_hdr(skb)->protocol == IPPROTO_TCP) 710 descr->dmac_cmd_status = 711 cpu_to_be32(GELIC_DESCR_DMA_CMD_TCP_CHKSUM | 712 GELIC_DESCR_TX_DMA_FRAME_TAIL); 713 714 else if (ip_hdr(skb)->protocol == IPPROTO_UDP) 715 descr->dmac_cmd_status = 716 cpu_to_be32(GELIC_DESCR_DMA_CMD_UDP_CHKSUM | 717 GELIC_DESCR_TX_DMA_FRAME_TAIL); 718 else /* 719 * the stack should checksum non-tcp and non-udp 720 * packets on his own: NETIF_F_IP_CSUM 721 */ 722 descr->dmac_cmd_status = 723 cpu_to_be32(GELIC_DESCR_DMA_CMD_NO_CHKSUM | 724 GELIC_DESCR_TX_DMA_FRAME_TAIL); 725 } 726 } 727} 728 729static inline struct sk_buff *gelic_put_vlan_tag(struct sk_buff *skb, 730 unsigned short tag) 731{ 732 struct vlan_ethhdr *veth; 733 static unsigned int c; 734 735 if (skb_headroom(skb) < VLAN_HLEN) { 736 struct sk_buff *sk_tmp = skb; 737 pr_debug("%s: hd=%d c=%ud\n", __func__, skb_headroom(skb), c); 738 skb = skb_realloc_headroom(sk_tmp, VLAN_HLEN); 739 if (!skb) 740 return NULL; 741 dev_kfree_skb_any(sk_tmp); 742 } 743 veth = (struct vlan_ethhdr *)skb_push(skb, VLAN_HLEN); 744 745 /* Move the mac addresses to the top of buffer */ 746 memmove(skb->data, skb->data + VLAN_HLEN, 2 * ETH_ALEN); 747 748 veth->h_vlan_proto = cpu_to_be16(ETH_P_8021Q); 749 veth->h_vlan_TCI = htons(tag); 750 751 return skb; 752} 753 754/** 755 * gelic_descr_prepare_tx - setup a descriptor for sending packets 756 * @card: card structure 757 * @descr: descriptor structure 758 * @skb: packet to use 759 * 760 * returns 0 on success, <0 on failure. 761 * 762 */ 763static int gelic_descr_prepare_tx(struct gelic_card *card, 764 struct gelic_descr *descr, 765 struct sk_buff *skb) 766{ 767 dma_addr_t buf; 768 769 if (card->vlan_required) { 770 struct sk_buff *skb_tmp; 771 enum gelic_port_type type; 772 773 type = netdev_port(skb->dev)->type; 774 skb_tmp = gelic_put_vlan_tag(skb, 775 card->vlan[type].tx); 776 if (!skb_tmp) 777 return -ENOMEM; 778 skb = skb_tmp; 779 } 780 781 buf = dma_map_single(ctodev(card), skb->data, skb->len, DMA_TO_DEVICE); 782 783 if (!buf) { 784 dev_err(ctodev(card), 785 "dma map 2 failed (%p, %i). Dropping packet\n", 786 skb->data, skb->len); 787 return -ENOMEM; 788 } 789 790 descr->buf_addr = cpu_to_be32(buf); 791 descr->buf_size = cpu_to_be32(skb->len); 792 descr->skb = skb; 793 descr->data_status = 0; 794 descr->next_descr_addr = 0; /* terminate hw descr */ 795 gelic_descr_set_tx_cmdstat(descr, skb); 796 797 /* bump free descriptor pointer */ 798 card->tx_chain.head = descr->next; 799 return 0; 800} 801 802/** 803 * gelic_card_kick_txdma - enables TX DMA processing 804 * @card: card structure 805 * @descr: descriptor address to enable TX processing at 806 * 807 */ 808static int gelic_card_kick_txdma(struct gelic_card *card, 809 struct gelic_descr *descr) 810{ 811 int status = 0; 812 813 if (card->tx_dma_progress) 814 return 0; 815 816 if (gelic_descr_get_status(descr) == GELIC_DESCR_DMA_CARDOWNED) { 817 card->tx_dma_progress = 1; 818 status = lv1_net_start_tx_dma(bus_id(card), dev_id(card), 819 descr->bus_addr, 0); 820 if (status) 821 dev_info(ctodev(card), "lv1_net_start_txdma failed," \ 822 "status=%d\n", status); 823 } 824 return status; 825} 826 827/** 828 * gelic_net_xmit - transmits a frame over the device 829 * @skb: packet to send out 830 * @netdev: interface device structure 831 * 832 * returns 0 on success, <0 on failure 833 */ 834int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev) 835{ 836 struct gelic_card *card = netdev_card(netdev); 837 struct gelic_descr *descr; 838 int result; 839 unsigned long flags; 840 841 spin_lock_irqsave(&card->tx_lock, flags); 842 843 gelic_card_release_tx_chain(card, 0); 844 845 descr = gelic_card_get_next_tx_descr(card); 846 if (!descr) { 847 /* 848 * no more descriptors free 849 */ 850 gelic_card_stop_queues(card); 851 spin_unlock_irqrestore(&card->tx_lock, flags); 852 return NETDEV_TX_BUSY; 853 } 854 855 result = gelic_descr_prepare_tx(card, descr, skb); 856 if (result) { 857 /* 858 * DMA map failed. As chanses are that failure 859 * would continue, just release skb and return 860 */ 861 netdev->stats.tx_dropped++; 862 dev_kfree_skb_any(skb); 863 spin_unlock_irqrestore(&card->tx_lock, flags); 864 return NETDEV_TX_OK; 865 } 866 /* 867 * link this prepared descriptor to previous one 868 * to achieve high performance 869 */ 870 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); 871 /* 872 * as hardware descriptor is modified in the above lines, 873 * ensure that the hardware sees it 874 */ 875 wmb(); 876 if (gelic_card_kick_txdma(card, descr)) { 877 /* 878 * kick failed. 879 * release descriptors which were just prepared 880 */ 881 netdev->stats.tx_dropped++; 882 gelic_descr_release_tx(card, descr); 883 gelic_descr_release_tx(card, descr->next); 884 card->tx_chain.tail = descr->next->next; 885 dev_info(ctodev(card), "%s: kick failure\n", __func__); 886 } else { 887 /* OK, DMA started/reserved */ 888 netdev->trans_start = jiffies; 889 } 890 891 spin_unlock_irqrestore(&card->tx_lock, flags); 892 return NETDEV_TX_OK; 893} 894 895/** 896 * gelic_net_pass_skb_up - takes an skb from a descriptor and passes it on 897 * @descr: descriptor to process 898 * @card: card structure 899 * @netdev: net_device structure to be passed packet 900 * 901 * iommu-unmaps the skb, fills out skb structure and passes the data to the 902 * stack. The descriptor state is not changed. 903 */ 904static void gelic_net_pass_skb_up(struct gelic_descr *descr, 905 struct gelic_card *card, 906 struct net_device *netdev) 907 908{ 909 struct sk_buff *skb = descr->skb; 910 u32 data_status, data_error; 911 912 data_status = be32_to_cpu(descr->data_status); 913 data_error = be32_to_cpu(descr->data_error); 914 /* unmap skb buffer */ 915 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), 916 GELIC_NET_MAX_MTU, 917 DMA_FROM_DEVICE); 918 919 skb_put(skb, be32_to_cpu(descr->valid_size)? 920 be32_to_cpu(descr->valid_size) : 921 be32_to_cpu(descr->result_size)); 922 if (!descr->valid_size) 923 dev_info(ctodev(card), "buffer full %x %x %x\n", 924 be32_to_cpu(descr->result_size), 925 be32_to_cpu(descr->buf_size), 926 be32_to_cpu(descr->dmac_cmd_status)); 927 928 descr->skb = NULL; 929 /* 930 * the card put 2 bytes vlan tag in front 931 * of the ethernet frame 932 */ 933 skb_pull(skb, 2); 934 skb->protocol = eth_type_trans(skb, netdev); 935 936 /* checksum offload */ 937 if (card->rx_csum) { 938 if ((data_status & GELIC_DESCR_DATA_STATUS_CHK_MASK) && 939 (!(data_error & GELIC_DESCR_DATA_ERROR_CHK_MASK))) 940 skb->ip_summed = CHECKSUM_UNNECESSARY; 941 else 942 skb->ip_summed = CHECKSUM_NONE; 943 } else 944 skb->ip_summed = CHECKSUM_NONE; 945 946 /* update netdevice statistics */ 947 netdev->stats.rx_packets++; 948 netdev->stats.rx_bytes += skb->len; 949 950 /* pass skb up to stack */ 951 netif_receive_skb(skb); 952} 953 954/** 955 * gelic_card_decode_one_descr - processes an rx descriptor 956 * @card: card structure 957 * 958 * returns 1 if a packet has been sent to the stack, otherwise 0 959 * 960 * processes an rx descriptor by iommu-unmapping the data buffer and passing 961 * the packet up to the stack 962 */ 963static int gelic_card_decode_one_descr(struct gelic_card *card) 964{ 965 enum gelic_descr_dma_status status; 966 struct gelic_descr_chain *chain = &card->rx_chain; 967 struct gelic_descr *descr = chain->head; 968 struct net_device *netdev = NULL; 969 int dmac_chain_ended; 970 971 status = gelic_descr_get_status(descr); 972 /* is this descriptor terminated with next_descr == NULL? */ 973 dmac_chain_ended = 974 be32_to_cpu(descr->dmac_cmd_status) & 975 GELIC_DESCR_RX_DMA_CHAIN_END; 976 977 if (status == GELIC_DESCR_DMA_CARDOWNED) 978 return 0; 979 980 if (status == GELIC_DESCR_DMA_NOT_IN_USE) { 981 dev_dbg(ctodev(card), "dormant descr? %p\n", descr); 982 return 0; 983 } 984 985 /* netdevice select */ 986 if (card->vlan_required) { 987 unsigned int i; 988 u16 vid; 989 vid = *(u16 *)(descr->skb->data) & VLAN_VID_MASK; 990 for (i = 0; i < GELIC_PORT_MAX; i++) { 991 if (card->vlan[i].rx == vid) { 992 netdev = card->netdev[i]; 993 break; 994 } 995 }; 996 if (GELIC_PORT_MAX <= i) { 997 pr_info("%s: unknown packet vid=%x\n", __func__, vid); 998 goto refill; 999 } 1000 } else 1001 netdev = card->netdev[GELIC_PORT_ETHERNET]; 1002 1003 if ((status == GELIC_DESCR_DMA_RESPONSE_ERROR) || 1004 (status == GELIC_DESCR_DMA_PROTECTION_ERROR) || 1005 (status == GELIC_DESCR_DMA_FORCE_END)) { 1006 dev_info(ctodev(card), "dropping RX descriptor with state %x\n", 1007 status); 1008 netdev->stats.rx_dropped++; 1009 goto refill; 1010 } 1011 1012 if (status == GELIC_DESCR_DMA_BUFFER_FULL) { 1013 /* 1014 * Buffer full would occur if and only if 1015 * the frame length was longer than the size of this 1016 * descriptor's buffer. If the frame length was equal 1017 * to or shorter than buffer'size, FRAME_END condition 1018 * would occur. 1019 * Anyway this frame was longer than the MTU, 1020 * just drop it. 1021 */ 1022 dev_info(ctodev(card), "overlength frame\n"); 1023 goto refill; 1024 } 1025 /* 1026 * descriptoers any other than FRAME_END here should 1027 * be treated as error. 1028 */ 1029 if (status != GELIC_DESCR_DMA_FRAME_END) { 1030 dev_dbg(ctodev(card), "RX descriptor with state %x\n", 1031 status); 1032 goto refill; 1033 } 1034 1035 /* ok, we've got a packet in descr */ 1036 gelic_net_pass_skb_up(descr, card, netdev); 1037refill: 1038 /* 1039 * So that always DMAC can see the end 1040 * of the descriptor chain to avoid 1041 * from unwanted DMAC overrun. 1042 */ 1043 descr->next_descr_addr = 0; 1044 1045 /* change the descriptor state: */ 1046 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); 1047 1048 /* 1049 * this call can fail, but for now, just leave this 1050 * decriptor without skb 1051 */ 1052 gelic_descr_prepare_rx(card, descr); 1053 1054 chain->tail = descr; 1055 chain->head = descr->next; 1056 1057 /* 1058 * Set this descriptor the end of the chain. 1059 */ 1060 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); 1061 1062 /* 1063 * If dmac chain was met, DMAC stopped. 1064 * thus re-enable it 1065 */ 1066 if (dmac_chain_ended) { 1067 card->rx_dma_restart_required = 1; 1068 dev_dbg(ctodev(card), "reenable rx dma scheduled\n"); 1069 } 1070 1071 return 1; 1072} 1073 1074/** 1075 * gelic_net_poll - NAPI poll function called by the stack to return packets 1076 * @napi: napi structure 1077 * @budget: number of packets we can pass to the stack at most 1078 * 1079 * returns the number of the processed packets 1080 * 1081 */ 1082static int gelic_net_poll(struct napi_struct *napi, int budget) 1083{ 1084 struct gelic_card *card = container_of(napi, struct gelic_card, napi); 1085 int packets_done = 0; 1086 1087 while (packets_done < budget) { 1088 if (!gelic_card_decode_one_descr(card)) 1089 break; 1090 1091 packets_done++; 1092 } 1093 1094 if (packets_done < budget) { 1095 napi_complete(napi); 1096 gelic_card_rx_irq_on(card); 1097 } 1098 return packets_done; 1099} 1100/** 1101 * gelic_net_change_mtu - changes the MTU of an interface 1102 * @netdev: interface device structure 1103 * @new_mtu: new MTU value 1104 * 1105 * returns 0 on success, <0 on failure 1106 */ 1107int gelic_net_change_mtu(struct net_device *netdev, int new_mtu) 1108{ 1109 /* no need to re-alloc skbs or so -- the max mtu is about 2.3k 1110 * and mtu is outbound only anyway */ 1111 if ((new_mtu < GELIC_NET_MIN_MTU) || 1112 (new_mtu > GELIC_NET_MAX_MTU)) { 1113 return -EINVAL; 1114 } 1115 netdev->mtu = new_mtu; 1116 return 0; 1117} 1118 1119/** 1120 * gelic_card_interrupt - event handler for gelic_net 1121 */ 1122static irqreturn_t gelic_card_interrupt(int irq, void *ptr) 1123{ 1124 unsigned long flags; 1125 struct gelic_card *card = ptr; 1126 u64 status; 1127 1128 status = card->irq_status; 1129 1130 if (!status) 1131 return IRQ_NONE; 1132 1133 status &= card->irq_mask; 1134 1135 if (card->rx_dma_restart_required) { 1136 card->rx_dma_restart_required = 0; 1137 gelic_card_enable_rxdmac(card); 1138 } 1139 1140 if (status & GELIC_CARD_RXINT) { 1141 gelic_card_rx_irq_off(card); 1142 napi_schedule(&card->napi); 1143 } 1144 1145 if (status & GELIC_CARD_TXINT) { 1146 spin_lock_irqsave(&card->tx_lock, flags); 1147 card->tx_dma_progress = 0; 1148 gelic_card_release_tx_chain(card, 0); 1149 /* kick outstanding tx descriptor if any */ 1150 gelic_card_kick_txdma(card, card->tx_chain.tail); 1151 spin_unlock_irqrestore(&card->tx_lock, flags); 1152 } 1153 1154 /* ether port status changed */ 1155 if (status & GELIC_CARD_PORT_STATUS_CHANGED) 1156 gelic_card_get_ether_port_status(card, 1); 1157 1158#ifdef CONFIG_GELIC_WIRELESS 1159 if (status & (GELIC_CARD_WLAN_EVENT_RECEIVED | 1160 GELIC_CARD_WLAN_COMMAND_COMPLETED)) 1161 gelic_wl_interrupt(card->netdev[GELIC_PORT_WIRELESS], status); 1162#endif 1163 1164 return IRQ_HANDLED; 1165} 1166 1167#ifdef CONFIG_NET_POLL_CONTROLLER 1168/** 1169 * gelic_net_poll_controller - artificial interrupt for netconsole etc. 1170 * @netdev: interface device structure 1171 * 1172 * see Documentation/networking/netconsole.txt 1173 */ 1174void gelic_net_poll_controller(struct net_device *netdev) 1175{ 1176 struct gelic_card *card = netdev_card(netdev); 1177 1178 gelic_card_set_irq_mask(card, 0); 1179 gelic_card_interrupt(netdev->irq, netdev); 1180 gelic_card_set_irq_mask(card, card->irq_mask); 1181} 1182#endif /* CONFIG_NET_POLL_CONTROLLER */ 1183 1184/** 1185 * gelic_net_open - called upon ifonfig up 1186 * @netdev: interface device structure 1187 * 1188 * returns 0 on success, <0 on failure 1189 * 1190 * gelic_net_open allocates all the descriptors and memory needed for 1191 * operation, sets up multicast list and enables interrupts 1192 */ 1193int gelic_net_open(struct net_device *netdev) 1194{ 1195 struct gelic_card *card = netdev_card(netdev); 1196 1197 dev_dbg(ctodev(card), " -> %s %p\n", __func__, netdev); 1198 1199 gelic_card_up(card); 1200 1201 netif_start_queue(netdev); 1202 gelic_card_get_ether_port_status(card, 1); 1203 1204 dev_dbg(ctodev(card), " <- %s\n", __func__); 1205 return 0; 1206} 1207 1208void gelic_net_get_drvinfo(struct net_device *netdev, 1209 struct ethtool_drvinfo *info) 1210{ 1211 strncpy(info->driver, DRV_NAME, sizeof(info->driver) - 1); 1212 strncpy(info->version, DRV_VERSION, sizeof(info->version) - 1); 1213} 1214 1215static int gelic_ether_get_settings(struct net_device *netdev, 1216 struct ethtool_cmd *cmd) 1217{ 1218 struct gelic_card *card = netdev_card(netdev); 1219 1220 gelic_card_get_ether_port_status(card, 0); 1221 1222 if (card->ether_port_status & GELIC_LV1_ETHER_FULL_DUPLEX) 1223 cmd->duplex = DUPLEX_FULL; 1224 else 1225 cmd->duplex = DUPLEX_HALF; 1226 1227 switch (card->ether_port_status & GELIC_LV1_ETHER_SPEED_MASK) { 1228 case GELIC_LV1_ETHER_SPEED_10: 1229 cmd->speed = SPEED_10; 1230 break; 1231 case GELIC_LV1_ETHER_SPEED_100: 1232 cmd->speed = SPEED_100; 1233 break; 1234 case GELIC_LV1_ETHER_SPEED_1000: 1235 cmd->speed = SPEED_1000; 1236 break; 1237 default: 1238 pr_info("%s: speed unknown\n", __func__); 1239 cmd->speed = SPEED_10; 1240 break; 1241 } 1242 1243 cmd->supported = SUPPORTED_TP | SUPPORTED_Autoneg | 1244 SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full | 1245 SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full | 1246 SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full; 1247 cmd->advertising = cmd->supported; 1248 cmd->autoneg = AUTONEG_ENABLE; /* always enabled */ 1249 cmd->port = PORT_TP; 1250 1251 return 0; 1252} 1253 1254u32 gelic_net_get_rx_csum(struct net_device *netdev) 1255{ 1256 struct gelic_card *card = netdev_card(netdev); 1257 1258 return card->rx_csum; 1259} 1260 1261int gelic_net_set_rx_csum(struct net_device *netdev, u32 data) 1262{ 1263 struct gelic_card *card = netdev_card(netdev); 1264 1265 card->rx_csum = data; 1266 return 0; 1267} 1268 1269static void gelic_net_get_wol(struct net_device *netdev, 1270 struct ethtool_wolinfo *wol) 1271{ 1272 if (0 <= ps3_compare_firmware_version(2, 2, 0)) 1273 wol->supported = WAKE_MAGIC; 1274 else 1275 wol->supported = 0; 1276 1277 wol->wolopts = ps3_sys_manager_get_wol() ? wol->supported : 0; 1278 memset(&wol->sopass, 0, sizeof(wol->sopass)); 1279} 1280static int gelic_net_set_wol(struct net_device *netdev, 1281 struct ethtool_wolinfo *wol) 1282{ 1283 int status; 1284 struct gelic_card *card; 1285 u64 v1, v2; 1286 1287 if (ps3_compare_firmware_version(2, 2, 0) < 0 || 1288 !capable(CAP_NET_ADMIN)) 1289 return -EPERM; 1290 1291 if (wol->wolopts & ~WAKE_MAGIC) 1292 return -EINVAL; 1293 1294 card = netdev_card(netdev); 1295 if (wol->wolopts & WAKE_MAGIC) { 1296 status = lv1_net_control(bus_id(card), dev_id(card), 1297 GELIC_LV1_SET_WOL, 1298 GELIC_LV1_WOL_MAGIC_PACKET, 1299 0, GELIC_LV1_WOL_MP_ENABLE, 1300 &v1, &v2); 1301 if (status) { 1302 pr_info("%s: enabling WOL failed %d\n", __func__, 1303 status); 1304 status = -EIO; 1305 goto done; 1306 } 1307 status = lv1_net_control(bus_id(card), dev_id(card), 1308 GELIC_LV1_SET_WOL, 1309 GELIC_LV1_WOL_ADD_MATCH_ADDR, 1310 0, GELIC_LV1_WOL_MATCH_ALL, 1311 &v1, &v2); 1312 if (!status) 1313 ps3_sys_manager_set_wol(1); 1314 else { 1315 pr_info("%s: enabling WOL filter failed %d\n", 1316 __func__, status); 1317 status = -EIO; 1318 } 1319 } else { 1320 status = lv1_net_control(bus_id(card), dev_id(card), 1321 GELIC_LV1_SET_WOL, 1322 GELIC_LV1_WOL_MAGIC_PACKET, 1323 0, GELIC_LV1_WOL_MP_DISABLE, 1324 &v1, &v2); 1325 if (status) { 1326 pr_info("%s: disabling WOL failed %d\n", __func__, 1327 status); 1328 status = -EIO; 1329 goto done; 1330 } 1331 status = lv1_net_control(bus_id(card), dev_id(card), 1332 GELIC_LV1_SET_WOL, 1333 GELIC_LV1_WOL_DELETE_MATCH_ADDR, 1334 0, GELIC_LV1_WOL_MATCH_ALL, 1335 &v1, &v2); 1336 if (!status) 1337 ps3_sys_manager_set_wol(0); 1338 else { 1339 pr_info("%s: removing WOL filter failed %d\n", 1340 __func__, status); 1341 status = -EIO; 1342 } 1343 } 1344done: 1345 return status; 1346} 1347 1348static struct ethtool_ops gelic_ether_ethtool_ops = { 1349 .get_drvinfo = gelic_net_get_drvinfo, 1350 .get_settings = gelic_ether_get_settings, 1351 .get_link = ethtool_op_get_link, 1352 .get_tx_csum = ethtool_op_get_tx_csum, 1353 .set_tx_csum = ethtool_op_set_tx_csum, 1354 .get_rx_csum = gelic_net_get_rx_csum, 1355 .set_rx_csum = gelic_net_set_rx_csum, 1356 .get_wol = gelic_net_get_wol, 1357 .set_wol = gelic_net_set_wol, 1358}; 1359 1360/** 1361 * gelic_net_tx_timeout_task - task scheduled by the watchdog timeout 1362 * function (to be called not under interrupt status) 1363 * @work: work is context of tx timout task 1364 * 1365 * called as task when tx hangs, resets interface (if interface is up) 1366 */ 1367static void gelic_net_tx_timeout_task(struct work_struct *work) 1368{ 1369 struct gelic_card *card = 1370 container_of(work, struct gelic_card, tx_timeout_task); 1371 struct net_device *netdev = card->netdev[GELIC_PORT_ETHERNET]; 1372 1373 dev_info(ctodev(card), "%s:Timed out. Restarting... \n", __func__); 1374 1375 if (!(netdev->flags & IFF_UP)) 1376 goto out; 1377 1378 netif_device_detach(netdev); 1379 gelic_net_stop(netdev); 1380 1381 gelic_net_open(netdev); 1382 netif_device_attach(netdev); 1383 1384out: 1385 atomic_dec(&card->tx_timeout_task_counter); 1386} 1387 1388/** 1389 * gelic_net_tx_timeout - called when the tx timeout watchdog kicks in. 1390 * @netdev: interface device structure 1391 * 1392 * called, if tx hangs. Schedules a task that resets the interface 1393 */ 1394void gelic_net_tx_timeout(struct net_device *netdev) 1395{ 1396 struct gelic_card *card; 1397 1398 card = netdev_card(netdev); 1399 atomic_inc(&card->tx_timeout_task_counter); 1400 if (netdev->flags & IFF_UP) 1401 schedule_work(&card->tx_timeout_task); 1402 else 1403 atomic_dec(&card->tx_timeout_task_counter); 1404} 1405 1406static const struct net_device_ops gelic_netdevice_ops = { 1407 .ndo_open = gelic_net_open, 1408 .ndo_stop = gelic_net_stop, 1409 .ndo_start_xmit = gelic_net_xmit, 1410 .ndo_set_multicast_list = gelic_net_set_multi, 1411 .ndo_change_mtu = gelic_net_change_mtu, 1412 .ndo_tx_timeout = gelic_net_tx_timeout, 1413 .ndo_validate_addr = eth_validate_addr, 1414#ifdef CONFIG_NET_POLL_CONTROLLER 1415 .ndo_poll_controller = gelic_net_poll_controller, 1416#endif 1417}; 1418 1419/** 1420 * gelic_ether_setup_netdev_ops - initialization of net_device operations 1421 * @netdev: net_device structure 1422 * 1423 * fills out function pointers in the net_device structure 1424 */ 1425static void gelic_ether_setup_netdev_ops(struct net_device *netdev, 1426 struct napi_struct *napi) 1427{ 1428 netdev->watchdog_timeo = GELIC_NET_WATCHDOG_TIMEOUT; 1429 /* NAPI */ 1430 netif_napi_add(netdev, napi, 1431 gelic_net_poll, GELIC_NET_NAPI_WEIGHT); 1432 netdev->ethtool_ops = &gelic_ether_ethtool_ops; 1433 netdev->netdev_ops = &gelic_netdevice_ops; 1434} 1435 1436/** 1437 * gelic_ether_setup_netdev - initialization of net_device 1438 * @netdev: net_device structure 1439 * @card: card structure 1440 * 1441 * Returns 0 on success or <0 on failure 1442 * 1443 * gelic_ether_setup_netdev initializes the net_device structure 1444 * and register it. 1445 **/ 1446int gelic_net_setup_netdev(struct net_device *netdev, struct gelic_card *card) 1447{ 1448 int status; 1449 u64 v1, v2; 1450 1451 netdev->features = NETIF_F_IP_CSUM; 1452 1453 status = lv1_net_control(bus_id(card), dev_id(card), 1454 GELIC_LV1_GET_MAC_ADDRESS, 1455 0, 0, 0, &v1, &v2); 1456 v1 <<= 16; 1457 if (status || !is_valid_ether_addr((u8 *)&v1)) { 1458 dev_info(ctodev(card), 1459 "%s:lv1_net_control GET_MAC_ADDR failed %d\n", 1460 __func__, status); 1461 return -EINVAL; 1462 } 1463 memcpy(netdev->dev_addr, &v1, ETH_ALEN); 1464 1465 if (card->vlan_required) { 1466 netdev->hard_header_len += VLAN_HLEN; 1467 /* 1468 * As vlan is internally used, 1469 * we can not receive vlan packets 1470 */ 1471 netdev->features |= NETIF_F_VLAN_CHALLENGED; 1472 } 1473 1474 status = register_netdev(netdev); 1475 if (status) { 1476 dev_err(ctodev(card), "%s:Couldn't register %s %d\n", 1477 __func__, netdev->name, status); 1478 return status; 1479 } 1480 dev_info(ctodev(card), "%s: MAC addr %pM\n", 1481 netdev->name, netdev->dev_addr); 1482 1483 return 0; 1484} 1485 1486/** 1487 * gelic_alloc_card_net - allocates net_device and card structure 1488 * 1489 * returns the card structure or NULL in case of errors 1490 * 1491 * the card and net_device structures are linked to each other 1492 */ 1493#define GELIC_ALIGN (32) 1494static struct gelic_card *gelic_alloc_card_net(struct net_device **netdev) 1495{ 1496 struct gelic_card *card; 1497 struct gelic_port *port; 1498 void *p; 1499 size_t alloc_size; 1500 /* 1501 * gelic requires dma descriptor is 32 bytes aligned and 1502 * the hypervisor requires irq_status is 8 bytes aligned. 1503 */ 1504 BUILD_BUG_ON(offsetof(struct gelic_card, irq_status) % 8); 1505 BUILD_BUG_ON(offsetof(struct gelic_card, descr) % 32); 1506 alloc_size = 1507 sizeof(struct gelic_card) + 1508 sizeof(struct gelic_descr) * GELIC_NET_RX_DESCRIPTORS + 1509 sizeof(struct gelic_descr) * GELIC_NET_TX_DESCRIPTORS + 1510 GELIC_ALIGN - 1; 1511 1512 p = kzalloc(alloc_size, GFP_KERNEL); 1513 if (!p) 1514 return NULL; 1515 card = PTR_ALIGN(p, GELIC_ALIGN); 1516 card->unalign = p; 1517 1518 /* 1519 * alloc netdev 1520 */ 1521 *netdev = alloc_etherdev(sizeof(struct gelic_port)); 1522 if (!netdev) { 1523 kfree(card->unalign); 1524 return NULL; 1525 } 1526 port = netdev_priv(*netdev); 1527 1528 /* gelic_port */ 1529 port->netdev = *netdev; 1530 port->card = card; 1531 port->type = GELIC_PORT_ETHERNET; 1532 1533 /* gelic_card */ 1534 card->netdev[GELIC_PORT_ETHERNET] = *netdev; 1535 1536 INIT_WORK(&card->tx_timeout_task, gelic_net_tx_timeout_task); 1537 init_waitqueue_head(&card->waitq); 1538 atomic_set(&card->tx_timeout_task_counter, 0); 1539 mutex_init(&card->updown_lock); 1540 atomic_set(&card->users, 0); 1541 1542 return card; 1543} 1544 1545static void gelic_card_get_vlan_info(struct gelic_card *card) 1546{ 1547 u64 v1, v2; 1548 int status; 1549 unsigned int i; 1550 struct { 1551 int tx; 1552 int rx; 1553 } vlan_id_ix[2] = { 1554 [GELIC_PORT_ETHERNET] = { 1555 .tx = GELIC_LV1_VLAN_TX_ETHERNET, 1556 .rx = GELIC_LV1_VLAN_RX_ETHERNET 1557 }, 1558 [GELIC_PORT_WIRELESS] = { 1559 .tx = GELIC_LV1_VLAN_TX_WIRELESS, 1560 .rx = GELIC_LV1_VLAN_RX_WIRELESS 1561 } 1562 }; 1563 1564 for (i = 0; i < ARRAY_SIZE(vlan_id_ix); i++) { 1565 /* tx tag */ 1566 status = lv1_net_control(bus_id(card), dev_id(card), 1567 GELIC_LV1_GET_VLAN_ID, 1568 vlan_id_ix[i].tx, 1569 0, 0, &v1, &v2); 1570 if (status || !v1) { 1571 if (status != LV1_NO_ENTRY) 1572 dev_dbg(ctodev(card), 1573 "get vlan id for tx(%d) failed(%d)\n", 1574 vlan_id_ix[i].tx, status); 1575 card->vlan[i].tx = 0; 1576 card->vlan[i].rx = 0; 1577 continue; 1578 } 1579 card->vlan[i].tx = (u16)v1; 1580 1581 /* rx tag */ 1582 status = lv1_net_control(bus_id(card), dev_id(card), 1583 GELIC_LV1_GET_VLAN_ID, 1584 vlan_id_ix[i].rx, 1585 0, 0, &v1, &v2); 1586 if (status || !v1) { 1587 if (status != LV1_NO_ENTRY) 1588 dev_info(ctodev(card), 1589 "get vlan id for rx(%d) failed(%d)\n", 1590 vlan_id_ix[i].rx, status); 1591 card->vlan[i].tx = 0; 1592 card->vlan[i].rx = 0; 1593 continue; 1594 } 1595 card->vlan[i].rx = (u16)v1; 1596 1597 dev_dbg(ctodev(card), "vlan_id[%d] tx=%02x rx=%02x\n", 1598 i, card->vlan[i].tx, card->vlan[i].rx); 1599 } 1600 1601 if (card->vlan[GELIC_PORT_ETHERNET].tx) { 1602 BUG_ON(!card->vlan[GELIC_PORT_WIRELESS].tx); 1603 card->vlan_required = 1; 1604 } else 1605 card->vlan_required = 0; 1606 1607 /* check wirelss capable firmware */ 1608 if (ps3_compare_firmware_version(1, 6, 0) < 0) { 1609 card->vlan[GELIC_PORT_WIRELESS].tx = 0; 1610 card->vlan[GELIC_PORT_WIRELESS].rx = 0; 1611 } 1612 1613 dev_info(ctodev(card), "internal vlan %s\n", 1614 card->vlan_required? "enabled" : "disabled"); 1615} 1616/** 1617 * ps3_gelic_driver_probe - add a device to the control of this driver 1618 */ 1619static int ps3_gelic_driver_probe(struct ps3_system_bus_device *dev) 1620{ 1621 struct gelic_card *card; 1622 struct net_device *netdev; 1623 int result; 1624 1625 pr_debug("%s: called\n", __func__); 1626 result = ps3_open_hv_device(dev); 1627 1628 if (result) { 1629 dev_dbg(&dev->core, "%s:ps3_open_hv_device failed\n", 1630 __func__); 1631 goto fail_open; 1632 } 1633 1634 result = ps3_dma_region_create(dev->d_region); 1635 1636 if (result) { 1637 dev_dbg(&dev->core, "%s:ps3_dma_region_create failed(%d)\n", 1638 __func__, result); 1639 BUG_ON("check region type"); 1640 goto fail_dma_region; 1641 } 1642 1643 /* alloc card/netdevice */ 1644 card = gelic_alloc_card_net(&netdev); 1645 if (!card) { 1646 dev_info(&dev->core, "%s:gelic_net_alloc_card failed\n", 1647 __func__); 1648 result = -ENOMEM; 1649 goto fail_alloc_card; 1650 } 1651 ps3_system_bus_set_driver_data(dev, card); 1652 card->dev = dev; 1653 1654 /* get internal vlan info */ 1655 gelic_card_get_vlan_info(card); 1656 1657 /* setup interrupt */ 1658 result = lv1_net_set_interrupt_status_indicator(bus_id(card), 1659 dev_id(card), 1660 ps3_mm_phys_to_lpar(__pa(&card->irq_status)), 1661 0); 1662 1663 if (result) { 1664 dev_dbg(&dev->core, 1665 "%s:set_interrupt_status_indicator failed: %s\n", 1666 __func__, ps3_result(result)); 1667 result = -EIO; 1668 goto fail_status_indicator; 1669 } 1670 1671 result = ps3_sb_event_receive_port_setup(dev, PS3_BINDING_CPU_ANY, 1672 &card->irq); 1673 1674 if (result) { 1675 dev_info(ctodev(card), 1676 "%s:gelic_net_open_device failed (%d)\n", 1677 __func__, result); 1678 result = -EPERM; 1679 goto fail_alloc_irq; 1680 } 1681 result = request_irq(card->irq, gelic_card_interrupt, 1682 IRQF_DISABLED, netdev->name, card); 1683 1684 if (result) { 1685 dev_info(ctodev(card), "%s:request_irq failed (%d)\n", 1686 __func__, result); 1687 goto fail_request_irq; 1688 } 1689 1690 /* setup card structure */ 1691 card->irq_mask = GELIC_CARD_RXINT | GELIC_CARD_TXINT | 1692 GELIC_CARD_PORT_STATUS_CHANGED; 1693 card->rx_csum = GELIC_CARD_RX_CSUM_DEFAULT; 1694 1695 1696 if (gelic_card_init_chain(card, &card->tx_chain, 1697 card->descr, GELIC_NET_TX_DESCRIPTORS)) 1698 goto fail_alloc_tx; 1699 if (gelic_card_init_chain(card, &card->rx_chain, 1700 card->descr + GELIC_NET_TX_DESCRIPTORS, 1701 GELIC_NET_RX_DESCRIPTORS)) 1702 goto fail_alloc_rx; 1703 1704 /* head of chain */ 1705 card->tx_top = card->tx_chain.head; 1706 card->rx_top = card->rx_chain.head; 1707 dev_dbg(ctodev(card), "descr rx %p, tx %p, size %#lx, num %#x\n", 1708 card->rx_top, card->tx_top, sizeof(struct gelic_descr), 1709 GELIC_NET_RX_DESCRIPTORS); 1710 /* allocate rx skbs */ 1711 if (gelic_card_alloc_rx_skbs(card)) 1712 goto fail_alloc_skbs; 1713 1714 spin_lock_init(&card->tx_lock); 1715 card->tx_dma_progress = 0; 1716 1717 /* setup net_device structure */ 1718 netdev->irq = card->irq; 1719 SET_NETDEV_DEV(netdev, &card->dev->core); 1720 gelic_ether_setup_netdev_ops(netdev, &card->napi); 1721 result = gelic_net_setup_netdev(netdev, card); 1722 if (result) { 1723 dev_dbg(&dev->core, "%s: setup_netdev failed %d", 1724 __func__, result); 1725 goto fail_setup_netdev; 1726 } 1727 1728#ifdef CONFIG_GELIC_WIRELESS 1729 if (gelic_wl_driver_probe(card)) { 1730 dev_dbg(&dev->core, "%s: WL init failed\n", __func__); 1731 goto fail_setup_netdev; 1732 } 1733#endif 1734 pr_debug("%s: done\n", __func__); 1735 return 0; 1736 1737fail_setup_netdev: 1738fail_alloc_skbs: 1739 gelic_card_free_chain(card, card->rx_chain.head); 1740fail_alloc_rx: 1741 gelic_card_free_chain(card, card->tx_chain.head); 1742fail_alloc_tx: 1743 free_irq(card->irq, card); 1744 netdev->irq = NO_IRQ; 1745fail_request_irq: 1746 ps3_sb_event_receive_port_destroy(dev, card->irq); 1747fail_alloc_irq: 1748 lv1_net_set_interrupt_status_indicator(bus_id(card), 1749 bus_id(card), 1750 0, 0); 1751fail_status_indicator: 1752 ps3_system_bus_set_driver_data(dev, NULL); 1753 kfree(netdev_card(netdev)->unalign); 1754 free_netdev(netdev); 1755fail_alloc_card: 1756 ps3_dma_region_free(dev->d_region); 1757fail_dma_region: 1758 ps3_close_hv_device(dev); 1759fail_open: 1760 return result; 1761} 1762 1763/** 1764 * ps3_gelic_driver_remove - remove a device from the control of this driver 1765 */ 1766 1767static int ps3_gelic_driver_remove(struct ps3_system_bus_device *dev) 1768{ 1769 struct gelic_card *card = ps3_system_bus_get_driver_data(dev); 1770 struct net_device *netdev0; 1771 pr_debug("%s: called\n", __func__); 1772 1773#ifdef CONFIG_GELIC_WIRELESS 1774 gelic_wl_driver_remove(card); 1775#endif 1776 /* stop interrupt */ 1777 gelic_card_set_irq_mask(card, 0); 1778 1779 /* turn off DMA, force end */ 1780 gelic_card_disable_rxdmac(card); 1781 gelic_card_disable_txdmac(card); 1782 1783 /* release chains */ 1784 gelic_card_release_tx_chain(card, 1); 1785 gelic_card_release_rx_chain(card); 1786 1787 gelic_card_free_chain(card, card->tx_top); 1788 gelic_card_free_chain(card, card->rx_top); 1789 1790 netdev0 = card->netdev[GELIC_PORT_ETHERNET]; 1791 /* disconnect event port */ 1792 free_irq(card->irq, card); 1793 netdev0->irq = NO_IRQ; 1794 ps3_sb_event_receive_port_destroy(card->dev, card->irq); 1795 1796 wait_event(card->waitq, 1797 atomic_read(&card->tx_timeout_task_counter) == 0); 1798 1799 lv1_net_set_interrupt_status_indicator(bus_id(card), dev_id(card), 1800 0 , 0); 1801 1802 unregister_netdev(netdev0); 1803 kfree(netdev_card(netdev0)->unalign); 1804 free_netdev(netdev0); 1805 1806 ps3_system_bus_set_driver_data(dev, NULL); 1807 1808 ps3_dma_region_free(dev->d_region); 1809 1810 ps3_close_hv_device(dev); 1811 1812 pr_debug("%s: done\n", __func__); 1813 return 0; 1814} 1815 1816static struct ps3_system_bus_driver ps3_gelic_driver = { 1817 .match_id = PS3_MATCH_ID_GELIC, 1818 .probe = ps3_gelic_driver_probe, 1819 .remove = ps3_gelic_driver_remove, 1820 .shutdown = ps3_gelic_driver_remove, 1821 .core.name = "ps3_gelic_driver", 1822 .core.owner = THIS_MODULE, 1823}; 1824 1825static int __init ps3_gelic_driver_init (void) 1826{ 1827 return firmware_has_feature(FW_FEATURE_PS3_LV1) 1828 ? ps3_system_bus_driver_register(&ps3_gelic_driver) 1829 : -ENODEV; 1830} 1831 1832static void __exit ps3_gelic_driver_exit (void) 1833{ 1834 ps3_system_bus_driver_unregister(&ps3_gelic_driver); 1835} 1836 1837module_init(ps3_gelic_driver_init); 1838module_exit(ps3_gelic_driver_exit); 1839 1840MODULE_ALIAS(PS3_MODULE_ALIAS_GELIC); 1841