--- embedtools/src/athctl.c 2010/10/28 23:25:59 1.1.2.7 +++ embedtools/src/athctl.c 2010/10/29 07:32:52 1.1.2.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ - * $Id: athctl.c,v 1.1.2.7 2010/10/28 23:25:59 misho Exp $ + * $Id: athctl.c,v 1.1.2.8 2010/10/29 07:32:52 misho Exp $ * *************************************************************************/ #include "global.h" @@ -170,13 +170,13 @@ devClose(void *basemem) munmap(basemem, ATH_PCI_MEM_SIZE); } -static inline short +static inline int readWord(u_char *mem, u_long offset) { register int timeout = ATH_ACCESS_TIMEOUT; u_long stat; - printf("Reading EEPROM memory %p+%lx ...\n", mem, offset); + VERB(2) printf("Reading EEPROM memory %p+%lx ...\n", mem, offset); ATH_OUT(mem, AR5211_EEPROM_CONF, 0); usleep(ATH_ACCESS_WAIT); /* enable eeprom access */ @@ -199,7 +199,7 @@ readWord(u_char *mem, u_long offset) } stat = ATH_IN(mem, AR5211_EEPROM_DATA); - return stat & 0x0000ffff; + return (stat & 0x0000ffff) << 16; } } @@ -207,14 +207,14 @@ readWord(u_char *mem, u_long offset) return -1; } -static inline short +static inline int writeWord(u_char *mem, u_long offset, u_short newval) { register int i = ATH_WRITE_RETRY, timeout; u_long pcicfg, stat; u_short chk; - printf("Writing EEPROM memory %p+%lx ...\n", mem, offset); + VERB(2) printf("Writing EEPROM memory %p+%lx ...\n", mem, offset); /* enable pci write access */ pcicfg = ATH_IN(mem, AR5K_PCICFG); ATH_OUT(mem, AR5K_PCICFG, (pcicfg & ~AR5K_PCICFG_SPWR_DN)); @@ -256,7 +256,7 @@ writeWord(u_char *mem, u_long offset, u_short newval) if (chk == (u_short) -1) return -1; if (chk == newval) - return chk; + return chk << 16; else VERB(1) printf("Write & Read don`t match 0x%04X != 0x%04X\n", newval, chk); if (i) @@ -271,11 +271,11 @@ static int dumpFile(const char *csName, u_char *mem) { register u_long i; - u_short data, d1, d2; + u_short d1, d2; u_short eeprom[ATH_EEPROM_SIZE] = { 0 }; - int f; + int f, data; - printf("Reading EEPROM memory %p ::\n", mem); + VERB(2) printf("Reading EEPROM memory %p ::\n", mem); for (i = 0; i < ATH_EEPROM_SIZE / 2; i++) { if (!(i % 0x40)) { printf("0x%04lX [", i * 2); @@ -283,11 +283,11 @@ dumpFile(const char *csName, u_char *mem) printf("]\n"); } - if ((data = readWord(mem, i)) < 1) + if ((data = readWord(mem, i)) == -1) return -1; else { - d1 = data / 0x100; - d2 = data % 0x100; + d1 = ((u_short) data >> 16) / 0x100; + d2 = ((u_short) data >> 16) % 0x100; } eeprom[i * 2] = d2; @@ -298,7 +298,7 @@ dumpFile(const char *csName, u_char *mem) } printf("]\n"); - printf("Saving EEPROM to file %s ... ", csName); + VERB(2) printf("Saving EEPROM to file %s ... ", csName); f = open(csName, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (f == -1) { printf("Failed!\nError:: in create file %s #%d - %s\n", csName, @@ -320,11 +320,11 @@ static int flashFile(const char *csName, u_char *mem) { register u_long i; - u_short data, d1; + u_short d1; u_short eeprom[ATH_EEPROM_SIZE] = { 0 }; - int f; + int f, data; - printf("Reading EEPROM from file %s ... ", csName); + VERB(2) printf("Reading EEPROM from file %s ... ", csName); f = open(csName, O_RDONLY); if (f == -1) { printf("Failed!\nError:: in open file %s #%d - %s\n", csName, @@ -339,7 +339,7 @@ flashFile(const char *csName, u_char *mem) close(f); printf("OK!\n"); - printf("Writing EEPROM memory %p ::\n", mem); + VERB(2) printf("Writing EEPROM memory %p ::\n", mem); for (i = 0; i < ATH_EEPROM_SIZE / 2; i++) { if (!(i % 0x40)) { printf("0x%04lX [", i * 2); @@ -347,12 +347,12 @@ flashFile(const char *csName, u_char *mem) printf("]\n"); } - if ((data = readWord(mem, i)) < 1) + if ((data = readWord(mem, i)) == -1) return -1; else d1 = eeprom[i * 2 + 1] * 0x100 + eeprom[i * 2]; - if (data == d1) + if ((data >> 16) == d1) printf("."); else { printf("x"); @@ -468,7 +468,7 @@ main(int argc, char **argv) devClose(basemem); return 3; } else - printf("EEPROM readed value 0x%04X\n", (u_short) ret); + printf("EEPROM readed value 0x%04X\n", (u_short) ret >> 16); devClose(basemem); } if (mode & 8) {