static const char *arlan_diagnostic_info_string(struct net_device *dev) { struct arlan_private *priv = netdev_priv(dev); volatile struct arlan_shmem __iomem *arlan = priv->card; u_char diagnosticInfo; READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); switch (diagnosticInfo) { case 0xFF: return "Diagnostic info is OK"; case 0xFE: return "ERROR EPROM Checksum error "; case 0xFD: return "ERROR Local Ram Test Failed "; case 0xFC: return "ERROR SCC failure "; case 0xFB: return "ERROR BackBone failure "; case 0xFA: return "ERROR transceiver not found "; case 0xF9: return "ERROR no more address space "; case 0xF8: return "ERROR Checksum error "; case 0xF7: return "ERROR Missing SS Code"; case 0xF6: return "ERROR Invalid config format"; case 0xF5: return "ERROR Reserved errorcode F5"; case 0xF4: return "ERROR Invalid spreading code/channel number"; case 0xF3: return "ERROR Load Code Error"; case 0xF2: return "ERROR Reserver errorcode F2 "; case 0xF1: return "ERROR Invalid command receivec by LAN card "; case 0xF0: return "ERROR Invalid parameter found in command "; case 0xEF: return "ERROR On-chip timer failure "; case 0xEE: return "ERROR T410 timer failure "; case 0xED: return "ERROR Too Many TxEnable commands "; case 0xEC: return "ERROR EEPROM error on radio module "; default: return "ERROR unknown Diagnostic info reply code "; } }
static int arlan_setup_card_by_book(struct net_device *dev) { u_char irqLevel, configuredStatusFlag; volatile struct arlan_shmem *arlan = ((struct arlan_private *) dev->priv)->card; // ARLAN_DEBUG_ENTRY("arlan_setup_card"); READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); IFDEBUG(10) if (configuredStatusFlag != 0) IFDEBUG(10) printk("arlan: CARD IS CONFIGURED\n"); else IFDEBUG(10) printk("arlan: card is NOT configured\n"); if (testMemory || (READSHMB(arlan->diagnosticInfo) != 0xff)) if (arlan_hw_test_memory(dev)) return -1; DEBUGSHM(4, "arlan configuredStatus = %d \n", arlan->configuredStatusFlag, u_char); DEBUGSHM(4, "arlan driver diagnostic: 0x%2x\n", arlan->diagnosticInfo, u_char); /* issue nop command - no interrupt */ arlan_command(dev, ARLAN_COMMAND_NOOP); if (arlan_command(dev, ARLAN_COMMAND_WAIT_NOW) != 0) return -1; IFDEBUG(50) printk("1st Noop successfully executed !!\n"); /* try to turn on the arlan interrupts */ clearClearInterrupt(dev); setClearInterrupt(dev); setInterruptEnable(dev); /* issue nop command - with interrupt */ arlan_command(dev, ARLAN_COMMAND_NOOPINT); if (arlan_command(dev, ARLAN_COMMAND_WAIT_NOW) != 0) return -1; IFDEBUG(50) printk("2nd Noop successfully executed !!\n"); READSHM(irqLevel, arlan->irqLevel, u_char) if (irqLevel != dev->irq) { IFDEBUG(1) printk(KERN_WARNING "arlan dip switches set irq to %d\n", irqLevel); printk(KERN_WARNING "device driver irq set to %d - does not match\n", dev->irq); dev->irq = irqLevel; } else IFDEBUG(2) printk("irq level is OK\n"); IFDEBUG(3) arlan_print_diagnostic_info(dev); arlan_command(dev, ARLAN_COMMAND_CONF); READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); if (configuredStatusFlag == 0) { printk(KERN_WARNING "arlan configure failed\n"); return -1; } arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW); arlan_command(dev, ARLAN_COMMAND_RX); arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW); printk(KERN_NOTICE "%s: arlan driver version %s loaded\n", dev->name, arlan_version); // ARLAN_DEBUG_EXIT("arlan_setup_card"); return 0; /* no errors */ }
static void arlan_print_diagnostic_info(struct net_device *dev) { int i; u_char diagnosticInfo; u_short diagnosticOffset; u_char hardwareType; volatile struct arlan_shmem *arlan = ((struct arlan_private *) dev->priv)->card; // ARLAN_DEBUG_ENTRY("arlan_print_diagnostic_info"); if (READSHMB(arlan->configuredStatusFlag) == 0) printk("Arlan: Card NOT configured\n"); else printk("Arlan: Card is configured\n"); READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); READSHM(diagnosticOffset, arlan->diagnosticOffset, u_short); printk(KERN_INFO "%s\n", arlan_diagnostic_info_string(dev)); if (diagnosticInfo != 0xff) printk("%s arlan: Diagnostic Offset %d \n", dev->name, diagnosticOffset); printk("arlan: LAN CODE ID = "); for (i = 0; i < 6; i++) DEBUGSHM(1, "%03d:", arlan->lanCardNodeId[i], u_char); printk("\n"); printk("arlan: Arlan BroadCast address = "); for (i = 0; i < 6; i++) DEBUGSHM(1, "%03d:", arlan->broadcastAddress[i], u_char); printk("\n"); READSHM(hardwareType, arlan->hardwareType, u_char); printk(KERN_INFO "%s\n", arlan_hardware_type_string(dev)); DEBUGSHM(1, "arlan: channelNumber=%d\n", arlan->channelNumber, u_char); DEBUGSHM(1, "arlan: channelSet=%d\n", arlan->channelSet, u_char); DEBUGSHM(1, "arlan: spreadingCode=%d\n", arlan->spreadingCode, u_char); DEBUGSHM(1, "arlan: radioNodeId=%d\n", arlan->radioNodeId, u_short); DEBUGSHM(1, "arlan: SID =%d\n", arlan->SID, u_short); DEBUGSHM(1, "arlan: rxOffset=%d\n", arlan->rxOffset, u_short); DEBUGSHM(1, "arlan: registration mode is %d\n", arlan->registrationMode, u_char); printk("arlan: name= "); IFDEBUG(1) for (i = 0; i < 16; i++) { char c; READSHM(c, arlan->name[i], char); if (c) printk("%c", c); } printk("\n"); // ARLAN_DEBUG_EXIT("arlan_print_diagnostic_info"); }
static const char *arlan_hardware_type_string(struct net_device *dev) { u_char hardwareType; volatile struct arlan_shmem *arlan = ((struct arlan_private *) dev->priv)->card; READSHM(hardwareType, arlan->hardwareType, u_char); switch (hardwareType) { case 0x00: return "type A450"; case 0x01: return "type A650 "; case 0x04: return "type TMA coproc"; case 0x0D: return "type A650E "; case 0x18: return "type TMA coproc Australian"; case 0x19: return "type A650A "; case 0x26: return "type TMA coproc European"; case 0x2E: return "type A655 "; case 0x2F: return "type A655A "; case 0x30: return "type A655E "; case 0x0B: return "type A670 "; case 0x0C: return "type A670E "; case 0x2D: return "type A670A "; case 0x0F: return "type A411T"; case 0x16: return "type A411TA"; case 0x1B: return "type A440T"; case 0x1C: return "type A412T"; case 0x1E: return "type A412TA"; case 0x22: return "type A411TE"; case 0x24: return "type A412TE"; case 0x27: return "type A671T "; case 0x29: return "type A671TA "; case 0x2B: return "type A671TE "; case 0x31: return "type A415T "; case 0x33: return "type A415TA "; case 0x35: return "type A415TE "; case 0x37: return "type A672"; case 0x39: return "type A672A "; case 0x3B: return "type A672T"; case 0x6B: return "type IC2200"; default: return "type A672T"; } }