static int arlan_hw_test_memory(struct net_device *dev) { u_char *ptr; int i; int memlen = sizeof(struct arlan_shmem) - 0xF; /* avoid control register */ volatile char *arlan_mem = (char *) (dev->mem_start); volatile struct arlan_shmem *arlan = ((struct arlan_private *) dev->priv)->card; char pattern; ptr = NULL; /* hold card in reset state */ setHardwareReset(dev); /* test memory */ pattern = 0; for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], ((u_char) pattern++), u_char); pattern = 0; for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); if (res != pattern++) { printk(KERN_ERR "Arlan driver memory test 1 failed \n"); return -1; } } pattern = 0; for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], ~(pattern++), char); pattern = 0; for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); if (res != ~(pattern++)) { printk(KERN_ERR "Arlan driver memory test 2 failed \n"); return -1; } } /* zero memory */ for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], 0x00, char); IFDEBUG(1) printk(KERN_INFO "Arlan: memory tests ok\n"); /* set reset flag and then release reset */ WRITESHM(arlan->resetFlag, 0xff, u_char); clearChannelAttention(dev); clearHardwareReset(dev); /* wait for reset flag to become zero, we'll wait for two seconds */ if (arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW)) { printk(KERN_ERR "%s arlan: failed to come back from memory test\n", dev->name); return -1; } return 0; }
static int arlan_hw_test_memory(struct net_device *dev) { u_char *ptr; int i; int memlen = sizeof(struct arlan_shmem) - 0xF; volatile char *arlan_mem = (char *) (dev->mem_start); struct arlan_private *priv = netdev_priv(dev); volatile struct arlan_shmem __iomem *arlan = priv->card; char pattern; ptr = NULL; setHardwareReset(dev); pattern = 0; for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], ((u_char) pattern++), u_char); pattern = 0; for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); if (res != pattern++) { printk(KERN_ERR "Arlan driver memory test 1 failed \n"); return -1; } } pattern = 0; for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], ~(pattern++), char); pattern = 0; for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); if (res != ~(pattern++)) { printk(KERN_ERR "Arlan driver memory test 2 failed \n"); return -1; } } for (i = 0; i < memlen; i++) WRITESHM(arlan_mem[i], 0x00, char); IFDEBUG(1) printk(KERN_INFO "Arlan: memory tests ok\n"); WRITESHM(arlan->resetFlag, 0xff, u_char); clearChannelAttention(dev); clearHardwareReset(dev); if (arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW)) { printk(KERN_ERR "%s arlan: failed to come back from memory test\n", dev->name); return -1; } return 0; }