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.16-rc6 1894 lines 53 kB view raw
1/* 2 * Copyright (C) 1997 Cullen Jennings 3 * Copyright (C) 1998 Elmer Joandiu, elmer@ylenurme.ee 4 * GNU General Public License applies 5 * This module provides support for the Arlan 655 card made by Aironet 6 */ 7 8#include <linux/config.h> 9#include "arlan.h" 10 11#if BITS_PER_LONG != 32 12# error FIXME: this driver requires a 32-bit platform 13#endif 14 15static const char *arlan_version = "C.Jennigs 97 & Elmer.Joandi@ut.ee Oct'98, http://www.ylenurme.ee/~elmer/655/"; 16 17struct net_device *arlan_device[MAX_ARLANS]; 18 19static int SID = SIDUNKNOWN; 20static int radioNodeId = radioNodeIdUNKNOWN; 21static char encryptionKey[12] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; 22int arlan_debug = debugUNKNOWN; 23static int spreadingCode = spreadingCodeUNKNOWN; 24static int channelNumber = channelNumberUNKNOWN; 25static int channelSet = channelSetUNKNOWN; 26static int systemId = systemIdUNKNOWN; 27static int registrationMode = registrationModeUNKNOWN; 28static int keyStart; 29static int tx_delay_ms; 30static int retries = 5; 31static int tx_queue_len = 1; 32static int arlan_EEPROM_bad; 33 34#ifdef ARLAN_DEBUGGING 35 36static int testMemory = testMemoryUNKNOWN; 37static int irq = irqUNKNOWN; 38static int txScrambled = 1; 39static int mdebug; 40 41module_param(irq, int, 0); 42module_param(mdebug, int, 0); 43module_param(testMemory, int, 0); 44module_param(txScrambled, int, 0); 45MODULE_PARM_DESC(irq, "(unused)"); 46MODULE_PARM_DESC(testMemory, "(unused)"); 47MODULE_PARM_DESC(mdebug, "Arlan multicast debugging (0-1)"); 48#endif 49 50module_param_named(debug, arlan_debug, int, 0); 51module_param(spreadingCode, int, 0); 52module_param(channelNumber, int, 0); 53module_param(channelSet, int, 0); 54module_param(systemId, int, 0); 55module_param(registrationMode, int, 0); 56module_param(radioNodeId, int, 0); 57module_param(SID, int, 0); 58module_param(keyStart, int, 0); 59module_param(tx_delay_ms, int, 0); 60module_param(retries, int, 0); 61module_param(tx_queue_len, int, 0); 62module_param_named(EEPROM_bad, arlan_EEPROM_bad, int, 0); 63MODULE_PARM_DESC(debug, "Arlan debug enable (0-1)"); 64MODULE_PARM_DESC(retries, "Arlan maximum packet retransmisions"); 65#ifdef ARLAN_ENTRY_EXIT_DEBUGGING 66static int arlan_entry_debug; 67static int arlan_exit_debug; 68static int arlan_entry_and_exit_debug; 69module_param_named(entry_debug, arlan_entry_debug, int, 0); 70module_param_named(exit_debug, arlan_exit_debug, int, 0); 71module_param_named(entry_and_exit_debug, arlan_entry_and_exit_debug, int, 0); 72MODULE_PARM_DESC(entry_debug, "Arlan driver function entry debugging"); 73MODULE_PARM_DESC(exit_debug, "Arlan driver function exit debugging"); 74MODULE_PARM_DESC(entry_and_exit_debug, "Arlan driver function entry and exit debugging"); 75#endif 76 77struct arlan_conf_stru arlan_conf[MAX_ARLANS]; 78static int arlans_found; 79 80static int arlan_open(struct net_device *dev); 81static int arlan_tx(struct sk_buff *skb, struct net_device *dev); 82static irqreturn_t arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs); 83static int arlan_close(struct net_device *dev); 84static struct net_device_stats * 85 arlan_statistics (struct net_device *dev); 86static void arlan_set_multicast (struct net_device *dev); 87static int arlan_hw_tx (struct net_device* dev, char *buf, int length ); 88static int arlan_hw_config (struct net_device * dev); 89static void arlan_tx_done_interrupt (struct net_device * dev, int status); 90static void arlan_rx_interrupt (struct net_device * dev, u_char rxStatus, u_short, u_short); 91static void arlan_process_interrupt (struct net_device * dev); 92static void arlan_tx_timeout (struct net_device *dev); 93 94static inline long us2ticks(int us) 95{ 96 return us * (1000000 / HZ); 97} 98 99 100#ifdef ARLAN_ENTRY_EXIT_DEBUGGING 101#define ARLAN_DEBUG_ENTRY(name) \ 102 {\ 103 struct timeval timev;\ 104 do_gettimeofday(&timev);\ 105 if (arlan_entry_debug || arlan_entry_and_exit_debug)\ 106 printk("--->>>" name " %ld " "\n",((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ 107 } 108#define ARLAN_DEBUG_EXIT(name) \ 109 {\ 110 struct timeval timev;\ 111 do_gettimeofday(&timev);\ 112 if (arlan_exit_debug || arlan_entry_and_exit_debug)\ 113 printk("<<<---" name " %ld " "\n",((long int) timev.tv_sec * 1000000 + timev.tv_usec) );\ 114 } 115#else 116#define ARLAN_DEBUG_ENTRY(name) 117#define ARLAN_DEBUG_EXIT(name) 118#endif 119 120 121#define arlan_interrupt_ack(dev)\ 122 clearClearInterrupt(dev);\ 123 setClearInterrupt(dev); 124 125static inline int arlan_drop_tx(struct net_device *dev) 126{ 127 struct arlan_private *priv = netdev_priv(dev); 128 129 priv->stats.tx_errors++; 130 if (priv->Conf->tx_delay_ms) 131 { 132 priv->tx_done_delayed = jiffies + priv->Conf->tx_delay_ms * HZ / 1000 + 1; 133 } 134 else 135 { 136 priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; 137 TXHEAD(dev).offset = 0; 138 TXTAIL(dev).offset = 0; 139 priv->txLast = 0; 140 priv->bad = 0; 141 if (!priv->under_reset && !priv->under_config) 142 netif_wake_queue (dev); 143 } 144 return 1; 145} 146 147 148int arlan_command(struct net_device *dev, int command_p) 149{ 150 struct arlan_private *priv = netdev_priv(dev); 151 volatile struct arlan_shmem __iomem *arlan = priv->card; 152 struct arlan_conf_stru *conf = priv->Conf; 153 int udelayed = 0; 154 int i = 0; 155 unsigned long flags; 156 157 ARLAN_DEBUG_ENTRY("arlan_command"); 158 159 if (priv->card_polling_interval) 160 priv->card_polling_interval = 1; 161 162 if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) 163 printk(KERN_DEBUG "arlan_command, %lx commandByte %x waiting %lx incoming %x \n", 164 jiffies, READSHMB(arlan->commandByte), 165 priv->waiting_command_mask, command_p); 166 167 priv->waiting_command_mask |= command_p; 168 169 if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) 170 if (time_after(jiffies, priv->lastReset + 5 * HZ)) 171 priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; 172 173 if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ACK) 174 { 175 arlan_interrupt_ack(dev); 176 priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ACK; 177 } 178 if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ENABLE) 179 { 180 setInterruptEnable(dev); 181 priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ENABLE; 182 } 183 184 /* Card access serializing lock */ 185 spin_lock_irqsave(&priv->lock, flags); 186 187 /* Check cards status and waiting */ 188 189 if (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) 190 { 191 while (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) 192 { 193 if (READSHMB(arlan->resetFlag) || 194 READSHMB(arlan->commandByte)) /* || 195 (readControlRegister(dev) & ARLAN_ACCESS)) 196 */ 197 udelay(40); 198 else 199 priv->waiting_command_mask &= ~(ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW); 200 201 udelayed++; 202 203 if (priv->waiting_command_mask & ARLAN_COMMAND_LONG_WAIT_NOW) 204 { 205 if (udelayed * 40 > 1000000) 206 { 207 printk(KERN_ERR "%s long wait too long \n", dev->name); 208 priv->waiting_command_mask |= ARLAN_COMMAND_RESET; 209 break; 210 } 211 } 212 else if (priv->waiting_command_mask & ARLAN_COMMAND_WAIT_NOW) 213 { 214 if (udelayed * 40 > 1000) 215 { 216 printk(KERN_ERR "%s short wait too long \n", dev->name); 217 goto bad_end; 218 } 219 } 220 } 221 } 222 else 223 { 224 i = 0; 225 while ((READSHMB(arlan->resetFlag) || 226 READSHMB(arlan->commandByte)) && 227 conf->pre_Command_Wait > (i++) * 10) 228 udelay(10); 229 230 231 if ((READSHMB(arlan->resetFlag) || 232 READSHMB(arlan->commandByte)) && 233 !(priv->waiting_command_mask & ARLAN_COMMAND_RESET)) 234 { 235 goto card_busy_end; 236 } 237 } 238 if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) 239 priv->under_reset = 1; 240 if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) 241 priv->under_config = 1; 242 243 /* Issuing command */ 244 arlan_lock_card_access(dev); 245 if (priv->waiting_command_mask & ARLAN_COMMAND_POWERUP) 246 { 247 // if (readControlRegister(dev) & (ARLAN_ACCESS && ARLAN_POWER)) 248 setPowerOn(dev); 249 arlan_interrupt_lancpu(dev); 250 priv->waiting_command_mask &= ~ARLAN_COMMAND_POWERUP; 251 priv->waiting_command_mask |= ARLAN_COMMAND_RESET; 252 priv->card_polling_interval = HZ / 10; 253 } 254 else if (priv->waiting_command_mask & ARLAN_COMMAND_ACTIVATE) 255 { 256 WRITESHMB(arlan->commandByte, ARLAN_COM_ACTIVATE); 257 arlan_interrupt_lancpu(dev); 258 priv->waiting_command_mask &= ~ARLAN_COMMAND_ACTIVATE; 259 priv->card_polling_interval = HZ / 10; 260 } 261 else if (priv->waiting_command_mask & ARLAN_COMMAND_RX_ABORT) 262 { 263 if (priv->rx_command_given) 264 { 265 WRITESHMB(arlan->commandByte, ARLAN_COM_RX_ABORT); 266 arlan_interrupt_lancpu(dev); 267 priv->rx_command_given = 0; 268 } 269 priv->waiting_command_mask &= ~ARLAN_COMMAND_RX_ABORT; 270 priv->card_polling_interval = 1; 271 } 272 else if (priv->waiting_command_mask & ARLAN_COMMAND_TX_ABORT) 273 { 274 if (priv->tx_command_given) 275 { 276 WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ABORT); 277 arlan_interrupt_lancpu(dev); 278 priv->tx_command_given = 0; 279 } 280 priv->waiting_command_mask &= ~ARLAN_COMMAND_TX_ABORT; 281 priv->card_polling_interval = 1; 282 } 283 else if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) 284 { 285 priv->under_reset=1; 286 netif_stop_queue (dev); 287 288 arlan_drop_tx(dev); 289 if (priv->tx_command_given || priv->rx_command_given) 290 { 291 printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); 292 } 293 netif_stop_queue (dev); 294 if (arlan_debug & ARLAN_DEBUG_RESET) 295 printk(KERN_ERR "%s: Doing chip reset\n", dev->name); 296 priv->lastReset = jiffies; 297 WRITESHM(arlan->commandByte, 0, u_char); 298 /* hold card in reset state */ 299 setHardwareReset(dev); 300 /* set reset flag and then release reset */ 301 WRITESHM(arlan->resetFlag, 0xff, u_char); 302 clearChannelAttention(dev); 303 clearHardwareReset(dev); 304 priv->card_polling_interval = HZ / 4; 305 priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; 306 priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; 307// priv->waiting_command_mask |= ARLAN_COMMAND_INT_RENABLE; 308// priv->waiting_command_mask |= ARLAN_COMMAND_RX; 309 } 310 else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RACK) 311 { 312 clearHardwareReset(dev); 313 clearClearInterrupt(dev); 314 setClearInterrupt(dev); 315 setInterruptEnable(dev); 316 priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RACK; 317 priv->waiting_command_mask |= ARLAN_COMMAND_CONF; 318 priv->under_config = 1; 319 priv->under_reset = 0; 320 } 321 else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RENABLE) 322 { 323 setInterruptEnable(dev); 324 priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RENABLE; 325 } 326 else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) 327 { 328 if (priv->tx_command_given || priv->rx_command_given) 329 { 330 printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); 331 } 332 arlan_drop_tx(dev); 333 setInterruptEnable(dev); 334 arlan_hw_config(dev); 335 arlan_interrupt_lancpu(dev); 336 priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF; 337 priv->card_polling_interval = HZ / 10; 338// priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; 339// priv->waiting_command_mask |= ARLAN_COMMAND_INT_ENABLE; 340 priv->waiting_command_mask |= ARLAN_COMMAND_CONF_WAIT; 341 } 342 else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF_WAIT) 343 { 344 if (READSHMB(arlan->configuredStatusFlag) != 0 && 345 READSHMB(arlan->diagnosticInfo) == 0xff) 346 { 347 priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF_WAIT; 348 priv->waiting_command_mask |= ARLAN_COMMAND_RX; 349 priv->waiting_command_mask |= ARLAN_COMMAND_TBUSY_CLEAR; 350 priv->card_polling_interval = HZ / 10; 351 priv->tx_command_given = 0; 352 priv->under_config = 0; 353 } 354 else 355 { 356 priv->card_polling_interval = 1; 357 if (arlan_debug & ARLAN_DEBUG_TIMING) 358 printk(KERN_ERR "configure delayed \n"); 359 } 360 } 361 else if (priv->waiting_command_mask & ARLAN_COMMAND_RX) 362 { 363 if (!registrationBad(dev)) 364 { 365 setInterruptEnable(dev); 366 memset_io(arlan->commandParameter, 0, 0xf); 367 WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_RX_ENABLE); 368 WRITESHMB(arlan->commandParameter[0], conf->rxParameter); 369 arlan_interrupt_lancpu(dev); 370 priv->rx_command_given = 0; // mnjah, bad 371 priv->waiting_command_mask &= ~ARLAN_COMMAND_RX; 372 priv->card_polling_interval = 1; 373 } 374 else 375 priv->card_polling_interval = 2; 376 } 377 else if (priv->waiting_command_mask & ARLAN_COMMAND_TBUSY_CLEAR) 378 { 379 if ( !registrationBad(dev) && 380 (netif_queue_stopped(dev) || !netif_running(dev)) ) 381 { 382 priv->waiting_command_mask &= ~ARLAN_COMMAND_TBUSY_CLEAR; 383 netif_wake_queue (dev); 384 } 385 } 386 else if (priv->waiting_command_mask & ARLAN_COMMAND_TX) 387 { 388 if (!test_and_set_bit(0, (void *) &priv->tx_command_given)) 389 { 390 if (time_after(jiffies, 391 priv->tx_last_sent + us2ticks(conf->rx_tweak1)) 392 || time_before(jiffies, 393 priv->last_rx_int_ack_time + us2ticks(conf->rx_tweak2))) 394 { 395 setInterruptEnable(dev); 396 memset_io(arlan->commandParameter, 0, 0xf); 397 WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ENABLE | ARLAN_COM_INT); 398 memcpy_toio(arlan->commandParameter, &TXLAST(dev), 14); 399// for ( i=1 ; i < 15 ; i++) printk("%02x:",READSHMB(arlan->commandParameter[i])); 400 priv->tx_last_sent = jiffies; 401 arlan_interrupt_lancpu(dev); 402 priv->tx_command_given = 1; 403 priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; 404 priv->card_polling_interval = 1; 405 } 406 else 407 { 408 priv->tx_command_given = 0; 409 priv->card_polling_interval = 1; 410 } 411 } 412 else if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) 413 printk(KERN_ERR "tx command when tx chain locked \n"); 414 } 415 else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOPINT) 416 { 417 { 418 WRITESHMB(arlan->commandByte, ARLAN_COM_NOP | ARLAN_COM_INT); 419 } 420 arlan_interrupt_lancpu(dev); 421 priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOPINT; 422 priv->card_polling_interval = HZ / 3; 423 } 424 else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOP) 425 { 426 WRITESHMB(arlan->commandByte, ARLAN_COM_NOP); 427 arlan_interrupt_lancpu(dev); 428 priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOP; 429 priv->card_polling_interval = HZ / 3; 430 } 431 else if (priv->waiting_command_mask & ARLAN_COMMAND_SLOW_POLL) 432 { 433 WRITESHMB(arlan->commandByte, ARLAN_COM_GOTO_SLOW_POLL); 434 arlan_interrupt_lancpu(dev); 435 priv->waiting_command_mask &= ~ARLAN_COMMAND_SLOW_POLL; 436 priv->card_polling_interval = HZ / 3; 437 } 438 else if (priv->waiting_command_mask & ARLAN_COMMAND_POWERDOWN) 439 { 440 setPowerOff(dev); 441 if (arlan_debug & ARLAN_DEBUG_CARD_STATE) 442 printk(KERN_WARNING "%s: Arlan Going Standby\n", dev->name); 443 priv->waiting_command_mask &= ~ARLAN_COMMAND_POWERDOWN; 444 priv->card_polling_interval = 3 * HZ; 445 } 446 arlan_unlock_card_access(dev); 447 for (i = 0; READSHMB(arlan->commandByte) && i < 20; i++) 448 udelay(10); 449 if (READSHMB(arlan->commandByte)) 450 if (arlan_debug & ARLAN_DEBUG_CARD_STATE) 451 printk(KERN_ERR "card busy leaving command %lx\n", priv->waiting_command_mask); 452 453 spin_unlock_irqrestore(&priv->lock, flags); 454 ARLAN_DEBUG_EXIT("arlan_command"); 455 priv->last_command_buff_free_time = jiffies; 456 return 0; 457 458card_busy_end: 459 if (time_after(jiffies, priv->last_command_buff_free_time + HZ)) 460 priv->waiting_command_mask |= ARLAN_COMMAND_CLEAN_AND_RESET; 461 462 if (arlan_debug & ARLAN_DEBUG_CARD_STATE) 463 printk(KERN_ERR "%s arlan_command card busy end \n", dev->name); 464 spin_unlock_irqrestore(&priv->lock, flags); 465 ARLAN_DEBUG_EXIT("arlan_command"); 466 return 1; 467 468bad_end: 469 printk(KERN_ERR "%s arlan_command bad end \n", dev->name); 470 471 spin_unlock_irqrestore(&priv->lock, flags); 472 ARLAN_DEBUG_EXIT("arlan_command"); 473 474 return -1; 475} 476 477static inline void arlan_command_process(struct net_device *dev) 478{ 479 struct arlan_private *priv = netdev_priv(dev); 480 481 int times = 0; 482 while (priv->waiting_command_mask && times < 8) 483 { 484 if (priv->waiting_command_mask) 485 { 486 if (arlan_command(dev, 0)) 487 break; 488 times++; 489 } 490 /* if long command, we won't repeat trying */ ; 491 if (priv->card_polling_interval > 1) 492 break; 493 times++; 494 } 495} 496 497 498static inline void arlan_retransmit_now(struct net_device *dev) 499{ 500 struct arlan_private *priv = netdev_priv(dev); 501 502 503 ARLAN_DEBUG_ENTRY("arlan_retransmit_now"); 504 if (TXLAST(dev).offset == 0) 505 { 506 if (TXHEAD(dev).offset) 507 { 508 priv->txLast = 0; 509 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to head \n"); 510 511 } 512 else if (TXTAIL(dev).offset) 513 { 514 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to tail \n"); 515 priv->txLast = 1; 516 } 517 else 518 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "ReTransmit buff empty"); 519 netif_wake_queue (dev); 520 return; 521 522 } 523 arlan_command(dev, ARLAN_COMMAND_TX); 524 525 priv->Conf->driverRetransmissions++; 526 priv->retransmissions++; 527 528 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("Retransmit %d bytes \n", TXLAST(dev).length); 529 530 ARLAN_DEBUG_EXIT("arlan_retransmit_now"); 531} 532 533 534 535static void arlan_registration_timer(unsigned long data) 536{ 537 struct net_device *dev = (struct net_device *) data; 538 struct arlan_private *priv = netdev_priv(dev); 539 int bh_mark_needed = 0; 540 int next_tick = 1; 541 long lostTime = ((long)jiffies - (long)priv->registrationLastSeen) 542 * (1000/HZ); 543 544 if (registrationBad(dev)) 545 { 546 priv->registrationLostCount++; 547 if (lostTime > 7000 && lostTime < 7200) 548 { 549 printk(KERN_NOTICE "%s registration Lost \n", dev->name); 550 } 551 if (lostTime / priv->reRegisterExp > 2000) 552 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); 553 if (lostTime / (priv->reRegisterExp) > 3500) 554 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); 555 if (priv->reRegisterExp < 400) 556 priv->reRegisterExp += 2; 557 if (lostTime > 7200) 558 { 559 next_tick = HZ; 560 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); 561 } 562 } 563 else 564 { 565 if (priv->Conf->registrationMode && lostTime > 10000 && 566 priv->registrationLostCount) 567 { 568 printk(KERN_NOTICE "%s registration is back after %ld milliseconds\n", 569 dev->name, lostTime); 570 } 571 priv->registrationLastSeen = jiffies; 572 priv->registrationLostCount = 0; 573 priv->reRegisterExp = 1; 574 if (!netif_running(dev) ) 575 netif_wake_queue(dev); 576 if (time_after(priv->tx_last_sent,priv->tx_last_cleared) && 577 time_after(jiffies, priv->tx_last_sent * 5*HZ) ){ 578 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); 579 priv->tx_last_cleared = jiffies; 580 } 581 } 582 583 584 if (!registrationBad(dev) && priv->ReTransmitRequested) 585 { 586 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 587 printk(KERN_ERR "Retransmit from timer \n"); 588 priv->ReTransmitRequested = 0; 589 arlan_retransmit_now(dev); 590 } 591 if (!registrationBad(dev) && 592 time_after(jiffies, priv->tx_done_delayed) && 593 priv->tx_done_delayed != 0) 594 { 595 TXLAST(dev).offset = 0; 596 if (priv->txLast) 597 priv->txLast = 0; 598 else if (TXTAIL(dev).offset) 599 priv->txLast = 1; 600 if (TXLAST(dev).offset) 601 { 602 arlan_retransmit_now(dev); 603 dev->trans_start = jiffies; 604 } 605 if (!(TXHEAD(dev).offset && TXTAIL(dev).offset)) 606 { 607 netif_wake_queue (dev); 608 } 609 priv->tx_done_delayed = 0; 610 bh_mark_needed = 1; 611 } 612 if (bh_mark_needed) 613 { 614 netif_wake_queue (dev); 615 } 616 arlan_process_interrupt(dev); 617 618 if (next_tick < priv->card_polling_interval) 619 next_tick = priv->card_polling_interval; 620 621 priv->timer.expires = jiffies + next_tick; 622 623 add_timer(&priv->timer); 624} 625 626 627#ifdef ARLAN_DEBUGGING 628 629static void arlan_print_registers(struct net_device *dev, int line) 630{ 631 struct arlan_private *priv = netdev_priv(dev); 632 volatile struct arlan_shmem *arlan = priv->card; 633 634 u_char hostcpuLock, lancpuLock, controlRegister, cntrlRegImage, 635 txStatus, rxStatus, interruptInProgress, commandByte; 636 637 638 ARLAN_DEBUG_ENTRY("arlan_print_registers"); 639 READSHM(interruptInProgress, arlan->interruptInProgress, u_char); 640 READSHM(hostcpuLock, arlan->hostcpuLock, u_char); 641 READSHM(lancpuLock, arlan->lancpuLock, u_char); 642 READSHM(controlRegister, arlan->controlRegister, u_char); 643 READSHM(cntrlRegImage, arlan->cntrlRegImage, u_char); 644 READSHM(txStatus, arlan->txStatus, u_char); 645 READSHM(rxStatus, arlan->rxStatus, u_char); 646 READSHM(commandByte, arlan->commandByte, u_char); 647 648 printk(KERN_WARNING "line %04d IP %02x HL %02x LL %02x CB %02x CR %02x CRI %02x TX %02x RX %02x\n", 649 line, interruptInProgress, hostcpuLock, lancpuLock, commandByte, 650 controlRegister, cntrlRegImage, txStatus, rxStatus); 651 652 ARLAN_DEBUG_EXIT("arlan_print_registers"); 653} 654#endif 655 656 657static int arlan_hw_tx(struct net_device *dev, char *buf, int length) 658{ 659 int i; 660 661 struct arlan_private *priv = netdev_priv(dev); 662 volatile struct arlan_shmem __iomem *arlan = priv->card; 663 struct arlan_conf_stru *conf = priv->Conf; 664 665 int tailStarts = 0x800; 666 int headEnds = 0x0; 667 668 669 ARLAN_DEBUG_ENTRY("arlan_hw_tx"); 670 if (TXHEAD(dev).offset) 671 headEnds = (((TXHEAD(dev).offset + TXHEAD(dev).length - offsetof(struct arlan_shmem, txBuffer)) / 64) + 1) * 64; 672 if (TXTAIL(dev).offset) 673 tailStarts = 0x800 - (((TXTAIL(dev).offset - offsetof(struct arlan_shmem, txBuffer)) / 64) + 2) * 64; 674 675 676 if (!TXHEAD(dev).offset && length < tailStarts) 677 { 678 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 679 printk(KERN_ERR "TXHEAD insert, tailStart %d\n", tailStarts); 680 681 TXHEAD(dev).offset = 682 offsetof(struct arlan_shmem, txBuffer); 683 TXHEAD(dev).length = length - ARLAN_FAKE_HDR_LEN; 684 for (i = 0; i < 6; i++) 685 TXHEAD(dev).dest[i] = buf[i]; 686 TXHEAD(dev).clear = conf->txClear; 687 TXHEAD(dev).retries = conf->txRetries; /* 0 is use default */ 688 TXHEAD(dev).routing = conf->txRouting; 689 TXHEAD(dev).scrambled = conf->txScrambled; 690 memcpy_toio((char __iomem *)arlan + TXHEAD(dev).offset, buf + ARLAN_FAKE_HDR_LEN, TXHEAD(dev).length); 691 } 692 else if (!TXTAIL(dev).offset && length < (0x800 - headEnds)) 693 { 694 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 695 printk(KERN_ERR "TXTAIL insert, headEnd %d\n", headEnds); 696 697 TXTAIL(dev).offset = 698 offsetof(struct arlan_shmem, txBuffer) + 0x800 - (length / 64 + 2) * 64; 699 TXTAIL(dev).length = length - ARLAN_FAKE_HDR_LEN; 700 for (i = 0; i < 6; i++) 701 TXTAIL(dev).dest[i] = buf[i]; 702 TXTAIL(dev).clear = conf->txClear; 703 TXTAIL(dev).retries = conf->txRetries; 704 TXTAIL(dev).routing = conf->txRouting; 705 TXTAIL(dev).scrambled = conf->txScrambled; 706 memcpy_toio(((char __iomem *)arlan + TXTAIL(dev).offset), buf + ARLAN_FAKE_HDR_LEN, TXTAIL(dev).length); 707 } 708 else 709 { 710 netif_stop_queue (dev); 711 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 712 printk(KERN_ERR "TX TAIL & HEAD full, return, tailStart %d headEnd %d\n", tailStarts, headEnds); 713 return -1; 714 } 715 priv->out_bytes += length; 716 priv->out_bytes10 += length; 717 if (conf->measure_rate < 1) 718 conf->measure_rate = 1; 719 if (time_after(jiffies, priv->out_time + conf->measure_rate * HZ)) 720 { 721 conf->out_speed = priv->out_bytes / conf->measure_rate; 722 priv->out_bytes = 0; 723 priv->out_time = jiffies; 724 } 725 if (time_after(jiffies, priv->out_time10 + conf->measure_rate * 10*HZ)) 726 { 727 conf->out_speed10 = priv->out_bytes10 / (10 * conf->measure_rate); 728 priv->out_bytes10 = 0; 729 priv->out_time10 = jiffies; 730 } 731 if (TXHEAD(dev).offset && TXTAIL(dev).offset) 732 { 733 netif_stop_queue (dev); 734 return 0; 735 } 736 else 737 netif_start_queue (dev); 738 739 740 IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) 741 printk(KERN_WARNING "%s Transmit t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x \n", dev->name, 742 (unsigned char) buf[0], (unsigned char) buf[1], (unsigned char) buf[2], (unsigned char) buf[3], 743 (unsigned char) buf[4], (unsigned char) buf[5], (unsigned char) buf[6], (unsigned char) buf[7], 744 (unsigned char) buf[8], (unsigned char) buf[9], (unsigned char) buf[10], (unsigned char) buf[11]); 745 746 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "TX command prepare for buffer %d\n", priv->txLast); 747 748 arlan_command(dev, ARLAN_COMMAND_TX); 749 750 priv->tx_last_sent = jiffies; 751 752 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("%s TX Qued %d bytes \n", dev->name, length); 753 754 ARLAN_DEBUG_EXIT("arlan_hw_tx"); 755 756 return 0; 757} 758 759 760static int arlan_hw_config(struct net_device *dev) 761{ 762 struct arlan_private *priv = netdev_priv(dev); 763 volatile struct arlan_shmem __iomem *arlan = priv->card; 764 struct arlan_conf_stru *conf = priv->Conf; 765 766 ARLAN_DEBUG_ENTRY("arlan_hw_config"); 767 768 printk(KERN_NOTICE "%s arlan configure called \n", dev->name); 769 if (arlan_EEPROM_bad) 770 printk(KERN_NOTICE "arlan configure with eeprom bad option \n"); 771 772 773 WRITESHM(arlan->spreadingCode, conf->spreadingCode, u_char); 774 WRITESHM(arlan->channelSet, conf->channelSet, u_char); 775 776 if (arlan_EEPROM_bad) 777 WRITESHM(arlan->defaultChannelSet, conf->channelSet, u_char); 778 779 WRITESHM(arlan->channelNumber, conf->channelNumber, u_char); 780 781 WRITESHM(arlan->scramblingDisable, conf->scramblingDisable, u_char); 782 WRITESHM(arlan->txAttenuation, conf->txAttenuation, u_char); 783 784 WRITESHM(arlan->systemId, conf->systemId, u_int); 785 786 WRITESHM(arlan->maxRetries, conf->maxRetries, u_char); 787 WRITESHM(arlan->receiveMode, conf->receiveMode, u_char); 788 WRITESHM(arlan->priority, conf->priority, u_char); 789 WRITESHM(arlan->rootOrRepeater, conf->rootOrRepeater, u_char); 790 WRITESHM(arlan->SID, conf->SID, u_int); 791 792 WRITESHM(arlan->registrationMode, conf->registrationMode, u_char); 793 794 WRITESHM(arlan->registrationFill, conf->registrationFill, u_char); 795 WRITESHM(arlan->localTalkAddress, conf->localTalkAddress, u_char); 796 WRITESHM(arlan->codeFormat, conf->codeFormat, u_char); 797 WRITESHM(arlan->numChannels, conf->numChannels, u_char); 798 WRITESHM(arlan->channel1, conf->channel1, u_char); 799 WRITESHM(arlan->channel2, conf->channel2, u_char); 800 WRITESHM(arlan->channel3, conf->channel3, u_char); 801 WRITESHM(arlan->channel4, conf->channel4, u_char); 802 WRITESHM(arlan->radioNodeId, conf->radioNodeId, u_short); 803 WRITESHM(arlan->SID, conf->SID, u_int); 804 WRITESHM(arlan->waitTime, conf->waitTime, u_short); 805 WRITESHM(arlan->lParameter, conf->lParameter, u_short); 806 memcpy_toio(&(arlan->_15), &(conf->_15), 3); 807 WRITESHM(arlan->_15, conf->_15, u_short); 808 WRITESHM(arlan->headerSize, conf->headerSize, u_short); 809 if (arlan_EEPROM_bad) 810 WRITESHM(arlan->hardwareType, conf->hardwareType, u_char); 811 WRITESHM(arlan->radioType, conf->radioType, u_char); 812 if (arlan_EEPROM_bad) 813 WRITESHM(arlan->radioModule, conf->radioType, u_char); 814 815 memcpy_toio(arlan->encryptionKey + keyStart, encryptionKey, 8); 816 memcpy_toio(arlan->name, conf->siteName, 16); 817 818 WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_CONF); /* do configure */ 819 memset_io(arlan->commandParameter, 0, 0xf); /* 0xf */ 820 memset_io(arlan->commandParameter + 1, 0, 2); 821 if (conf->writeEEPROM) 822 { 823 memset_io(arlan->commandParameter, conf->writeEEPROM, 1); 824// conf->writeEEPROM=0; 825 } 826 if (conf->registrationMode && conf->registrationInterrupts) 827 memset_io(arlan->commandParameter + 3, 1, 1); 828 else 829 memset_io(arlan->commandParameter + 3, 0, 1); 830 831 priv->irq_test_done = 0; 832 833 if (conf->tx_queue_len) 834 dev->tx_queue_len = conf->tx_queue_len; 835 udelay(100); 836 837 ARLAN_DEBUG_EXIT("arlan_hw_config"); 838 return 0; 839} 840 841 842static int arlan_read_card_configuration(struct net_device *dev) 843{ 844 u_char tlx415; 845 struct arlan_private *priv = netdev_priv(dev); 846 volatile struct arlan_shmem __iomem *arlan = priv->card; 847 struct arlan_conf_stru *conf = priv->Conf; 848 849 ARLAN_DEBUG_ENTRY("arlan_read_card_configuration"); 850 851 if (radioNodeId == radioNodeIdUNKNOWN) 852 { 853 READSHM(conf->radioNodeId, arlan->radioNodeId, u_short); 854 } 855 else 856 conf->radioNodeId = radioNodeId; 857 858 if (SID == SIDUNKNOWN) 859 { 860 READSHM(conf->SID, arlan->SID, u_int); 861 } 862 else conf->SID = SID; 863 864 if (spreadingCode == spreadingCodeUNKNOWN) 865 { 866 READSHM(conf->spreadingCode, arlan->spreadingCode, u_char); 867 } 868 else 869 conf->spreadingCode = spreadingCode; 870 871 if (channelSet == channelSetUNKNOWN) 872 { 873 READSHM(conf->channelSet, arlan->channelSet, u_char); 874 } 875 else conf->channelSet = channelSet; 876 877 if (channelNumber == channelNumberUNKNOWN) 878 { 879 READSHM(conf->channelNumber, arlan->channelNumber, u_char); 880 } 881 else conf->channelNumber = channelNumber; 882 883 READSHM(conf->scramblingDisable, arlan->scramblingDisable, u_char); 884 READSHM(conf->txAttenuation, arlan->txAttenuation, u_char); 885 886 if (systemId == systemIdUNKNOWN) 887 { 888 READSHM(conf->systemId, arlan->systemId, u_int); 889 } 890 else conf->systemId = systemId; 891 892 READSHM(conf->maxDatagramSize, arlan->maxDatagramSize, u_short); 893 READSHM(conf->maxFrameSize, arlan->maxFrameSize, u_short); 894 READSHM(conf->maxRetries, arlan->maxRetries, u_char); 895 READSHM(conf->receiveMode, arlan->receiveMode, u_char); 896 READSHM(conf->priority, arlan->priority, u_char); 897 READSHM(conf->rootOrRepeater, arlan->rootOrRepeater, u_char); 898 899 if (SID == SIDUNKNOWN) 900 { 901 READSHM(conf->SID, arlan->SID, u_int); 902 } 903 else conf->SID = SID; 904 905 if (registrationMode == registrationModeUNKNOWN) 906 { 907 READSHM(conf->registrationMode, arlan->registrationMode, u_char); 908 } 909 else conf->registrationMode = registrationMode; 910 911 READSHM(conf->registrationFill, arlan->registrationFill, u_char); 912 READSHM(conf->localTalkAddress, arlan->localTalkAddress, u_char); 913 READSHM(conf->codeFormat, arlan->codeFormat, u_char); 914 READSHM(conf->numChannels, arlan->numChannels, u_char); 915 READSHM(conf->channel1, arlan->channel1, u_char); 916 READSHM(conf->channel2, arlan->channel2, u_char); 917 READSHM(conf->channel3, arlan->channel3, u_char); 918 READSHM(conf->channel4, arlan->channel4, u_char); 919 READSHM(conf->waitTime, arlan->waitTime, u_short); 920 READSHM(conf->lParameter, arlan->lParameter, u_short); 921 READSHM(conf->_15, arlan->_15, u_short); 922 READSHM(conf->headerSize, arlan->headerSize, u_short); 923 READSHM(conf->hardwareType, arlan->hardwareType, u_char); 924 READSHM(conf->radioType, arlan->radioModule, u_char); 925 926 if (conf->radioType == 0) 927 conf->radioType = 0xc; 928 929 WRITESHM(arlan->configStatus, 0xA5, u_char); 930 READSHM(tlx415, arlan->configStatus, u_char); 931 932 if (tlx415 != 0xA5) 933 printk(KERN_INFO "%s tlx415 chip \n", dev->name); 934 935 conf->txClear = 0; 936 conf->txRetries = 1; 937 conf->txRouting = 1; 938 conf->txScrambled = 0; 939 conf->rxParameter = 1; 940 conf->txTimeoutMs = 4000; 941 conf->waitCardTimeout = 100000; 942 conf->receiveMode = ARLAN_RCV_CLEAN; 943 memcpy_fromio(conf->siteName, arlan->name, 16); 944 conf->siteName[16] = '\0'; 945 conf->retries = retries; 946 conf->tx_delay_ms = tx_delay_ms; 947 conf->ReTransmitPacketMaxSize = 200; 948 conf->waitReTransmitPacketMaxSize = 200; 949 conf->txAckTimeoutMs = 900; 950 conf->fastReTransCount = 3; 951 952 ARLAN_DEBUG_EXIT("arlan_read_card_configuration"); 953 954 return 0; 955} 956 957 958static int lastFoundAt = 0xbe000; 959 960 961/* 962 * This is the real probe routine. Linux has a history of friendly device 963 * probes on the ISA bus. A good device probes avoids doing writes, and 964 * verifies that the correct device exists and functions. 965 */ 966#define ARLAN_SHMEM_SIZE 0x2000 967static int __init arlan_check_fingerprint(unsigned long memaddr) 968{ 969 static const char probeText[] = "TELESYSTEM SLW INC. ARLAN \0"; 970 volatile struct arlan_shmem __iomem *arlan = (struct arlan_shmem *) memaddr; 971 unsigned long paddr = virt_to_phys((void *) memaddr); 972 char tempBuf[49]; 973 974 ARLAN_DEBUG_ENTRY("arlan_check_fingerprint"); 975 976 if (!request_mem_region(paddr, ARLAN_SHMEM_SIZE, "arlan")) { 977 // printk(KERN_WARNING "arlan: memory region %lx excluded from probing \n",paddr); 978 return -ENODEV; 979 } 980 981 memcpy_fromio(tempBuf, arlan->textRegion, 29); 982 tempBuf[30] = 0; 983 984 /* check for card at this address */ 985 if (0 != strncmp(tempBuf, probeText, 29)){ 986 release_mem_region(paddr, ARLAN_SHMEM_SIZE); 987 return -ENODEV; 988 } 989 990// printk(KERN_INFO "arlan found at 0x%x \n",memaddr); 991 ARLAN_DEBUG_EXIT("arlan_check_fingerprint"); 992 993 return 0; 994} 995 996static int arlan_change_mtu(struct net_device *dev, int new_mtu) 997{ 998 struct arlan_private *priv = netdev_priv(dev); 999 struct arlan_conf_stru *conf = priv->Conf; 1000 1001 ARLAN_DEBUG_ENTRY("arlan_change_mtu"); 1002 if (new_mtu > 2032) 1003 return -EINVAL; 1004 dev->mtu = new_mtu; 1005 if (new_mtu < 256) 1006 new_mtu = 256; /* cards book suggests 1600 */ 1007 conf->maxDatagramSize = new_mtu; 1008 conf->maxFrameSize = new_mtu + 48; 1009 1010 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); 1011 printk(KERN_NOTICE "%s mtu changed to %d \n", dev->name, new_mtu); 1012 1013 ARLAN_DEBUG_EXIT("arlan_change_mtu"); 1014 1015 return 0; 1016} 1017 1018static int arlan_mac_addr(struct net_device *dev, void *p) 1019{ 1020 struct sockaddr *addr = p; 1021 1022 1023 ARLAN_DEBUG_ENTRY("arlan_mac_addr"); 1024 return -EINVAL; 1025 1026 if (!netif_running(dev)) 1027 return -EBUSY; 1028 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 1029 1030 ARLAN_DEBUG_EXIT("arlan_mac_addr"); 1031 return 0; 1032} 1033 1034 1035 1036static int __init arlan_setup_device(struct net_device *dev, int num) 1037{ 1038 struct arlan_private *ap = netdev_priv(dev); 1039 int err; 1040 1041 ARLAN_DEBUG_ENTRY("arlan_setup_device"); 1042 1043 ap->conf = (struct arlan_shmem *)(ap+1); 1044 1045 dev->tx_queue_len = tx_queue_len; 1046 dev->open = arlan_open; 1047 dev->stop = arlan_close; 1048 dev->hard_start_xmit = arlan_tx; 1049 dev->get_stats = arlan_statistics; 1050 dev->set_multicast_list = arlan_set_multicast; 1051 dev->change_mtu = arlan_change_mtu; 1052 dev->set_mac_address = arlan_mac_addr; 1053 dev->tx_timeout = arlan_tx_timeout; 1054 dev->watchdog_timeo = 3*HZ; 1055 1056 ap->irq_test_done = 0; 1057 ap->Conf = &arlan_conf[num]; 1058 1059 ap->Conf->pre_Command_Wait = 40; 1060 ap->Conf->rx_tweak1 = 30; 1061 ap->Conf->rx_tweak2 = 0; 1062 1063 1064 err = register_netdev(dev); 1065 if (err) { 1066 release_mem_region(virt_to_phys((void *) dev->mem_start), 1067 ARLAN_SHMEM_SIZE); 1068 free_netdev(dev); 1069 return err; 1070 } 1071 arlan_device[num] = dev; 1072 ARLAN_DEBUG_EXIT("arlan_setup_device"); 1073 return 0; 1074} 1075 1076static int __init arlan_probe_here(struct net_device *dev, 1077 unsigned long memaddr) 1078{ 1079 struct arlan_private *ap = netdev_priv(dev); 1080 1081 ARLAN_DEBUG_ENTRY("arlan_probe_here"); 1082 1083 if (arlan_check_fingerprint(memaddr)) 1084 return -ENODEV; 1085 1086 printk(KERN_NOTICE "%s: Arlan found at %x, \n ", dev->name, 1087 (int) virt_to_phys((void*)memaddr)); 1088 1089 ap->card = (void *) memaddr; 1090 dev->mem_start = memaddr; 1091 dev->mem_end = memaddr + ARLAN_SHMEM_SIZE-1; 1092 1093 if (dev->irq < 2) 1094 { 1095 READSHM(dev->irq, ap->card->irqLevel, u_char); 1096 } else if (dev->irq == 2) 1097 dev->irq = 9; 1098 1099 arlan_read_card_configuration(dev); 1100 1101 ARLAN_DEBUG_EXIT("arlan_probe_here"); 1102 return 0; 1103} 1104 1105 1106static int arlan_open(struct net_device *dev) 1107{ 1108 struct arlan_private *priv = netdev_priv(dev); 1109 volatile struct arlan_shmem __iomem *arlan = priv->card; 1110 int ret = 0; 1111 1112 ARLAN_DEBUG_ENTRY("arlan_open"); 1113 1114 ret = request_irq(dev->irq, &arlan_interrupt, 0, dev->name, dev); 1115 if (ret) 1116 { 1117 printk(KERN_ERR "%s: unable to get IRQ %d .\n", 1118 dev->name, dev->irq); 1119 return ret; 1120 } 1121 1122 1123 priv->bad = 0; 1124 priv->lastReset = 0; 1125 priv->reset = 0; 1126 memcpy_fromio(dev->dev_addr, arlan->lanCardNodeId, 6); 1127 memset(dev->broadcast, 0xff, 6); 1128 dev->tx_queue_len = tx_queue_len; 1129 priv->interrupt_processing_active = 0; 1130 spin_lock_init(&priv->lock); 1131 1132 netif_start_queue (dev); 1133 1134 priv->registrationLostCount = 0; 1135 priv->registrationLastSeen = jiffies; 1136 priv->txLast = 0; 1137 priv->tx_command_given = 0; 1138 priv->rx_command_given = 0; 1139 1140 priv->reRegisterExp = 1; 1141 priv->tx_last_sent = jiffies - 1; 1142 priv->tx_last_cleared = jiffies; 1143 priv->Conf->writeEEPROM = 0; 1144 priv->Conf->registrationInterrupts = 1; 1145 1146 init_timer(&priv->timer); 1147 priv->timer.expires = jiffies + HZ / 10; 1148 priv->timer.data = (unsigned long) dev; 1149 priv->timer.function = &arlan_registration_timer; /* timer handler */ 1150 1151 arlan_command(dev, ARLAN_COMMAND_POWERUP | ARLAN_COMMAND_LONG_WAIT_NOW); 1152 mdelay(200); 1153 add_timer(&priv->timer); 1154 1155 ARLAN_DEBUG_EXIT("arlan_open"); 1156 return 0; 1157} 1158 1159 1160static void arlan_tx_timeout (struct net_device *dev) 1161{ 1162 printk(KERN_ERR "%s: arlan transmit timed out, kernel decided\n", dev->name); 1163 /* Try to restart the adaptor. */ 1164 arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); 1165 // dev->trans_start = jiffies; 1166 // netif_start_queue (dev); 1167} 1168 1169 1170static int arlan_tx(struct sk_buff *skb, struct net_device *dev) 1171{ 1172 short length; 1173 unsigned char *buf; 1174 1175 ARLAN_DEBUG_ENTRY("arlan_tx"); 1176 1177 length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; 1178 buf = skb->data; 1179 1180 if (length + 0x12 > 0x800) { 1181 printk(KERN_ERR "TX RING overflow \n"); 1182 netif_stop_queue (dev); 1183 } 1184 1185 if (arlan_hw_tx(dev, buf, length) == -1) 1186 goto bad_end; 1187 1188 dev->trans_start = jiffies; 1189 1190 dev_kfree_skb(skb); 1191 1192 arlan_process_interrupt(dev); 1193 ARLAN_DEBUG_EXIT("arlan_tx"); 1194 return 0; 1195 1196bad_end: 1197 arlan_process_interrupt(dev); 1198 netif_stop_queue (dev); 1199 ARLAN_DEBUG_EXIT("arlan_tx"); 1200 return 1; 1201} 1202 1203 1204static inline int DoNotReTransmitCrap(struct net_device *dev) 1205{ 1206 struct arlan_private *priv = netdev_priv(dev); 1207 1208 if (TXLAST(dev).length < priv->Conf->ReTransmitPacketMaxSize) 1209 return 1; 1210 return 0; 1211 1212} 1213 1214static inline int DoNotWaitReTransmitCrap(struct net_device *dev) 1215{ 1216 struct arlan_private *priv = netdev_priv(dev); 1217 1218 if (TXLAST(dev).length < priv->Conf->waitReTransmitPacketMaxSize) 1219 return 1; 1220 return 0; 1221} 1222 1223static inline void arlan_queue_retransmit(struct net_device *dev) 1224{ 1225 struct arlan_private *priv = netdev_priv(dev); 1226 1227 ARLAN_DEBUG_ENTRY("arlan_queue_retransmit"); 1228 1229 if (DoNotWaitReTransmitCrap(dev)) 1230 { 1231 arlan_drop_tx(dev); 1232 } else 1233 priv->ReTransmitRequested++; 1234 1235 ARLAN_DEBUG_EXIT("arlan_queue_retransmit"); 1236} 1237 1238static inline void RetryOrFail(struct net_device *dev) 1239{ 1240 struct arlan_private *priv = netdev_priv(dev); 1241 1242 ARLAN_DEBUG_ENTRY("RetryOrFail"); 1243 1244 if (priv->retransmissions > priv->Conf->retries || 1245 DoNotReTransmitCrap(dev)) 1246 { 1247 arlan_drop_tx(dev); 1248 } 1249 else if (priv->bad <= priv->Conf->fastReTransCount) 1250 { 1251 arlan_retransmit_now(dev); 1252 } 1253 else arlan_queue_retransmit(dev); 1254 1255 ARLAN_DEBUG_EXIT("RetryOrFail"); 1256} 1257 1258 1259static void arlan_tx_done_interrupt(struct net_device *dev, int status) 1260{ 1261 struct arlan_private *priv = netdev_priv(dev); 1262 1263 ARLAN_DEBUG_ENTRY("arlan_tx_done_interrupt"); 1264 1265 priv->tx_last_cleared = jiffies; 1266 priv->tx_command_given = 0; 1267 switch (status) 1268 { 1269 case 1: 1270 { 1271 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1272 printk("arlan intr: transmit OK\n"); 1273 priv->stats.tx_packets++; 1274 priv->bad = 0; 1275 priv->reset = 0; 1276 priv->retransmissions = 0; 1277 if (priv->Conf->tx_delay_ms) 1278 { 1279 priv->tx_done_delayed = jiffies + (priv->Conf->tx_delay_ms * HZ) / 1000 + 1; 1280 } 1281 else 1282 { 1283 TXLAST(dev).offset = 0; 1284 if (priv->txLast) 1285 priv->txLast = 0; 1286 else if (TXTAIL(dev).offset) 1287 priv->txLast = 1; 1288 if (TXLAST(dev).offset) 1289 { 1290 arlan_retransmit_now(dev); 1291 dev->trans_start = jiffies; 1292 } 1293 if (!TXHEAD(dev).offset || !TXTAIL(dev).offset) 1294 { 1295 netif_wake_queue (dev); 1296 } 1297 } 1298 } 1299 break; 1300 1301 case 2: 1302 { 1303 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1304 printk("arlan intr: transmit timed out\n"); 1305 priv->bad += 1; 1306 //arlan_queue_retransmit(dev); 1307 RetryOrFail(dev); 1308 } 1309 break; 1310 1311 case 3: 1312 { 1313 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1314 printk("arlan intr: transmit max retries\n"); 1315 priv->bad += 1; 1316 priv->reset = 0; 1317 //arlan_queue_retransmit(dev); 1318 RetryOrFail(dev); 1319 } 1320 break; 1321 1322 case 4: 1323 { 1324 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1325 printk("arlan intr: transmit aborted\n"); 1326 priv->bad += 1; 1327 arlan_queue_retransmit(dev); 1328 //RetryOrFail(dev); 1329 } 1330 break; 1331 1332 case 5: 1333 { 1334 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1335 printk("arlan intr: transmit not registered\n"); 1336 priv->bad += 1; 1337 //debug=101; 1338 arlan_queue_retransmit(dev); 1339 } 1340 break; 1341 1342 case 6: 1343 { 1344 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1345 printk("arlan intr: transmit destination full\n"); 1346 priv->bad += 1; 1347 priv->reset = 0; 1348 //arlan_drop_tx(dev); 1349 arlan_queue_retransmit(dev); 1350 } 1351 break; 1352 1353 case 7: 1354 { 1355 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1356 printk("arlan intr: transmit unknown ack\n"); 1357 priv->bad += 1; 1358 priv->reset = 0; 1359 arlan_queue_retransmit(dev); 1360 } 1361 break; 1362 1363 case 8: 1364 { 1365 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1366 printk("arlan intr: transmit dest mail box full\n"); 1367 priv->bad += 1; 1368 priv->reset = 0; 1369 //arlan_drop_tx(dev); 1370 arlan_queue_retransmit(dev); 1371 } 1372 break; 1373 1374 case 9: 1375 { 1376 IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 1377 printk("arlan intr: transmit root dest not reg.\n"); 1378 priv->bad += 1; 1379 priv->reset = 1; 1380 //arlan_drop_tx(dev); 1381 arlan_queue_retransmit(dev); 1382 } 1383 break; 1384 1385 default: 1386 { 1387 printk(KERN_ERR "arlan intr: transmit status unknown\n"); 1388 priv->bad += 1; 1389 priv->reset = 1; 1390 arlan_drop_tx(dev); 1391 } 1392 } 1393 1394 ARLAN_DEBUG_EXIT("arlan_tx_done_interrupt"); 1395} 1396 1397 1398static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short rxOffset, u_short pkt_len) 1399{ 1400 char *skbtmp; 1401 int i = 0; 1402 1403 struct arlan_private *priv = netdev_priv(dev); 1404 volatile struct arlan_shmem __iomem *arlan = priv->card; 1405 struct arlan_conf_stru *conf = priv->Conf; 1406 1407 1408 ARLAN_DEBUG_ENTRY("arlan_rx_interrupt"); 1409 // by spec, not WRITESHMB(arlan->rxStatus,0x00); 1410 // prohibited here arlan_command(dev, ARLAN_COMMAND_RX); 1411 1412 if (pkt_len < 10 || pkt_len > 2048) 1413 { 1414 printk(KERN_WARNING "%s: got too short or long packet, len %d \n", dev->name, pkt_len); 1415 return; 1416 } 1417 if (rxOffset + pkt_len > 0x2000) 1418 { 1419 printk("%s: got too long packet, len %d offset %x\n", dev->name, pkt_len, rxOffset); 1420 return; 1421 } 1422 priv->in_bytes += pkt_len; 1423 priv->in_bytes10 += pkt_len; 1424 if (conf->measure_rate < 1) 1425 conf->measure_rate = 1; 1426 if (time_after(jiffies, priv->in_time + conf->measure_rate * HZ)) 1427 { 1428 conf->in_speed = priv->in_bytes / conf->measure_rate; 1429 priv->in_bytes = 0; 1430 priv->in_time = jiffies; 1431 } 1432 if (time_after(jiffies, priv->in_time10 + conf->measure_rate * 10*HZ)) 1433 { 1434 conf->in_speed10 = priv->in_bytes10 / (10 * conf->measure_rate); 1435 priv->in_bytes10 = 0; 1436 priv->in_time10 = jiffies; 1437 } 1438 DEBUGSHM(1, "arlan rcv pkt rxStatus= %d ", arlan->rxStatus, u_char); 1439 switch (rxStatus) 1440 { 1441 case 1: 1442 case 2: 1443 case 3: 1444 { 1445 /* Malloc up new buffer. */ 1446 struct sk_buff *skb; 1447 1448 DEBUGSHM(50, "arlan recv pkt offs=%d\n", arlan->rxOffset, u_short); 1449 DEBUGSHM(1, "arlan rxFrmType = %d \n", arlan->rxFrmType, u_char); 1450 DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d \n", arlan->scrambled, u_char); 1451 1452 /* here we do multicast filtering to avoid slow 8-bit memcopy */ 1453#ifdef ARLAN_MULTICAST 1454 if (!(dev->flags & IFF_ALLMULTI) && 1455 !(dev->flags & IFF_PROMISC) && 1456 dev->mc_list) 1457 { 1458 char hw_dst_addr[6]; 1459 struct dev_mc_list *dmi = dev->mc_list; 1460 int i; 1461 1462 memcpy_fromio(hw_dst_addr, arlan->ultimateDestAddress, 6); 1463 if (hw_dst_addr[0] == 0x01) 1464 { 1465 if (mdebug) 1466 if (hw_dst_addr[1] == 0x00) 1467 printk(KERN_ERR "%s mcast 0x0100 \n", dev->name); 1468 else if (hw_dst_addr[1] == 0x40) 1469 printk(KERN_ERR "%s m/bcast 0x0140 \n", dev->name); 1470 while (dmi) 1471 { if (dmi->dmi_addrlen == 6) 1472 { 1473 if (arlan_debug & ARLAN_DEBUG_HEADER_DUMP) 1474 printk(KERN_ERR "%s mcl %2x:%2x:%2x:%2x:%2x:%2x \n", dev->name, 1475 dmi->dmi_addr[0], dmi->dmi_addr[1], dmi->dmi_addr[2], 1476 dmi->dmi_addr[3], dmi->dmi_addr[4], dmi->dmi_addr[5]); 1477 for (i = 0; i < 6; i++) 1478 if (dmi->dmi_addr[i] != hw_dst_addr[i]) 1479 break; 1480 if (i == 6) 1481 break; 1482 } 1483 else 1484 printk(KERN_ERR "%s: invalid multicast address length given.\n", dev->name); 1485 dmi = dmi->next; 1486 } 1487 /* we reach here if multicast filtering is on and packet 1488 * is multicast and not for receive */ 1489 goto end_of_interrupt; 1490 } 1491 } 1492#endif // ARLAN_MULTICAST 1493 /* multicast filtering ends here */ 1494 pkt_len += ARLAN_FAKE_HDR_LEN; 1495 1496 skb = dev_alloc_skb(pkt_len + 4); 1497 if (skb == NULL) 1498 { 1499 printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n", dev->name); 1500 priv->stats.rx_dropped++; 1501 break; 1502 } 1503 skb_reserve(skb, 2); 1504 skb->dev = dev; 1505 skbtmp = skb_put(skb, pkt_len); 1506 1507 memcpy_fromio(skbtmp + ARLAN_FAKE_HDR_LEN, ((char __iomem *) arlan) + rxOffset, pkt_len - ARLAN_FAKE_HDR_LEN); 1508 memcpy_fromio(skbtmp, arlan->ultimateDestAddress, 6); 1509 memcpy_fromio(skbtmp + 6, arlan->rxSrc, 6); 1510 WRITESHMB(arlan->rxStatus, 0x00); 1511 arlan_command(dev, ARLAN_COMMAND_RX); 1512 1513 IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) 1514 { 1515 char immedDestAddress[6]; 1516 char immedSrcAddress[6]; 1517 memcpy_fromio(immedDestAddress, arlan->immedDestAddress, 6); 1518 memcpy_fromio(immedSrcAddress, arlan->immedSrcAddress, 6); 1519 1520 printk(KERN_WARNING "%s t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x imd %2x:%2x:%2x:%2x:%2x:%2x ims %2x:%2x:%2x:%2x:%2x:%2x\n", dev->name, 1521 (unsigned char) skbtmp[0], (unsigned char) skbtmp[1], (unsigned char) skbtmp[2], (unsigned char) skbtmp[3], 1522 (unsigned char) skbtmp[4], (unsigned char) skbtmp[5], (unsigned char) skbtmp[6], (unsigned char) skbtmp[7], 1523 (unsigned char) skbtmp[8], (unsigned char) skbtmp[9], (unsigned char) skbtmp[10], (unsigned char) skbtmp[11], 1524 immedDestAddress[0], immedDestAddress[1], immedDestAddress[2], 1525 immedDestAddress[3], immedDestAddress[4], immedDestAddress[5], 1526 immedSrcAddress[0], immedSrcAddress[1], immedSrcAddress[2], 1527 immedSrcAddress[3], immedSrcAddress[4], immedSrcAddress[5]); 1528 } 1529 skb->protocol = eth_type_trans(skb, dev); 1530 IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) 1531 if (skb->protocol != 0x608 && skb->protocol != 0x8) 1532 { 1533 for (i = 0; i <= 22; i++) 1534 printk("%02x:", (u_char) skbtmp[i + 12]); 1535 printk(KERN_ERR "\n"); 1536 printk(KERN_WARNING "arlan kernel pkt type trans %x \n", skb->protocol); 1537 } 1538 netif_rx(skb); 1539 dev->last_rx = jiffies; 1540 priv->stats.rx_packets++; 1541 priv->stats.rx_bytes += pkt_len; 1542 } 1543 break; 1544 1545 default: 1546 printk(KERN_ERR "arlan intr: received unknown status\n"); 1547 priv->stats.rx_crc_errors++; 1548 break; 1549 } 1550 ARLAN_DEBUG_EXIT("arlan_rx_interrupt"); 1551} 1552 1553static void arlan_process_interrupt(struct net_device *dev) 1554{ 1555 struct arlan_private *priv = netdev_priv(dev); 1556 volatile struct arlan_shmem __iomem *arlan = priv->card; 1557 u_char rxStatus = READSHMB(arlan->rxStatus); 1558 u_char txStatus = READSHMB(arlan->txStatus); 1559 u_short rxOffset = READSHMS(arlan->rxOffset); 1560 u_short pkt_len = READSHMS(arlan->rxLength); 1561 int interrupt_count = 0; 1562 1563 ARLAN_DEBUG_ENTRY("arlan_process_interrupt"); 1564 1565 if (test_and_set_bit(0, (void *) &priv->interrupt_processing_active)) 1566 { 1567 if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) 1568 printk(KERN_ERR "interrupt chain reentering \n"); 1569 goto end_int_process; 1570 } 1571 while ((rxStatus || txStatus || priv->interrupt_ack_requested) 1572 && (interrupt_count < 5)) 1573 { 1574 if (rxStatus) 1575 priv->last_rx_int_ack_time = jiffies; 1576 1577 arlan_command(dev, ARLAN_COMMAND_INT_ACK); 1578 arlan_command(dev, ARLAN_COMMAND_INT_ENABLE); 1579 1580 IFDEBUG(ARLAN_DEBUG_INTERRUPT) 1581 printk(KERN_ERR "%s: got IRQ rx %x tx %x comm %x rxOff %x rxLen %x \n", 1582 dev->name, rxStatus, txStatus, READSHMB(arlan->commandByte), 1583 rxOffset, pkt_len); 1584 1585 if (rxStatus == 0 && txStatus == 0) 1586 { 1587 if (priv->irq_test_done) 1588 { 1589 if (!registrationBad(dev)) 1590 IFDEBUG(ARLAN_DEBUG_INTERRUPT) printk(KERN_ERR "%s unknown interrupt(nop? regLost ?) reason tx %d rx %d ", 1591 dev->name, txStatus, rxStatus); 1592 } else { 1593 IFDEBUG(ARLAN_DEBUG_INTERRUPT) 1594 printk(KERN_INFO "%s irq $%d test OK \n", dev->name, dev->irq); 1595 1596 } 1597 priv->interrupt_ack_requested = 0; 1598 goto ends; 1599 } 1600 if (txStatus != 0) 1601 { 1602 WRITESHMB(arlan->txStatus, 0x00); 1603 arlan_tx_done_interrupt(dev, txStatus); 1604 goto ends; 1605 } 1606 if (rxStatus == 1 || rxStatus == 2) 1607 { /* a packet waiting */ 1608 arlan_rx_interrupt(dev, rxStatus, rxOffset, pkt_len); 1609 goto ends; 1610 } 1611 if (rxStatus > 2 && rxStatus < 0xff) 1612 { 1613 WRITESHMB(arlan->rxStatus, 0x00); 1614 printk(KERN_ERR "%s unknown rxStatus reason tx %d rx %d ", 1615 dev->name, txStatus, rxStatus); 1616 goto ends; 1617 } 1618 if (rxStatus == 0xff) 1619 { 1620 WRITESHMB(arlan->rxStatus, 0x00); 1621 arlan_command(dev, ARLAN_COMMAND_RX); 1622 if (registrationBad(dev)) 1623 netif_device_detach(dev); 1624 if (!registrationBad(dev)) 1625 { 1626 priv->registrationLastSeen = jiffies; 1627 if (!netif_queue_stopped(dev) && !priv->under_reset && !priv->under_config) 1628 netif_wake_queue (dev); 1629 } 1630 goto ends; 1631 } 1632ends: 1633 1634 arlan_command_process(dev); 1635 1636 rxStatus = READSHMB(arlan->rxStatus); 1637 txStatus = READSHMB(arlan->txStatus); 1638 rxOffset = READSHMS(arlan->rxOffset); 1639 pkt_len = READSHMS(arlan->rxLength); 1640 1641 1642 priv->irq_test_done = 1; 1643 1644 interrupt_count++; 1645 } 1646 priv->interrupt_processing_active = 0; 1647 1648end_int_process: 1649 arlan_command_process(dev); 1650 1651 ARLAN_DEBUG_EXIT("arlan_process_interrupt"); 1652 return; 1653} 1654 1655static irqreturn_t arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs) 1656{ 1657 struct net_device *dev = dev_id; 1658 struct arlan_private *priv = netdev_priv(dev); 1659 volatile struct arlan_shmem __iomem *arlan = priv->card; 1660 u_char rxStatus = READSHMB(arlan->rxStatus); 1661 u_char txStatus = READSHMB(arlan->txStatus); 1662 1663 ARLAN_DEBUG_ENTRY("arlan_interrupt"); 1664 1665 1666 if (!rxStatus && !txStatus) 1667 priv->interrupt_ack_requested++; 1668 1669 arlan_process_interrupt(dev); 1670 1671 priv->irq_test_done = 1; 1672 1673 ARLAN_DEBUG_EXIT("arlan_interrupt"); 1674 return IRQ_HANDLED; 1675 1676} 1677 1678 1679static int arlan_close(struct net_device *dev) 1680{ 1681 struct arlan_private *priv = netdev_priv(dev); 1682 1683 ARLAN_DEBUG_ENTRY("arlan_close"); 1684 1685 del_timer_sync(&priv->timer); 1686 1687 arlan_command(dev, ARLAN_COMMAND_POWERDOWN); 1688 1689 IFDEBUG(ARLAN_DEBUG_STARTUP) 1690 printk(KERN_NOTICE "%s: Closing device\n", dev->name); 1691 1692 netif_stop_queue(dev); 1693 free_irq(dev->irq, dev); 1694 1695 ARLAN_DEBUG_EXIT("arlan_close"); 1696 return 0; 1697} 1698 1699#ifdef ARLAN_DEBUGGING 1700static long alignLong(volatile u_char * ptr) 1701{ 1702 long ret; 1703 memcpy_fromio(&ret, (void *) ptr, 4); 1704 return ret; 1705} 1706#endif 1707 1708/* 1709 * Get the current statistics. 1710 * This may be called with the card open or closed. 1711 */ 1712 1713static struct net_device_stats *arlan_statistics(struct net_device *dev) 1714{ 1715 struct arlan_private *priv = netdev_priv(dev); 1716 volatile struct arlan_shmem __iomem *arlan = priv->card; 1717 1718 1719 ARLAN_DEBUG_ENTRY("arlan_statistics"); 1720 1721 /* Update the statistics from the device registers. */ 1722 1723 READSHM(priv->stats.collisions, arlan->numReTransmissions, u_int); 1724 READSHM(priv->stats.rx_crc_errors, arlan->numCRCErrors, u_int); 1725 READSHM(priv->stats.rx_dropped, arlan->numFramesDiscarded, u_int); 1726 READSHM(priv->stats.rx_fifo_errors, arlan->numRXBufferOverflows, u_int); 1727 READSHM(priv->stats.rx_frame_errors, arlan->numReceiveFramesLost, u_int); 1728 READSHM(priv->stats.rx_over_errors, arlan->numRXOverruns, u_int); 1729 READSHM(priv->stats.rx_packets, arlan->numDatagramsReceived, u_int); 1730 READSHM(priv->stats.tx_aborted_errors, arlan->numAbortErrors, u_int); 1731 READSHM(priv->stats.tx_carrier_errors, arlan->numStatusTimeouts, u_int); 1732 READSHM(priv->stats.tx_dropped, arlan->numDatagramsDiscarded, u_int); 1733 READSHM(priv->stats.tx_fifo_errors, arlan->numTXUnderruns, u_int); 1734 READSHM(priv->stats.tx_packets, arlan->numDatagramsTransmitted, u_int); 1735 READSHM(priv->stats.tx_window_errors, arlan->numHoldOffs, u_int); 1736 1737 ARLAN_DEBUG_EXIT("arlan_statistics"); 1738 1739 return &priv->stats; 1740} 1741 1742 1743static void arlan_set_multicast(struct net_device *dev) 1744{ 1745 struct arlan_private *priv = netdev_priv(dev); 1746 volatile struct arlan_shmem __iomem *arlan = priv->card; 1747 struct arlan_conf_stru *conf = priv->Conf; 1748 int board_conf_needed = 0; 1749 1750 1751 ARLAN_DEBUG_ENTRY("arlan_set_multicast"); 1752 1753 if (dev->flags & IFF_PROMISC) 1754 { 1755 unsigned char recMode; 1756 READSHM(recMode, arlan->receiveMode, u_char); 1757 conf->receiveMode = (ARLAN_RCV_PROMISC | ARLAN_RCV_CONTROL); 1758 if (conf->receiveMode != recMode) 1759 board_conf_needed = 1; 1760 } 1761 else 1762 { 1763 /* turn off promiscuous mode */ 1764 unsigned char recMode; 1765 READSHM(recMode, arlan->receiveMode, u_char); 1766 conf->receiveMode = ARLAN_RCV_CLEAN | ARLAN_RCV_CONTROL; 1767 if (conf->receiveMode != recMode) 1768 board_conf_needed = 1; 1769 } 1770 if (board_conf_needed) 1771 arlan_command(dev, ARLAN_COMMAND_CONF); 1772 1773 ARLAN_DEBUG_EXIT("arlan_set_multicast"); 1774} 1775 1776 1777struct net_device * __init arlan_probe(int unit) 1778{ 1779 struct net_device *dev; 1780 int err; 1781 int m; 1782 1783 ARLAN_DEBUG_ENTRY("arlan_probe"); 1784 1785 if (arlans_found == MAX_ARLANS) 1786 return ERR_PTR(-ENODEV); 1787 1788 /* 1789 * Reserve space for local data and a copy of the shared memory 1790 * that is used by the /proc interface. 1791 */ 1792 dev = alloc_etherdev(sizeof(struct arlan_private) 1793 + sizeof(struct arlan_shmem)); 1794 if (!dev) 1795 return ERR_PTR(-ENOMEM); 1796 1797 SET_MODULE_OWNER(dev); 1798 1799 if (unit >= 0) { 1800 sprintf(dev->name, "eth%d", unit); 1801 netdev_boot_setup_check(dev); 1802 1803 if (dev->mem_start) { 1804 if (arlan_probe_here(dev, dev->mem_start) == 0) 1805 goto found; 1806 goto not_found; 1807 } 1808 1809 } 1810 1811 1812 for (m = (int)phys_to_virt(lastFoundAt) + ARLAN_SHMEM_SIZE; 1813 m <= (int)phys_to_virt(0xDE000); 1814 m += ARLAN_SHMEM_SIZE) 1815 { 1816 if (arlan_probe_here(dev, m) == 0) 1817 { 1818 lastFoundAt = (int)virt_to_phys((void*)m); 1819 goto found; 1820 } 1821 } 1822 1823 if (lastFoundAt == 0xbe000) 1824 printk(KERN_ERR "arlan: No Arlan devices found \n"); 1825 1826 not_found: 1827 free_netdev(dev); 1828 return ERR_PTR(-ENODEV); 1829 1830 found: 1831 err = arlan_setup_device(dev, arlans_found); 1832 if (err) 1833 dev = ERR_PTR(err); 1834 else if (!arlans_found++) 1835 printk(KERN_INFO "Arlan driver %s\n", arlan_version); 1836 1837 return dev; 1838} 1839 1840#ifdef MODULE 1841int init_module(void) 1842{ 1843 int i = 0; 1844 1845 ARLAN_DEBUG_ENTRY("init_module"); 1846 1847 if (channelSet != channelSetUNKNOWN || channelNumber != channelNumberUNKNOWN || systemId != systemIdUNKNOWN) 1848 return -EINVAL; 1849 1850 for (i = 0; i < MAX_ARLANS; i++) { 1851 struct net_device *dev = arlan_probe(i); 1852 1853 if (IS_ERR(dev)) 1854 return PTR_ERR(dev); 1855 } 1856 init_arlan_proc(); 1857 printk(KERN_INFO "Arlan driver %s\n", arlan_version); 1858 ARLAN_DEBUG_EXIT("init_module"); 1859 return 0; 1860} 1861 1862 1863void cleanup_module(void) 1864{ 1865 int i = 0; 1866 struct net_device *dev; 1867 1868 ARLAN_DEBUG_ENTRY("cleanup_module"); 1869 1870 IFDEBUG(ARLAN_DEBUG_SHUTDOWN) 1871 printk(KERN_INFO "arlan: unloading module\n"); 1872 1873 cleanup_arlan_proc(); 1874 1875 for (i = 0; i < MAX_ARLANS; i++) 1876 { 1877 dev = arlan_device[i]; 1878 if (dev) { 1879 arlan_command(dev, ARLAN_COMMAND_POWERDOWN ); 1880 1881 unregister_netdev(dev); 1882 release_mem_region(virt_to_phys((void *) dev->mem_start), 1883 ARLAN_SHMEM_SIZE); 1884 free_netdev(dev); 1885 arlan_device[i] = NULL; 1886 } 1887 } 1888 1889 ARLAN_DEBUG_EXIT("cleanup_module"); 1890} 1891 1892 1893#endif 1894MODULE_LICENSE("GPL");