├── AR9285_Optimized_ROM ├── Proper_AR9285_Mod.rom ├── ROM_AR9285_HighPower.rom └── ROM_AR9285_HighPower.rom 2 ├── MacNB_iwleeprom ├── Makefile ├── ath5kio.c ├── ath5kio.h ├── ath9kio.c ├── ath9kio.h ├── iwleeprom ├── iwleeprom (copy).c ├── iwleeprom.8 ├── iwleeprom.8.gz ├── iwleeprom.c ├── iwleeprom.h ├── iwlio.c ├── iwlio.h └── obj │ ├── ath5kio.o │ ├── ath9kio.o │ ├── iwleeprom.o │ ├── iwlio.o │ └── original.bin ├── aet_rw512_AnV ├── ACU.ico ├── Release │ ├── ath32.sys │ ├── ath64.sys │ ├── atheros_eeprom_tool32.exe │ ├── atheros_eeprom_tool64.exe │ └── dseo13b.exe ├── ath.tpl ├── atheros_bkScanEnable.reg ├── atheros_eeprom_tool.sdf ├── atheros_eeprom_tool.sln ├── atheros_eeprom_tool.suo ├── atheros_eeprom_tool │ ├── MAKEFILE │ ├── ReadMe.txt │ ├── aetres32.obj │ ├── aetres64.obj │ ├── atheros_eeprom_tool.aps │ ├── atheros_eeprom_tool.cpp │ ├── atheros_eeprom_tool.h │ ├── atheros_eeprom_tool.ico │ ├── atheros_eeprom_tool.manifest │ ├── atheros_eeprom_tool.rc │ ├── atheros_eeprom_tool.vcxproj │ ├── atheros_eeprom_tool.vcxproj.filters │ ├── atheros_eeprom_tool.vcxproj.user │ ├── resource.h │ ├── small.ico │ ├── sources │ ├── stdafx.h │ └── targetver.h ├── atheros_htAdHoc11n.reg ├── atheros_params.reg ├── atheros_wModeSelect.reg ├── driver │ ├── MAKEFILE │ ├── atheeprom.c │ ├── atheeprom.new.c │ ├── atheeprom.rc │ ├── build_main.bat │ ├── build_x64.bat │ ├── build_x86.bat │ ├── buildchk_win7_amd64.log │ ├── buildchk_win7_x86.log │ ├── buildfre_win7_amd64.log │ ├── buildfre_win7_x86.log │ └── sources ├── eeproms │ ├── AR5B95_E00E.rom │ ├── full │ │ ├── eeprom_dump.rom │ │ ├── eeprom_dump_2427+.rom │ │ ├── eeprom_dump_2427+2.rom │ │ ├── eeprom_dump_5B95.rom │ │ └── eeprom_dump_9285.rom │ ├── modified.rar │ ├── modified.rom │ ├── original.rar │ ├── original.rom │ ├── v3 │ │ ├── 1.ZIP │ │ ├── 1.diff │ │ ├── DEV_002B&SUBSYS_10891A3B.rom │ │ └── eeprom.rom.org │ ├── v3detailed │ │ ├── ar9285.bin │ │ ├── dmesg.txt │ │ ├── iw_list.txt │ │ └── lspci.txt │ └── v4 │ │ ├── 01.txt │ │ ├── 02.txt │ │ ├── 03.txt │ │ ├── 04.txt │ │ ├── 34.txt │ │ ├── DEV_002B&SUBSYS_E016105B.rom │ │ ├── eeprom 9285 pwr2.rom │ │ ├── eeprom 9285.rom │ │ ├── small_2427.rom │ │ └── small_5B95.rom └── ipch │ └── atheros_eeprom_tool-26a6c706 │ └── atheros_eeprom_tool-cb5a76a0.ipch ├── atheros_eeprom_tool-WIN8.1 ├── ath32.sys ├── ath64.sys ├── atheros_eeprom_tool32.exe ├── atheros_eeprom_tool64.exe └── dseo13b.exe ├── dumpathrom ├── .DS_Store ├── Makefile ├── ROM_AR9285_HighPower.rom ├── dumpathrom ├── dumpathrom.c ├── dumpathrom.obj ├── dumpathrom32.exe ├── dumpathrom64.exe └── eeprom.h ├── iwleeprom ├── .svn │ ├── entries │ ├── format │ ├── pristine │ │ ├── 14 │ │ │ └── 1444865d1cbedff98a9c27eb92375139027f8851.svn-base │ │ ├── 18 │ │ │ └── 1848ca5361b3063571945a8e728f15fd0c187342.svn-base │ │ ├── 26 │ │ │ └── 269fad716cfe89b57887924ed5fd40ffae3349af.svn-base │ │ ├── 51 │ │ │ └── 51cc845bba3b9caf0fe239803ab86075df792d83.svn-base │ │ ├── 81 │ │ │ └── 81c555c5f9ad5b28167457673fc3a29cd5b4bedb.svn-base │ │ ├── 6f │ │ │ └── 6f90965d760e6386253b631257558aeeda8f5e91.svn-base │ │ ├── 8f │ │ │ └── 8ff941c4af6acf76ff12e412e34f23f4146ae6f8.svn-base │ │ ├── af │ │ │ └── af7e903d794bc8ec688c6e90ab011955de7e7a89.svn-base │ │ ├── c6 │ │ │ └── c6c0827979de773dd840577f1ba97fddc80e7534.svn-base │ │ └── d7 │ │ │ └── d72e71638f053e371788a8e1fb36535026b88b41.svn-base │ └── wc.db ├── Makefile ├── Readme_Recover_Atheros_ROM.txt ├── ath5kio.c ├── ath5kio.h ├── ath9kio.c ├── ath9kio.h ├── create4krom.sh ├── iwleeprom ├── iwleeprom.8 ├── iwleeprom.8.gz ├── iwleeprom.c ├── iwleeprom.h ├── iwlio.c ├── iwlio.h ├── obj │ ├── ath5kio.o │ ├── ath9kio.o │ ├── iwleeprom.o │ └── iwlio.o └── padding.bin └── readme.md /AR9285_Optimized_ROM/Proper_AR9285_Mod.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/AR9285_Optimized_ROM/Proper_AR9285_Mod.rom -------------------------------------------------------------------------------- /AR9285_Optimized_ROM/ROM_AR9285_HighPower.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/AR9285_Optimized_ROM/ROM_AR9285_HighPower.rom -------------------------------------------------------------------------------- /AR9285_Optimized_ROM/ROM_AR9285_HighPower.rom 2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/AR9285_Optimized_ROM/ROM_AR9285_HighPower.rom 2 -------------------------------------------------------------------------------- /MacNB_iwleeprom/Makefile: -------------------------------------------------------------------------------- 1 | SBINDIR=/usr/local/sbin 2 | MANDIR=/usr/share/man/man8 3 | OBJDIR=obj 4 | 5 | all: $(OBJDIR) iwleeprom iwleeprom.8.gz 6 | 7 | debug: 8 | CFLAGS="-g $(CFLAGS)" make all 9 | 10 | $(OBJDIR): 11 | mkdir $(OBJDIR) 12 | 13 | iwleeprom: $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o $(OBJDIR)/iwleeprom.o 14 | gcc -Wall $(CFLAGS) -o iwleeprom $(OBJDIR)/iwleeprom.o $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o 15 | 16 | $(OBJDIR)/iwleeprom.o: iwleeprom.h iwlio.h ath5kio.h ath9kio.h iwleeprom.c 17 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwleeprom.o iwleeprom.c 18 | 19 | $(OBJDIR)/iwlio.o: iwleeprom.h iwlio.h iwlio.c 20 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwlio.o iwlio.c 21 | 22 | $(OBJDIR)/ath5kio.o: iwleeprom.h ath5kio.h ath5kio.c 23 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath5kio.o ath5kio.c 24 | 25 | $(OBJDIR)/ath9kio.o: iwleeprom.h ath9kio.h ath9kio.c 26 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath9kio.o ath9kio.c 27 | 28 | iwleeprom.8.gz: iwleeprom.8 29 | gzip -c iwleeprom.8 > iwleeprom.8.gz 30 | 31 | clean: 32 | rm -f iwleeprom iwleeprom.8.gz *~ 33 | rm -rf $(OBJDIR) 34 | 35 | install: all 36 | install -m 4755 iwleeprom $(SBINDIR) 37 | install -m 644 iwleeprom.8.gz $(MANDIR) 38 | 39 | uninstall: 40 | rm -f $(SBINDIR)/iwleeprom 41 | rm -f $(MANDIR)/iwleeprom.8.gz 42 | 43 | .PHONY: all debug clean install uninstall 44 | 45 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/ath5kio.c: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * This program is derived from code bearing the following Copyright(s) 4 | */ 5 | 6 | /* -*- linux-c -*- 7 | * _ _ ____ __ _ ___ ____ ____ __ _ _ _ _ | 8 | * . \/ |--| | \| | |--< [__] | \| | _X_ | s e c u r e s y s t e m s 9 | * 10 | * .vt|ar5k - PCI/CardBus 802.11a WirelessLAN driver for Atheros AR5k chipsets 11 | * 12 | * Copyright (c) 2002, .vantronix | secure systems 13 | * and Reyk Floeter 14 | * 15 | * This program is free software ; you can redistribute it and/or modify 16 | * it under the terms of the GNU General Public License as published by 17 | * the Free Software Foundation ; either version 2 of the License, or 18 | * (at your option) any later version. 19 | * 20 | * This program is distributed in the hope that it will be useful, 21 | * but WITHOUT ANY WARRANTY ; without even the implied warranty of 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | * GNU General Public License for more details. 24 | * 25 | * You should have received a copy of the GNU General Public License 26 | * along with this program ; if not, write to the Free Software 27 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 28 | */ 29 | 30 | /* 31 | * Modified by Jan Krupa for EEPROM read/write/repair 32 | * Version 1.0 33 | */ 34 | 35 | 36 | /* 37 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 38 | */ 39 | 40 | #include "ath5kio.h" 41 | 42 | #define ATH5K_EEPROM_SIZE 0x800 43 | #define ATH5K_EEPROM_SIGNATURE 0x0000 44 | #define ATH5K_MMAP_LENGTH 0x10000 45 | 46 | #define AR5K_PCICFG 0x4010 47 | #define AR5K_PCICFG_EEAE 0x00000001 48 | #define AR5K_PCICFG_CLKRUNEN 0x00000004 49 | #define AR5K_PCICFG_LED_PEND 0x00000020 50 | #define AR5K_PCICFG_LED_ACT 0x00000040 51 | #define AR5K_PCICFG_SL_INTEN 0x00000800 52 | #define AR5K_PCICFG_BCTL 0x00001000 53 | #define AR5K_PCICFG_SPWR_DN 0x00010000 54 | 55 | #define AR5211_EEPROM_ADDR 0x6000 56 | #define AR5211_EEPROM_DATA 0x6004 57 | #define AR5211_EEPROM_COMD 0x6008 58 | #define AR5211_EEPROM_COMD_READ 0x0001 59 | #define AR5211_EEPROM_COMD_WRITE 0x0002 60 | #define AR5211_EEPROM_COMD_RESET 0x0003 61 | #define AR5211_EEPROM_STATUS 0x600C 62 | #define AR5211_EEPROM_STAT_RDERR 0x0001 63 | #define AR5211_EEPROM_STAT_RDDONE 0x0002 64 | #define AR5211_EEPROM_STAT_WRERR 0x0003 65 | #define AR5211_EEPROM_STAT_WRDONE 0x0004 66 | #define AR5211_EEPROM_CONF 0x6010 67 | 68 | /* Atheros 5k devices */ 69 | const struct pci_id ath5k_ids[] = { 70 | { ATHEROS_PCI_VID, 0x0007, "AR5000 802.11a Wireless Adapter" }, 71 | { ATHEROS_PCI_VID, 0x0011, "AR5210 802.11a NIC" }, 72 | { ATHEROS_PCI_VID, 0x0012, "AR5211 802.11ab NIC" }, 73 | { ATHEROS_PCI_VID, 0x0013, "Atheros AR5001X+ Wireless Network Adapter" }, 74 | { ATHEROS_PCI_VID, 0x001a, "AR2413 802.11bg NIC" }, 75 | { ATHEROS_PCI_VID, 0x001b, "AR5413 802.11abg NIC" }, 76 | { ATHEROS_PCI_VID, 0x001c, "AR5001 Wireless Network Adapter" }, 77 | { ATHEROS_PCI_VID, 0x001d, "AR5007G Wireless Network Adapter" }, 78 | { ATHEROS_PCI_VID, 0x0020, "AR5513 802.11abg Wireless NIC" }, 79 | { ATHEROS_PCI_VID, 0x0207, "AR5210 802.11abg" }, 80 | { ATHEROS_PCI_VID, 0x1014, "AR5212 802.11abg" }, 81 | 82 | { 0, 0, "" } 83 | }; 84 | 85 | 86 | static bool ath5k_eeprom_lock(struct pcidev *dev) { return true; } 87 | 88 | static bool ath5k_eeprom_release(struct pcidev *dev) { return true; } 89 | 90 | static bool ath5k_eeprom_read16(struct pcidev *dev, uint32_t addr, uint16_t *value) 91 | { 92 | int timeout = 10000 ; 93 | unsigned long int status ; 94 | 95 | PCI_OUT32(AR5211_EEPROM_CONF, 0), 96 | usleep( 5 ) ; 97 | 98 | /** enable eeprom read access */ 99 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_RESET) ; 100 | usleep( 5 ) ; 101 | 102 | /** set address */ 103 | PCI_OUT32( AR5211_EEPROM_ADDR, addr >> 1) ; 104 | usleep( 5 ) ; 105 | 106 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_READ) ; 107 | 108 | while (timeout > 0) { 109 | usleep(1) ; 110 | status = PCI_IN32(AR5211_EEPROM_STATUS) ; 111 | if (status & AR5211_EEPROM_STAT_RDDONE) { 112 | if (status & AR5211_EEPROM_STAT_RDERR) { 113 | printf( "\neeprom read access failed at %04x!\n", addr); 114 | return false; 115 | } 116 | status = PCI_IN32(AR5211_EEPROM_DATA) ; 117 | *value = status & 0x0000ffff; 118 | return true; 119 | } 120 | timeout-- ; 121 | } 122 | printf( "\neeprom read timeout at %04x!\n", addr); 123 | return false; 124 | } 125 | 126 | static bool ath5k_eeprom_write16(struct pcidev *dev, uint32_t addr, uint16_t value) 127 | { 128 | int timeout = 10000 ; 129 | unsigned long int status ; 130 | unsigned long int pcicfg ; 131 | int i ; 132 | unsigned short int sdata ; 133 | 134 | /** enable eeprom access */ 135 | pcicfg = PCI_IN32( AR5K_PCICFG ) ; 136 | PCI_OUT32(AR5K_PCICFG, ( pcicfg & ~AR5K_PCICFG_SPWR_DN ) ) ; 137 | usleep( 500 ) ; 138 | PCI_OUT32(AR5K_PCICFG, pcicfg | AR5K_PCICFG_EEAE /* | 0x2 */) ; 139 | usleep( 50 ) ; 140 | 141 | PCI_OUT32( AR5211_EEPROM_STATUS, 0); 142 | usleep( 50 ) ; 143 | 144 | /* VT_WLAN_OUT32( AR5211_EEPROM_CONF, 1) ; */ 145 | PCI_OUT32( AR5211_EEPROM_CONF, 0) ; 146 | usleep( 50 ) ; 147 | 148 | i = 100 ; 149 | retry: 150 | /** enable eeprom write access */ 151 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_RESET); 152 | usleep( 500 ) ; 153 | 154 | /* Write data */ 155 | PCI_OUT32(AR5211_EEPROM_DATA, value); 156 | usleep( 5 ) ; 157 | 158 | /** set address */ 159 | PCI_OUT32(AR5211_EEPROM_ADDR, addr >> 1); 160 | usleep( 5 ) ; 161 | 162 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_WRITE); 163 | usleep( 5 ) ; 164 | 165 | for ( timeout = 10000 ; timeout > 0 ; --timeout ) { 166 | status = PCI_IN32( AR5211_EEPROM_STATUS ); 167 | if ( status & 0xC ) { 168 | if ( status & AR5211_EEPROM_STAT_WRERR ) { 169 | printf("\neeprom write access failed!\n"); 170 | return false; 171 | } 172 | 173 | PCI_OUT32( AR5211_EEPROM_STATUS, 0 ); 174 | usleep( 10 ) ; 175 | break ; 176 | } 177 | usleep( 10 ) ; 178 | timeout--; 179 | } 180 | if (!dev->ops->eeprom_read16( dev, addr, &sdata)) { 181 | fprintf( stderr, "\nWrite verify: read failed!\n"); 182 | return false; 183 | } 184 | if ( ( sdata != value ) && i ) { 185 | --i ; 186 | fprintf( stderr, "\nRetrying eeprom write!\n"); 187 | goto retry ; 188 | } 189 | return true; 190 | } 191 | 192 | struct io_driver io_ath5k = { 193 | .name = "ath5k", 194 | .valid_ids = (struct pci_id*) &ath5k_ids, 195 | .mmap_size = ATH5K_MMAP_LENGTH, 196 | .eeprom_size = ATH5K_EEPROM_SIZE, 197 | .eeprom_signature = ATH5K_EEPROM_SIGNATURE, 198 | .eeprom_writable = true, 199 | 200 | .init_device = NULL, 201 | .eeprom_init = NULL, 202 | .eeprom_check = NULL, 203 | .eeprom_lock = &ath5k_eeprom_lock, 204 | .eeprom_release = &ath5k_eeprom_release, 205 | .eeprom_read16 = &ath5k_eeprom_read16, 206 | .eeprom_write16 = &ath5k_eeprom_write16, 207 | .eeprom_patch11n = NULL, 208 | .eeprom_parse = NULL, 209 | .pdata = NULL 210 | }; 211 | 212 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/ath5kio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath5kio_h_included 21 | #define ath5kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath5k; 27 | 28 | #endif 29 | 30 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/ath9kio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath9kio_h_included 21 | #define ath9kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath9k; 27 | extern struct io_driver io_ath9300; 28 | 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/iwleeprom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/iwleeprom -------------------------------------------------------------------------------- /MacNB_iwleeprom/iwleeprom.8: -------------------------------------------------------------------------------- 1 | .\" iwleeprom is released under the GNU GENERAL PUBLIC LICENSE. 2 | .TH "iwleeprom" "8" "03 November, 2010" "ittrium, ShultZ" "iwleeprom 0.0" 3 | .SH "NAME" 4 | iwleeprom \- EEPROM reader/writer for intel wifi cards 5 | .SH "SYNOPSIS" 6 | \fBiwleeprom [-d device [-m] [-c] | -n] [-I] [-i filename] [-o filename [-b]] [-P] [-p] [-D debug_level]\fR 7 | .br 8 | \fBiwleeprom -l\fR 9 | .br 10 | \fBiwleeprom -h\fR 11 | 12 | .SH "FEATURES" 13 | iwleeprom can read/write intel wifi cards EEPROM to/from file. 14 | .TP 15 | Following cards are supported read/write: 16 | .br 17 | 4965AGN 18 | .br 19 | 5100ABG/AGN 20 | .br 21 | 5150AGX/ANX 22 | .br 23 | 5300AGN 24 | .br 25 | 5350ANX 26 | .br 27 | .TP 28 | Following cards are supported read-only: 29 | .br 30 | 1000BG/BGN 31 | .br 32 | 6000 series 33 | .br 34 | .SH "OPTIONS" 35 | .TP 36 | .B \-d \-\-device 37 | PCI device in following format: 38 | .br 39 | .I 0000:00:00.0 40 | (domain:bus:dev.func) 41 | .TP 42 | .B \-n \-\-nodev 43 | don't touch any device, file-only operations 44 | .br 45 | .TP 46 | .B \-m \-\-preserve-mac 47 | don't change card's MAC while writing full eeprom dump 48 | .br 49 | .TP 50 | .B \-c \-\-preserve-calib 51 | don't change card's calibration data while writing full eeprom dump 52 | .br 53 | .TP 54 | .B \-o \-\-ofile 55 | dump eeprom to binary file 56 | .TP 57 | .B \-b \-\-bigendian 58 | set output file byteorder to big-endian (default: little-endian) 59 | .br 60 | use with \fB\-o\fR 61 | .TP 62 | .B \-i \-\-ifile 63 | write eeprom from binary file 64 | dump file byteorder will be autodetected 65 | .TP 66 | .B \-p \-\-patch11n 67 | patch device eeprom to enable 802.11n. 68 | .br 69 | use this option to convert your 5100ABG/5150AGX to 5100AGN/5150ANX respectively 70 | if 802.11n already supported by your card, this will unlock some channels 71 | .TP 72 | .B \-I \-\-init 73 | init device power. 74 | .br 75 | use this option if driver hasn't inited the device (for ex. if it has wrong dev_id or subsys_id) 76 | .TP 77 | .B \-P \-\-parse 78 | parse eeprom (show available modes/channels) 79 | .br 80 | .TP 81 | .B \-D \-\-debug 82 | set debug level (0-1), default 0 83 | .br 84 | .TP 85 | .B \-l \-\-list 86 | list known cards 87 | .br 88 | .TP 89 | .B \-h \-\-help 90 | show help 91 | 92 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/iwleeprom.8.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/iwleeprom.8.gz -------------------------------------------------------------------------------- /MacNB_iwleeprom/iwleeprom.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwleeprom_h_included 24 | #define iwleeprom_h_included 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | #if BYTE_ORDER == BIG_ENDIAN 35 | #define cpu2le16(x) __bswap_16(x) 36 | #define cpu2be16(x) x 37 | #define le2cpu16(x) __bswap_16(x) 38 | #define be2cpu16(x) x 39 | #elif BYTE_ORDER == LITTLE_ENDIAN 40 | #define cpu2le16(x) x 41 | #define cpu2be16(x) __bswap_16(x) 42 | #define le2cpu16(x) x 43 | #define be2cpu16(x) __bswap_16(x) 44 | #else 45 | #error Unsupported BYTE_ORDER! 46 | #endif 47 | 48 | /* PCI R/W macros */ 49 | #define PCI_IN32(a) (*((volatile uint32_t *)(dev->mem + (a)))) 50 | #define PCI_IN16(a) (*((volatile uint16_t *)(dev->mem + (a)))) 51 | #define PCI_OUT32(a,v) (*((volatile uint32_t *)(dev->mem + (a))) = (v)) 52 | #define PCI_OUT16(a,v) (*((volatile uint16_t *)(dev->mem + (a))) = (v)) 53 | 54 | struct pcidev 55 | { 56 | unsigned int class, 57 | ven, dev, 58 | sven, sdev; 59 | int idx; 60 | char *device; 61 | 62 | struct io_driver *ops; 63 | unsigned char *mem; 64 | bool eeprom_locked; 65 | char *forced_driver; 66 | }; 67 | 68 | struct pci_id 69 | { 70 | unsigned int ven, dev; 71 | char name[64]; 72 | }; 73 | 74 | enum byte_order 75 | { 76 | order_unknown = 0, 77 | order_be, 78 | order_le 79 | }; 80 | 81 | extern unsigned int debug; 82 | #define EEPROM_SIZE_MAX 0x4000 83 | 84 | extern bool preserve_mac; 85 | extern bool preserve_calib; 86 | 87 | extern bool buf_read16(struct pcidev* dev, uint32_t addr, uint16_t *value); 88 | extern bool buf_write16(struct pcidev* dev, uint32_t addr, uint16_t value); 89 | 90 | struct io_driver { 91 | const char *name; 92 | const struct pci_id *valid_ids; 93 | uint32_t mmap_size; 94 | uint32_t eeprom_size; 95 | uint16_t eeprom_signature; 96 | bool eeprom_writable; 97 | 98 | bool (*init_device)(struct pcidev *dev); 99 | bool (*eeprom_init)(struct pcidev *dev); 100 | bool (*eeprom_check)(struct pcidev *dev); 101 | bool (*eeprom_lock)(struct pcidev *dev); 102 | bool (*eeprom_release)(struct pcidev *dev); 103 | bool (*eeprom_read16)(struct pcidev *dev, uint32_t addr, uint16_t *value); 104 | bool (*eeprom_write16)(struct pcidev *dev, uint32_t addr, uint16_t value); 105 | 106 | void (*eeprom_patch11n)(struct pcidev *dev); 107 | void (*eeprom_patch_rd)(struct pcidev *dev, uint16_t value); 108 | void (*eeprom_parse)(struct pcidev *dev); 109 | void *pdata; 110 | }; 111 | 112 | #endif 113 | 114 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/iwlio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwlio_h_included 24 | #define iwlio_h_included 25 | #include "iwleeprom.h" 26 | 27 | #define INTEL_PCI_VID 0x8086 28 | 29 | extern struct io_driver io_iwl4965; 30 | extern struct io_driver io_iwl5k; 31 | extern struct io_driver io_iwl6k; 32 | 33 | #endif 34 | 35 | -------------------------------------------------------------------------------- /MacNB_iwleeprom/obj/ath5kio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/obj/ath5kio.o -------------------------------------------------------------------------------- /MacNB_iwleeprom/obj/ath9kio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/obj/ath9kio.o -------------------------------------------------------------------------------- /MacNB_iwleeprom/obj/iwleeprom.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/obj/iwleeprom.o -------------------------------------------------------------------------------- /MacNB_iwleeprom/obj/iwlio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/obj/iwlio.o -------------------------------------------------------------------------------- /MacNB_iwleeprom/obj/original.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/MacNB_iwleeprom/obj/original.bin -------------------------------------------------------------------------------- /aet_rw512_AnV/ACU.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/ACU.ico -------------------------------------------------------------------------------- /aet_rw512_AnV/Release/ath32.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/Release/ath32.sys -------------------------------------------------------------------------------- /aet_rw512_AnV/Release/ath64.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/Release/ath64.sys -------------------------------------------------------------------------------- /aet_rw512_AnV/Release/atheros_eeprom_tool32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/Release/atheros_eeprom_tool32.exe -------------------------------------------------------------------------------- /aet_rw512_AnV/Release/atheros_eeprom_tool64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/Release/atheros_eeprom_tool64.exe -------------------------------------------------------------------------------- /aet_rw512_AnV/Release/dseo13b.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/Release/dseo13b.exe -------------------------------------------------------------------------------- /aet_rw512_AnV/ath.tpl: -------------------------------------------------------------------------------- 1 | template "Atheros 9285 EEPROM" 2 | description "Atheros WiFi adapter 9285 series EEPROM" 3 | //multiple 4 | hexadecimal 5 | fixed_start 0 6 | begin 7 | section base_eep_header 8 | { 9 | uint16 length 10 | uint16 checksum 11 | uint16 version 12 | uint8 opCapFlags 13 | uint8 eepMisc 14 | uint16[2] regDmn 15 | hex 6 macAddr 16 | uint8 rxMask 17 | uint8 txMask 18 | uint16 rfSilent 19 | uint16 blueToothOptions 20 | uint16 deviceCap 21 | uint32 binBuildNumber 22 | uint8 deviceType 23 | uint8 txGainType 24 | } 25 | 26 | hex 20 custData 27 | 28 | section modal_eep_4k_header 29 | uint32[1] antCtrlChain 30 | uint32 antCtrlCommon 31 | uint8[1] antennaGainCh 32 | uint8 switchSettling 33 | uint8[1] txRxAttenCh 34 | uint8[1] rxTxMarginCh 35 | uint8 adcDesiredSize 36 | uint8 pgaDesiredSize 37 | uint8[1] xlnaGainCh 38 | uint8 txEndToXpaOff 39 | uint8 txEndToRxOn 40 | uint8 txFrameToXpaOn 41 | uint8 thresh62 42 | uint8[1] noiseFloorThreshCh 43 | uint8 xpdGain 44 | uint8 xpd 45 | uint8[1] iqCalICh 46 | uint8[1] iqCalQCh 47 | uint8 pdGainOverlap 48 | uint8 "ob_1:4, ob_0:4" 49 | uint8 "db1_1:4, db1_0:4" 50 | uint8 xpaBiasLvl 51 | uint8 txFrameToDataStart 52 | uint8 txFrameToPaOn 53 | uint8 ht40PowerIncForPdadc 54 | uint8[1] bswAtten 55 | uint8[1] bswMargin 56 | uint8 swSettleHt40 57 | uint8[1] xatten2Db 58 | uint8[1] xatten2Margin 59 | uint8 "db2_1:4, db2_0:4" 60 | uint8 version 61 | uint8 "ob_3:4, ob_2:4" 62 | uint8 "antdiv_ctl1:4, ob_4:4" 63 | uint8 "db1_3:4, db1_2:4" 64 | uint8 "antdiv_ctl2:4, db1_4:4" 65 | uint8 "db2_2:4, db2_3:4" 66 | uint8 "reserved:4, db2_4:4" 67 | uint8[4] futureModal 68 | 69 | //struct spur_chan spurChans[AR5416_EEPROM_MODAL_SPURS] 70 | { 71 | section spur_chan 72 | uint16 spurChan 73 | uint8 spurRangeLow 74 | uint8 spurRangeHigh 75 | }[5] 76 | 77 | section "power tables" 78 | uint8[3] calFreqPier2G //[AR5416_EEP4K_NUM_2G_CAL_PIERS] 79 | 80 | section calPierData2G 81 | { 82 | section cal_data_per_freq_4k 83 | hex 10 pwrPdg //[AR5416_EEP4K_NUM_PD_GAINS][AR5416_EEP4K_PD_GAIN_ICEPTS]; 84 | hex 10 vpdPdg //[AR5416_EEP4K_NUM_PD_GAINS][AR5416_EEP4K_PD_GAIN_ICEPTS]; 85 | }[3] 86 | 87 | section calTargetPowerCck 88 | { 89 | section cal_target_power_leg 90 | hex 1 bChannel 91 | hex 4 tPow2x 92 | }[3] //[AR5416_EEP4K_NUM_2G_CCK_TARGET_POWERS] 93 | 94 | section calTargetPower2G 95 | { 96 | section cal_target_power_leg 97 | hex 1 bChannel 98 | hex 4 tPow2x 99 | }[3] //[AR5416_EEP4K_NUM_2G_20_TARGET_POWERS] 100 | 101 | section calTargetPower2GHT20 102 | { 103 | section cal_target_power_ht 104 | hex 1 bChannel 105 | hex 8 tPow2x 106 | }[3] //[AR5416_EEP4K_NUM_2G_20_TARGET_POWERS] 107 | 108 | section calTargetPower2GHT40 109 | { 110 | section cal_target_power_ht 111 | hex 1 bChannel 112 | hex 8 tPow2x 113 | }[3] //[AR5416_EEP4K_NUM_2G_40_TARGET_POWERS] 114 | 115 | section "ctl table" 116 | hex 12 ctlIndex //[AR5416_EEP4K_NUM_CTLS] 117 | 118 | section ctlData 119 | { 120 | section cal_ctl_data_4k 121 | uint16[4] cal_ctl_edges 122 | }[12] //[AR5416_EEP4K_NUM_CTLS] 123 | 124 | uint8 padding 125 | 126 | end -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_bkScanEnable.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_bkScanEnable.reg -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool.sdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool.sdf -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "atheros_eeprom_tool", "atheros_eeprom_tool\atheros_eeprom_tool.vcxproj", "{658D24FB-1A61-41B7-B589-B3071C5E1115}" 5 | EndProject 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1F08B0AC-231F-47BE-8F89-2B05F98B8AC6}" 7 | ProjectSection(SolutionItems) = preProject 8 | driver\atheeprom.c = driver\atheeprom.c 9 | EndProjectSection 10 | EndProject 11 | Global 12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 | Debug|Win32 = Debug|Win32 14 | Debug|x64 = Debug|x64 15 | Release|Win32 = Release|Win32 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Debug|Win32.ActiveCfg = Debug|Win32 20 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Debug|Win32.Build.0 = Debug|Win32 21 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Debug|x64.ActiveCfg = Debug|x64 22 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Debug|x64.Build.0 = Debug|x64 23 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Release|Win32.ActiveCfg = Release|Win32 24 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Release|Win32.Build.0 = Release|Win32 25 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Release|x64.ActiveCfg = Release|x64 26 | {658D24FB-1A61-41B7-B589-B3071C5E1115}.Release|x64.Build.0 = Release|x64 27 | EndGlobalSection 28 | GlobalSection(SolutionProperties) = preSolution 29 | HideSolutionNode = FALSE 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool.suo -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/MAKEFILE: -------------------------------------------------------------------------------- 1 | # 2 | # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source 3 | # file to this component. This file merely indirects to the real make file 4 | # that is shared by all the driver components of the Windows NT DDK 5 | # 6 | 7 | !INCLUDE $(NTMAKEENV)\makefile.def 8 | 9 | 10 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | WIN32 APPLICATION : atheros_eeprom_tool Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this atheros_eeprom_tool application for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your atheros_eeprom_tool application. 9 | 10 | 11 | atheros_eeprom_tool.vcproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | atheros_eeprom_tool.cpp 18 | This is the main application source file. 19 | 20 | ///////////////////////////////////////////////////////////////////////////// 21 | AppWizard has created the following resources: 22 | 23 | atheros_eeprom_tool.rc 24 | This is a listing of all of the Microsoft Windows resources that the 25 | program uses. It includes the icons, bitmaps, and cursors that are stored 26 | in the RES subdirectory. This file can be directly edited in Microsoft 27 | Visual C++. 28 | 29 | Resource.h 30 | This is the standard header file, which defines new resource IDs. 31 | Microsoft Visual C++ reads and updates this file. 32 | 33 | atheros_eeprom_tool.ico 34 | This is an icon file, which is used as the application's icon (32x32). 35 | This icon is included by the main resource file atheros_eeprom_tool.rc. 36 | 37 | small.ico 38 | This is an icon file, which contains a smaller version (16x16) 39 | of the application's icon. This icon is included by the main resource 40 | file atheros_eeprom_tool.rc. 41 | 42 | ///////////////////////////////////////////////////////////////////////////// 43 | Other standard files: 44 | 45 | StdAfx.h, StdAfx.cpp 46 | These files are used to build a precompiled header (PCH) file 47 | named atheros_eeprom_tool.pch and a precompiled types file named StdAfx.obj. 48 | 49 | ///////////////////////////////////////////////////////////////////////////// 50 | Other notes: 51 | 52 | AppWizard uses "TODO:" comments to indicate parts of the source code you 53 | should add to or customize. 54 | 55 | ///////////////////////////////////////////////////////////////////////////// 56 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/aetres32.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool/aetres32.obj -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/aetres64.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool/aetres64.obj -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.aps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.aps -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "resource.h" 4 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.ico -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.rc: -------------------------------------------------------------------------------- 1 | // Microsoft Visual C++ generated resource script. 2 | // 3 | #include "resource.h" 4 | 5 | #define APSTUDIO_READONLY_SYMBOLS 6 | ///////////////////////////////////////////////////////////////////////////// 7 | // 8 | // Generated from the TEXTINCLUDE 2 resource. 9 | // 10 | #ifndef APSTUDIO_INVOKED 11 | #include "targetver.h" 12 | #endif 13 | #define APSTUDIO_HIDDEN_SYMBOLS 14 | #include "windows.h" 15 | #undef APSTUDIO_HIDDEN_SYMBOLS 16 | 17 | ///////////////////////////////////////////////////////////////////////////// 18 | #undef APSTUDIO_READONLY_SYMBOLS 19 | 20 | ///////////////////////////////////////////////////////////////////////////// 21 | // Russian resources 22 | 23 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) 24 | #ifdef _WIN32 25 | LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT 26 | #pragma code_page(1251) 27 | #endif //_WIN32 28 | 29 | ///////////////////////////////////////////////////////////////////////////// 30 | // 31 | // Icon 32 | // 33 | 34 | // Icon with lowest ID value placed first to ensure application icon 35 | // remains consistent on all systems. 36 | IDI_ICON1 ICON "..\\ACU.ico" 37 | #endif // Russian resources 38 | ///////////////////////////////////////////////////////////////////////////// 39 | 40 | 41 | ///////////////////////////////////////////////////////////////////////////// 42 | // English (U.S.) resources 43 | 44 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 45 | #ifdef _WIN32 46 | LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 47 | #pragma code_page(1252) 48 | #endif //_WIN32 49 | 50 | ///////////////////////////////////////////////////////////////////////////// 51 | // 52 | // Menu 53 | // 54 | 55 | IDC_ATHEROS_EEPROM_TOOL MENU 56 | BEGIN 57 | POPUP "&File" 58 | BEGIN 59 | MENUITEM "E&xit", IDM_EXIT 60 | END 61 | POPUP "&Help" 62 | BEGIN 63 | MENUITEM "&About ...", IDM_ABOUT 64 | END 65 | END 66 | 67 | 68 | ///////////////////////////////////////////////////////////////////////////// 69 | // 70 | // Accelerator 71 | // 72 | 73 | IDC_ATHEROS_EEPROM_TOOL ACCELERATORS 74 | BEGIN 75 | "?", IDM_ABOUT, ASCII, ALT 76 | "/", IDM_ABOUT, ASCII, ALT 77 | END 78 | 79 | 80 | ///////////////////////////////////////////////////////////////////////////// 81 | // 82 | // Dialog 83 | // 84 | 85 | IDD_MAIN DIALOGEX 0, 0, 329, 109 86 | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU 87 | CAPTION "EEPROM tool for Atheros 9k cards" 88 | FONT 8, "MS Shell Dlg", 0, 0, 0x1 89 | BEGIN 90 | CONTROL "Read EEPROM",IDC_CHECKREAD,"Button",BS_AUTORADIOBUTTON,6,3,62,10 91 | CONTROL "Write EEPROM",IDC_CHECKWRITE,"Button",BS_AUTORADIOBUTTON,6,56,63,10 92 | EDITTEXT IDC_SAVEPATH,58,19,229,12,ES_AUTOHSCROLL | ES_READONLY 93 | LTEXT "Save to:",IDC_SAVE,16,21,38,13 94 | LTEXT "Write from:",IDC_WRITE,15,76,43,12 95 | EDITTEXT IDC_WRITEPATH,59,74,227,12,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED 96 | PUSHBUTTON "READ",IDC_BTNREAD,139,35,50,14,WS_DISABLED 97 | PUSHBUTTON "WRITE",IDC_BTNWRITE,139,91,50,14,WS_DISABLED 98 | PUSHBUTTON "Open",IDC_OPENR,294,18,29,14 99 | PUSHBUTTON "Open",IDC_OPENW,294,73,29,14,WS_DISABLED 100 | PUSHBUTTON "Modes and Channels",IDC_MODCHAN,239,91,84,14,WS_DISABLED 101 | CONTROL "Use custom modes and channels",IDC_OVERRIDE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,6,94,121,10 102 | END 103 | 104 | IDD_MODCHAN DIALOGEX 0, 0, 232, 196 105 | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU 106 | CAPTION "Modes and Channels" 107 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 108 | BEGIN 109 | CONTROL "0x60",IDC_C60,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,77,32,10 110 | CONTROL "0x63",IDC_C63,"Button",BS_AUTORADIOBUTTON,58,89,32,10 111 | CONTROL "0x64",IDC_C64,"Button",BS_AUTORADIOBUTTON,58,101,32,10 112 | CONTROL "0x66",IDC_C66,"Button",BS_AUTORADIOBUTTON,58,113,32,10 113 | CONTROL "0x67",IDC_C67,"Button",BS_AUTORADIOBUTTON,58,125,32,10 114 | CONTROL "Custom",IDC_RBCUSTOM,"Button",BS_AUTORADIOBUTTON,58,143,40,10 115 | DEFPUSHBUTTON "OK",IDC_MCOK,91,180,50,14 116 | PUSHBUTTON "Cancel",IDC_MCCANCEL,174,180,50,14,NOT WS_VISIBLE 117 | CONTROL "802.11g",IDC_24g,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,28,43,10 118 | LTEXT "2.4 GHz:",IDC_STATIC,10,6,29,8 119 | LTEXT "5 GHz:",IDC_STATIC,122,6,22,8 120 | CONTROL "802.11n (20MHz)",IDC_24n20,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,38,71,10 121 | CONTROL "802.11n (40MHz)",IDC_24n40,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,48,71,10 122 | CONTROL "802.11a",IDC_5a,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,28,43,10 123 | CONTROL "802.11n (40MHz)",IDC_5n40,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,48,71,10 124 | CONTROL "802.11n (20MHz)",IDC_5n20,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,38,71,10 125 | LTEXT "1-14",IDC_STATIC,10,77,16,8 126 | LTEXT "5150-5350MHz, 5470-5850MHz",IDC_STATIC,122,77,102,8 127 | LTEXT "1-13",IDC_STATIC,10,89,16,8 128 | LTEXT "5150-5350MHz, 5725-5850MHz",IDC_STATIC,122,89,102,8 129 | LTEXT "1-11",IDC_STATIC,10,101,16,8 130 | LTEXT "5150-5350MHz, 5725-5850MHz",IDC_STATIC,122,101,102,8 131 | LTEXT "1-11",IDC_STATIC,10,113,16,8 132 | LTEXT "5150-5350MHz, 5470-5850MHz",IDC_STATIC,122,113,102,8 133 | LTEXT "1-13",IDC_STATIC,10,125,16,8 134 | LTEXT "5150-5350MHz, 5470-5850MHz",IDC_STATIC,122,125,102,8 135 | LTEXT "Enter RegDmn in hex",IDC_STATIC,122,143,68,8 136 | EDITTEXT IDC_CUSTOMRD,10,142,40,12,ES_AUTOHSCROLL 137 | GROUPBOX "Channels (compatible with 802.11n)",IDC_STATIC,7,67,217,71 138 | GROUPBOX "Modes",IDC_STATIC,7,18,217,44 139 | LTEXT "MAC",IDC_STATIC,12,167,15,8 140 | EDITTEXT IDC_MAC,30,165,97,12,ES_AUTOHSCROLL 141 | END 142 | 143 | IDD_CHOOSE DIALOGEX 0, 0, 285, 66 144 | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU 145 | CAPTION "Choose device" 146 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 147 | BEGIN 148 | COMBOBOX IDC_DEVLIST,7,7,271,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP 149 | LTEXT "HardwareID:",IDC_STATIC,124,23,42,8 150 | DEFPUSHBUTTON "OK",IDC_CHOK,119,48,50,14 151 | LTEXT "",IDC_DEVINST,7,34,271,12,SS_WORDELLIPSIS 152 | END 153 | 154 | 155 | #ifdef APSTUDIO_INVOKED 156 | ///////////////////////////////////////////////////////////////////////////// 157 | // 158 | // TEXTINCLUDE 159 | // 160 | 161 | 1 TEXTINCLUDE 162 | BEGIN 163 | "resource.h\0" 164 | END 165 | 166 | 2 TEXTINCLUDE 167 | BEGIN 168 | "#ifndef APSTUDIO_INVOKED\r\n" 169 | "#include ""targetver.h""\r\n" 170 | "#endif\r\n" 171 | "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" 172 | "#include ""windows.h""\r\n" 173 | "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" 174 | "\0" 175 | END 176 | 177 | 3 TEXTINCLUDE 178 | BEGIN 179 | "\r\n" 180 | "\0" 181 | END 182 | 183 | #endif // APSTUDIO_INVOKED 184 | 185 | 186 | ///////////////////////////////////////////////////////////////////////////// 187 | // 188 | // DESIGNINFO 189 | // 190 | 191 | #ifdef APSTUDIO_INVOKED 192 | GUIDELINES DESIGNINFO 193 | BEGIN 194 | IDD_MODCHAN, DIALOG 195 | BEGIN 196 | LEFTMARGIN, 7 197 | RIGHTMARGIN, 224 198 | TOPMARGIN, 7 199 | BOTTOMMARGIN, 194 200 | END 201 | 202 | IDD_CHOOSE, DIALOG 203 | BEGIN 204 | LEFTMARGIN, 7 205 | RIGHTMARGIN, 278 206 | TOPMARGIN, 7 207 | BOTTOMMARGIN, 62 208 | END 209 | END 210 | #endif // APSTUDIO_INVOKED 211 | 212 | 213 | ///////////////////////////////////////////////////////////////////////////// 214 | // 215 | // String Table 216 | // 217 | 218 | STRINGTABLE 219 | BEGIN 220 | IDS_APP_TITLE "atheros_eeprom_tool" 221 | IDC_ATHEROS_EEPROM_TOOL "ATHEROS_EEPROM_TOOL" 222 | END 223 | 224 | #endif // English (U.S.) resources 225 | ///////////////////////////////////////////////////////////////////////////// 226 | 227 | 228 | 1 RT_MANIFEST "atheros_eeprom_tool.manifest" 229 | 230 | #ifndef APSTUDIO_INVOKED 231 | ///////////////////////////////////////////////////////////////////////////// 232 | // 233 | // Generated from the TEXTINCLUDE 3 resource. 234 | // 235 | 236 | 237 | ///////////////////////////////////////////////////////////////////////////// 238 | #endif // not APSTUDIO_INVOKED 239 | 240 | #ifndef DBG 241 | #define OFFICIAL_BUILD 1 242 | #undef BETA 243 | #endif 244 | 245 | #include 246 | 247 | #undef VER_COMPANYNAME_STR 248 | #undef VER_PRODUCTNAME_STR 249 | 250 | #define VER_FILETYPE VFT_DRV 251 | #define VER_FILESUBTYPE VFT2_DRV_SYSTEM 252 | #define VER_FILEDESCRIPTION_STR "Atheros EEPROM Tool" 253 | 254 | #if defined(_X86_) 255 | #define VER_INTERNALNAME_STR "atheros_eeprom_tool.exe" 256 | #elif defined(_AMD64_) 257 | #define VER_INTERNALNAME_STR "atheros_eeprom_tool64.exe" 258 | #else 259 | #define VER_INTERNALNAME_STR "atheros_eeprom_tool.exe" 260 | #endif 261 | 262 | #define VER_COMPANYNAME_STR "AnV Sofware" 263 | #define VER_PRODUCTNAME_STR "Atheros EEPROM Tool" 264 | #define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2014 AnV Software" 265 | 266 | #include "common.ver" 267 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {658D24FB-1A61-41B7-B589-B3071C5E1115} 23 | atheros_eeprom_tool 24 | Win32Proj 25 | 26 | 27 | 28 | Application 29 | false 30 | false 31 | MultiByte 32 | true 33 | 34 | 35 | Application 36 | false 37 | false 38 | MultiByte 39 | true 40 | 41 | 42 | Application 43 | Dynamic 44 | MultiByte 45 | 46 | 47 | Application 48 | Dynamic 49 | MultiByte 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | <_ProjectFileVersion>10.0.30319.1 69 | $(SolutionDir)$(Configuration)\ 70 | $(SolutionDir)$(Configuration)\ 71 | $(Configuration)\ 72 | $(Configuration)\ 73 | true 74 | true 75 | $(SolutionDir)$(Configuration)\ 76 | $(SolutionDir)$(Configuration)\ 77 | $(Configuration)\ 78 | $(Configuration)\ 79 | false 80 | false 81 | AllRules.ruleset 82 | AllRules.ruleset 83 | 84 | 85 | 86 | 87 | AllRules.ruleset 88 | AllRules.ruleset 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | $(SolutionDir)driver\build_main.bat -$(Configuration) -re 97 | $(SolutionDir)\driver\build.log;%(Outputs) 98 | 99 | 100 | Disabled 101 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 102 | true 103 | EnableFastChecks 104 | MultiThreadedDebugDLL 105 | NotUsing 106 | Level3 107 | EditAndContinue 108 | 109 | 110 | setupapi.lib;user32.lib;kernel32.lib;Advapi32.lib;Comdlg32.lib;%(AdditionalDependencies) 111 | RequireAdministrator 112 | true 113 | Windows 114 | MachineX86 115 | 116 | 117 | 118 | 119 | $(SolutionDir)driver\build_main.bat -$(Configuration) -re 120 | $(SolutionDir)\driver\build.log;%(Outputs) 121 | 122 | 123 | Disabled 124 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 125 | EnableFastChecks 126 | MultiThreadedDebugDLL 127 | NotUsing 128 | Level3 129 | ProgramDatabase 130 | 131 | 132 | setupapi.lib;user32.lib;kernel32.lib;Advapi32.lib;Comdlg32.lib;%(AdditionalDependencies) 133 | RequireAdministrator 134 | true 135 | Windows 136 | 137 | 138 | 139 | 140 | $(SolutionDir)driver\build_main.bat -$(Configuration) -re 141 | $(SolutionDir)\driver\build.log;%(Outputs) 142 | 143 | 144 | MaxSpeed 145 | true 146 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 147 | MultiThreaded 148 | true 149 | NotUsing 150 | Level3 151 | ProgramDatabase 152 | 153 | 154 | setupapi.lib;%(AdditionalDependencies) 155 | type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) 156 | RequireAdministrator 157 | true 158 | Windows 159 | true 160 | true 161 | MachineX86 162 | 163 | 164 | 165 | 166 | $(SolutionDir)driver\build_main.bat -$(Configuration) -re 167 | $(SolutionDir)\driver\build.log;%(Outputs) 168 | 169 | 170 | MaxSpeed 171 | true 172 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 173 | MultiThreaded 174 | true 175 | NotUsing 176 | Level3 177 | ProgramDatabase 178 | 179 | 180 | setupapi.lib;%(AdditionalDependencies) 181 | type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) 182 | RequireAdministrator 183 | true 184 | Windows 185 | true 186 | true 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | 23 | 24 | Header Files 25 | 26 | 27 | Header Files 28 | 29 | 30 | Header Files 31 | 32 | 33 | Header Files 34 | 35 | 36 | 37 | 38 | Resource Files 39 | 40 | 41 | Resource Files 42 | 43 | 44 | Resource Files 45 | 46 | 47 | Resource Files 48 | 49 | 50 | 51 | 52 | 53 | Resource Files 54 | 55 | 56 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/atheros_eeprom_tool.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | /r512 5 | WindowsLocalDebugger 6 | $(OutDir) 7 | 8 | 9 | $(OutDir) 10 | WindowsLocalDebugger 11 | 12 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by atheros_eeprom_tool.rc 4 | // 5 | #define IDC_MYICON 2 6 | #define IDS_APP_TITLE 102 7 | #define IDD_ATHEROS_EEPROM_TOOL_DIALOG 102 8 | #define IDD_MAIN 103 9 | #define IDM_ABOUT 104 10 | #define IDM_EXIT 105 11 | #define IDD_MODCHAN 108 12 | #define IDC_ATHEROS_EEPROM_TOOL 109 13 | #define IDR_MAINFRAME 128 14 | #define IDD_CHOOSE 133 15 | #define IDI_ICON1 134 16 | #define IDC_CHECKREAD 1000 17 | #define IDC_CHECKWRITE 1001 18 | #define IDC_EDIT1 1002 19 | #define IDC_SAVEPATH 1002 20 | #define IDC_CUSTOMRD 1002 21 | #define IDC_PATHWRITE 1003 22 | #define IDC_PATHW 1003 23 | #define IDC_WRITE 1003 24 | #define IDC_WRITEPATH 1004 25 | #define IDC_BTNREAD 1005 26 | #define IDC_BTNWRITE 1006 27 | #define IDC_OPENR 1007 28 | #define IDC_OPENW 1008 29 | #define IDC_24g 1010 30 | #define IDC_24n20 1011 31 | #define IDC_24n40 1012 32 | #define IDC_5a 1013 33 | #define IDC_5n40 1014 34 | #define IDC_5n20 1015 35 | #define IDC_C60 1016 36 | #define IDC_MODCHAN 1017 37 | #define IDC_C63 1017 38 | #define IDC_C64 1018 39 | #define IDC_C66 1019 40 | #define IDC_C67 1020 41 | #define IDC_MCOK 1021 42 | #define IDC_MCCANCEL 1022 43 | #define IDC_OVERRIDE 1023 44 | #define IDC_DEVLIST 1024 45 | #define IDC_RBCUSTOM 1024 46 | #define IDC_DEVINST 1025 47 | #define IDC_CHOK 1026 48 | #define IDC_MAC 1030 49 | #define IDC_STATIC -1 50 | #define IDC_PATHSAVE -1 51 | #define IDC_SAVE -1 52 | 53 | // Next default values for new objects 54 | // 55 | #ifdef APSTUDIO_INVOKED 56 | #ifndef APSTUDIO_READONLY_SYMBOLS 57 | #define _APS_NO_MFC 1 58 | #define _APS_NEXT_RESOURCE_VALUE 135 59 | #define _APS_NEXT_COMMAND_VALUE 32771 60 | #define _APS_NEXT_CONTROL_VALUE 1031 61 | #define _APS_NEXT_SYMED_VALUE 110 62 | #endif 63 | #endif 64 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/small.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_eeprom_tool/small.ico -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/sources: -------------------------------------------------------------------------------- 1 | TARGETNAME=atheros_eeprom_tool 2 | TARGETTYPE=PROGRAM 3 | 4 | USE_LIBCMT = 1 5 | 6 | UMTYPE=windows 7 | UMENTRY=winmain 8 | 9 | _NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WIN7) 10 | 11 | MSC_WARNING_LEVEL=/W4 /WX 12 | 13 | SOURCES = atheros_eeprom_tool.cpp atheros_eeprom_tool.rc 14 | 15 | !IF "$(SDV_BUILD_AS_CPP)" != "" 16 | USER_C_FLAGS=/TP $(USER_C_FLAGS) 17 | !ENDIF 18 | 19 | TARGETLIBS = $(DDK_LIB_PATH)\cfgmgr32.lib $(SDK_LIB_PATH)\advapi32.lib $(SDK_LIB_PATH)\setupapi.lib $(SDK_LIB_PATH)\comdlg32.lib $(USER_L_FLAGS) 20 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | // Modify the following defines if you have to target a platform prior to the ones specified below. 9 | // Refer to MSDN for the latest info on corresponding values for different platforms. 10 | #ifndef WINVER // Allow use of features specific to Windows XP or later. 11 | #define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. 12 | #endif 13 | 14 | #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. 15 | #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. 16 | #endif 17 | 18 | #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. 19 | #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. 20 | #endif 21 | 22 | #ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. 23 | #define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. 24 | #endif 25 | 26 | #ifndef WIN32_LEAN_AND_MEAN 27 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 28 | #endif 29 | 30 | // Windows Header Files: 31 | #include 32 | 33 | // C RunTime Header Files 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | 40 | // TODO: reference additional headers your program requires here 41 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_eeprom_tool/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // The following macros define the minimum required platform. The minimum required platform 4 | // is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 5 | // your application. The macros work by enabling all features available on platform versions up to and 6 | // including the version specified. 7 | 8 | // Modify the following defines if you have to target a platform prior to the ones specified below. 9 | // Refer to MSDN for the latest info on corresponding values for different platforms. 10 | #ifndef WINVER // Specifies that the minimum required platform is Windows Vista. 11 | #define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. 12 | #endif 13 | 14 | #ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. 15 | #define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. 16 | #endif 17 | 18 | #ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. 19 | #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. 20 | #endif 21 | 22 | #ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. 23 | #define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. 24 | #endif 25 | -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_htAdHoc11n.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_htAdHoc11n.reg -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_params.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_params.reg -------------------------------------------------------------------------------- /aet_rw512_AnV/atheros_wModeSelect.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/atheros_wModeSelect.reg -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/MAKEFILE: -------------------------------------------------------------------------------- 1 | # 2 | # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source 3 | # file to this component. This file merely indirects to the real make file 4 | # that is shared by all the driver components of the Windows NT DDK 5 | # 6 | 7 | !INCLUDE $(NTMAKEENV)\makefile.def 8 | 9 | 10 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/atheeprom.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define NTDEV L"\\Device\\atheeprom" 4 | #define DOSDEV L"\\DosDevices\\atheeprom" 5 | 6 | #define IO_ERR_MAP 0x901 7 | #define IO_ERR_LOWMEM 0x902 8 | 9 | #define AR_SREV_9300_20_OR_LATER(ah) 0 10 | #define AR_GPIO_OE_OUT (AR_SREV_9300_20_OR_LATER(ah) ? 0x4050 : 0x404c) 11 | #define AR_GPIO_IN_OUT 0x4048 12 | #define AR_GPIO_OUTPUT_MUX1 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4068 : 0x4060) 13 | #define AR_GPIO_OUTPUT_MUX2 (AR_SREV_9300_20_OR_LATER(ah) ? 0x406c : 0x4064) 14 | #define AR_GPIO_OUTPUT_MUX3 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4070 : 0x4068) 15 | 16 | #define AR_INPUT_STATE (AR_SREV_9300_20_OR_LATER(ah) ? 0x4074 : 0x406c) 17 | 18 | #define AR_EEPROM_STATUS_DATA (AR_SREV_9300_20_OR_LATER(ah) ? 0x4084 : 0x407c) 19 | #define AR_EEPROM_STATUS_DATA_VAL 0x0000ffff 20 | #define AR_EEPROM_STATUS_DATA_VAL_S 0 21 | #define AR_EEPROM_STATUS_DATA_BUSY 0x00010000 22 | #define AR_EEPROM_STATUS_DATA_BUSY_ACCESS 0x00020000 23 | #define AR_EEPROM_STATUS_DATA_PROT_ACCESS 0x00040000 24 | #define AR_EEPROM_STATUS_DATA_ABSENT_ACCESS 0x00080000 25 | 26 | #define AR5416_EEPROM_MAGIC 0xa55a 27 | #define AR5416_EEPROM_MAGIC_OFFSET 0x0 28 | #define AR5416_EEPROM_S 2 29 | #define AR5416_EEPROM_OFFSET 0x2000 30 | #define AR5416_EEPROM_MAX 0xae0 31 | 32 | 33 | NTSTATUS eepromWait (char* ioMem) 34 | { 35 | unsigned int i; 36 | unsigned int regStatus; 37 | 38 | for (i = 1000; i; i--) 39 | { 40 | regStatus = *(volatile unsigned int*)(ioMem + AR_EEPROM_STATUS_DATA); 41 | 42 | if (0 == (regStatus & 0xFFFF0000)) 43 | return STATUS_SUCCESS; 44 | 45 | KeStallExecutionProcessor(100); 46 | } 47 | 48 | return STATUS_INTERNAL_ERROR; 49 | } 50 | 51 | NTSTATUS eepromRead (char* ioMem, unsigned int offset, char* rb) 52 | { 53 | unsigned long eeDword = *(volatile unsigned long*)(ioMem + offset); 54 | 55 | UNREFERENCED_PARAMETER(eeDword); 56 | 57 | if (eepromWait(ioMem) != STATUS_SUCCESS) 58 | return STATUS_IO_DEVICE_ERROR; 59 | 60 | *(unsigned short*)rb = AR_EEPROM_STATUS_DATA_VAL & *(volatile unsigned long*)(ioMem + AR_EEPROM_STATUS_DATA); 61 | 62 | return STATUS_SUCCESS; 63 | } 64 | 65 | NTSTATUS eepromWrite (char* ioMem, unsigned int offset, char* wb) 66 | { 67 | unsigned long eeDword; 68 | unsigned long j; 69 | 70 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_OUTPUT_MUX1); 71 | *(volatile unsigned long*)(ioMem + AR_GPIO_OUTPUT_MUX1) = eeDword & 0xFFF07FFF; 72 | KeStallExecutionProcessor(1); 73 | 74 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_OE_OUT); 75 | *(volatile unsigned long*)(ioMem + AR_GPIO_OE_OUT) = eeDword | 0xC0; 76 | KeStallExecutionProcessor(1); 77 | 78 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT); 79 | *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT) = eeDword & ~8; 80 | KeStallExecutionProcessor(1); 81 | 82 | *(volatile unsigned short*)(ioMem + offset) = *(unsigned short*)wb; 83 | 84 | for (j = 50000; j; j--) 85 | { 86 | eeDword = *(volatile unsigned long*)(ioMem + AR_EEPROM_STATUS_DATA); 87 | if ( 0 == (eeDword & 0xF0000) ) 88 | { 89 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT); 90 | *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT) = eeDword | 8; 91 | return STATUS_SUCCESS; 92 | } 93 | KeStallExecutionProcessor(1); 94 | } 95 | 96 | return STATUS_IO_DEVICE_ERROR; 97 | } 98 | 99 | 100 | #define IOCTL_EEPROM_Read_Function CTL_CODE(0x89A4, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) 101 | #define IOCTL_EEPROM_Write_Function CTL_CODE(0x89A4, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) 102 | #define IOCTL_EEPROM_Get_Size_Function CTL_CODE(0x89A4, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) 103 | 104 | 105 | OBJECT_ATTRIBUTES objAttributes; 106 | 107 | HANDLE hFile; 108 | IO_STATUS_BLOCK ioStatusBlock; 109 | //UNICODE_STRING uniName; 110 | UNICODE_STRING devName; 111 | UNICODE_STRING linkName; 112 | PDEVICE_OBJECT devObj; 113 | 114 | DRIVER_UNLOAD Unload; 115 | 116 | VOID Unload(__in struct _DRIVER_OBJECT *DriverObject) 117 | { 118 | UNREFERENCED_PARAMETER(DriverObject); 119 | 120 | IoDeleteSymbolicLink(&linkName); 121 | IoDeleteDevice(devObj); 122 | } 123 | 124 | DRIVER_DISPATCH DispatchCreateClose; 125 | NTSTATUS DispatchCreateClose(__inout struct _DEVICE_OBJECT * DeviceObject, __in struct _IRP *Irp) 126 | { 127 | NTSTATUS NtStatus = STATUS_SUCCESS; 128 | 129 | UNREFERENCED_PARAMETER(DeviceObject); 130 | 131 | Irp->IoStatus.Status = NtStatus; 132 | Irp->IoStatus.Information = 0; 133 | IoCompleteRequest(Irp, IO_NO_INCREMENT); 134 | 135 | return NtStatus; 136 | } 137 | 138 | DRIVER_DISPATCH DispatchDeviceControl; 139 | 140 | NTSTATUS DispatchDeviceControl(__inout struct _DEVICE_OBJECT *DeviceObject, __in struct _IRP *Irp) 141 | { 142 | NTSTATUS NtStatus = STATUS_NOT_SUPPORTED; 143 | unsigned short *eeprom; 144 | char *mappedIo; 145 | PHYSICAL_ADDRESS athPhyAddr = { 0, 0 }; 146 | unsigned long dwDataWritten = 0; 147 | unsigned long eepStartLoc; 148 | unsigned long inBufLen; 149 | unsigned long outBufLen; 150 | unsigned short eepromWord; 151 | unsigned int i; 152 | 153 | PIO_STACK_LOCATION pIoStackIrp = IoGetCurrentIrpStackLocation(Irp); 154 | 155 | UNREFERENCED_PARAMETER(DeviceObject); 156 | 157 | if(pIoStackIrp) /* Should Never Be NULL! */ 158 | { 159 | inBufLen = pIoStackIrp->Parameters.DeviceIoControl.InputBufferLength; 160 | outBufLen = pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength; 161 | 162 | mappedIo = NULL; 163 | eepStartLoc = 0; 164 | eeprom = NULL; 165 | eepromWord = 0; 166 | 167 | switch(pIoStackIrp->Parameters.DeviceIoControl.IoControlCode) 168 | { 169 | case IOCTL_EEPROM_Read_Function: 170 | 171 | if (outBufLen == 376) 172 | eepStartLoc = 64; 173 | else if (outBufLen == 512) 174 | eepStartLoc = 0; 175 | else if (outBufLen == 727) 176 | eepStartLoc = 128; 177 | else if (outBufLen == 3256) 178 | eepStartLoc = 0x100; 179 | else if (outBufLen == 4192) 180 | eepStartLoc = 0; 181 | else { 182 | NtStatus = STATUS_INVALID_PARAMETER; 183 | break; 184 | } 185 | 186 | // map device address space 187 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 188 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 189 | if (mappedIo == NULL) { 190 | NtStatus = STATUS_INTERNAL_ERROR; 191 | break; 192 | } 193 | 194 | // produce output 195 | eeprom = (unsigned short *)Irp->AssociatedIrp.SystemBuffer; 196 | if ((eepromRead(mappedIo, eepStartLoc*4+AR5416_EEPROM_OFFSET, (char *)&eeprom[0]) == STATUS_SUCCESS) && (eeprom[0] == (eepStartLoc == 0 ? AR5416_EEPROM_MAGIC : outBufLen))) 197 | { 198 | NtStatus = STATUS_SUCCESS; 199 | for (i = 1; i < outBufLen/2; i++) 200 | { 201 | NtStatus = eepromRead(mappedIo, (i+eepStartLoc)*4+AR5416_EEPROM_OFFSET, (char *)&eeprom[i]); 202 | if (NtStatus != STATUS_SUCCESS) 203 | break; 204 | } 205 | if (NtStatus == STATUS_SUCCESS) 206 | dwDataWritten = outBufLen; 207 | } 208 | else 209 | NtStatus = STATUS_INTERNAL_ERROR; 210 | 211 | MmUnmapIoSpace(mappedIo,0x10000); 212 | break; 213 | 214 | case IOCTL_EEPROM_Get_Size_Function: 215 | if (outBufLen != 4) { 216 | NtStatus = STATUS_INVALID_PARAMETER; 217 | break; 218 | } 219 | 220 | // map device address space 221 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 222 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 223 | if (mappedIo == NULL) { 224 | dwDataWritten = 0; 225 | NtStatus = STATUS_INTERNAL_ERROR; 226 | break; 227 | } 228 | 229 | // produce output 230 | if((eepromRead(mappedIo, 64*4+AR5416_EEPROM_OFFSET, (char *)&eepromWord) == STATUS_SUCCESS) && (eepromWord == 376) 231 | || (eepromRead(mappedIo, AR5416_EEPROM_OFFSET, (char *)&eepromWord) == STATUS_SUCCESS) && (eepromWord == 512) 232 | || (eepromRead(mappedIo, 128*4+AR5416_EEPROM_OFFSET, (char *)&eepromWord) == STATUS_SUCCESS) && (eepromWord == 727) 233 | || (eepromRead(mappedIo, 0x100*4+AR5416_EEPROM_OFFSET, (char *)&eepromWord) == STATUS_SUCCESS) && (eepromWord == 3256) 234 | || (eepromRead(mappedIo, AR5416_EEPROM_OFFSET, (char *)&eepromWord) == STATUS_SUCCESS) && (eepromWord == 4192)) 235 | { 236 | *(unsigned long*)Irp->AssociatedIrp.SystemBuffer = eepromWord; 237 | dwDataWritten = 4; 238 | NtStatus = STATUS_SUCCESS; 239 | } 240 | else 241 | { 242 | dwDataWritten = 0; 243 | NtStatus = STATUS_INTERNAL_ERROR; 244 | } 245 | 246 | MmUnmapIoSpace(mappedIo,0x10000); 247 | break; 248 | 249 | case IOCTL_EEPROM_Write_Function: 250 | 251 | if (inBufLen == 376 + 8) eepStartLoc = 64; 252 | else if (inBufLen == 512 + 8) eepStartLoc = 0; 253 | else if (inBufLen == 727 + 8) eepStartLoc = 128; 254 | else if (inBufLen == 3256 + 8) eepStartLoc = 0x100; 255 | else if (inBufLen == 4192) eepStartLoc = 0; 256 | else { 257 | NtStatus = STATUS_INVALID_PARAMETER; 258 | break; 259 | } 260 | 261 | // map device address space 262 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 263 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 264 | if (mappedIo == NULL) { 265 | NtStatus = STATUS_INTERNAL_ERROR; 266 | break; 267 | } 268 | 269 | if ((eepromRead(mappedIo, eepStartLoc*4+AR5416_EEPROM_OFFSET, (char *)&eepromWord) != STATUS_SUCCESS) 270 | || (eepromWord != (eepStartLoc == 0 ? AR5416_EEPROM_MAGIC : inBufLen - 8))) 271 | { 272 | MmUnmapIoSpace(mappedIo,0x10000); 273 | NtStatus = STATUS_INTERNAL_ERROR; 274 | break; 275 | } 276 | 277 | eeprom = (unsigned short *)(8 + (char*)Irp->AssociatedIrp.SystemBuffer); 278 | for (i = 0; i < (inBufLen-8)/2; i++) 279 | { 280 | NtStatus = eepromWrite(mappedIo, (i+eepStartLoc)*4+AR5416_EEPROM_OFFSET, (char *)&eeprom[i]); 281 | if (NtStatus == STATUS_SUCCESS) continue; 282 | else if (i == 0) NtStatus = STATUS_INTERNAL_ERROR; 283 | break; 284 | } 285 | 286 | MmUnmapIoSpace(mappedIo,0x10000); 287 | dwDataWritten = 0; 288 | break; 289 | } 290 | } 291 | 292 | Irp->IoStatus.Status = NtStatus; 293 | Irp->IoStatus.Information = dwDataWritten; 294 | 295 | IoCompleteRequest(Irp, IO_NO_INCREMENT); 296 | 297 | return NtStatus; 298 | } 299 | 300 | NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) 301 | { 302 | NTSTATUS NtStatus; 303 | 304 | RtlInitUnicodeString(&devName, NTDEV); 305 | NtStatus = IoCreateDevice(DriverObject, 0, &devName, 0x89A4, 0x100, 0, &devObj); 306 | 307 | UNREFERENCED_PARAMETER(RegistryPath); 308 | 309 | if (NtStatus != STATUS_SUCCESS) 310 | return NtStatus; 311 | 312 | DriverObject->DriverUnload = &Unload; 313 | DriverObject->MajorFunction[IRP_MJ_CREATE] = &DispatchCreateClose; 314 | DriverObject->MajorFunction[IRP_MJ_CLOSE] = &DispatchCreateClose; 315 | DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = &DispatchDeviceControl; 316 | 317 | RtlInitUnicodeString(&linkName, DOSDEV); 318 | NtStatus = IoCreateSymbolicLink(&linkName, &devName); 319 | 320 | if (NtStatus != STATUS_SUCCESS){ 321 | IoDeleteDevice(devObj); 322 | return NtStatus; 323 | } 324 | 325 | /* 326 | mappedIo = (void*)MmMapIoSpace(athPhyAddr,0x10000,MmNonCached); 327 | 328 | if (mappedIo == 0) return STATUS_DEVICE_CONFIGURATION_ERROR; 329 | 330 | for (i = 0; i < 0xBC; i++){ 331 | eeDword = *(unsigned long*)(mappedIo+(i+0x40)*4+0x2000); 332 | if (eeDword){ 333 | KeStallExecutionProcessor(1000); 334 | *(unsigned short*)(eeprom+i*2) = *(unsigned short*)(mappedIo+0x407C); 335 | } 336 | } 337 | 338 | MmUnmapIoSpace(mappedIo,0x10000); 339 | 340 | RtlInitUnicodeString(&uniName, L"\\??\\C:\\eeprom.bin"); 341 | InitializeObjectAttributes(&objAttributes, &uniName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL); 342 | 343 | ntstatus = ZwCreateFile(&hFile, GENERIC_READ | GENERIC_WRITE, &objAttributes, &ioStatusBlock, 0, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0); 344 | if (ntstatus == STATUS_SUCCESS){ 345 | ZwWriteFile(hFile, 0, 0, 0, &ioStatusBlock, eeprom, 376, 0, 0); 346 | ZwClose(hFile); 347 | } 348 | */ 349 | 350 | return STATUS_SUCCESS; 351 | } 352 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/atheeprom.new.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define IO_ERR_MAP 0x901 4 | #define IO_ERR_LOWMEM 0x902 5 | 6 | #define AR_SREV_9300_20_OR_LATER(ah) 0 7 | #define AR_GPIO_OE_OUT (AR_SREV_9300_20_OR_LATER(ah) ? 0x4050 : 0x404c) 8 | #define AR_GPIO_IN_OUT 0x4048 9 | #define AR_GPIO_OUTPUT_MUX1 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4068 : 0x4060) 10 | #define AR_GPIO_OUTPUT_MUX2 (AR_SREV_9300_20_OR_LATER(ah) ? 0x406c : 0x4064) 11 | #define AR_GPIO_OUTPUT_MUX3 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4070 : 0x4068) 12 | 13 | #define AR_INPUT_STATE (AR_SREV_9300_20_OR_LATER(ah) ? 0x4074 : 0x406c) 14 | 15 | #define AR_EEPROM_STATUS_DATA (AR_SREV_9300_20_OR_LATER(ah) ? 0x4084 : 0x407c) 16 | #define AR_EEPROM_STATUS_DATA_VAL 0x0000ffff 17 | #define AR_EEPROM_STATUS_DATA_VAL_S 0 18 | #define AR_EEPROM_STATUS_DATA_BUSY 0x00010000 19 | #define AR_EEPROM_STATUS_DATA_BUSY_ACCESS 0x00020000 20 | #define AR_EEPROM_STATUS_DATA_PROT_ACCESS 0x00040000 21 | #define AR_EEPROM_STATUS_DATA_ABSENT_ACCESS 0x00080000 22 | 23 | #define AR5416_EEPROM_MAGIC 0xa55a 24 | #define AR5416_EEPROM_MAGIC_OFFSET 0x0 25 | #define AR5416_EEPROM_S 2 26 | #define AR5416_EEPROM_OFFSET 0x2000 27 | #define AR5416_EEPROM_MAX 0xae0 28 | 29 | 30 | NTSTATUS eepromWait (char* ioMem) 31 | { 32 | unsigned i; 33 | 34 | for (i = 1000; i; i--) 35 | { 36 | unsigned regStatus = *(volatile unsigned int*)(ioMem + AR_EEPROM_STATUS_DATA); 37 | 38 | if (0 == (regStatus & 0xFFFF0000)) 39 | return STATUS_SUCCESS; 40 | 41 | KeStallExecutionProcessor(100); 42 | } 43 | 44 | return STATUS_INTERNAL_ERROR; 45 | } 46 | 47 | NTSTATUS eepromReadWord (char* ioMem, unsigned int wordNum, unsigned short* rb) 48 | { 49 | unsigned int offset = AR5416_EEPROM_OFFSET + (wordNum << AR5416_EEPROM_S); 50 | unsigned long eeDword = *(volatile unsigned long*)(ioMem + offset); 51 | 52 | if (eepromWait(ioMem) != STATUS_SUCCESS) 53 | return STATUS_IO_DEVICE_ERROR; 54 | 55 | *rb = AR_EEPROM_STATUS_DATA_VAL & *(volatile unsigned long*)(ioMem + AR_EEPROM_STATUS_DATA); 56 | return STATUS_SUCCESS; 57 | } 58 | 59 | NTSTATUS eepromWriteWord (char* ioMem, unsigned int wordNum, short word) 60 | { 61 | unsigned int offset = AR5416_EEPROM_OFFSET + (wordNum << AR5416_EEPROM_S); 62 | unsigned long eeDword; 63 | unsigned long j; 64 | 65 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_OUTPUT_MUX1); 66 | *(volatile unsigned long*)(ioMem + AR_GPIO_OUTPUT_MUX1) = eeDword & 0xFFF07FFF; 67 | KeStallExecutionProcessor(1); 68 | 69 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_OE_OUT); 70 | *(volatile unsigned long*)(ioMem + AR_GPIO_OE_OUT) = eeDword | 0xC0; 71 | KeStallExecutionProcessor(1); 72 | 73 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT); 74 | *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT) = eeDword & ~8; 75 | KeStallExecutionProcessor(1); 76 | 77 | *(volatile unsigned short*)(ioMem + offset) = word; 78 | 79 | for (j = 50000; j; j--) 80 | { 81 | eeDword = *(volatile unsigned long*)(ioMem + AR_EEPROM_STATUS_DATA); 82 | if ( 0 == (eeDword & 0xF0000) ) 83 | { 84 | eeDword = *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT); 85 | *(volatile unsigned long*)(ioMem + AR_GPIO_IN_OUT) = eeDword | 8; 86 | return STATUS_SUCCESS; 87 | } 88 | KeStallExecutionProcessor(1); 89 | } 90 | 91 | return STATUS_IO_DEVICE_ERROR; 92 | } 93 | 94 | 95 | #define IOCTL_EEPROM_Read_Function CTL_CODE(0x89A4, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) 96 | #define IOCTL_EEPROM_Write_Function CTL_CODE(0x89A4, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) 97 | #define IOCTL_EEPROM_Get_Size_Function CTL_CODE(0x89A4, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) 98 | 99 | 100 | OBJECT_ATTRIBUTES objAttributes; 101 | 102 | HANDLE hFile; 103 | IO_STATUS_BLOCK ioStatusBlock; 104 | //UNICODE_STRING uniName; 105 | UNICODE_STRING devName; 106 | UNICODE_STRING linkName; 107 | PDEVICE_OBJECT devObj; 108 | 109 | DRIVER_UNLOAD Unload; 110 | 111 | VOID 112 | Unload( 113 | __in struct _DRIVER_OBJECT *DriverObject 114 | ) 115 | { 116 | IoDeleteSymbolicLink(&linkName); 117 | IoDeleteDevice(devObj); 118 | return; 119 | } 120 | 121 | DRIVER_DISPATCH DispatchCreateClose; 122 | NTSTATUS 123 | DispatchCreateClose( 124 | __inout struct _DEVICE_OBJECT *DeviceObject, 125 | __in struct _IRP *Irp 126 | ) 127 | { 128 | NTSTATUS NtStatus = STATUS_SUCCESS; 129 | Irp->IoStatus.Status = NtStatus; 130 | Irp->IoStatus.Information = 0; 131 | IoCompleteRequest(Irp, IO_NO_INCREMENT); 132 | return NtStatus; 133 | } 134 | 135 | DRIVER_DISPATCH DispatchDeviceControl; 136 | 137 | NTSTATUS 138 | DispatchDeviceControl( 139 | __inout struct _DEVICE_OBJECT *DeviceObject, 140 | __in struct _IRP *Irp 141 | ) 142 | { 143 | NTSTATUS NtStatus = STATUS_NOT_SUPPORTED; 144 | unsigned long dwDataWritten = 0; 145 | 146 | PIO_STACK_LOCATION pIoStackIrp = IoGetCurrentIrpStackLocation(Irp); 147 | 148 | if(pIoStackIrp) /* Should Never Be NULL! */ 149 | { 150 | unsigned long inBufLen = pIoStackIrp->Parameters.DeviceIoControl.InputBufferLength; 151 | unsigned long outBufLen = pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength; 152 | 153 | PHYSICAL_ADDRESS athPhyAddr = { 0, 0 }; 154 | char* mappedIo = NULL; 155 | 156 | unsigned long eepStartLoc = 0; 157 | unsigned short* eeprom = NULL; 158 | unsigned short eepromWord = 0; 159 | int i; 160 | 161 | switch(pIoStackIrp->Parameters.DeviceIoControl.IoControlCode) 162 | { 163 | case IOCTL_EEPROM_Read_Function: 164 | 165 | if (outBufLen == 376) eepStartLoc = 64; 166 | else if (outBufLen == 512) eepStartLoc = 0; 167 | else if (outBufLen == 727) eepStartLoc = 128; 168 | else if (outBufLen == 3256) eepStartLoc = 0x100; 169 | else { 170 | NtStatus = STATUS_INVALID_PARAMETER; 171 | break; 172 | } 173 | 174 | // map device address space 175 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 176 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 177 | if (mappedIo == NULL) { 178 | NtStatus = STATUS_INTERNAL_ERROR; 179 | break; 180 | } 181 | 182 | // produce output 183 | eeprom = Irp->AssociatedIrp.SystemBuffer; 184 | if (eepromReadWord(mappedIo, eepStartLoc, &eeprom[0]) == STATUS_SUCCESS && eeprom[0] == (eepStartLoc == 0 ? AR5416_EEPROM_MAGIC : outBufLen)) 185 | { 186 | NtStatus = STATUS_SUCCESS; 187 | for (i = 1; i < outBufLen/2; i++) 188 | { 189 | NtStatus = eepromReadWord(mappedIo, eepStartLoc + i, &eeprom[i]); 190 | if (NtStatus != STATUS_SUCCESS) 191 | break; 192 | } 193 | if (NtStatus == STATUS_SUCCESS) 194 | dwDataWritten = outBufLen; 195 | } 196 | else 197 | NtStatus = STATUS_INTERNAL_ERROR; 198 | 199 | MmUnmapIoSpace(mappedIo,0x10000); 200 | break; 201 | 202 | case IOCTL_EEPROM_Get_Size_Function: 203 | if (outBufLen != 4) { 204 | NtStatus = STATUS_INVALID_PARAMETER; 205 | break; 206 | } 207 | 208 | // map device address space 209 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 210 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 211 | if (mappedIo == NULL) { 212 | NtStatus = STATUS_INTERNAL_ERROR; 213 | break; 214 | } 215 | 216 | // produce output 217 | if(eepromReadWord(mappedIo, 64, &eepromWord) == STATUS_SUCCESS && eepromWord == 376 218 | || eepromReadWord(mappedIo, 128, &eepromWord) == STATUS_SUCCESS && eepromWord == 727 219 | || eepromReadWord(mappedIo, 0x100, &eepromWord) == STATUS_SUCCESS && eepromWord == 3256) 220 | { 221 | *(unsigned long*)Irp->AssociatedIrp.SystemBuffer = eepromWord; 222 | dwDataWritten = 4; 223 | NtStatus = STATUS_SUCCESS; 224 | } 225 | else 226 | { 227 | *(unsigned long*)Irp->AssociatedIrp.SystemBuffer = 0; 228 | dwDataWritten = 0; 229 | NtStatus = STATUS_INTERNAL_ERROR; 230 | } 231 | 232 | MmUnmapIoSpace(mappedIo,0x10000); 233 | break; 234 | 235 | case IOCTL_EEPROM_Write_Function: 236 | 237 | if (inBufLen == 376 + 8) eepStartLoc = 64; 238 | else if (inBufLen == 512 + 8) eepStartLoc = 0; 239 | else if (inBufLen == 727 + 8) eepStartLoc = 128; 240 | else if (inBufLen == 3256 + 8) eepStartLoc = 0x100; 241 | else { 242 | NtStatus = STATUS_INVALID_PARAMETER; 243 | break; 244 | } 245 | 246 | // map device address space 247 | athPhyAddr = *(PHYSICAL_ADDRESS*)Irp->AssociatedIrp.SystemBuffer; 248 | mappedIo = (char*)MmMapIoSpace(athPhyAddr, 0x10000, MmNonCached); 249 | if (mappedIo == NULL) { 250 | NtStatus = STATUS_INTERNAL_ERROR; 251 | break; 252 | } 253 | 254 | if (eepromReadWord(mappedIo, eepStartLoc, &eepromWord) != STATUS_SUCCESS 255 | || eepromWord != (eepStartLoc == 0 ? AR5416_EEPROM_MAGIC : inBufLen - 8)) 256 | { 257 | MmUnmapIoSpace(mappedIo,0x10000); 258 | NtStatus = STATUS_INTERNAL_ERROR; 259 | break; 260 | } 261 | 262 | eeprom = 8 + (char*)Irp->AssociatedIrp.SystemBuffer; 263 | for (i = 0; i < (inBufLen-8)/2; i++) 264 | { 265 | NtStatus = eepromWriteWord(mappedIo, eepStartLoc + i, eeprom[i]); 266 | if (NtStatus == STATUS_SUCCESS) continue; 267 | else if (i == 0) NtStatus = STATUS_INTERNAL_ERROR; 268 | break; 269 | } 270 | 271 | MmUnmapIoSpace(mappedIo,0x10000); 272 | dwDataWritten = 0; 273 | break; 274 | } 275 | } 276 | 277 | Irp->IoStatus.Status = NtStatus; 278 | Irp->IoStatus.Information = dwDataWritten; 279 | 280 | IoCompleteRequest(Irp, IO_NO_INCREMENT); 281 | 282 | return NtStatus; 283 | } 284 | 285 | NTSTATUS 286 | DriverEntry( 287 | IN PDRIVER_OBJECT DriverObject, 288 | IN PUNICODE_STRING RegistryPath 289 | ) 290 | { 291 | NTSTATUS NtStatus; 292 | 293 | RtlInitUnicodeString(&devName, L"\\Device\\atheeprom"); 294 | NtStatus = IoCreateDevice(DriverObject, 0, &devName, 0x89A4, 0x100, 0, &devObj); 295 | 296 | if (NtStatus != STATUS_SUCCESS) return NtStatus; 297 | 298 | DriverObject->DriverUnload = &Unload; 299 | DriverObject->MajorFunction[IRP_MJ_CREATE] = &DispatchCreateClose; 300 | DriverObject->MajorFunction[IRP_MJ_CLOSE] = &DispatchCreateClose; 301 | DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = &DispatchDeviceControl; 302 | 303 | RtlInitUnicodeString(&linkName, L"\\DosDevices\\atheeprom"); 304 | NtStatus = IoCreateSymbolicLink(&linkName, &devName); 305 | 306 | if (NtStatus != STATUS_SUCCESS){ 307 | IoDeleteDevice(devObj); 308 | return NtStatus; 309 | } 310 | /* 311 | mappedIo = (void*)MmMapIoSpace(athPhyAddr,0x10000,MmNonCached); 312 | 313 | if (mappedIo == 0) return STATUS_DEVICE_CONFIGURATION_ERROR; 314 | 315 | for (i = 0; i < 0xBC; i++){ 316 | eeDword = *(unsigned long*)(mappedIo+(i+0x40)*4+0x2000); 317 | if (eeDword){ 318 | KeStallExecutionProcessor(1000); 319 | *(unsigned short*)(eeprom+i*2) = *(unsigned short*)(mappedIo+0x407C); 320 | } 321 | } 322 | 323 | MmUnmapIoSpace(mappedIo,0x10000); 324 | 325 | RtlInitUnicodeString(&uniName, L"\\??\\C:\\eeprom.bin"); 326 | InitializeObjectAttributes(&objAttributes, &uniName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL); 327 | 328 | ntstatus = ZwCreateFile(&hFile, GENERIC_READ | GENERIC_WRITE, &objAttributes, &ioStatusBlock, 0, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0); 329 | if (ntstatus == STATUS_SUCCESS){ 330 | ZwWriteFile(hFile, 0, 0, 0, &ioStatusBlock, eeprom, 376, 0, 0); 331 | ZwClose(hFile); 332 | } 333 | */ 334 | return STATUS_SUCCESS; 335 | } -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/atheeprom.rc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifndef DBG 4 | #define OFFICIAL_BUILD 1 5 | #undef BETA 6 | #endif 7 | 8 | #include 9 | 10 | #undef VER_COMPANYNAME_STR 11 | #undef VER_PRODUCTNAME_STR 12 | 13 | #define VER_FILETYPE VFT_DRV 14 | #define VER_FILESUBTYPE VFT2_DRV_SYSTEM 15 | #define VER_FILEDESCRIPTION_STR "Atheros EEPROM Driver" 16 | 17 | #if defined(_X86_) 18 | #define VER_INTERNALNAME_STR "ath32.sys" 19 | #elif defined(_AMD64_) 20 | #define VER_INTERNALNAME_STR "ath64.sys" 21 | #else 22 | #define VER_INTERNALNAME_STR "atheeprom.sys" 23 | #endif 24 | 25 | #define VER_COMPANYNAME_STR "AnV Sofware" 26 | #define VER_PRODUCTNAME_STR "Atheros EEPROM Driver" 27 | #define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2014 AnV Software" 28 | 29 | #include "common.ver" 30 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/build_main.bat: -------------------------------------------------------------------------------- 1 | set DDKPATH=D:\WinDDK\7600.16385.1 2 | 3 | pushd . 4 | 5 | setlocal 6 | call build_x64.bat %1 %2 7 | endlocal 8 | 9 | setlocal 10 | call build_x86.bat %1 %2 11 | endlocal 12 | 13 | popd 14 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/build_x64.bat: -------------------------------------------------------------------------------- 1 | @if "%1" EQU "-clean" goto clean 2 | @if "%1" EQU "-Debug" goto Debug 3 | @if "%1" EQU "-Release" goto Release 4 | @echo Error driver_build.bat commandline! 5 | goto Usage 6 | 7 | :Debug 8 | pushd . 9 | call %DDKPATH%\bin\setenv.bat %DDKPATH% chk x64 WIN7 no_oacr 10 | popd 11 | if "%2" NEQ "-re" skipcleanDebug 12 | rmdir /S /Q .\Debug 13 | rmdir /S /Q .\obj 14 | rmdir /S /Q .\objchk 15 | del buildchk.log 16 | :skipcleanDebug 17 | build 18 | copy /Y objchk_win7_amd64\amd64\atheeprom.sys ..\Debug\ath64.sys 19 | goto exit 20 | 21 | :Release 22 | pushd . 23 | call %DDKPATH%\bin\setenv.bat %DDKPATH% fre x64 WIN7 no_oacr 24 | popd 25 | if "%2" NEQ "-re" skipcleanRelease 26 | rmdir /S /Q .\Release 27 | rmdir /S /Q .\obj 28 | rmdir /S /Q .\objfre 29 | del buildfre.log 30 | :skipcleanRelease 31 | build 32 | copy /Y objfre_win7_amd64\amd64\atheeprom.sys ..\Release\ath64.sys 33 | goto exit 34 | 35 | :clean 36 | rmdir /S /Q .\Release 37 | rmdir /S /Q .\Debug 38 | rmdir /S /Q .\obj 39 | rmdir /S /Q .\objchk 40 | rmdir /S /Q .\objfre 41 | del buildchk.log 42 | del buildfre.log 43 | goto exit 44 | 45 | :Usage 46 | @echo Usage: 47 | @echo mybuild.bat -Debug [-re] - compile with checked build env (Debug) [rebuild all] 48 | @echo mybuild.bat -Release [-re] - compile with free build env (Release) [rebuild all] 49 | @echo mybuild.bat -clean - remove temp folders and files 50 | @exit /B 1 51 | 52 | :exit 53 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/build_x86.bat: -------------------------------------------------------------------------------- 1 | @if "%1" EQU "-clean" goto clean 2 | @if "%1" EQU "-Debug" goto Debug 3 | @if "%1" EQU "-Release" goto Release 4 | @echo Error driver_build.bat commandline! 5 | goto Usage 6 | 7 | :Debug 8 | pushd . 9 | call %DDKPATH%\bin\setenv.bat %DDKPATH% chk WIN7 no_oacr 10 | popd 11 | if "%2" NEQ "-re" skipcleanDebug 12 | rmdir /S /Q .\Debug 13 | rmdir /S /Q .\obj 14 | rmdir /S /Q .\objchk 15 | del buildchk.log 16 | :skipcleanDebug 17 | build 18 | copy /Y objchk_win7_x86\i386\atheeprom.sys ..\Debug\ath32.sys 19 | goto exit 20 | 21 | :Release 22 | pushd . 23 | call %DDKPATH%\bin\setenv.bat %DDKPATH% fre WIN7 no_oacr 24 | popd 25 | if "%2" NEQ "-re" skipcleanRelease 26 | rmdir /S /Q .\Release 27 | rmdir /S /Q .\obj 28 | rmdir /S /Q .\objfre 29 | del buildfre.log 30 | :skipcleanRelease 31 | build 32 | copy /Y objfre_win7_x86\i386\atheeprom.sys ..\Release\ath32.sys 33 | goto exit 34 | 35 | :clean 36 | rmdir /S /Q .\Release 37 | rmdir /S /Q .\Debug 38 | rmdir /S /Q .\obj 39 | rmdir /S /Q .\objchk 40 | rmdir /S /Q .\objfre 41 | del buildchk.log 42 | del buildfre.log 43 | goto exit 44 | 45 | :Usage 46 | @echo Usage: 47 | @echo mybuild.bat -Debug [-re] - compile with checked build env (Debug) [rebuild all] 48 | @echo mybuild.bat -Release [-re] - compile with free build env (Release) [rebuild all] 49 | @echo mybuild.bat -clean - remove temp folders and files 50 | @exit /B 1 51 | 52 | :exit 53 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/buildchk_win7_amd64.log: -------------------------------------------------------------------------------- 1 | BUILD: Computing Include file dependencies: 2 | BUILD: Examining c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver directory for files to compile. 3 | 1>Compiling and Linking c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver ************* 4 | 1>'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR=' 5 | 1> rc.exe -l 409 -DSXS_PROCESSOR_ARCHITECTURE="""AMD64""" -DSXS_TARGET="""atheeprom.sys""" -DSYSTEM_COMPATIBLE_ASSEMBLY_NAME="""Microsoft.Windows.SystemCompatible""" -DLSYSTEM_COMPATIBLE_ASSEMBLY_NAME=L"""Microsoft.Windows.SystemCompatible""" -DSXS_ASSEMBLY_VERSION="""""" /r /fo c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.res /D_WIN64 /D_AMD64_ /DAMD64 /DCONDITION_HANDLING=1 /DNT_UP=1 /DNT_INST=0 /DWIN32=100 /D_NT1X_=100 /DWINNT=1 /D_WIN32_WINNT=0x0601 /DWINVER=0x0601 /D_WIN32_IE=0x0800 /DWIN32_LEAN_AND_MEAN=1 /DDEVL=1 /DDBG=1 /D__BUILDMACHINE__=WinDDK /D_DLL=1 /DNDEBUG /DDEPRECATE_DDK_FUNCTIONS=1 /DMSC_NOOPT /DNTDDI_VERSION=0x06010000 /Ic:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64 /ID:\WinDDK\7600.16385.1\inc\api /ID:\WinDDK\7600.16385.1\inc\api /ID:\WinDDK\7600.16385.1\inc\ddk /ID:\WinDDK\7600.16385.1\inc\ddk /ID:\WinDDK\7600.16385.1\inc\crt .\atheeprom.rc 6 | 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6908.0 7 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 8 | 1> cl @c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\cl.rsp 9 | 1>Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.207 for x64 10 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 11 | 1>cl /Fo"c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64/" 12 | 1> /FC 13 | 1> /Iamd64\ 14 | 1> /I. 15 | 1> /Ic:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64 16 | 1> /ID:\WinDDK\7600.16385.1\inc\api 17 | 1> /ID:\WinDDK\7600.16385.1\inc\api 18 | 1> /ID:\WinDDK\7600.16385.1\inc\ddk 19 | 1> /ID:\WinDDK\7600.16385.1\inc\ddk 20 | 1> /ID:\WinDDK\7600.16385.1\inc\crt 21 | 1> /D_WIN64 22 | 1> /D_AMD64_ 23 | 1> /DAMD64 24 | 1> /DCONDITION_HANDLING=1 25 | 1> /DNT_UP=1 26 | 1> /DNT_INST=0 27 | 1> /DWIN32=100 28 | 1> /D_NT1X_=100 29 | 1> /DWINNT=1 30 | 1> /D_WIN32_WINNT=0x0601 31 | 1> /DWINVER=0x0601 32 | 1> /D_WIN32_IE=0x0800 33 | 1> /DWIN32_LEAN_AND_MEAN=1 34 | 1> /DDEVL=1 35 | 1> /DDBG=1 36 | 1> /D__BUILDMACHINE__=WinDDK 37 | 1> /D_DLL=1 38 | 1> /DNDEBUG 39 | 1> /DDEPRECATE_DDK_FUNCTIONS=1 40 | 1> /DMSC_NOOPT 41 | 1> /DNTDDI_VERSION=0x06010000 42 | 1> /c 43 | 1> /Zc:wchar_t- 44 | 1> /Zl 45 | 1> /Zp8 46 | 1> /Gy 47 | 1> -cbstring 48 | 1> /W4 49 | 1> /WX 50 | 1> /EHs-c- 51 | 1> /GR- 52 | 1> /GF 53 | 1> /GS 54 | 1> /Zi 55 | 1> /Od 56 | 1> /Oi 57 | 1> /GL 58 | 1> /Zi 59 | 1> /Fdc:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\ 60 | 1> /DKMDF_MAJOR_VERSION_STRING=01 61 | 1> /DKMDF_MINOR_VERSION_STRING=009 62 | 1> /typedil- 63 | 1> /wd4603 64 | 1> /wd4627 65 | 1> /homeparams 66 | 1> /FID:\WinDDK\7600.16385.1\inc\api\warning.h 67 | 1> .\atheeprom.c 68 | 1>atheeprom.c 69 | 1> link.exe /out:c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.sys /machine:amd64 @c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\lnk.rsp 70 | 1>Microsoft (R) Incremental Linker Version 9.00.30729.207 71 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 72 | 1>/MERGE:_PAGE=PAGE 73 | 1>/MERGE:_TEXT=.text 74 | 1>/SECTION:INIT,d 75 | 1>/OPT:REF 76 | 1>/OPT:ICF 77 | 1>/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221,4108,4088,4218,4218,4235 78 | 1>/INCREMENTAL:NO 79 | 1>/release 80 | 1>/NODEFAULTLIB 81 | 1>/WX 82 | 1>/debug 83 | 1>/debugtype:cv,fixup,pdata 84 | 1>/version:6.1 85 | 1>/osversion:6.1 86 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\hotpatch.obj 87 | 1>/functionpadmin:6 88 | 1>/pdbcompress 89 | 1>/STACK:0x40000,0x1000 90 | 1>/driver 91 | 1>/base:0x10000 92 | 1>/subsystem:native,6.01 93 | 1>/entry:GsDriverEntry 94 | 1>/out:c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.sys 95 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.res 96 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.obj 97 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\BufferOverflowK.lib 98 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\ntoskrnl.lib 99 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\hal.lib 100 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\wmilib.lib 101 | 1>atheeprom.obj : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance 102 | 1>Microsoft (R) Incremental Linker Version 9.00.30729.207 103 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 104 | 1>/MERGE:_PAGE=PAGE 105 | 1>/MERGE:_TEXT=.text 106 | 1>/SECTION:INIT,d 107 | 1>/OPT:REF 108 | 1>/OPT:ICF 109 | 1>/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221,4108,4088,4218,4218,4235 110 | 1>/INCREMENTAL:NO 111 | 1>/release 112 | 1>/NODEFAULTLIB 113 | 1>/WX 114 | 1>/debug 115 | 1>/debugtype:cv,fixup,pdata 116 | 1>/version:6.1 117 | 1>/osversion:6.1 118 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\hotpatch.obj 119 | 1>/functionpadmin:6 120 | 1>/pdbcompress 121 | 1>/STACK:0x40000,0x1000 122 | 1>/driver 123 | 1>/base:0x10000 124 | 1>/subsystem:native,6.01 125 | 1>/entry:GsDriverEntry 126 | 1>/out:c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.sys 127 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.res 128 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_amd64\amd64\atheeprom.obj 129 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\BufferOverflowK.lib 130 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\ntoskrnl.lib 131 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\hal.lib 132 | 1>D:\WinDDK\7600.16385.1\lib\win7\amd64\wmilib.lib 133 | 1>Generating code 134 | 1>Finished generating code 135 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/buildchk_win7_x86.log: -------------------------------------------------------------------------------- 1 | BUILD: Computing Include file dependencies: 2 | BUILD: Examining c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver directory for files to compile. 3 | 1>Compiling and Linking c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver ************* 4 | 1>'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR=' 5 | 1> rc.exe -l 409 -DSXS_PROCESSOR_ARCHITECTURE="""x86""" -DSXS_TARGET="""atheeprom.sys""" -DSYSTEM_COMPATIBLE_ASSEMBLY_NAME="""Microsoft.Windows.SystemCompatible""" -DLSYSTEM_COMPATIBLE_ASSEMBLY_NAME=L"""Microsoft.Windows.SystemCompatible""" -DSXS_ASSEMBLY_VERSION="""""" /r /fo c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\atheeprom.res /D_X86_=1 /Di386=1 /DSTD_CALL /DCONDITION_HANDLING=1 /DNT_UP=1 /DNT_INST=0 /DWIN32=100 /D_NT1X_=100 /DWINNT=1 /D_WIN32_WINNT=0x0601 /DWINVER=0x0601 /D_WIN32_IE=0x0800 /DWIN32_LEAN_AND_MEAN=1 /DDEVL=1 /DDBG=1 /D__BUILDMACHINE__=WinDDK /DFPO=0 /D_DLL=1 /DNDEBUG /DDEPRECATE_DDK_FUNCTIONS=1 /DMSC_NOOPT /DNTDDI_VERSION=0x06010000 /Ic:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386 /ID:\WinDDK\7600.16385.1\inc\api /ID:\WinDDK\7600.16385.1\inc\api /ID:\WinDDK\7600.16385.1\inc\ddk /ID:\WinDDK\7600.16385.1\inc\ddk /ID:\WinDDK\7600.16385.1\inc\crt .\atheeprom.rc 6 | 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6908.0 7 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 8 | 1> cl @c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\cl.rsp 9 | 1>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.207 for 80x86 10 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 11 | 1>cl /Fo"c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386/" 12 | 1> /FC 13 | 1> /Ii386 14 | 1> /I. 15 | 1> /Ic:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386 16 | 1> /ID:\WinDDK\7600.16385.1\inc\api 17 | 1> /ID:\WinDDK\7600.16385.1\inc\api 18 | 1> /ID:\WinDDK\7600.16385.1\inc\ddk 19 | 1> /ID:\WinDDK\7600.16385.1\inc\ddk 20 | 1> /ID:\WinDDK\7600.16385.1\inc\crt 21 | 1> /D_X86_=1 22 | 1> /Di386=1 23 | 1> /DSTD_CALL 24 | 1> /DCONDITION_HANDLING=1 25 | 1> /DNT_UP=1 26 | 1> /DNT_INST=0 27 | 1> /DWIN32=100 28 | 1> /D_NT1X_=100 29 | 1> /DWINNT=1 30 | 1> /D_WIN32_WINNT=0x0601 31 | 1> /DWINVER=0x0601 32 | 1> /D_WIN32_IE=0x0800 33 | 1> /DWIN32_LEAN_AND_MEAN=1 34 | 1> /DDEVL=1 35 | 1> /DDBG=1 36 | 1> /D__BUILDMACHINE__=WinDDK 37 | 1> /DFPO=0 38 | 1> /D_DLL=1 39 | 1> /DNDEBUG 40 | 1> /DDEPRECATE_DDK_FUNCTIONS=1 41 | 1> /DMSC_NOOPT 42 | 1> /DNTDDI_VERSION=0x06010000 43 | 1> /c 44 | 1> /Zc:wchar_t- 45 | 1> /Zl 46 | 1> /Zp8 47 | 1> /Gy 48 | 1> /Gm- 49 | 1> -cbstring 50 | 1> /W4 51 | 1> /WX 52 | 1> /Gz 53 | 1> /hotpatch 54 | 1> /EHs-c- 55 | 1> /GR- 56 | 1> /GF 57 | 1> /GS 58 | 1> /Zi 59 | 1> /Od 60 | 1> /Oi 61 | 1> /Oy- 62 | 1> /Zi 63 | 1> /Fdc:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\ 64 | 1> /DKMDF_MAJOR_VERSION_STRING=01 65 | 1> /DKMDF_MINOR_VERSION_STRING=009 66 | 1> /wd4603 67 | 1> /wd4627 68 | 1> /typedil- 69 | 1> /FID:\WinDDK\7600.16385.1\inc\api\warning.h 70 | 1> .\atheeprom.c 71 | 1>atheeprom.c 72 | 1> link.exe /out:c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\atheeprom.sys /machine:ix86 @c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\lnk.rsp 73 | 1>Microsoft (R) Incremental Linker Version 9.00.30729.207 74 | 1>Copyright (C) Microsoft Corporation. All rights reserved. 75 | 1>/MERGE:_PAGE=PAGE 76 | 1>/MERGE:_TEXT=.text 77 | 1>/SECTION:INIT,d 78 | 1>/OPT:REF 79 | 1>/OPT:ICF 80 | 1>/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 81 | 1>/INCREMENTAL:NO 82 | 1>/release 83 | 1>/NODEFAULTLIB 84 | 1>/WX 85 | 1>/debug 86 | 1>/debugtype:cv,fixup,pdata 87 | 1>/version:6.1 88 | 1>/osversion:6.1 89 | 1>/functionpadmin:5 90 | 1>/safeseh 91 | 1>/pdbcompress 92 | 1>/STACK:0x40000,0x1000 93 | 1>/driver 94 | 1>/base:0x10000 95 | 1>/subsystem:native,6.01 96 | 1>/entry:GsDriverEntry@8 97 | 1>/out:c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\atheeprom.sys 98 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\atheeprom.res 99 | 1>c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver\objchk_win7_x86\i386\atheeprom.obj 100 | 1>D:\WinDDK\7600.16385.1\lib\win7\i386\BufferOverflowK.lib 101 | 1>D:\WinDDK\7600.16385.1\lib\win7\i386\ntoskrnl.lib 102 | 1>D:\WinDDK\7600.16385.1\lib\win7\i386\hal.lib 103 | 1>D:\WinDDK\7600.16385.1\lib\win7\i386\wmilib.lib 104 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/buildfre_win7_amd64.log: -------------------------------------------------------------------------------- 1 | BUILD: Computing Include file dependencies: 2 | BUILD: Examining c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver directory for files to compile. 3 | 1>Compiling and Linking c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver ************* 4 | 1>'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR=' 5 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/buildfre_win7_x86.log: -------------------------------------------------------------------------------- 1 | BUILD: Computing Include file dependencies: 2 | BUILD: Examining c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver directory for files to compile. 3 | 1>Compiling and Linking c:\users\gebruiker\documents\atheros_wifi_mod\aet_rw512_anv\driver ************* 4 | 1>'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR=' 5 | -------------------------------------------------------------------------------- /aet_rw512_AnV/driver/sources: -------------------------------------------------------------------------------- 1 | TARGETNAME=atheeprom 2 | TARGETTYPE=DRIVER 3 | 4 | MSC_WARNING_LEVEL=/W4 /WX 5 | 6 | SOURCES = atheeprom.c atheeprom.rc 7 | 8 | !IF "$(SDV_BUILD_AS_CPP)" != "" 9 | USER_C_FLAGS=$(USER_C_FLAGS) /TP 10 | !ENDIF 11 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/AR5B95_E00E.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/AR5B95_E00E.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/full/eeprom_dump.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/full/eeprom_dump.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/full/eeprom_dump_2427+.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/full/eeprom_dump_2427+.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/full/eeprom_dump_2427+2.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/full/eeprom_dump_2427+2.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/full/eeprom_dump_5B95.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/full/eeprom_dump_5B95.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/full/eeprom_dump_9285.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/full/eeprom_dump_9285.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/modified.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/modified.rar -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/modified.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/modified.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/original.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/original.rar -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/original.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/original.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3/1.ZIP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v3/1.ZIP -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3/1.diff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v3/1.diff -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3/DEV_002B&SUBSYS_10891A3B.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v3/DEV_002B&SUBSYS_10891A3B.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3/eeprom.rom.org: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v3/eeprom.rom.org -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3detailed/ar9285.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v3detailed/ar9285.bin -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3detailed/dmesg.txt: -------------------------------------------------------------------------------- 1 | ath9k 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 2 | ath9k 0000:03:00.0: setting latency timer to 64 3 | phy0: Selected rate control algorithm 'ath9k_rate_control' 4 | Registered led device: ath9k-phy0::radio 5 | Registered led device: ath9k-phy0::assoc 6 | Registered led device: ath9k-phy0::tx 7 | Registered led device: ath9k-phy0::rx 8 | phy0: Atheros AR9285 MAC/BB Rev:2 AR5133 RF Rev:e0: mem=0xf8e00000, irq=17 9 | cfg80211: Calling CRDA for country: RU 10 | cfg80211: Regulatory domain changed to country: RU 11 | (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) 12 | (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) 13 | 14 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3detailed/iw_list.txt: -------------------------------------------------------------------------------- 1 | Wiphy phy0 2 | Band 1: 3 | HT capabilities: 0x104e 4 | * 20/40 MHz operation 5 | * SM PS disabled 6 | * 40 MHz short GI 7 | * max A-MSDU len 3839 8 | * DSSS/CCK 40 MHz 9 | HT A-MPDU factor: 0x0003 (65535 bytes) 10 | HT A-MPDU density: 0x0006 (8 usec) 11 | HT MCS set: ff 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 12 | HT TX/RX MCS rate indexes supported: 13 | MCS index 0 14 | MCS index 1 15 | MCS index 2 16 | MCS index 3 17 | MCS index 4 18 | MCS index 5 19 | MCS index 6 20 | MCS index 7 21 | Frequencies: 22 | * 2412 MHz [1] (20.0 dBm) 23 | * 2417 MHz [2] (20.0 dBm) 24 | * 2422 MHz [3] (20.0 dBm) 25 | * 2427 MHz [4] (20.0 dBm) 26 | * 2432 MHz [5] (20.0 dBm) 27 | * 2437 MHz [6] (20.0 dBm) 28 | * 2442 MHz [7] (20.0 dBm) 29 | * 2447 MHz [8] (20.0 dBm) 30 | * 2452 MHz [9] (20.0 dBm) 31 | * 2457 MHz [10] (20.0 dBm) 32 | * 2462 MHz [11] (20.0 dBm) 33 | * 2467 MHz [12] (20.0 dBm) 34 | * 2472 MHz [13] (20.0 dBm) 35 | * 2484 MHz [14] (disabled) 36 | Bitrates: 37 | * 1.0 Mbps 38 | * 2.0 Mbps (short preamble supported) 39 | * 5.5 Mbps (short preamble supported) 40 | * 11.0 Mbps (short preamble supported) 41 | * 6.0 Mbps 42 | * 9.0 Mbps 43 | * 12.0 Mbps 44 | * 18.0 Mbps 45 | * 24.0 Mbps 46 | * 36.0 Mbps 47 | * 48.0 Mbps 48 | * 54.0 Mbps 49 | max # scan SSIDs: 4 50 | Supported interface modes: 51 | * IBSS 52 | * managed 53 | * AP 54 | * AP/VLAN 55 | * monitor 56 | * mesh point 57 | 58 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v3detailed/lspci.txt: -------------------------------------------------------------------------------- 1 | 03:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01) 2 | Subsystem: Device 1a3b:1089 3 | Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- 4 | Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 26 | Capabilities: [140] Virtual Channel 27 | Capabilities: [160] Device Serial Number 12-14-24-ff-ff-17-15-00 28 | Capabilities: [170] Power Budgeting 29 | Kernel driver in use: ath9k 30 | Kernel modules: ath9k 31 | 32 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/01.txt: -------------------------------------------------------------------------------- 1 | 0000004A: 04 00 2 | 00000052: 02 00 3 | 0000005B: 44 B4 4 | 0000005D: 93 63 5 | 0000007B: 1C 20 6 | 0000007C: 1C 20 7 | 0000007D: 30 2F 8 | 0000007E: 39 36 9 | 0000007F: 4C 46 10 | 00000080: 41 3D 11 | 00000081: 4D 48 12 | 00000082: 58 52 13 | 00000083: 64 5F 14 | 00000084: 6D 6C 15 | 00000085: 0E 09 16 | 00000086: 0F 0A 17 | 00000087: 20 15 18 | 00000088: 31 1F 19 | 00000089: 62 42 20 | 0000008A: 12 0D 21 | 0000008B: 1C 14 22 | 0000008C: 29 1D 23 | 0000008D: 40 30 24 | 0000008E: 57 4B 25 | 0000008F: 1B 20 26 | 00000090: 1B 20 27 | 00000091: 2F 30 28 | 00000092: 38 37 29 | 00000093: 4A 47 30 | 00000094: 40 3D 31 | 00000095: 4C 49 32 | 00000096: 57 53 33 | 00000097: 64 5F 34 | 00000098: 6E 6B 35 | 00000099: 0E 0B 36 | 0000009A: 0D 0A 37 | 0000009B: 1F 19 38 | 0000009C: 2E 26 39 | 0000009D: 5C 4F 40 | 0000009E: 12 0E 41 | 0000009F: 1B 17 42 | 000000A0: 27 22 43 | 000000A1: 3E 36 44 | 000000A2: 59 51 45 | 000000A3: 1A 21 46 | 000000A4: 1A 21 47 | 000000A5: 2D 30 48 | 000000A7: 49 47 49 | 000000A8: 3F 3E 50 | 000000A9: 4B 49 51 | 000000AA: 56 53 52 | 000000AB: 63 61 53 | 000000AC: 6F 6E 54 | 000000AD: 0D 08 55 | 000000AE: 0C 08 56 | 000000AF: 1D 14 57 | 000000B0: 2B 1E 58 | 000000B1: 56 41 59 | 000000B2: 10 0B 60 | 000000B3: 18 12 61 | 000000B4: 26 1C 62 | 000000B5: 3A 2E 63 | 000000B6: 5B 49 64 | 000000C9: 22 20 65 | 000000CA: 20 1E 66 | 000000CE: 22 20 67 | 000000CF: 20 1E 68 | 000000D3: 22 20 69 | 000000D4: 20 1E 70 | 0000010D: 41 15 71 | 0000010E: 42 17 72 | 0000010F: 31 41 73 | 00000110: 32 42 74 | 00000111: 00 45 75 | 00000112: 00 47 76 | 00000113: 00 31 77 | 00000114: 00 32 78 | 00000115: 00 35 79 | 00000116: 00 37 80 | 00000128: 22 1A 81 | 0000012A: 62 60 82 | 0000012B: AC 9D 83 | 0000012C: 22 60 84 | 0000012D: B8 A2 85 | 0000012E: 22 1C 86 | 0000012F: 70 7A 87 | 00000130: 22 13 88 | 00000131: 75 7F 89 | 00000132: 62 5B 90 | 00000133: AC 93 91 | 00000134: 22 1B 92 | 00000135: 00 98 93 | 00000136: 00 13 94 | 00000138: 1C 22 95 | 0000013A: 5D 62 96 | 0000013C: 1C 22 97 | 0000013D: 00 B8 98 | 0000013E: 00 22 99 | 00000140: 1C 22 100 | 00000142: 5E 62 101 | 00000144: 1C 22 102 | 00000147: 00 70 103 | 00000148: 00 22 104 | 00000149: 00 75 105 | 0000014A: 00 62 106 | 0000014B: 00 AC 107 | 0000014C: 00 22 108 | 0000014F: 00 7A 109 | 00000150: 00 1C 110 | 00000151: 00 7F 111 | 00000152: 00 5C 112 | 00000153: 00 93 113 | 00000154: 00 5C 114 | 00000155: 00 A2 115 | 00000156: 00 1C 116 | 00000157: 00 70 117 | 00000158: 00 1C 118 | 00000159: 00 75 119 | 0000015A: 00 5D 120 | 0000015B: 00 AC 121 | 0000015C: 00 1C 122 | 0000015F: 00 70 123 | 00000160: 00 1C 124 | 00000161: 00 75 125 | 00000162: 00 5E 126 | 00000163: 00 AC 127 | 00000164: 00 1C 128 | 00000167: 00 70 129 | 00000168: 00 1C 130 | 00000169: 00 75 131 | 0000016A: 00 5E 132 | 0000016B: 00 AC 133 | 0000016C: 00 1C 134 | 0000016F: 00 7A 135 | 00000170: 00 1C 136 | 00000171: 00 7F 137 | 00000172: 00 5C 138 | 00000173: 00 93 139 | 00000174: 00 5C 140 | 00000175: 00 A2 141 | 00000176: 00 1C 142 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/02.txt: -------------------------------------------------------------------------------- 1 | 0000004A: 04 00 2 | 00000052: 02 00 3 | 0000005B: 44 B4 4 | 0000005D: 93 63 5 | 0000007B: 1C 18 6 | 0000007C: 1C 17 7 | 0000007D: 30 2D 8 | 0000007E: 39 37 9 | 0000007F: 4C 4A 10 | 00000080: 41 3E 11 | 00000082: 58 57 12 | 00000083: 64 63 13 | 00000084: 6D 6F 14 | 00000085: 0E 08 15 | 00000086: 0F 08 16 | 00000087: 20 17 17 | 00000088: 31 26 18 | 00000089: 62 50 19 | 0000008A: 12 0C 20 | 0000008B: 1C 17 21 | 0000008C: 29 22 22 | 0000008D: 40 37 23 | 0000008E: 57 50 24 | 0000008F: 1B 18 25 | 00000090: 1B 18 26 | 00000091: 2F 2E 27 | 00000092: 38 36 28 | 00000093: 4A 49 29 | 00000094: 40 3F 30 | 00000096: 57 58 31 | 00000099: 0E 0A 32 | 0000009A: 0D 0B 33 | 0000009B: 1F 19 34 | 0000009C: 2E 26 35 | 0000009D: 5C 4E 36 | 0000009E: 12 0E 37 | 0000009F: 1B 16 38 | 000000A0: 27 23 39 | 000000A1: 3E 37 40 | 000000A2: 59 52 41 | 000000A3: 1A 16 42 | 000000A4: 1A 16 43 | 000000A5: 2D 2B 44 | 000000A6: 37 36 45 | 000000A8: 3F 3C 46 | 000000AB: 63 62 47 | 000000AD: 0D 09 48 | 000000AE: 0C 07 49 | 000000AF: 1D 17 50 | 000000B0: 2B 25 51 | 000000B1: 56 4D 52 | 000000B2: 10 0C 53 | 000000B3: 18 16 54 | 000000B4: 26 21 55 | 000000B5: 3A 36 56 | 000000B6: 5B 54 57 | 000000C9: 22 20 58 | 000000CA: 20 1E 59 | 000000CE: 22 20 60 | 000000CF: 20 1E 61 | 000000D3: 22 20 62 | 000000D4: 20 1E 63 | 0000010D: 41 15 64 | 0000010E: 42 17 65 | 0000010F: 31 41 66 | 00000110: 32 42 67 | 00000111: 00 45 68 | 00000112: 00 47 69 | 00000113: 00 31 70 | 00000114: 00 32 71 | 00000115: 00 35 72 | 00000116: 00 37 73 | 00000128: 22 1A 74 | 0000012A: 62 60 75 | 0000012B: AC 9D 76 | 0000012C: 22 60 77 | 0000012D: B8 A2 78 | 0000012E: 22 1C 79 | 0000012F: 70 7A 80 | 00000130: 22 13 81 | 00000131: 75 7F 82 | 00000132: 62 5B 83 | 00000133: AC 93 84 | 00000134: 22 1B 85 | 00000135: 00 98 86 | 00000136: 00 13 87 | 00000138: 1C 22 88 | 0000013A: 5D 62 89 | 0000013C: 1C 22 90 | 0000013D: 00 B8 91 | 0000013E: 00 22 92 | 00000140: 1C 22 93 | 00000142: 5E 62 94 | 00000144: 1C 22 95 | 00000147: 00 70 96 | 00000148: 00 22 97 | 00000149: 00 75 98 | 0000014A: 00 62 99 | 0000014B: 00 AC 100 | 0000014C: 00 22 101 | 0000014F: 00 7A 102 | 00000150: 00 1C 103 | 00000151: 00 7F 104 | 00000152: 00 5C 105 | 00000153: 00 93 106 | 00000154: 00 5C 107 | 00000155: 00 A2 108 | 00000156: 00 1C 109 | 00000157: 00 70 110 | 00000158: 00 1C 111 | 00000159: 00 75 112 | 0000015A: 00 5D 113 | 0000015B: 00 AC 114 | 0000015C: 00 1C 115 | 0000015F: 00 70 116 | 00000160: 00 1C 117 | 00000161: 00 75 118 | 00000162: 00 5E 119 | 00000163: 00 AC 120 | 00000164: 00 1C 121 | 00000167: 00 70 122 | 00000168: 00 1C 123 | 00000169: 00 75 124 | 0000016A: 00 5E 125 | 0000016B: 00 AC 126 | 0000016C: 00 1C 127 | 0000016F: 00 7A 128 | 00000170: 00 1C 129 | 00000171: 00 7F 130 | 00000172: 00 5C 131 | 00000173: 00 93 132 | 00000174: 00 5C 133 | 00000175: 00 A2 134 | 00000176: 00 1C 135 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/03.txt: -------------------------------------------------------------------------------- 1 | 0000004A: 04 00 2 | 00000052: 02 00 3 | 0000005B: 44 B4 4 | 0000005D: 93 63 5 | 0000007B: 1C 19 6 | 0000007C: 1C 19 7 | 0000007D: 30 2E 8 | 0000007E: 39 37 9 | 0000007F: 4C 4A 10 | 00000080: 41 40 11 | 00000081: 4D 4C 12 | 00000084: 6D 6E 13 | 00000085: 0E 0B 14 | 00000086: 0F 0C 15 | 00000087: 20 1A 16 | 00000088: 31 26 17 | 00000089: 62 51 18 | 0000008A: 12 0E 19 | 0000008B: 1C 18 20 | 0000008C: 29 24 21 | 0000008D: 40 37 22 | 0000008E: 57 4E 23 | 0000008F: 1B 1A 24 | 00000090: 1B 1A 25 | 00000096: 57 5A 26 | 00000097: 64 65 27 | 00000099: 0E 0C 28 | 0000009A: 0D 0B 29 | 0000009B: 1F 1C 30 | 0000009C: 2E 28 31 | 0000009D: 5C 53 32 | 0000009E: 12 0F 33 | 0000009F: 1B 18 34 | 000000A0: 27 25 35 | 000000A1: 3E 3A 36 | 000000A2: 59 4E 37 | 000000A3: 1A 1B 38 | 000000A4: 1A 1B 39 | 000000A5: 2D 2F 40 | 000000A6: 37 38 41 | 000000A7: 49 4B 42 | 000000A8: 3F 40 43 | 000000A9: 4B 4D 44 | 000000AA: 56 59 45 | 000000AB: 63 65 46 | 000000AC: 6F 6D 47 | 000000AD: 0D 0B 48 | 000000AF: 1D 1C 49 | 000000B0: 2B 29 50 | 000000B1: 56 54 51 | 000000B2: 10 0F 52 | 000000B4: 26 27 53 | 000000B6: 5B 4F 54 | 000000C9: 22 20 55 | 000000CA: 20 1E 56 | 000000CE: 22 20 57 | 000000CF: 20 1E 58 | 000000D3: 22 20 59 | 000000D4: 20 1E 60 | 0000010D: 41 15 61 | 0000010E: 42 17 62 | 0000010F: 31 41 63 | 00000110: 32 42 64 | 00000111: 00 45 65 | 00000112: 00 47 66 | 00000113: 00 31 67 | 00000114: 00 32 68 | 00000115: 00 35 69 | 00000116: 00 37 70 | 00000128: 22 1A 71 | 0000012A: 62 60 72 | 0000012B: AC 9D 73 | 0000012C: 22 60 74 | 0000012D: B8 A2 75 | 0000012E: 22 1C 76 | 0000012F: 70 7A 77 | 00000130: 22 13 78 | 00000131: 75 7F 79 | 00000132: 62 5B 80 | 00000133: AC 93 81 | 00000134: 22 1B 82 | 00000135: 00 98 83 | 00000136: 00 13 84 | 00000138: 1C 22 85 | 0000013A: 5D 62 86 | 0000013C: 1C 22 87 | 0000013D: 00 B8 88 | 0000013E: 00 22 89 | 00000140: 1C 22 90 | 00000142: 5E 62 91 | 00000144: 1C 22 92 | 00000147: 00 70 93 | 00000148: 00 22 94 | 00000149: 00 75 95 | 0000014A: 00 62 96 | 0000014B: 00 AC 97 | 0000014C: 00 22 98 | 0000014F: 00 7A 99 | 00000150: 00 1C 100 | 00000151: 00 7F 101 | 00000152: 00 5C 102 | 00000153: 00 93 103 | 00000154: 00 5C 104 | 00000155: 00 A2 105 | 00000156: 00 1C 106 | 00000157: 00 70 107 | 00000158: 00 1C 108 | 00000159: 00 75 109 | 0000015A: 00 5D 110 | 0000015B: 00 AC 111 | 0000015C: 00 1C 112 | 0000015F: 00 70 113 | 00000160: 00 1C 114 | 00000161: 00 75 115 | 00000162: 00 5E 116 | 00000163: 00 AC 117 | 00000164: 00 1C 118 | 00000167: 00 70 119 | 00000168: 00 1C 120 | 00000169: 00 75 121 | 0000016A: 00 5E 122 | 0000016B: 00 AC 123 | 0000016C: 00 1C 124 | 0000016F: 00 7A 125 | 00000170: 00 1C 126 | 00000171: 00 7F 127 | 00000172: 00 5C 128 | 00000173: 00 93 129 | 00000174: 00 5C 130 | 00000175: 00 A2 131 | 00000176: 00 1C 132 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/04.txt: -------------------------------------------------------------------------------- 1 | 0000004A: 04 00 2 | 00000052: 02 00 3 | 0000005B: 44 B4 4 | 0000005D: 93 63 5 | 0000007C: 1C 1B 6 | 0000007D: 30 24 7 | 0000007E: 39 35 8 | 0000007F: 4C 49 9 | 00000080: 41 3F 10 | 00000081: 4D 4A 11 | 00000082: 58 56 12 | 00000084: 6D 69 13 | 00000085: 0E 0F 14 | 00000087: 20 17 15 | 00000089: 62 68 16 | 0000008A: 12 14 17 | 0000008B: 1C 1D 18 | 0000008C: 29 2D 19 | 0000008D: 40 49 20 | 0000008E: 57 56 21 | 0000008F: 1B 1C 22 | 00000090: 1B 1C 23 | 00000091: 2F 25 24 | 00000092: 38 36 25 | 00000093: 4A 49 26 | 00000095: 4C 4B 27 | 00000098: 6E 6A 28 | 00000099: 0E 0F 29 | 0000009A: 0D 10 30 | 0000009B: 1F 17 31 | 0000009C: 2E 33 32 | 0000009D: 5C 6A 33 | 0000009E: 12 14 34 | 0000009F: 1B 1F 35 | 000000A0: 27 2F 36 | 000000A1: 3E 4B 37 | 000000A2: 59 5A 38 | 000000A3: 1A 1C 39 | 000000A4: 1A 1C 40 | 000000A5: 2D 25 41 | 000000A6: 37 36 42 | 000000A8: 3F 40 43 | 000000AA: 56 57 44 | 000000AB: 63 64 45 | 000000AC: 6F 69 46 | 000000AD: 0D 10 47 | 000000AE: 0C 0F 48 | 000000AF: 1D 18 49 | 000000B0: 2B 33 50 | 000000B1: 56 6C 51 | 000000B2: 10 14 52 | 000000B3: 18 1F 53 | 000000B4: 26 2F 54 | 000000B5: 3A 4B 55 | 000000C9: 22 20 56 | 000000CA: 20 1E 57 | 000000CE: 22 20 58 | 000000CF: 20 1E 59 | 000000D3: 22 20 60 | 000000D4: 20 1E 61 | 0000010D: 41 15 62 | 0000010E: 42 17 63 | 0000010F: 31 41 64 | 00000110: 32 42 65 | 00000111: 00 45 66 | 00000112: 00 47 67 | 00000113: 00 31 68 | 00000114: 00 32 69 | 00000115: 00 35 70 | 00000116: 00 37 71 | 00000128: 22 1A 72 | 0000012A: 62 60 73 | 0000012B: AC 9D 74 | 0000012C: 22 60 75 | 0000012D: B8 A2 76 | 0000012E: 22 1C 77 | 0000012F: 70 7A 78 | 00000130: 22 13 79 | 00000131: 75 7F 80 | 00000132: 62 5B 81 | 00000133: AC 93 82 | 00000134: 22 1B 83 | 00000135: 00 98 84 | 00000136: 00 13 85 | 00000138: 1C 22 86 | 0000013A: 5D 62 87 | 0000013C: 1C 22 88 | 0000013D: 00 B8 89 | 0000013E: 00 22 90 | 00000140: 1C 22 91 | 00000142: 5E 62 92 | 00000144: 1C 22 93 | 00000147: 00 70 94 | 00000148: 00 22 95 | 00000149: 00 75 96 | 0000014A: 00 62 97 | 0000014B: 00 AC 98 | 0000014C: 00 22 99 | 0000014F: 00 7A 100 | 00000150: 00 1C 101 | 00000151: 00 7F 102 | 00000152: 00 5C 103 | 00000153: 00 93 104 | 00000154: 00 5C 105 | 00000155: 00 A2 106 | 00000156: 00 1C 107 | 00000157: 00 70 108 | 00000158: 00 1C 109 | 00000159: 00 75 110 | 0000015A: 00 5D 111 | 0000015B: 00 AC 112 | 0000015C: 00 1C 113 | 0000015F: 00 70 114 | 00000160: 00 1C 115 | 00000161: 00 75 116 | 00000162: 00 5E 117 | 00000163: 00 AC 118 | 00000164: 00 1C 119 | 00000167: 00 70 120 | 00000168: 00 1C 121 | 00000169: 00 75 122 | 0000016A: 00 5E 123 | 0000016B: 00 AC 124 | 0000016C: 00 1C 125 | 0000016F: 00 7A 126 | 00000170: 00 1C 127 | 00000171: 00 7F 128 | 00000172: 00 5C 129 | 00000173: 00 93 130 | 00000174: 00 5C 131 | 00000175: 00 A2 132 | 00000176: 00 1C 133 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/34.txt: -------------------------------------------------------------------------------- 1 | 0000007B: 19 1C 2 | 0000007C: 19 1B 3 | 0000007D: 2E 24 4 | 0000007E: 37 35 5 | 0000007F: 4A 49 6 | 00000080: 40 3F 7 | 00000081: 4C 4A 8 | 00000082: 58 56 9 | 00000084: 6E 69 10 | 00000085: 0B 0F 11 | 00000086: 0C 0F 12 | 00000087: 1A 17 13 | 00000088: 26 31 14 | 00000089: 51 68 15 | 0000008A: 0E 14 16 | 0000008B: 18 1D 17 | 0000008C: 24 2D 18 | 0000008D: 37 49 19 | 0000008E: 4E 56 20 | 0000008F: 1A 1C 21 | 00000090: 1A 1C 22 | 00000091: 2F 25 23 | 00000092: 38 36 24 | 00000093: 4A 49 25 | 00000095: 4C 4B 26 | 00000096: 5A 57 27 | 00000097: 65 64 28 | 00000098: 6E 6A 29 | 00000099: 0C 0F 30 | 0000009A: 0B 10 31 | 0000009B: 1C 17 32 | 0000009C: 28 33 33 | 0000009D: 53 6A 34 | 0000009E: 0F 14 35 | 0000009F: 18 1F 36 | 000000A0: 25 2F 37 | 000000A1: 3A 4B 38 | 000000A2: 4E 5A 39 | 000000A3: 1B 1C 40 | 000000A4: 1B 1C 41 | 000000A5: 2F 25 42 | 000000A6: 38 36 43 | 000000A7: 4B 49 44 | 000000A9: 4D 4B 45 | 000000AA: 59 57 46 | 000000AB: 65 64 47 | 000000AC: 6D 69 48 | 000000AD: 0B 10 49 | 000000AE: 0C 0F 50 | 000000AF: 1C 18 51 | 000000B0: 29 33 52 | 000000B1: 54 6C 53 | 000000B2: 0F 14 54 | 000000B3: 18 1F 55 | 000000B4: 27 2F 56 | 000000B5: 3A 4B 57 | 000000B6: 4F 5B 58 | -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/DEV_002B&SUBSYS_E016105B.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v4/DEV_002B&SUBSYS_E016105B.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/eeprom 9285 pwr2.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v4/eeprom 9285 pwr2.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/eeprom 9285.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v4/eeprom 9285.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/small_2427.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v4/small_2427.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/eeproms/v4/small_5B95.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/eeproms/v4/small_5B95.rom -------------------------------------------------------------------------------- /aet_rw512_AnV/ipch/atheros_eeprom_tool-26a6c706/atheros_eeprom_tool-cb5a76a0.ipch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/aet_rw512_AnV/ipch/atheros_eeprom_tool-26a6c706/atheros_eeprom_tool-cb5a76a0.ipch -------------------------------------------------------------------------------- /atheros_eeprom_tool-WIN8.1/ath32.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/atheros_eeprom_tool-WIN8.1/ath32.sys -------------------------------------------------------------------------------- /atheros_eeprom_tool-WIN8.1/ath64.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/atheros_eeprom_tool-WIN8.1/ath64.sys -------------------------------------------------------------------------------- /atheros_eeprom_tool-WIN8.1/atheros_eeprom_tool32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/atheros_eeprom_tool-WIN8.1/atheros_eeprom_tool32.exe -------------------------------------------------------------------------------- /atheros_eeprom_tool-WIN8.1/atheros_eeprom_tool64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/atheros_eeprom_tool-WIN8.1/atheros_eeprom_tool64.exe -------------------------------------------------------------------------------- /atheros_eeprom_tool-WIN8.1/dseo13b.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/atheros_eeprom_tool-WIN8.1/dseo13b.exe -------------------------------------------------------------------------------- /dumpathrom/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/.DS_Store -------------------------------------------------------------------------------- /dumpathrom/Makefile: -------------------------------------------------------------------------------- 1 | CC=gcc 2 | LD=gcc 3 | CFLAGS=-O2 4 | LDFLAGS=-O2 5 | 6 | .c.o: 7 | $(CC) $(CFLAGS) -c $< -o $@ 8 | 9 | all: dumpathrom 10 | 11 | dumpathrom: dumpathrom.o 12 | $(LD) $(LDFLAGS) -o $@ $< 13 | 14 | -------------------------------------------------------------------------------- /dumpathrom/ROM_AR9285_HighPower.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/ROM_AR9285_HighPower.rom -------------------------------------------------------------------------------- /dumpathrom/dumpathrom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/dumpathrom -------------------------------------------------------------------------------- /dumpathrom/dumpathrom.c: -------------------------------------------------------------------------------- 1 | /* Atheros ROM information dump tool */ 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #ifdef __APPLE__ 9 | #include 10 | #endif 11 | 12 | #include "eeprom.h" 13 | 14 | static void ath9k_dump_4k_modal_eeprom(struct modal_eep_4k_header *modal_hdr) 15 | { 16 | PR_EEP("Chain0 Ant. Control", modal_hdr->antCtrlChain[0]); 17 | PR_EEP("Ant. Common Control", modal_hdr->antCtrlCommon); 18 | PR_EEP("Chain0 Ant. Gain", modal_hdr->antennaGainCh[0]); 19 | PR_EEP("Switch Settle", modal_hdr->switchSettling); 20 | PR_EEP("Chain0 TxRxAtten", modal_hdr->txRxAttenCh[0]); 21 | PR_EEP("Chain0 RxTxMargin", modal_hdr->rxTxMarginCh[0]); 22 | PR_EEP("ADC Desired size", modal_hdr->adcDesiredSize); 23 | PR_EEP("PGA Desired size", modal_hdr->pgaDesiredSize); 24 | PR_EEP("Chain0 xlna Gain", modal_hdr->xlnaGainCh[0]); 25 | PR_EEP("txEndToXpaOff", modal_hdr->txEndToXpaOff); 26 | PR_EEP("txEndToRxOn", modal_hdr->txEndToRxOn); 27 | PR_EEP("txFrameToXpaOn", modal_hdr->txFrameToXpaOn); 28 | PR_EEP("CCA Threshold)", modal_hdr->thresh62); 29 | PR_EEP("Chain0 NF Threshold", modal_hdr->noiseFloorThreshCh[0]); 30 | PR_EEP("xpdGain", modal_hdr->xpdGain); 31 | PR_EEP("External PD", modal_hdr->xpd); 32 | PR_EEP("Chain0 I Coefficient", modal_hdr->iqCalICh[0]); 33 | PR_EEP("Chain0 Q Coefficient", modal_hdr->iqCalQCh[0]); 34 | PR_EEP("pdGainOverlap", modal_hdr->pdGainOverlap); 35 | PR_EEP("O/D Bias Version", modal_hdr->version); 36 | PR_EEPS("CCK OutputBias", modal_hdr->ob_0, 1); 37 | PR_EEPS("BPSK OutputBias", modal_hdr->ob_1, 1); 38 | PR_EEPS("QPSK OutputBias", modal_hdr->ob_2, 1); 39 | PR_EEPS("16QAM OutputBias", modal_hdr->ob_3, 1); 40 | PR_EEPS("64QAM OutputBias", modal_hdr->ob_4, 1); 41 | PR_EEPS("CCK Driver1_Bias", modal_hdr->db1_0, 1); 42 | PR_EEPS("BPSK Driver1_Bias", modal_hdr->db1_1, 1); 43 | PR_EEPS("QPSK Driver1_Bias", modal_hdr->db1_2, 1); 44 | PR_EEPS("16QAM Driver1_Bias", modal_hdr->db1_3, 1); 45 | PR_EEPS("64QAM Driver1_Bias", modal_hdr->db1_4, 1); 46 | PR_EEPS("CCK Driver2_Bias", modal_hdr->db2_0, 1); 47 | PR_EEPS("BPSK Driver2_Bias", modal_hdr->db2_1, 1); 48 | PR_EEPS("QPSK Driver2_Bias", modal_hdr->db2_2, 1); 49 | PR_EEPS("16QAM Driver2_Bias", modal_hdr->db2_3, 1); 50 | PR_EEPS("64QAM Driver2_Bias", modal_hdr->db2_4, 1); 51 | PR_EEP("xPA Bias Level", modal_hdr->xpaBiasLvl); 52 | PR_EEP("txFrameToDataStart", modal_hdr->txFrameToDataStart); 53 | PR_EEP("txFrameToPaOn", modal_hdr->txFrameToPaOn); 54 | PR_EEP("HT40 Power Inc.", modal_hdr->ht40PowerIncForPdadc); 55 | PR_EEP("Chain0 bswAtten", modal_hdr->bswAtten[0]); 56 | PR_EEP("Chain0 bswMargin", modal_hdr->bswMargin[0]); 57 | PR_EEP("HT40 Switch Settle", modal_hdr->swSettleHt40); 58 | PR_EEP("Chain0 xatten2Db", modal_hdr->xatten2Db[0]); 59 | PR_EEP("Chain0 xatten2Margin", modal_hdr->xatten2Margin[0]); 60 | PR_EEPS("Ant. Diversity ctl1", modal_hdr->antdiv_ctl1, 1); 61 | PR_EEPS("Ant. Diversity ctl2", modal_hdr->antdiv_ctl2, 1); 62 | PR_EEP("TX Diversity", modal_hdr->tx_diversity); 63 | } 64 | 65 | static bool valid_eeprom_chksum(u16 *eepdata) 66 | { 67 | u16 sum = 0; 68 | int i = 0; 69 | 70 | for (i=0; i < EEPROM_4K_SIZE; i++) 71 | { 72 | sum ^= eepdata[i]; 73 | } 74 | 75 | if (sum == 0xFFFF) 76 | { 77 | return true; 78 | } 79 | 80 | return false; 81 | } 82 | 83 | static u16 calc_eeprom_chksum(u16 *eepdata) 84 | { 85 | u16 correctsum = 0; 86 | int i = 0; 87 | 88 | for (i=0; i < EEPROM_4K_SIZE; i++) 89 | { 90 | if (i == 1) 91 | continue; 92 | 93 | correctsum ^= eepdata[i]; 94 | } 95 | 96 | correctsum ^= 0xFFFF; 97 | 98 | return correctsum; 99 | } 100 | 101 | static void change_eeprom_endianness(struct ar5416_eeprom_4k *eep) 102 | { 103 | u32 integer = 0; 104 | u16 word = 0; 105 | int i = 0; 106 | 107 | word = swab16(eep->baseEepHeader.length); 108 | eep->baseEepHeader.length = word; 109 | 110 | word = swab16(eep->baseEepHeader.checksum); 111 | eep->baseEepHeader.checksum = word; 112 | 113 | word = swab16(eep->baseEepHeader.version); 114 | eep->baseEepHeader.version = word; 115 | 116 | word = swab16(eep->baseEepHeader.regDmn[0]); 117 | eep->baseEepHeader.regDmn[0] = word; 118 | 119 | word = swab16(eep->baseEepHeader.regDmn[1]); 120 | eep->baseEepHeader.regDmn[1] = word; 121 | 122 | word = swab16(eep->baseEepHeader.rfSilent); 123 | eep->baseEepHeader.rfSilent = word; 124 | 125 | word = swab16(eep->baseEepHeader.blueToothOptions); 126 | eep->baseEepHeader.blueToothOptions = word; 127 | 128 | word = swab16(eep->baseEepHeader.deviceCap); 129 | eep->baseEepHeader.deviceCap = word; 130 | 131 | integer = swab32(eep->modalHeader.antCtrlCommon); 132 | eep->modalHeader.antCtrlCommon = integer; 133 | 134 | for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++) 135 | { 136 | integer = swab32(eep->modalHeader.antCtrlChain[i]); 137 | eep->modalHeader.antCtrlChain[i] = integer; 138 | } 139 | 140 | for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) 141 | { 142 | word = swab16(eep->modalHeader.spurChans[i].spurChan); 143 | eep->modalHeader.spurChans[i].spurChan = word; 144 | } 145 | } 146 | 147 | static void ath9k_hw_4k_dump_eeprom(struct ar5416_eeprom_4k *eep) 148 | { 149 | struct base_eep_header_4k *pBase = &eep->baseEepHeader; 150 | u16 *eepdata = (u16 *)eep; 151 | u32 correctsum = calc_eeprom_chksum(eepdata); 152 | int i=0; 153 | 154 | #ifdef __BIG_ENDIAN__ 155 | if ((pBase->eepMisc & 0x1) != 0x1) 156 | { 157 | printf("INFO: ROM Endianness is not native... Changing from Little Endian to Big Endian.\n"); 158 | 159 | change_eeprom_endianness(eep); 160 | } 161 | #else 162 | if ((pBase->eepMisc & 0x1) == 0x1) 163 | { 164 | printf("INFO: ROM Endianness is not native... Changing from Big Endian to Little Endian.\n"); 165 | 166 | change_eeprom_endianness(eep); 167 | } 168 | #endif 169 | 170 | printf("\n"); 171 | 172 | printf("-Version: 0x%.4x\n", pBase->version); 173 | PR_EEP(" Major Version", pBase->version >> 12); 174 | PR_EEP(" Minor Version", pBase->version & 0xFFF); 175 | printf("\n"); 176 | 177 | printf("-Checksum: 0x%.4x\n", pBase->checksum); 178 | printf(" Correct Checksum: 0x%.4x\n", correctsum); 179 | if (pBase->checksum != correctsum) 180 | { 181 | printf(" WARNING: Invalid checksum... you need to correct it to the checkum above!\n"); 182 | } 183 | printf("\n"); 184 | 185 | PR_EEP("-Length", pBase->length); 186 | printf("\n"); 187 | 188 | printf("-RegDomain: 0x%.4x\n", *(unsigned int *)pBase->regDmn); 189 | PR_EEP(" RegDomain1", pBase->regDmn[0]); 190 | PR_EEP(" RegDomain2", pBase->regDmn[1]); 191 | printf("\n"); 192 | 193 | printf("-Mac Address: "); 194 | for (i=0; i < 6; i++) 195 | { 196 | printf("%.2x", pBase->macAddr[i]); 197 | 198 | if (i < 5) 199 | { 200 | printf(":"); 201 | } 202 | } 203 | printf("\n\n"); 204 | 205 | printf("-RX/TX Masks\n"); 206 | PR_EEP(" TX Mask", pBase->txMask); 207 | PR_EEP(" RX Mask", pBase->rxMask); 208 | printf("\n"); 209 | 210 | printf("-Options Capapable: 0x%.2x\n", pBase->opCapFlags); 211 | PR_EEP(" Allow 5GHz", !!(pBase->opCapFlags & AR5416_OPFLAGS_11A)); 212 | PR_EEP(" Allow 2.4GHz", !!(pBase->opCapFlags & AR5416_OPFLAGS_11G)); 213 | PR_EEP(" Disable 2.4GHz HT20 (802.11n - 20MHz)", !!(pBase->opCapFlags & 214 | AR5416_OPFLAGS_N_2G_HT20)); 215 | PR_EEP(" Disable 2.4GHz HT40 (802.11n - 40MHz)", !!(pBase->opCapFlags & 216 | AR5416_OPFLAGS_N_2G_HT40)); 217 | PR_EEP(" Disable 5Ghz HT20 (802.11n - 20MHz)", !!(pBase->opCapFlags & 218 | AR5416_OPFLAGS_N_5G_HT20)); 219 | PR_EEP(" Disable 5Ghz HT40 (802.11n - 40MHz)", !!(pBase->opCapFlags & 220 | AR5416_OPFLAGS_N_5G_HT40)); 221 | printf("\n"); 222 | 223 | PR_EEP("-Endiannes", !!(pBase->eepMisc & 0x01)); 224 | if (pBase->eepMisc & 0x01) 225 | { 226 | printf(" Big Endian (MSB first, example: 17 = 0x00000011)\n"); 227 | } else { 228 | printf(" Little Endian (LSB first, example: 17 = 0x1100000000)\n"); 229 | } 230 | printf("\n"); 231 | 232 | printf("-Cal Bin: 0x%.8x\n", pBase->binBuildNumber); 233 | PR_EEP(" Cal Bin Major Ver", (pBase->binBuildNumber >> 24) & 0xFF); 234 | PR_EEP(" Cal Bin Minor Ver", (pBase->binBuildNumber >> 16) & 0xFF); 235 | PR_EEP(" Cal Bin Build", (pBase->binBuildNumber >> 8) & 0xFF); 236 | printf("\n"); 237 | 238 | PR_EEP("-TX Gain type", pBase->txGainType); 239 | printf("\n"); 240 | 241 | printf("<2GHz modal Header>\n"); 242 | ath9k_dump_4k_modal_eeprom(&eep->modalHeader); 243 | } 244 | 245 | int main(int argc, char **argv) 246 | { 247 | FILE *f = NULL; 248 | struct ar5416_eeprom_4k *romdata; 249 | unsigned char *buffer = NULL; 250 | int fSize = 0; 251 | int newsize = 0; 252 | 253 | if ((argc != 2) || (!strncmp(argv[1], "--help", strlen(argv[1]))) || (!strncmp(argv[1], "-h", strlen(argv[1])))) 254 | { 255 | printf("AnV Atheros ROM Tool V1.0 (AR928X/AR9285 edition)\n"); 256 | printf("Usage: %s \n\n", argv[0]); 257 | printf("Copyright (C) 2014 AnV Software, all rights reserved.\n"); 258 | 259 | return 1; 260 | } 261 | 262 | f = fopen(argv[1], "rb"); 263 | 264 | if (f == NULL) 265 | { 266 | printf("ERROR: File open failed!\n"); 267 | 268 | return 2; 269 | } 270 | 271 | fseek(f, 0, SEEK_END); 272 | fSize = ftell(f); 273 | fseek(f, 0, SEEK_SET); 274 | 275 | if ((fSize != 376) && (fSize != 512) && (fSize != 4096)) 276 | { 277 | fclose(f); 278 | 279 | printf("ERROR: Invalid size, %d is not 376, 512 or 4096!\n", fSize); 280 | 281 | return 3; 282 | } 283 | 284 | buffer = malloc(fSize); 285 | 286 | if (buffer == NULL) 287 | { 288 | fclose(f); 289 | 290 | printf("ERROR: Memory allocation of %d bytes failed!\n", fSize); 291 | 292 | return 4; 293 | } 294 | 295 | newsize = fread(buffer, 1, fSize, f); 296 | 297 | if (fSize != newsize) 298 | { 299 | fclose(f); 300 | free(buffer); 301 | 302 | printf("ERROR: Reading file \"%s\" into buffer (%d bytes total, %d bytes read) failed!\n", argv[1], fSize, newsize); 303 | 304 | return 5; 305 | } 306 | 307 | fclose(f); 308 | 309 | switch(fSize) 310 | { 311 | case 376: 312 | romdata = (struct ar5416_eeprom_4k *)buffer; 313 | break; 314 | 315 | case 512: 316 | case 4096: 317 | romdata = (struct ar5416_eeprom_4k *)(buffer + 128); 318 | break; 319 | 320 | default: 321 | free(buffer); 322 | 323 | printf("ERROR: Internal error... invalid size (%d)!\n", fSize); 324 | 325 | return 6; 326 | 327 | /* NOT_REACHED */ 328 | break; 329 | } 330 | 331 | ath9k_hw_4k_dump_eeprom(romdata); 332 | 333 | free(buffer); 334 | 335 | return 0; 336 | } 337 | -------------------------------------------------------------------------------- /dumpathrom/dumpathrom.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/dumpathrom.obj -------------------------------------------------------------------------------- /dumpathrom/dumpathrom32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/dumpathrom32.exe -------------------------------------------------------------------------------- /dumpathrom/dumpathrom64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/dumpathrom/dumpathrom64.exe -------------------------------------------------------------------------------- /iwleeprom/.svn/entries: -------------------------------------------------------------------------------- 1 | 12 2 | -------------------------------------------------------------------------------- /iwleeprom/.svn/format: -------------------------------------------------------------------------------- 1 | 12 2 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/14/1444865d1cbedff98a9c27eb92375139027f8851.svn-base: -------------------------------------------------------------------------------- 1 | .\" iwleeprom is released under the GNU GENERAL PUBLIC LICENSE. 2 | .TH "iwleeprom" "8" "03 November, 2010" "ittrium, ShultZ" "iwleeprom 0.0" 3 | .SH "NAME" 4 | iwleeprom \- EEPROM reader/writer for intel wifi cards 5 | .SH "SYNOPSIS" 6 | \fBiwleeprom [-d device [-m] [-c] | -n] [-I] [-i filename] [-o filename [-b]] [-P] [-p] [-D debug_level]\fR 7 | .br 8 | \fBiwleeprom -l\fR 9 | .br 10 | \fBiwleeprom -h\fR 11 | 12 | .SH "FEATURES" 13 | iwleeprom can read/write intel wifi cards EEPROM to/from file. 14 | .TP 15 | Following cards are supported read/write: 16 | .br 17 | 4965AGN 18 | .br 19 | 5100ABG/AGN 20 | .br 21 | 5150AGX/ANX 22 | .br 23 | 5300AGN 24 | .br 25 | 5350ANX 26 | .br 27 | .TP 28 | Following cards are supported read-only: 29 | .br 30 | 1000BG/BGN 31 | .br 32 | 6000 series 33 | .br 34 | .SH "OPTIONS" 35 | .TP 36 | .B \-d \-\-device 37 | PCI device in following format: 38 | .br 39 | .I 0000:00:00.0 40 | (domain:bus:dev.func) 41 | .TP 42 | .B \-n \-\-nodev 43 | don't touch any device, file-only operations 44 | .br 45 | .TP 46 | .B \-m \-\-preserve-mac 47 | don't change card's MAC while writing full eeprom dump 48 | .br 49 | .TP 50 | .B \-c \-\-preserve-calib 51 | don't change card's calibration data while writing full eeprom dump 52 | .br 53 | .TP 54 | .B \-o \-\-ofile 55 | dump eeprom to binary file 56 | .TP 57 | .B \-b \-\-bigendian 58 | set output file byteorder to big-endian (default: little-endian) 59 | .br 60 | use with \fB\-o\fR 61 | .TP 62 | .B \-i \-\-ifile 63 | write eeprom from binary file 64 | dump file byteorder will be autodetected 65 | .TP 66 | .B \-p \-\-patch11n 67 | patch device eeprom to enable 802.11n. 68 | .br 69 | use this option to convert your 5100ABG/5150AGX to 5100AGN/5150ANX respectively 70 | if 802.11n already supported by your card, this will unlock some channels 71 | .TP 72 | .B \-I \-\-init 73 | init device power. 74 | .br 75 | use this option if driver hasn't inited the device (for ex. if it has wrong dev_id or subsys_id) 76 | .TP 77 | .B \-P \-\-parse 78 | parse eeprom (show available modes/channels) 79 | .br 80 | .TP 81 | .B \-D \-\-debug 82 | set debug level (0-1), default 0 83 | .br 84 | .TP 85 | .B \-l \-\-list 86 | list known cards 87 | .br 88 | .TP 89 | .B \-h \-\-help 90 | show help 91 | 92 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/18/1848ca5361b3063571945a8e728f15fd0c187342.svn-base: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #include "iwlio.h" 24 | 25 | #define IWL_EEPROM_SIZE_4965 0x400 26 | #define IWL_EEPROM_SIZE_5K 0x800 27 | 28 | #define IWL_EEPROM_SIGNATURE 0x5a40 29 | #define IWL_MMAP_LENGTH 0x1000 30 | 31 | #define IWL_REG_OFFS_ADDR 0x0CC 32 | #define IWL_CAL_OFFS_ADDR 0x0CE 33 | 34 | 35 | #define CSR_WH_IF_CONFIG_REG 0x000 36 | #define CSR_EEPROM_REG 0x02c 37 | #define CSR_OTP_GP_REG 0x034 38 | 39 | #define CSR_OTP_GP_REG_DEVICE_SELECT 0x00010000 40 | 41 | 42 | #define PARSE_SHOW_CHANNELS 43 | 44 | struct iwl_regulatory_item 45 | { 46 | unsigned int offs; 47 | uint16_t data; 48 | uint16_t chn; 49 | }; 50 | 51 | #define CHN_MASK 0x00FF 52 | #define CHN_HT 0x0100 53 | #define CHN_2G 0x0200 54 | 55 | 56 | 57 | const struct iwl_regulatory_item iwl_regulatory[] = 58 | { 59 | /* 60 | BAND 2.4GHz (@15e-179 with regulatory base @156) 61 | */ 62 | { 0x08, 0x0f6f, 1 | CHN_2G }, 63 | { 0x0A, 0x0f6f, 2 | CHN_2G }, 64 | { 0x0C, 0x0f6f, 3 | CHN_2G }, 65 | { 0x0E, 0x0f6f, 4 | CHN_2G }, 66 | { 0x10, 0x0f6f, 5 | CHN_2G }, 67 | { 0x12, 0x0f6f, 6 | CHN_2G }, 68 | { 0x14, 0x0f6f, 7 | CHN_2G }, 69 | { 0x16, 0x0f6f, 8 | CHN_2G }, 70 | { 0x18, 0x0f6f, 9 | CHN_2G }, 71 | { 0x1A, 0x0f6f, 10 | CHN_2G }, 72 | { 0x1C, 0x0f6f, 11 | CHN_2G }, 73 | 74 | { 0x1E, 0x0f21, 12 | CHN_2G }, 75 | { 0x20, 0x0f21, 13 | CHN_2G }, 76 | { 0x22, 0x0f21, 14 | CHN_2G }, 77 | 78 | /* 79 | BAND 5GHz 80 | */ 81 | // subband 5170-5320 MHz (@198-1af) 82 | // { 0x42, 0x0fe1, 34 }, 83 | { 0x44, 0x0fe1, 36 }, 84 | // { 0x46, 0x0fe1, 38 }, 85 | { 0x48, 0x0fe1, 40 }, 86 | // { 0x4a, 0x0fe1, 42 }, 87 | { 0x4c, 0x0fe1, 44 }, 88 | // { 0x4e, 0x0fe1, 46 }, 89 | { 0x50, 0x0fe1, 48 }, 90 | { 0x52, 0x0f31, 52 }, 91 | { 0x54, 0x0f31, 56 }, 92 | { 0x56, 0x0f31, 60 }, 93 | { 0x58, 0x0f31, 64 }, 94 | 95 | // subband 5500-5700 MHz (@1b2-1c7) 96 | { 0x5c, 0x0f31, 100 }, 97 | { 0x5e, 0x0f31, 104 }, 98 | { 0x60, 0x0f31, 108 }, 99 | { 0x62, 0x0f31, 112 }, 100 | { 0x64, 0x0f31, 116 }, 101 | { 0x66, 0x0f31, 120 }, 102 | { 0x68, 0x0f31, 124 }, 103 | { 0x6a, 0x0f31, 128 }, 104 | { 0x6c, 0x0f31, 132 }, 105 | { 0x6e, 0x0f31, 136 }, 106 | { 0x70, 0x0f31, 140 }, 107 | 108 | // subband 5725-5825 MHz (@1ca-1d5) 109 | // { 0x74, 0x0fa1, 145 }, 110 | { 0x76, 0x0fa1, 149 }, 111 | { 0x78, 0x0fa1, 153 }, 112 | { 0x7a, 0x0fa1, 157 }, 113 | { 0x7c, 0x0fa1, 161 }, 114 | { 0x7e, 0x0fa1, 165 }, 115 | 116 | /* 117 | BAND 2.4GHz, HT40 channels (@1d8-1e5) 118 | */ 119 | { 0x82, 0x0e6f, 1 | CHN_HT | CHN_2G }, 120 | { 0x84, 0x0f6f, 2 | CHN_HT | CHN_2G }, 121 | { 0x86, 0x0f6f, 3 | CHN_HT | CHN_2G }, 122 | { 0x88, 0x0f6f, 4 | CHN_HT | CHN_2G }, 123 | { 0x8a, 0x0f6f, 5 | CHN_HT | CHN_2G }, 124 | { 0x8c, 0x0f6f, 6 | CHN_HT | CHN_2G }, 125 | { 0x8e, 0x0f6f, 7 | CHN_HT | CHN_2G }, 126 | 127 | /* 128 | BAND 5GHz, HT40 channels (@1e8-1fd) 129 | */ 130 | { 0x92, 0x0fe1, 36 | CHN_HT }, 131 | { 0x94, 0x0fe1, 44 | CHN_HT }, 132 | { 0x96, 0x0f31, 52 | CHN_HT }, 133 | { 0x98, 0x0f31, 60 | CHN_HT }, 134 | { 0x9a, 0x0f31, 100 | CHN_HT }, 135 | { 0x9c, 0x0f31, 108 | CHN_HT }, 136 | { 0x9e, 0x0f31, 116 | CHN_HT }, 137 | { 0xa0, 0x0f31, 124 | CHN_HT }, 138 | { 0xa2, 0x0f31, 132 | CHN_HT }, 139 | { 0xa4, 0x0f61, 149 | CHN_HT }, 140 | { 0xa6, 0x0f61, 157 | CHN_HT }, 141 | 142 | { 0, 0} 143 | }; 144 | 145 | 146 | /* Intel 4965 devices */ 147 | const struct pci_id iwl4965_ids[] = { 148 | { INTEL_PCI_VID, 0x4229, "PRO/Wireless 4965 AG or AGN [Kedron] Network Connection"}, 149 | { INTEL_PCI_VID, 0x4230, "PRO/Wireless 4965 AG or AGN [Kedron] Network Connection"}, 150 | 151 | { 0, 0, "" } 152 | }; 153 | 154 | /* Intel 5x00/5x50 devices */ 155 | const struct pci_id iwl5k_ids[] = { 156 | { INTEL_PCI_VID, 0x4232, "WiFi Link 5100"}, 157 | { INTEL_PCI_VID, 0x4235, "Ultimate N WiFi Link 5300"}, 158 | { INTEL_PCI_VID, 0x4236, "Ultimate N WiFi Link 5300"}, 159 | { INTEL_PCI_VID, 0x4237, "PRO/Wireless 5100 AGN [Shiloh] Network Connection"}, 160 | { INTEL_PCI_VID, 0x423a, "PRO/Wireless 5350 AGN [Echo Peak] Network Connection"}, 161 | { INTEL_PCI_VID, 0x423b, "PRO/Wireless 5350 AGN [Echo Peak] Network Connection"}, 162 | { INTEL_PCI_VID, 0x423c, "WiMAX/WiFi Link 5150"}, 163 | { INTEL_PCI_VID, 0x423d, "WiMAX/WiFi Link 5150"}, 164 | 165 | { 0, 0, "" } 166 | }; 167 | 168 | /* Intel 6x00/6x50 devices */ 169 | const struct pci_id iwl6k_ids[] = { 170 | { INTEL_PCI_VID, 0x0082, "6000 Series Gen2"}, 171 | { INTEL_PCI_VID, 0x0083, "Centrino Wireless-N 1000"}, 172 | { INTEL_PCI_VID, 0x0084, "Centrino Wireless-N 1000"}, 173 | { INTEL_PCI_VID, 0x0085, "6000 Series Gen2"}, 174 | { INTEL_PCI_VID, 0x0087, "Centrino Advanced-N + WiMAX 6250"}, 175 | { INTEL_PCI_VID, 0x0089, "Centrino Advanced-N + WiMAX 6250"}, 176 | { INTEL_PCI_VID, 0x0885, "WiFi+WiMAX 6050 Series Gen2"}, 177 | { INTEL_PCI_VID, 0x0886, "WiFi+WiMAX 6050 Series Gen2"}, 178 | { INTEL_PCI_VID, 0x422b, "Centrino Ultimate-N 6300"}, 179 | { INTEL_PCI_VID, 0x422c, "Centrino Advanced-N 6200"}, 180 | { INTEL_PCI_VID, 0x4238, "Centrino Ultimate-N 6300"}, 181 | { INTEL_PCI_VID, 0x4239, "Centrino Advanced-N 6200"}, 182 | 183 | { 0, 0, "" } 184 | }; 185 | 186 | #define IWL_RF_CONFIG_TYPE_MSK 0x03 187 | static const char* iwl_rf_config_type[4] = { "3x3", "2x2", "1x2", "MAX" }; 188 | 189 | static bool iwl_init_device(struct pcidev *dev) 190 | { 191 | uint16_t data; 192 | 193 | retry_init: 194 | if (!dev->ops->eeprom_release(dev)) return false; 195 | 196 | PCI_OUT32(0x100, PCI_IN32(0x100) | 0x20000000); 197 | usleep(20); 198 | 199 | PCI_OUT32(0x100, PCI_IN32(0x100) | 0x00800000); 200 | usleep(20); 201 | 202 | PCI_OUT32(0x240, PCI_IN32(0x240) | 0xFFFF0000); 203 | usleep(20); 204 | 205 | PCI_OUT32(0, PCI_IN32(0) | 0x00080000); 206 | usleep(20); 207 | 208 | PCI_OUT32(0x20c, PCI_IN32(0x20c) | 0x00880300); 209 | usleep(20); 210 | 211 | PCI_OUT32(0x24, PCI_IN32(0x24) | 0x00000004); 212 | usleep(50); 213 | 214 | if (!dev->ops->eeprom_lock(dev)) 215 | return false; 216 | if (!dev->ops->eeprom_read16(dev, 0, &data)) 217 | goto retry_init; 218 | 219 | if (!dev->ops->eeprom_release(dev)) 220 | return false; 221 | if (debug) 222 | printf("Device init successfull.\n"); 223 | return true; 224 | } 225 | 226 | static bool iwl6k_eeprom_check(struct pcidev *dev) 227 | { 228 | if ( PCI_IN32(CSR_OTP_GP_REG) & CSR_OTP_GP_REG_DEVICE_SELECT) 229 | dev->ops->eeprom_writable = 1; 230 | printf("IWL 6k device NVM type: %s\n", dev->ops->eeprom_writable ? "EEPROM" : "OTP"); 231 | return true; 232 | } 233 | 234 | static bool iwl_eeprom_lock(struct pcidev *dev) 235 | { 236 | unsigned long data; 237 | if (!dev->mem) return false; 238 | PCI_OUT32(0, PCI_IN32(0) | 0x00200000); 239 | usleep(5); 240 | data = PCI_IN32(0); 241 | 242 | dev->eeprom_locked = ( 0x00200000 == (data & 0x00200000)); 243 | if (!dev->eeprom_locked) 244 | printf("\nerr! ucode is using eeprom!\n"); 245 | return (dev->eeprom_locked); 246 | } 247 | 248 | static bool iwl_eeprom_release(struct pcidev *dev) 249 | { 250 | unsigned long data; 251 | if (!dev->mem) return false; 252 | PCI_OUT32(0, PCI_IN32(0) & ~0x00200000); 253 | usleep(5); 254 | data = PCI_IN32(0); 255 | 256 | dev->eeprom_locked = ( 0x00200000 == (data & 0x00200000)); 257 | if (dev->eeprom_locked) 258 | printf("\nerr! software is still using eeprom!\n"); 259 | dev->eeprom_locked = 0; 260 | return (!dev->eeprom_locked); 261 | } 262 | 263 | static bool iwl_eeprom_read16(struct pcidev *dev, uint32_t addr, uint16_t *value) 264 | { 265 | unsigned int data = 0x0000FFFC & (addr << 1); 266 | 267 | PCI_OUT32(CSR_EEPROM_REG, data); 268 | usleep(50); 269 | data = PCI_IN32(CSR_EEPROM_REG); 270 | if ((data & 1) != 1) { 271 | printf("\nRead not complete! Timeout at %04x\n", addr); 272 | return false; 273 | } 274 | 275 | *value = (data & 0xFFFF0000) >> 16; 276 | return true; 277 | } 278 | 279 | static bool iwl_eeprom_write16(struct pcidev *dev, uint32_t addr, uint16_t value) 280 | { 281 | uint32_t data = value; 282 | 283 | if (preserve_mac && ((addr>=0x2A && addr<0x30) || (addr>=0x92 && addr<0x97))) 284 | return true; 285 | if (preserve_calib && (addr >= 0x200)) 286 | return true; 287 | 288 | data <<= 16; 289 | data |= 0x0000FFFC & (addr << 1); 290 | data |= 0x2; 291 | 292 | PCI_OUT32(CSR_EEPROM_REG, data); 293 | usleep(5000); 294 | 295 | PCI_OUT32(CSR_EEPROM_REG, 0x0000FFC & (addr << 1)); 296 | usleep(50); 297 | data = PCI_IN32(CSR_EEPROM_REG); 298 | if ((data & 1) != 1) { 299 | printf("\nRead not complete! Timeout at %04x\n", addr); 300 | return false; 301 | } 302 | 303 | if (value != (data >> 16)) { 304 | printf("\nVerification error at %04x\n", addr); 305 | return false; 306 | } 307 | return true; 308 | } 309 | 310 | static void iwl_eeprom_patch11n(struct pcidev *dev) 311 | { 312 | int idx; 313 | bool is4965 = false; 314 | 315 | uint16_t value; 316 | uint16_t sig_offs, 317 | sig[2], 318 | reg_offs, 319 | chn_offs, 320 | chn_data, 321 | new_data; 322 | 323 | if (dev->ops->eeprom_size == IWL_EEPROM_SIZE_4965) { 324 | is4965 = true; 325 | sig_offs = 0xC0; 326 | } 327 | 328 | 329 | printf("Patching card EEPROM...\n"); 330 | 331 | if (dev->mem && !dev->ops->eeprom_lock(dev)) 332 | return; 333 | 334 | printf("-> Changing subdev ID\n"); 335 | 336 | dev->ops->eeprom_read16(dev, 0x14, &value); 337 | if (0x0006 == (value & 0x000F)) { 338 | dev->ops->eeprom_write16(dev, 0x14, (value & 0xFFF0) | 0x0001); 339 | } 340 | /* 341 | enabling .11n 342 | 343 | W @8A << 00F0 (00B0) <- xxxx xxxx x1xx xxxx 344 | W @8C << 103E (603F) <- x001 xxxx xxxx xxx0 345 | */ 346 | 347 | printf("-> Enabling 11n mode\n"); 348 | // SKU_CAP 349 | dev->ops->eeprom_read16(dev, 0x8A, &value); 350 | if (0x0040 != (value & 0x0040)) { 351 | printf(" SKU CAP\n"); 352 | dev->ops->eeprom_write16(dev, 0x8A, value | 0x0040); 353 | } 354 | 355 | // OEM_MODE 356 | dev->ops->eeprom_read16(dev, 0x8C, &value); 357 | // if (0x1000 != (value & 0x7001)) { // 4965 & 5k 358 | if (0x1000 != (value & 0x7000)) { // 6k 359 | printf(" OEM MODE\n"); 360 | // dev->ops->eeprom_write16(dev, 0x8C, (value & 0x9FFE) | 0x1000); // 4965 & 5k 361 | dev->ops->eeprom_write16(dev, 0x8C, (value & 0x9FFF) | 0x1000); // 6k 362 | } 363 | 364 | printf("-> Checking regulatory and adding channels...\n"); 365 | // reading regulatory offset 366 | if (is4965) 367 | reg_offs = 0x005f; 368 | else 369 | dev->ops->eeprom_read16(dev, 0xCC, ®_offs); 370 | reg_offs <<= 1; 371 | printf("Regulatory base: %04x\n", reg_offs); 372 | sig_offs = reg_offs+2; 373 | 374 | /* 375 | writing SKU ID - 'MoW' signature 376 | */ 377 | dev->ops->eeprom_read16(dev, sig_offs, sig ); 378 | dev->ops->eeprom_read16(dev, sig_offs+2, sig+1 ); 379 | 380 | if (0x6f4d != sig[0]) 381 | dev->ops->eeprom_write16(dev, sig_offs, 0x6f4d); 382 | if (0x0057 != (sig[1] & 0x00FF)) 383 | dev->ops->eeprom_write16(dev, sig_offs+2, (sig[1] & 0xFF00) | 0x0057); 384 | 385 | /* 386 | writing channels regulatory... 387 | */ 388 | for (idx=0; iwl_regulatory[idx].offs; idx++) { 389 | chn_offs = reg_offs + iwl_regulatory[idx].offs; 390 | new_data = iwl_regulatory[idx].data; 391 | dev->ops->eeprom_read16(dev, chn_offs, &chn_data); 392 | 393 | if (new_data != chn_data) { 394 | printf(" %3d (%s%s) %2d->%2d dBm, flags %02x->%02x\n", 395 | iwl_regulatory[idx].chn & CHN_MASK, 396 | (iwl_regulatory[idx].chn & CHN_2G) ? "2.4G" : "5G", 397 | (iwl_regulatory[idx].chn & CHN_HT) ? ", HT40" : "", 398 | chn_data >> 8, new_data >> 8, 399 | chn_data & 0xFF, new_data & 0xFF 400 | ); 401 | dev->ops->eeprom_write16(dev, chn_offs, new_data); 402 | } 403 | } 404 | 405 | if (dev->mem) 406 | dev->ops->eeprom_release(dev); 407 | printf("\nCard EEPROM patched successfully\n"); 408 | } 409 | 410 | 411 | #ifdef PARSE_SHOW_CHANNELS 412 | static void iwl_eeprom_parse_channels(struct pcidev *dev, uint16_t reg_offs) 413 | { 414 | uint16_t chn_data; 415 | int idx; 416 | 417 | printf("Enabled channels:\n"); 418 | 419 | for (idx=0; iwl_regulatory[idx].offs; idx++) { 420 | dev->ops->eeprom_read16(dev, reg_offs + iwl_regulatory[idx].offs, &chn_data); 421 | if (chn_data) { 422 | printf(" %3d (%s%s) %d dBm, flags %02x\n", 423 | iwl_regulatory[idx].chn & CHN_MASK, 424 | (iwl_regulatory[idx].chn & CHN_2G) ? "2.4G" : "5G", 425 | (iwl_regulatory[idx].chn & CHN_HT) ? ", HT" : "", 426 | chn_data >> 8, 427 | chn_data & 0xFF 428 | ); 429 | } 430 | } 431 | } 432 | #endif 433 | 434 | 435 | static void iwl_eeprom_parse(struct pcidev *dev) 436 | { 437 | uint16_t vid,did,svid,sdid,ver; 438 | 439 | bool mode11n; 440 | uint16_t sku_cap, 441 | oem_mode, 442 | sig[2], 443 | mac[3], 444 | radio; 445 | 446 | bool is4965 = false; 447 | uint16_t sig_offs = 0x158; 448 | uint16_t reg_offs, 449 | cal_offs; 450 | 451 | if (dev->ops->eeprom_size == IWL_EEPROM_SIZE_4965) { 452 | is4965 = true; 453 | sig_offs = 0xC0; 454 | } 455 | 456 | dev->ops->eeprom_read16(dev, 0x0e, &vid); 457 | dev->ops->eeprom_read16(dev, 0x10, &did); 458 | dev->ops->eeprom_read16(dev, 0x12, &svid); 459 | dev->ops->eeprom_read16(dev, 0x14, &sdid); 460 | dev->ops->eeprom_read16(dev, 0x88, &ver); 461 | 462 | printf("\nDevice ID : %04x:%04x, %04x:%04x\n", vid, did, svid, sdid); 463 | printf("EEPROM ver : %04x\n", ver); 464 | 465 | dev->ops->eeprom_read16(dev, 0x8A, &sku_cap); 466 | dev->ops->eeprom_read16(dev, 0x8C, &oem_mode); 467 | 468 | if (is4965) 469 | reg_offs = 0x005f; 470 | else 471 | dev->ops->eeprom_read16(dev, IWL_REG_OFFS_ADDR, ®_offs); 472 | reg_offs <<= 1; 473 | printf("Regulatory data @%04x\n", reg_offs); 474 | 475 | 476 | dev->ops->eeprom_read16(dev, IWL_CAL_OFFS_ADDR, &cal_offs); 477 | cal_offs <<= 1; 478 | printf("Calibration data @%04x\n", cal_offs); 479 | 480 | 481 | sig_offs = reg_offs+2; 482 | dev->ops->eeprom_read16(dev, sig_offs, sig); 483 | dev->ops->eeprom_read16(dev, sig_offs+2, sig+1); 484 | 485 | mode11n = (0x0040 == ( sku_cap & 0x0040)) && 486 | // (0x1000 == ( oem_mode & 0x7001)) && // 4965 & 5k cards 487 | (0x1000 == ( oem_mode & 0x7000)) && // 6k cards 488 | (0x6f4d == sig[0]) && 489 | (0x0057 == (sig[1] & 0x00FF)); 490 | 491 | printf("\nSKU CAP : %04x\n", sku_cap); 492 | printf("OEM MODE: %04x\n", oem_mode); 493 | printf("SIG [0] : %04x\n", sig[0]); 494 | printf("SIG [1] : %04x\n", sig[1]); 495 | 496 | dev->ops->eeprom_read16(dev, 0x2a, mac); 497 | dev->ops->eeprom_read16(dev, 0x2c, mac+1); 498 | dev->ops->eeprom_read16(dev, 0x2e, mac+2); 499 | dev->ops->eeprom_read16(dev, 0x90, &radio); 500 | 501 | 502 | printf("MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", 503 | mac[0] & 0xFF, mac[0] >> 8, 504 | mac[1] & 0xFF, mac[1] >> 8, 505 | mac[2] & 0xFF, mac[2] >> 8); 506 | printf("RF config [%04X]: %s\n Tx antenna: %s%s%s\n Rx antenna: %s%s%s\n", 507 | radio, iwl_rf_config_type[radio & IWL_RF_CONFIG_TYPE_MSK], 508 | ((radio >> 8) & 1) ? "A" : "", 509 | ((radio >> 8) & 2) ? "B" : "", 510 | ((radio >> 8) & 4) ? "C" : "", 511 | ((radio >>12) & 1) ? "A" : "", 512 | ((radio >>12) & 2) ? "B" : "", 513 | ((radio >>12) & 4) ? "C" : "" 514 | ); 515 | printf("Mode 802.11n: %sabled\n", mode11n ? "en" : "dis"); 516 | 517 | 518 | // 6k checksum... 519 | 520 | uint16_t c=0, b; 521 | int16_t i; 522 | 523 | for (i=0; i<0x580; i+=2) { 524 | //for (i=2; iops->eeprom_size-2; i+=2) { 525 | dev->ops->eeprom_read16(dev, i+2, &b); 526 | c ^= b; 527 | } 528 | dev->ops->eeprom_read16(dev, dev->ops->eeprom_size-2, &b); 529 | printf("CSUM test : %04x\n", c); 530 | printf("CSUM stored: %04x\n", b); 531 | 532 | #ifdef PARSE_SHOW_CHANNELS 533 | if (!debug) return; 534 | iwl_eeprom_parse_channels(dev, reg_offs); 535 | #endif 536 | } 537 | 538 | struct io_driver io_iwl4965 = { 539 | .name = "iwl4965", 540 | .valid_ids = (struct pci_id*) &iwl4965_ids, 541 | .mmap_size = IWL_MMAP_LENGTH, 542 | .eeprom_size = IWL_EEPROM_SIZE_4965, 543 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 544 | .eeprom_writable = true, 545 | 546 | .init_device = &iwl_init_device, 547 | .eeprom_init = NULL, 548 | .eeprom_check = NULL, 549 | .eeprom_lock = &iwl_eeprom_lock, 550 | .eeprom_release = &iwl_eeprom_release, 551 | .eeprom_read16 = &iwl_eeprom_read16, 552 | .eeprom_write16 = &iwl_eeprom_write16, 553 | .eeprom_patch11n = &iwl_eeprom_patch11n, 554 | .eeprom_parse = &iwl_eeprom_parse, 555 | .pdata = NULL 556 | }; 557 | 558 | struct io_driver io_iwl5k = { 559 | .name = "iwl5k", 560 | .valid_ids = (struct pci_id*) &iwl5k_ids, 561 | .mmap_size = IWL_MMAP_LENGTH, 562 | .eeprom_size = IWL_EEPROM_SIZE_5K, 563 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 564 | .eeprom_writable = true, 565 | 566 | .init_device = &iwl_init_device, 567 | .eeprom_init = NULL, 568 | .eeprom_check = NULL, 569 | .eeprom_lock = &iwl_eeprom_lock, 570 | .eeprom_release = &iwl_eeprom_release, 571 | .eeprom_read16 = &iwl_eeprom_read16, 572 | .eeprom_write16 = &iwl_eeprom_write16, 573 | .eeprom_patch11n = &iwl_eeprom_patch11n, 574 | .eeprom_parse = &iwl_eeprom_parse, 575 | .pdata = NULL 576 | }; 577 | 578 | struct io_driver io_iwl6k = { 579 | .name = "iwl6k", 580 | .valid_ids = (struct pci_id*) &iwl6k_ids, 581 | .mmap_size = IWL_MMAP_LENGTH, 582 | .eeprom_size = IWL_EEPROM_SIZE_5K, 583 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 584 | .eeprom_writable = true, 585 | 586 | .init_device = &iwl_init_device, 587 | .eeprom_init = NULL, 588 | .eeprom_check = &iwl6k_eeprom_check, 589 | .eeprom_lock = &iwl_eeprom_lock, 590 | .eeprom_release = &iwl_eeprom_release, 591 | .eeprom_read16 = &iwl_eeprom_read16, 592 | .eeprom_write16 = &iwl_eeprom_write16, 593 | .eeprom_patch11n = &iwl_eeprom_patch11n, 594 | .eeprom_parse = &iwl_eeprom_parse, 595 | .pdata = NULL 596 | }; 597 | 598 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/26/269fad716cfe89b57887924ed5fd40ffae3349af.svn-base: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath5kio_h_included 21 | #define ath5kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath5k; 27 | 28 | #endif 29 | 30 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/6f/6f90965d760e6386253b631257558aeeda8f5e91.svn-base: -------------------------------------------------------------------------------- 1 | SBINDIR=/usr/local/sbin 2 | MANDIR=/usr/share/man/man8 3 | OBJDIR=obj 4 | 5 | all: $(OBJDIR) iwleeprom iwleeprom.8.gz 6 | 7 | debug: 8 | CFLAGS="-g $(CFLAGS)" make all 9 | 10 | $(OBJDIR): 11 | mkdir $(OBJDIR) 12 | 13 | iwleeprom: $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o $(OBJDIR)/iwleeprom.o 14 | gcc -Wall $(CFLAGS) -o iwleeprom $(OBJDIR)/iwleeprom.o $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o 15 | 16 | $(OBJDIR)/iwleeprom.o: iwleeprom.h iwlio.h ath5kio.h ath9kio.h iwleeprom.c 17 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwleeprom.o iwleeprom.c 18 | 19 | $(OBJDIR)/iwlio.o: iwleeprom.h iwlio.h iwlio.c 20 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwlio.o iwlio.c 21 | 22 | $(OBJDIR)/ath5kio.o: iwleeprom.h ath5kio.h ath5kio.c 23 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath5kio.o ath5kio.c 24 | 25 | $(OBJDIR)/ath9kio.o: iwleeprom.h ath9kio.h ath9kio.c 26 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath9kio.o ath9kio.c 27 | 28 | iwleeprom.8.gz: iwleeprom.8 29 | gzip -c iwleeprom.8 > iwleeprom.8.gz 30 | 31 | clean: 32 | rm -f iwleeprom iwleeprom.8.gz *~ 33 | rm -rf $(OBJDIR) 34 | 35 | install: all 36 | install -m 4755 iwleeprom $(SBINDIR) 37 | install -m 644 iwleeprom.8.gz $(MANDIR) 38 | 39 | uninstall: 40 | rm -f $(SBINDIR)/iwleeprom 41 | rm -f $(MANDIR)/iwleeprom.8.gz 42 | 43 | .PHONY: all debug clean install uninstall 44 | 45 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/81/81c555c5f9ad5b28167457673fc3a29cd5b4bedb.svn-base: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwlio_h_included 24 | #define iwlio_h_included 25 | #include "iwleeprom.h" 26 | 27 | #define INTEL_PCI_VID 0x8086 28 | 29 | extern struct io_driver io_iwl4965; 30 | extern struct io_driver io_iwl5k; 31 | extern struct io_driver io_iwl6k; 32 | 33 | #endif 34 | 35 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/8f/8ff941c4af6acf76ff12e412e34f23f4146ae6f8.svn-base: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * This program is derived from code bearing the following Copyright(s) 4 | */ 5 | 6 | /* -*- linux-c -*- 7 | * _ _ ____ __ _ ___ ____ ____ __ _ _ _ _ | 8 | * . \/ |--| | \| | |--< [__] | \| | _X_ | s e c u r e s y s t e m s 9 | * 10 | * .vt|ar5k - PCI/CardBus 802.11a WirelessLAN driver for Atheros AR5k chipsets 11 | * 12 | * Copyright (c) 2002, .vantronix | secure systems 13 | * and Reyk Floeter 14 | * 15 | * This program is free software ; you can redistribute it and/or modify 16 | * it under the terms of the GNU General Public License as published by 17 | * the Free Software Foundation ; either version 2 of the License, or 18 | * (at your option) any later version. 19 | * 20 | * This program is distributed in the hope that it will be useful, 21 | * but WITHOUT ANY WARRANTY ; without even the implied warranty of 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | * GNU General Public License for more details. 24 | * 25 | * You should have received a copy of the GNU General Public License 26 | * along with this program ; if not, write to the Free Software 27 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 28 | */ 29 | 30 | /* 31 | * Modified by Jan Krupa for EEPROM read/write/repair 32 | * Version 1.0 33 | */ 34 | 35 | 36 | /* 37 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 38 | */ 39 | 40 | #include "ath5kio.h" 41 | 42 | #define ATH5K_EEPROM_SIZE 0x800 43 | #define ATH5K_EEPROM_SIGNATURE 0x0000 44 | #define ATH5K_MMAP_LENGTH 0x10000 45 | 46 | #define AR5K_PCICFG 0x4010 47 | #define AR5K_PCICFG_EEAE 0x00000001 48 | #define AR5K_PCICFG_CLKRUNEN 0x00000004 49 | #define AR5K_PCICFG_LED_PEND 0x00000020 50 | #define AR5K_PCICFG_LED_ACT 0x00000040 51 | #define AR5K_PCICFG_SL_INTEN 0x00000800 52 | #define AR5K_PCICFG_BCTL 0x00001000 53 | #define AR5K_PCICFG_SPWR_DN 0x00010000 54 | 55 | #define AR5211_EEPROM_ADDR 0x6000 56 | #define AR5211_EEPROM_DATA 0x6004 57 | #define AR5211_EEPROM_COMD 0x6008 58 | #define AR5211_EEPROM_COMD_READ 0x0001 59 | #define AR5211_EEPROM_COMD_WRITE 0x0002 60 | #define AR5211_EEPROM_COMD_RESET 0x0003 61 | #define AR5211_EEPROM_STATUS 0x600C 62 | #define AR5211_EEPROM_STAT_RDERR 0x0001 63 | #define AR5211_EEPROM_STAT_RDDONE 0x0002 64 | #define AR5211_EEPROM_STAT_WRERR 0x0003 65 | #define AR5211_EEPROM_STAT_WRDONE 0x0004 66 | #define AR5211_EEPROM_CONF 0x6010 67 | 68 | /* Atheros 5k devices */ 69 | const struct pci_id ath5k_ids[] = { 70 | { ATHEROS_PCI_VID, 0x0007, "AR5000 802.11a Wireless Adapter" }, 71 | { ATHEROS_PCI_VID, 0x0011, "AR5210 802.11a NIC" }, 72 | { ATHEROS_PCI_VID, 0x0012, "AR5211 802.11ab NIC" }, 73 | { ATHEROS_PCI_VID, 0x0013, "Atheros AR5001X+ Wireless Network Adapter" }, 74 | { ATHEROS_PCI_VID, 0x001a, "AR2413 802.11bg NIC" }, 75 | { ATHEROS_PCI_VID, 0x001b, "AR5413 802.11abg NIC" }, 76 | { ATHEROS_PCI_VID, 0x001c, "AR5001 Wireless Network Adapter" }, 77 | { ATHEROS_PCI_VID, 0x001d, "AR5007G Wireless Network Adapter" }, 78 | { ATHEROS_PCI_VID, 0x0020, "AR5513 802.11abg Wireless NIC" }, 79 | { ATHEROS_PCI_VID, 0x0207, "AR5210 802.11abg" }, 80 | { ATHEROS_PCI_VID, 0x1014, "AR5212 802.11abg" }, 81 | 82 | { 0, 0, "" } 83 | }; 84 | 85 | 86 | static bool ath5k_eeprom_lock(struct pcidev *dev) { return true; } 87 | 88 | static bool ath5k_eeprom_release(struct pcidev *dev) { return true; } 89 | 90 | static bool ath5k_eeprom_read16(struct pcidev *dev, uint32_t addr, uint16_t *value) 91 | { 92 | int timeout = 10000 ; 93 | unsigned long int status ; 94 | 95 | PCI_OUT32(AR5211_EEPROM_CONF, 0), 96 | usleep( 5 ) ; 97 | 98 | /** enable eeprom read access */ 99 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_RESET) ; 100 | usleep( 5 ) ; 101 | 102 | /** set address */ 103 | PCI_OUT32( AR5211_EEPROM_ADDR, addr >> 1) ; 104 | usleep( 5 ) ; 105 | 106 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_READ) ; 107 | 108 | while (timeout > 0) { 109 | usleep(1) ; 110 | status = PCI_IN32(AR5211_EEPROM_STATUS) ; 111 | if (status & AR5211_EEPROM_STAT_RDDONE) { 112 | if (status & AR5211_EEPROM_STAT_RDERR) { 113 | printf( "\neeprom read access failed at %04x!\n", addr); 114 | return false; 115 | } 116 | status = PCI_IN32(AR5211_EEPROM_DATA) ; 117 | *value = status & 0x0000ffff; 118 | return true; 119 | } 120 | timeout-- ; 121 | } 122 | printf( "\neeprom read timeout at %04x!\n", addr); 123 | return false; 124 | } 125 | 126 | static bool ath5k_eeprom_write16(struct pcidev *dev, uint32_t addr, uint16_t value) 127 | { 128 | int timeout = 10000 ; 129 | unsigned long int status ; 130 | unsigned long int pcicfg ; 131 | int i ; 132 | unsigned short int sdata ; 133 | 134 | /** enable eeprom access */ 135 | pcicfg = PCI_IN32( AR5K_PCICFG ) ; 136 | PCI_OUT32(AR5K_PCICFG, ( pcicfg & ~AR5K_PCICFG_SPWR_DN ) ) ; 137 | usleep( 500 ) ; 138 | PCI_OUT32(AR5K_PCICFG, pcicfg | AR5K_PCICFG_EEAE /* | 0x2 */) ; 139 | usleep( 50 ) ; 140 | 141 | PCI_OUT32( AR5211_EEPROM_STATUS, 0); 142 | usleep( 50 ) ; 143 | 144 | /* VT_WLAN_OUT32( AR5211_EEPROM_CONF, 1) ; */ 145 | PCI_OUT32( AR5211_EEPROM_CONF, 0) ; 146 | usleep( 50 ) ; 147 | 148 | i = 100 ; 149 | retry: 150 | /** enable eeprom write access */ 151 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_RESET); 152 | usleep( 500 ) ; 153 | 154 | /* Write data */ 155 | PCI_OUT32(AR5211_EEPROM_DATA, value); 156 | usleep( 5 ) ; 157 | 158 | /** set address */ 159 | PCI_OUT32(AR5211_EEPROM_ADDR, addr >> 1); 160 | usleep( 5 ) ; 161 | 162 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_WRITE); 163 | usleep( 5 ) ; 164 | 165 | for ( timeout = 10000 ; timeout > 0 ; --timeout ) { 166 | status = PCI_IN32( AR5211_EEPROM_STATUS ); 167 | if ( status & 0xC ) { 168 | if ( status & AR5211_EEPROM_STAT_WRERR ) { 169 | printf("\neeprom write access failed!\n"); 170 | return false; 171 | } 172 | 173 | PCI_OUT32( AR5211_EEPROM_STATUS, 0 ); 174 | usleep( 10 ) ; 175 | break ; 176 | } 177 | usleep( 10 ) ; 178 | timeout--; 179 | } 180 | if (!dev->ops->eeprom_read16( dev, addr, &sdata)) { 181 | fprintf( stderr, "\nWrite verify: read failed!\n"); 182 | return false; 183 | } 184 | if ( ( sdata != value ) && i ) { 185 | --i ; 186 | fprintf( stderr, "\nRetrying eeprom write!\n"); 187 | goto retry ; 188 | } 189 | return true; 190 | } 191 | 192 | struct io_driver io_ath5k = { 193 | .name = "ath5k", 194 | .valid_ids = (struct pci_id*) &ath5k_ids, 195 | .mmap_size = ATH5K_MMAP_LENGTH, 196 | .eeprom_size = ATH5K_EEPROM_SIZE, 197 | .eeprom_signature = ATH5K_EEPROM_SIGNATURE, 198 | .eeprom_writable = true, 199 | 200 | .init_device = NULL, 201 | .eeprom_init = NULL, 202 | .eeprom_check = NULL, 203 | .eeprom_lock = &ath5k_eeprom_lock, 204 | .eeprom_release = &ath5k_eeprom_release, 205 | .eeprom_read16 = &ath5k_eeprom_read16, 206 | .eeprom_write16 = &ath5k_eeprom_write16, 207 | .eeprom_patch11n = NULL, 208 | .eeprom_parse = NULL, 209 | .pdata = NULL 210 | }; 211 | 212 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/c6/c6c0827979de773dd840577f1ba97fddc80e7534.svn-base: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath9kio_h_included 21 | #define ath9kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath9k; 27 | extern struct io_driver io_ath9300; 28 | 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /iwleeprom/.svn/pristine/d7/d72e71638f053e371788a8e1fb36535026b88b41.svn-base: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwleeprom_h_included 24 | #define iwleeprom_h_included 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | #if BYTE_ORDER == BIG_ENDIAN 35 | #define cpu2le16(x) __bswap_16(x) 36 | #define cpu2be16(x) x 37 | #define le2cpu16(x) __bswap_16(x) 38 | #define be2cpu16(x) x 39 | #elif BYTE_ORDER == LITTLE_ENDIAN 40 | #define cpu2le16(x) x 41 | #define cpu2be16(x) __bswap_16(x) 42 | #define le2cpu16(x) x 43 | #define be2cpu16(x) __bswap_16(x) 44 | #else 45 | #error Unsupported BYTE_ORDER! 46 | #endif 47 | 48 | /* PCI R/W macros */ 49 | #define PCI_IN32(a) (*((volatile uint32_t *)(dev->mem + (a)))) 50 | #define PCI_IN16(a) (*((volatile uint16_t *)(dev->mem + (a)))) 51 | #define PCI_OUT32(a,v) (*((volatile uint32_t *)(dev->mem + (a))) = (v)) 52 | #define PCI_OUT16(a,v) (*((volatile uint16_t *)(dev->mem + (a))) = (v)) 53 | 54 | struct pcidev 55 | { 56 | unsigned int class, 57 | ven, dev, 58 | sven, sdev; 59 | int idx; 60 | char *device; 61 | 62 | struct io_driver *ops; 63 | unsigned char *mem; 64 | bool eeprom_locked; 65 | char *forced_driver; 66 | }; 67 | 68 | struct pci_id 69 | { 70 | unsigned int ven, dev; 71 | char name[64]; 72 | }; 73 | 74 | enum byte_order 75 | { 76 | order_unknown = 0, 77 | order_be, 78 | order_le 79 | }; 80 | 81 | extern unsigned int debug; 82 | #define EEPROM_SIZE_MAX 0x4000 83 | 84 | extern bool preserve_mac; 85 | extern bool preserve_calib; 86 | 87 | extern bool buf_read16(struct pcidev* dev, uint32_t addr, uint16_t *value); 88 | extern bool buf_write16(struct pcidev* dev, uint32_t addr, uint16_t value); 89 | 90 | struct io_driver { 91 | const char *name; 92 | const struct pci_id *valid_ids; 93 | uint32_t mmap_size; 94 | uint32_t eeprom_size; 95 | uint16_t eeprom_signature; 96 | bool eeprom_writable; 97 | 98 | bool (*init_device)(struct pcidev *dev); 99 | bool (*eeprom_init)(struct pcidev *dev); 100 | bool (*eeprom_check)(struct pcidev *dev); 101 | bool (*eeprom_lock)(struct pcidev *dev); 102 | bool (*eeprom_release)(struct pcidev *dev); 103 | bool (*eeprom_read16)(struct pcidev *dev, uint32_t addr, uint16_t *value); 104 | bool (*eeprom_write16)(struct pcidev *dev, uint32_t addr, uint16_t value); 105 | 106 | void (*eeprom_patch11n)(struct pcidev *dev); 107 | void (*eeprom_parse)(struct pcidev *dev); 108 | void *pdata; 109 | }; 110 | 111 | #endif 112 | 113 | -------------------------------------------------------------------------------- /iwleeprom/.svn/wc.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/.svn/wc.db -------------------------------------------------------------------------------- /iwleeprom/Makefile: -------------------------------------------------------------------------------- 1 | SBINDIR=/usr/local/sbin 2 | MANDIR=/usr/share/man/man8 3 | OBJDIR=obj 4 | 5 | all: $(OBJDIR) iwleeprom iwleeprom.8.gz 6 | 7 | debug: 8 | CFLAGS="-g $(CFLAGS)" make all 9 | 10 | $(OBJDIR): 11 | mkdir $(OBJDIR) 12 | 13 | iwleeprom: $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o $(OBJDIR)/iwleeprom.o 14 | gcc -Wall $(CFLAGS) -o iwleeprom $(OBJDIR)/iwleeprom.o $(OBJDIR)/iwlio.o $(OBJDIR)/ath5kio.o $(OBJDIR)/ath9kio.o 15 | 16 | $(OBJDIR)/iwleeprom.o: iwleeprom.h iwlio.h ath5kio.h ath9kio.h iwleeprom.c 17 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwleeprom.o iwleeprom.c 18 | 19 | $(OBJDIR)/iwlio.o: iwleeprom.h iwlio.h iwlio.c 20 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/iwlio.o iwlio.c 21 | 22 | $(OBJDIR)/ath5kio.o: iwleeprom.h ath5kio.h ath5kio.c 23 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath5kio.o ath5kio.c 24 | 25 | $(OBJDIR)/ath9kio.o: iwleeprom.h ath9kio.h ath9kio.c 26 | gcc -Wall $(CFLAGS) -c -o $(OBJDIR)/ath9kio.o ath9kio.c 27 | 28 | iwleeprom.8.gz: iwleeprom.8 29 | gzip -c iwleeprom.8 > iwleeprom.8.gz 30 | 31 | clean: 32 | rm -f iwleeprom iwleeprom.8.gz *~ 33 | rm -rf $(OBJDIR) 34 | 35 | install: all 36 | install -m 4755 iwleeprom $(SBINDIR) 37 | install -m 644 iwleeprom.8.gz $(MANDIR) 38 | 39 | uninstall: 40 | rm -f $(SBINDIR)/iwleeprom 41 | rm -f $(MANDIR)/iwleeprom.8.gz 42 | 43 | .PHONY: all debug clean install uninstall 44 | 45 | -------------------------------------------------------------------------------- /iwleeprom/Readme_Recover_Atheros_ROM.txt: -------------------------------------------------------------------------------- 1 | To generate a full 4K Atheros ROM, place your original eeprom_dump.rom here and run ./create4krom.sh 2 | Afterwards you will have eeprom_4k.rom, for use with the custom ath9k driver which supports ROM by placing it in C char format in romimp.c 3 | You can also use this full 4k ROM when the card reacts again to flash it with ./iwleeprom -i eeprom_4k.rom 4 | Reboot afterwards and your card should work fine again... 5 | 6 | -------------------------------------------------------------------------------- /iwleeprom/ath5kio.c: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * This program is derived from code bearing the following Copyright(s) 4 | */ 5 | 6 | /* -*- linux-c -*- 7 | * _ _ ____ __ _ ___ ____ ____ __ _ _ _ _ | 8 | * . \/ |--| | \| | |--< [__] | \| | _X_ | s e c u r e s y s t e m s 9 | * 10 | * .vt|ar5k - PCI/CardBus 802.11a WirelessLAN driver for Atheros AR5k chipsets 11 | * 12 | * Copyright (c) 2002, .vantronix | secure systems 13 | * and Reyk Floeter 14 | * 15 | * This program is free software ; you can redistribute it and/or modify 16 | * it under the terms of the GNU General Public License as published by 17 | * the Free Software Foundation ; either version 2 of the License, or 18 | * (at your option) any later version. 19 | * 20 | * This program is distributed in the hope that it will be useful, 21 | * but WITHOUT ANY WARRANTY ; without even the implied warranty of 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | * GNU General Public License for more details. 24 | * 25 | * You should have received a copy of the GNU General Public License 26 | * along with this program ; if not, write to the Free Software 27 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 28 | */ 29 | 30 | /* 31 | * Modified by Jan Krupa for EEPROM read/write/repair 32 | * Version 1.0 33 | */ 34 | 35 | 36 | /* 37 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 38 | */ 39 | 40 | #include "ath5kio.h" 41 | 42 | #define ATH5K_EEPROM_SIZE 0x800 43 | #define ATH5K_EEPROM_SIGNATURE 0x0000 44 | #define ATH5K_MMAP_LENGTH 0x10000 45 | 46 | #define AR5K_PCICFG 0x4010 47 | #define AR5K_PCICFG_EEAE 0x00000001 48 | #define AR5K_PCICFG_CLKRUNEN 0x00000004 49 | #define AR5K_PCICFG_LED_PEND 0x00000020 50 | #define AR5K_PCICFG_LED_ACT 0x00000040 51 | #define AR5K_PCICFG_SL_INTEN 0x00000800 52 | #define AR5K_PCICFG_BCTL 0x00001000 53 | #define AR5K_PCICFG_SPWR_DN 0x00010000 54 | 55 | #define AR5211_EEPROM_ADDR 0x6000 56 | #define AR5211_EEPROM_DATA 0x6004 57 | #define AR5211_EEPROM_COMD 0x6008 58 | #define AR5211_EEPROM_COMD_READ 0x0001 59 | #define AR5211_EEPROM_COMD_WRITE 0x0002 60 | #define AR5211_EEPROM_COMD_RESET 0x0003 61 | #define AR5211_EEPROM_STATUS 0x600C 62 | #define AR5211_EEPROM_STAT_RDERR 0x0001 63 | #define AR5211_EEPROM_STAT_RDDONE 0x0002 64 | #define AR5211_EEPROM_STAT_WRERR 0x0003 65 | #define AR5211_EEPROM_STAT_WRDONE 0x0004 66 | #define AR5211_EEPROM_CONF 0x6010 67 | 68 | /* Atheros 5k devices */ 69 | const struct pci_id ath5k_ids[] = { 70 | { ATHEROS_PCI_VID, 0x0007, "AR5000 802.11a Wireless Adapter" }, 71 | { ATHEROS_PCI_VID, 0x0011, "AR5210 802.11a NIC" }, 72 | { ATHEROS_PCI_VID, 0x0012, "AR5211 802.11ab NIC" }, 73 | { ATHEROS_PCI_VID, 0x0013, "Atheros AR5001X+ Wireless Network Adapter" }, 74 | { ATHEROS_PCI_VID, 0x001a, "AR2413 802.11bg NIC" }, 75 | { ATHEROS_PCI_VID, 0x001b, "AR5413 802.11abg NIC" }, 76 | { ATHEROS_PCI_VID, 0x001c, "AR5001 Wireless Network Adapter" }, 77 | { ATHEROS_PCI_VID, 0x001d, "AR5007G Wireless Network Adapter" }, 78 | { ATHEROS_PCI_VID, 0x0020, "AR5513 802.11abg Wireless NIC" }, 79 | { ATHEROS_PCI_VID, 0x0207, "AR5210 802.11abg" }, 80 | { ATHEROS_PCI_VID, 0x1014, "AR5212 802.11abg" }, 81 | 82 | { 0, 0, "" } 83 | }; 84 | 85 | 86 | static bool ath5k_eeprom_lock(struct pcidev *dev) { return true; } 87 | 88 | static bool ath5k_eeprom_release(struct pcidev *dev) { return true; } 89 | 90 | static bool ath5k_eeprom_read16(struct pcidev *dev, uint32_t addr, uint16_t *value) 91 | { 92 | int timeout = 10000 ; 93 | unsigned long int status ; 94 | 95 | PCI_OUT32(AR5211_EEPROM_CONF, 0), 96 | usleep( 5 ) ; 97 | 98 | /** enable eeprom read access */ 99 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_RESET) ; 100 | usleep( 5 ) ; 101 | 102 | /** set address */ 103 | PCI_OUT32( AR5211_EEPROM_ADDR, addr >> 1) ; 104 | usleep( 5 ) ; 105 | 106 | PCI_OUT32( AR5211_EEPROM_COMD, PCI_IN32(AR5211_EEPROM_COMD) | AR5211_EEPROM_COMD_READ) ; 107 | 108 | while (timeout > 0) { 109 | usleep(1) ; 110 | status = PCI_IN32(AR5211_EEPROM_STATUS) ; 111 | if (status & AR5211_EEPROM_STAT_RDDONE) { 112 | if (status & AR5211_EEPROM_STAT_RDERR) { 113 | printf( "\neeprom read access failed at %04x!\n", addr); 114 | return false; 115 | } 116 | status = PCI_IN32(AR5211_EEPROM_DATA) ; 117 | *value = status & 0x0000ffff; 118 | return true; 119 | } 120 | timeout-- ; 121 | } 122 | printf( "\neeprom read timeout at %04x!\n", addr); 123 | return false; 124 | } 125 | 126 | static bool ath5k_eeprom_write16(struct pcidev *dev, uint32_t addr, uint16_t value) 127 | { 128 | int timeout = 10000 ; 129 | unsigned long int status ; 130 | unsigned long int pcicfg ; 131 | int i ; 132 | unsigned short int sdata ; 133 | 134 | /** enable eeprom access */ 135 | pcicfg = PCI_IN32( AR5K_PCICFG ) ; 136 | PCI_OUT32(AR5K_PCICFG, ( pcicfg & ~AR5K_PCICFG_SPWR_DN ) ) ; 137 | usleep( 500 ) ; 138 | PCI_OUT32(AR5K_PCICFG, pcicfg | AR5K_PCICFG_EEAE /* | 0x2 */) ; 139 | usleep( 50 ) ; 140 | 141 | PCI_OUT32( AR5211_EEPROM_STATUS, 0); 142 | usleep( 50 ) ; 143 | 144 | /* VT_WLAN_OUT32( AR5211_EEPROM_CONF, 1) ; */ 145 | PCI_OUT32( AR5211_EEPROM_CONF, 0) ; 146 | usleep( 50 ) ; 147 | 148 | i = 100 ; 149 | retry: 150 | /** enable eeprom write access */ 151 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_RESET); 152 | usleep( 500 ) ; 153 | 154 | /* Write data */ 155 | PCI_OUT32(AR5211_EEPROM_DATA, value); 156 | usleep( 5 ) ; 157 | 158 | /** set address */ 159 | PCI_OUT32(AR5211_EEPROM_ADDR, addr >> 1); 160 | usleep( 5 ) ; 161 | 162 | PCI_OUT32(AR5211_EEPROM_COMD, AR5211_EEPROM_COMD_WRITE); 163 | usleep( 5 ) ; 164 | 165 | for ( timeout = 10000 ; timeout > 0 ; --timeout ) { 166 | status = PCI_IN32( AR5211_EEPROM_STATUS ); 167 | if ( status & 0xC ) { 168 | if ( status & AR5211_EEPROM_STAT_WRERR ) { 169 | printf("\neeprom write access failed!\n"); 170 | return false; 171 | } 172 | 173 | PCI_OUT32( AR5211_EEPROM_STATUS, 0 ); 174 | usleep( 10 ) ; 175 | break ; 176 | } 177 | usleep( 10 ) ; 178 | timeout--; 179 | } 180 | if (!dev->ops->eeprom_read16( dev, addr, &sdata)) { 181 | fprintf( stderr, "\nWrite verify: read failed!\n"); 182 | return false; 183 | } 184 | if ( ( sdata != value ) && i ) { 185 | --i ; 186 | fprintf( stderr, "\nRetrying eeprom write!\n"); 187 | goto retry ; 188 | } 189 | return true; 190 | } 191 | 192 | struct io_driver io_ath5k = { 193 | .name = "ath5k", 194 | .valid_ids = (struct pci_id*) &ath5k_ids, 195 | .mmap_size = ATH5K_MMAP_LENGTH, 196 | .eeprom_size = ATH5K_EEPROM_SIZE, 197 | .eeprom_signature = ATH5K_EEPROM_SIGNATURE, 198 | .eeprom_writable = true, 199 | 200 | .init_device = NULL, 201 | .eeprom_init = NULL, 202 | .eeprom_check = NULL, 203 | .eeprom_lock = &ath5k_eeprom_lock, 204 | .eeprom_release = &ath5k_eeprom_release, 205 | .eeprom_read16 = &ath5k_eeprom_read16, 206 | .eeprom_write16 = &ath5k_eeprom_write16, 207 | .eeprom_patch11n = NULL, 208 | .eeprom_parse = NULL, 209 | .pdata = NULL 210 | }; 211 | 212 | -------------------------------------------------------------------------------- /iwleeprom/ath5kio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath5kio_h_included 21 | #define ath5kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath5k; 27 | 28 | #endif 29 | 30 | -------------------------------------------------------------------------------- /iwleeprom/ath9kio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 5 | * 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | **************************************************************************** 18 | */ 19 | 20 | #ifndef ath9kio_h_included 21 | #define ath9kio_h_included 22 | #include "iwleeprom.h" 23 | 24 | #define ATHEROS_PCI_VID 0x168c 25 | 26 | extern struct io_driver io_ath9k; 27 | extern struct io_driver io_ath9300; 28 | 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /iwleeprom/create4krom.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | 4 | dd if=eeprom_dump.rom of=eeprom_4k.rom bs=1 count=512 5 | dd if=padding.bin of=eeprom_4k.rom bs=1 seek=512 count=1536 6 | dd if=eeprom_4k.rom of=eeprom_4k.rom bs=1 seek=2048 count=2048 7 | 8 | -------------------------------------------------------------------------------- /iwleeprom/iwleeprom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/iwleeprom -------------------------------------------------------------------------------- /iwleeprom/iwleeprom.8: -------------------------------------------------------------------------------- 1 | .\" iwleeprom is released under the GNU GENERAL PUBLIC LICENSE. 2 | .TH "iwleeprom" "8" "03 November, 2010" "ittrium, ShultZ" "iwleeprom 0.0" 3 | .SH "NAME" 4 | iwleeprom \- EEPROM reader/writer for intel wifi cards 5 | .SH "SYNOPSIS" 6 | \fBiwleeprom [-d device [-m] [-c] | -n] [-I] [-i filename] [-o filename [-b]] [-P] [-p] [-D debug_level]\fR 7 | .br 8 | \fBiwleeprom -l\fR 9 | .br 10 | \fBiwleeprom -h\fR 11 | 12 | .SH "FEATURES" 13 | iwleeprom can read/write intel wifi cards EEPROM to/from file. 14 | .TP 15 | Following cards are supported read/write: 16 | .br 17 | 4965AGN 18 | .br 19 | 5100ABG/AGN 20 | .br 21 | 5150AGX/ANX 22 | .br 23 | 5300AGN 24 | .br 25 | 5350ANX 26 | .br 27 | .TP 28 | Following cards are supported read-only: 29 | .br 30 | 1000BG/BGN 31 | .br 32 | 6000 series 33 | .br 34 | .SH "OPTIONS" 35 | .TP 36 | .B \-d \-\-device 37 | PCI device in following format: 38 | .br 39 | .I 0000:00:00.0 40 | (domain:bus:dev.func) 41 | .TP 42 | .B \-n \-\-nodev 43 | don't touch any device, file-only operations 44 | .br 45 | .TP 46 | .B \-m \-\-preserve-mac 47 | don't change card's MAC while writing full eeprom dump 48 | .br 49 | .TP 50 | .B \-c \-\-preserve-calib 51 | don't change card's calibration data while writing full eeprom dump 52 | .br 53 | .TP 54 | .B \-o \-\-ofile 55 | dump eeprom to binary file 56 | .TP 57 | .B \-b \-\-bigendian 58 | set output file byteorder to big-endian (default: little-endian) 59 | .br 60 | use with \fB\-o\fR 61 | .TP 62 | .B \-i \-\-ifile 63 | write eeprom from binary file 64 | dump file byteorder will be autodetected 65 | .TP 66 | .B \-p \-\-patch11n 67 | patch device eeprom to enable 802.11n. 68 | .br 69 | use this option to convert your 5100ABG/5150AGX to 5100AGN/5150ANX respectively 70 | if 802.11n already supported by your card, this will unlock some channels 71 | .TP 72 | .B \-I \-\-init 73 | init device power. 74 | .br 75 | use this option if driver hasn't inited the device (for ex. if it has wrong dev_id or subsys_id) 76 | .TP 77 | .B \-P \-\-parse 78 | parse eeprom (show available modes/channels) 79 | .br 80 | .TP 81 | .B \-D \-\-debug 82 | set debug level (0-1), default 0 83 | .br 84 | .TP 85 | .B \-l \-\-list 86 | list known cards 87 | .br 88 | .TP 89 | .B \-h \-\-help 90 | show help 91 | 92 | -------------------------------------------------------------------------------- /iwleeprom/iwleeprom.8.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/iwleeprom.8.gz -------------------------------------------------------------------------------- /iwleeprom/iwleeprom.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwleeprom_h_included 24 | #define iwleeprom_h_included 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | #if BYTE_ORDER == BIG_ENDIAN 35 | #define cpu2le16(x) __bswap_16(x) 36 | #define cpu2be16(x) x 37 | #define le2cpu16(x) __bswap_16(x) 38 | #define be2cpu16(x) x 39 | #elif BYTE_ORDER == LITTLE_ENDIAN 40 | #define cpu2le16(x) x 41 | #define cpu2be16(x) __bswap_16(x) 42 | #define le2cpu16(x) x 43 | #define be2cpu16(x) __bswap_16(x) 44 | #else 45 | #error Unsupported BYTE_ORDER! 46 | #endif 47 | 48 | /* PCI R/W macros */ 49 | #define PCI_IN32(a) (*((volatile uint32_t *)(dev->mem + (a)))) 50 | #define PCI_IN16(a) (*((volatile uint16_t *)(dev->mem + (a)))) 51 | #define PCI_OUT32(a,v) (*((volatile uint32_t *)(dev->mem + (a))) = (v)) 52 | #define PCI_OUT16(a,v) (*((volatile uint16_t *)(dev->mem + (a))) = (v)) 53 | 54 | struct pcidev 55 | { 56 | unsigned int class, 57 | ven, dev, 58 | sven, sdev; 59 | int idx; 60 | char *device; 61 | 62 | struct io_driver *ops; 63 | unsigned char *mem; 64 | bool eeprom_locked; 65 | char *forced_driver; 66 | }; 67 | 68 | struct pci_id 69 | { 70 | unsigned int ven, dev; 71 | char name[64]; 72 | }; 73 | 74 | enum byte_order 75 | { 76 | order_unknown = 0, 77 | order_be, 78 | order_le 79 | }; 80 | 81 | extern unsigned int debug; 82 | #define EEPROM_SIZE_MAX 0x4000 83 | 84 | extern bool preserve_mac; 85 | extern bool preserve_calib; 86 | 87 | extern bool buf_read16(struct pcidev* dev, uint32_t addr, uint16_t *value); 88 | extern bool buf_write16(struct pcidev* dev, uint32_t addr, uint16_t value); 89 | 90 | struct io_driver { 91 | const char *name; 92 | const struct pci_id *valid_ids; 93 | uint32_t mmap_size; 94 | uint32_t eeprom_size; 95 | uint16_t eeprom_signature; 96 | bool eeprom_writable; 97 | 98 | bool (*init_device)(struct pcidev *dev); 99 | bool (*eeprom_init)(struct pcidev *dev); 100 | bool (*eeprom_check)(struct pcidev *dev); 101 | bool (*eeprom_lock)(struct pcidev *dev); 102 | bool (*eeprom_release)(struct pcidev *dev); 103 | bool (*eeprom_read16)(struct pcidev *dev, uint32_t addr, uint16_t *value); 104 | bool (*eeprom_write16)(struct pcidev *dev, uint32_t addr, uint16_t value); 105 | 106 | void (*eeprom_patch11n)(struct pcidev *dev); 107 | void (*eeprom_parse)(struct pcidev *dev); 108 | void *pdata; 109 | }; 110 | 111 | #endif 112 | 113 | -------------------------------------------------------------------------------- /iwleeprom/iwlio.c: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #include "iwlio.h" 24 | 25 | #define IWL_EEPROM_SIZE_4965 0x400 26 | #define IWL_EEPROM_SIZE_5K 0x800 27 | 28 | #define IWL_EEPROM_SIGNATURE 0x5a40 29 | #define IWL_MMAP_LENGTH 0x1000 30 | 31 | #define IWL_REG_OFFS_ADDR 0x0CC 32 | #define IWL_CAL_OFFS_ADDR 0x0CE 33 | 34 | 35 | #define CSR_WH_IF_CONFIG_REG 0x000 36 | #define CSR_EEPROM_REG 0x02c 37 | #define CSR_OTP_GP_REG 0x034 38 | 39 | #define CSR_OTP_GP_REG_DEVICE_SELECT 0x00010000 40 | 41 | 42 | #define PARSE_SHOW_CHANNELS 43 | 44 | struct iwl_regulatory_item 45 | { 46 | unsigned int offs; 47 | uint16_t data; 48 | uint16_t chn; 49 | }; 50 | 51 | #define CHN_MASK 0x00FF 52 | #define CHN_HT 0x0100 53 | #define CHN_2G 0x0200 54 | 55 | 56 | 57 | const struct iwl_regulatory_item iwl_regulatory[] = 58 | { 59 | /* 60 | BAND 2.4GHz (@15e-179 with regulatory base @156) 61 | */ 62 | { 0x08, 0x0f6f, 1 | CHN_2G }, 63 | { 0x0A, 0x0f6f, 2 | CHN_2G }, 64 | { 0x0C, 0x0f6f, 3 | CHN_2G }, 65 | { 0x0E, 0x0f6f, 4 | CHN_2G }, 66 | { 0x10, 0x0f6f, 5 | CHN_2G }, 67 | { 0x12, 0x0f6f, 6 | CHN_2G }, 68 | { 0x14, 0x0f6f, 7 | CHN_2G }, 69 | { 0x16, 0x0f6f, 8 | CHN_2G }, 70 | { 0x18, 0x0f6f, 9 | CHN_2G }, 71 | { 0x1A, 0x0f6f, 10 | CHN_2G }, 72 | { 0x1C, 0x0f6f, 11 | CHN_2G }, 73 | 74 | { 0x1E, 0x0f21, 12 | CHN_2G }, 75 | { 0x20, 0x0f21, 13 | CHN_2G }, 76 | { 0x22, 0x0f21, 14 | CHN_2G }, 77 | 78 | /* 79 | BAND 5GHz 80 | */ 81 | // subband 5170-5320 MHz (@198-1af) 82 | // { 0x42, 0x0fe1, 34 }, 83 | { 0x44, 0x0fe1, 36 }, 84 | // { 0x46, 0x0fe1, 38 }, 85 | { 0x48, 0x0fe1, 40 }, 86 | // { 0x4a, 0x0fe1, 42 }, 87 | { 0x4c, 0x0fe1, 44 }, 88 | // { 0x4e, 0x0fe1, 46 }, 89 | { 0x50, 0x0fe1, 48 }, 90 | { 0x52, 0x0f31, 52 }, 91 | { 0x54, 0x0f31, 56 }, 92 | { 0x56, 0x0f31, 60 }, 93 | { 0x58, 0x0f31, 64 }, 94 | 95 | // subband 5500-5700 MHz (@1b2-1c7) 96 | { 0x5c, 0x0f31, 100 }, 97 | { 0x5e, 0x0f31, 104 }, 98 | { 0x60, 0x0f31, 108 }, 99 | { 0x62, 0x0f31, 112 }, 100 | { 0x64, 0x0f31, 116 }, 101 | { 0x66, 0x0f31, 120 }, 102 | { 0x68, 0x0f31, 124 }, 103 | { 0x6a, 0x0f31, 128 }, 104 | { 0x6c, 0x0f31, 132 }, 105 | { 0x6e, 0x0f31, 136 }, 106 | { 0x70, 0x0f31, 140 }, 107 | 108 | // subband 5725-5825 MHz (@1ca-1d5) 109 | // { 0x74, 0x0fa1, 145 }, 110 | { 0x76, 0x0fa1, 149 }, 111 | { 0x78, 0x0fa1, 153 }, 112 | { 0x7a, 0x0fa1, 157 }, 113 | { 0x7c, 0x0fa1, 161 }, 114 | { 0x7e, 0x0fa1, 165 }, 115 | 116 | /* 117 | BAND 2.4GHz, HT40 channels (@1d8-1e5) 118 | */ 119 | { 0x82, 0x0e6f, 1 | CHN_HT | CHN_2G }, 120 | { 0x84, 0x0f6f, 2 | CHN_HT | CHN_2G }, 121 | { 0x86, 0x0f6f, 3 | CHN_HT | CHN_2G }, 122 | { 0x88, 0x0f6f, 4 | CHN_HT | CHN_2G }, 123 | { 0x8a, 0x0f6f, 5 | CHN_HT | CHN_2G }, 124 | { 0x8c, 0x0f6f, 6 | CHN_HT | CHN_2G }, 125 | { 0x8e, 0x0f6f, 7 | CHN_HT | CHN_2G }, 126 | 127 | /* 128 | BAND 5GHz, HT40 channels (@1e8-1fd) 129 | */ 130 | { 0x92, 0x0fe1, 36 | CHN_HT }, 131 | { 0x94, 0x0fe1, 44 | CHN_HT }, 132 | { 0x96, 0x0f31, 52 | CHN_HT }, 133 | { 0x98, 0x0f31, 60 | CHN_HT }, 134 | { 0x9a, 0x0f31, 100 | CHN_HT }, 135 | { 0x9c, 0x0f31, 108 | CHN_HT }, 136 | { 0x9e, 0x0f31, 116 | CHN_HT }, 137 | { 0xa0, 0x0f31, 124 | CHN_HT }, 138 | { 0xa2, 0x0f31, 132 | CHN_HT }, 139 | { 0xa4, 0x0f61, 149 | CHN_HT }, 140 | { 0xa6, 0x0f61, 157 | CHN_HT }, 141 | 142 | { 0, 0} 143 | }; 144 | 145 | 146 | /* Intel 4965 devices */ 147 | const struct pci_id iwl4965_ids[] = { 148 | { INTEL_PCI_VID, 0x4229, "PRO/Wireless 4965 AG or AGN [Kedron] Network Connection"}, 149 | { INTEL_PCI_VID, 0x4230, "PRO/Wireless 4965 AG or AGN [Kedron] Network Connection"}, 150 | 151 | { 0, 0, "" } 152 | }; 153 | 154 | /* Intel 5x00/5x50 devices */ 155 | const struct pci_id iwl5k_ids[] = { 156 | { INTEL_PCI_VID, 0x4232, "WiFi Link 5100"}, 157 | { INTEL_PCI_VID, 0x4235, "Ultimate N WiFi Link 5300"}, 158 | { INTEL_PCI_VID, 0x4236, "Ultimate N WiFi Link 5300"}, 159 | { INTEL_PCI_VID, 0x4237, "PRO/Wireless 5100 AGN [Shiloh] Network Connection"}, 160 | { INTEL_PCI_VID, 0x423a, "PRO/Wireless 5350 AGN [Echo Peak] Network Connection"}, 161 | { INTEL_PCI_VID, 0x423b, "PRO/Wireless 5350 AGN [Echo Peak] Network Connection"}, 162 | { INTEL_PCI_VID, 0x423c, "WiMAX/WiFi Link 5150"}, 163 | { INTEL_PCI_VID, 0x423d, "WiMAX/WiFi Link 5150"}, 164 | 165 | { 0, 0, "" } 166 | }; 167 | 168 | /* Intel 6x00/6x50 devices */ 169 | const struct pci_id iwl6k_ids[] = { 170 | { INTEL_PCI_VID, 0x0082, "6000 Series Gen2"}, 171 | { INTEL_PCI_VID, 0x0083, "Centrino Wireless-N 1000"}, 172 | { INTEL_PCI_VID, 0x0084, "Centrino Wireless-N 1000"}, 173 | { INTEL_PCI_VID, 0x0085, "6000 Series Gen2"}, 174 | { INTEL_PCI_VID, 0x0087, "Centrino Advanced-N + WiMAX 6250"}, 175 | { INTEL_PCI_VID, 0x0089, "Centrino Advanced-N + WiMAX 6250"}, 176 | { INTEL_PCI_VID, 0x0885, "WiFi+WiMAX 6050 Series Gen2"}, 177 | { INTEL_PCI_VID, 0x0886, "WiFi+WiMAX 6050 Series Gen2"}, 178 | { INTEL_PCI_VID, 0x422b, "Centrino Ultimate-N 6300"}, 179 | { INTEL_PCI_VID, 0x422c, "Centrino Advanced-N 6200"}, 180 | { INTEL_PCI_VID, 0x4238, "Centrino Ultimate-N 6300"}, 181 | { INTEL_PCI_VID, 0x4239, "Centrino Advanced-N 6200"}, 182 | 183 | { 0, 0, "" } 184 | }; 185 | 186 | #define IWL_RF_CONFIG_TYPE_MSK 0x03 187 | static const char* iwl_rf_config_type[4] = { "3x3", "2x2", "1x2", "MAX" }; 188 | 189 | static bool iwl_init_device(struct pcidev *dev) 190 | { 191 | uint16_t data; 192 | 193 | retry_init: 194 | if (!dev->ops->eeprom_release(dev)) return false; 195 | 196 | PCI_OUT32(0x100, PCI_IN32(0x100) | 0x20000000); 197 | usleep(20); 198 | 199 | PCI_OUT32(0x100, PCI_IN32(0x100) | 0x00800000); 200 | usleep(20); 201 | 202 | PCI_OUT32(0x240, PCI_IN32(0x240) | 0xFFFF0000); 203 | usleep(20); 204 | 205 | PCI_OUT32(0, PCI_IN32(0) | 0x00080000); 206 | usleep(20); 207 | 208 | PCI_OUT32(0x20c, PCI_IN32(0x20c) | 0x00880300); 209 | usleep(20); 210 | 211 | PCI_OUT32(0x24, PCI_IN32(0x24) | 0x00000004); 212 | usleep(50); 213 | 214 | if (!dev->ops->eeprom_lock(dev)) 215 | return false; 216 | if (!dev->ops->eeprom_read16(dev, 0, &data)) 217 | goto retry_init; 218 | 219 | if (!dev->ops->eeprom_release(dev)) 220 | return false; 221 | if (debug) 222 | printf("Device init successfull.\n"); 223 | return true; 224 | } 225 | 226 | static bool iwl6k_eeprom_check(struct pcidev *dev) 227 | { 228 | if ( PCI_IN32(CSR_OTP_GP_REG) & CSR_OTP_GP_REG_DEVICE_SELECT) 229 | dev->ops->eeprom_writable = 1; 230 | printf("IWL 6k device NVM type: %s\n", dev->ops->eeprom_writable ? "EEPROM" : "OTP"); 231 | return true; 232 | } 233 | 234 | static bool iwl_eeprom_lock(struct pcidev *dev) 235 | { 236 | unsigned long data; 237 | if (!dev->mem) return false; 238 | PCI_OUT32(0, PCI_IN32(0) | 0x00200000); 239 | usleep(5); 240 | data = PCI_IN32(0); 241 | 242 | dev->eeprom_locked = ( 0x00200000 == (data & 0x00200000)); 243 | if (!dev->eeprom_locked) 244 | printf("\nerr! ucode is using eeprom!\n"); 245 | return (dev->eeprom_locked); 246 | } 247 | 248 | static bool iwl_eeprom_release(struct pcidev *dev) 249 | { 250 | unsigned long data; 251 | if (!dev->mem) return false; 252 | PCI_OUT32(0, PCI_IN32(0) & ~0x00200000); 253 | usleep(5); 254 | data = PCI_IN32(0); 255 | 256 | dev->eeprom_locked = ( 0x00200000 == (data & 0x00200000)); 257 | if (dev->eeprom_locked) 258 | printf("\nerr! software is still using eeprom!\n"); 259 | dev->eeprom_locked = 0; 260 | return (!dev->eeprom_locked); 261 | } 262 | 263 | static bool iwl_eeprom_read16(struct pcidev *dev, uint32_t addr, uint16_t *value) 264 | { 265 | unsigned int data = 0x0000FFFC & (addr << 1); 266 | 267 | PCI_OUT32(CSR_EEPROM_REG, data); 268 | usleep(50); 269 | data = PCI_IN32(CSR_EEPROM_REG); 270 | if ((data & 1) != 1) { 271 | printf("\nRead not complete! Timeout at %04x\n", addr); 272 | return false; 273 | } 274 | 275 | *value = (data & 0xFFFF0000) >> 16; 276 | return true; 277 | } 278 | 279 | static bool iwl_eeprom_write16(struct pcidev *dev, uint32_t addr, uint16_t value) 280 | { 281 | uint32_t data = value; 282 | 283 | if (preserve_mac && ((addr>=0x2A && addr<0x30) || (addr>=0x92 && addr<0x97))) 284 | return true; 285 | if (preserve_calib && (addr >= 0x200)) 286 | return true; 287 | 288 | data <<= 16; 289 | data |= 0x0000FFFC & (addr << 1); 290 | data |= 0x2; 291 | 292 | PCI_OUT32(CSR_EEPROM_REG, data); 293 | usleep(5000); 294 | 295 | PCI_OUT32(CSR_EEPROM_REG, 0x0000FFC & (addr << 1)); 296 | usleep(50); 297 | data = PCI_IN32(CSR_EEPROM_REG); 298 | if ((data & 1) != 1) { 299 | printf("\nRead not complete! Timeout at %04x\n", addr); 300 | return false; 301 | } 302 | 303 | if (value != (data >> 16)) { 304 | printf("\nVerification error at %04x\n", addr); 305 | return false; 306 | } 307 | return true; 308 | } 309 | 310 | static void iwl_eeprom_patch11n(struct pcidev *dev) 311 | { 312 | int idx; 313 | bool is4965 = false; 314 | 315 | uint16_t value; 316 | uint16_t sig_offs, 317 | sig[2], 318 | reg_offs, 319 | chn_offs, 320 | chn_data, 321 | new_data; 322 | 323 | if (dev->ops->eeprom_size == IWL_EEPROM_SIZE_4965) { 324 | is4965 = true; 325 | sig_offs = 0xC0; 326 | } 327 | 328 | 329 | printf("Patching card EEPROM...\n"); 330 | 331 | if (dev->mem && !dev->ops->eeprom_lock(dev)) 332 | return; 333 | 334 | printf("-> Changing subdev ID\n"); 335 | 336 | dev->ops->eeprom_read16(dev, 0x14, &value); 337 | if (0x0006 == (value & 0x000F)) { 338 | dev->ops->eeprom_write16(dev, 0x14, (value & 0xFFF0) | 0x0001); 339 | } 340 | /* 341 | enabling .11n 342 | 343 | W @8A << 00F0 (00B0) <- xxxx xxxx x1xx xxxx 344 | W @8C << 103E (603F) <- x001 xxxx xxxx xxx0 345 | */ 346 | 347 | printf("-> Enabling 11n mode\n"); 348 | // SKU_CAP 349 | dev->ops->eeprom_read16(dev, 0x8A, &value); 350 | if (0x0040 != (value & 0x0040)) { 351 | printf(" SKU CAP\n"); 352 | dev->ops->eeprom_write16(dev, 0x8A, value | 0x0040); 353 | } 354 | 355 | // OEM_MODE 356 | dev->ops->eeprom_read16(dev, 0x8C, &value); 357 | // if (0x1000 != (value & 0x7001)) { // 4965 & 5k 358 | if (0x1000 != (value & 0x7000)) { // 6k 359 | printf(" OEM MODE\n"); 360 | // dev->ops->eeprom_write16(dev, 0x8C, (value & 0x9FFE) | 0x1000); // 4965 & 5k 361 | dev->ops->eeprom_write16(dev, 0x8C, (value & 0x9FFF) | 0x1000); // 6k 362 | } 363 | 364 | printf("-> Checking regulatory and adding channels...\n"); 365 | // reading regulatory offset 366 | if (is4965) 367 | reg_offs = 0x005f; 368 | else 369 | dev->ops->eeprom_read16(dev, 0xCC, ®_offs); 370 | reg_offs <<= 1; 371 | printf("Regulatory base: %04x\n", reg_offs); 372 | sig_offs = reg_offs+2; 373 | 374 | /* 375 | writing SKU ID - 'MoW' signature 376 | */ 377 | dev->ops->eeprom_read16(dev, sig_offs, sig ); 378 | dev->ops->eeprom_read16(dev, sig_offs+2, sig+1 ); 379 | 380 | if (0x6f4d != sig[0]) 381 | dev->ops->eeprom_write16(dev, sig_offs, 0x6f4d); 382 | if (0x0057 != (sig[1] & 0x00FF)) 383 | dev->ops->eeprom_write16(dev, sig_offs+2, (sig[1] & 0xFF00) | 0x0057); 384 | 385 | /* 386 | writing channels regulatory... 387 | */ 388 | for (idx=0; iwl_regulatory[idx].offs; idx++) { 389 | chn_offs = reg_offs + iwl_regulatory[idx].offs; 390 | new_data = iwl_regulatory[idx].data; 391 | dev->ops->eeprom_read16(dev, chn_offs, &chn_data); 392 | 393 | if (new_data != chn_data) { 394 | printf(" %3d (%s%s) %2d->%2d dBm, flags %02x->%02x\n", 395 | iwl_regulatory[idx].chn & CHN_MASK, 396 | (iwl_regulatory[idx].chn & CHN_2G) ? "2.4G" : "5G", 397 | (iwl_regulatory[idx].chn & CHN_HT) ? ", HT40" : "", 398 | chn_data >> 8, new_data >> 8, 399 | chn_data & 0xFF, new_data & 0xFF 400 | ); 401 | dev->ops->eeprom_write16(dev, chn_offs, new_data); 402 | } 403 | } 404 | 405 | if (dev->mem) 406 | dev->ops->eeprom_release(dev); 407 | printf("\nCard EEPROM patched successfully\n"); 408 | } 409 | 410 | 411 | #ifdef PARSE_SHOW_CHANNELS 412 | static void iwl_eeprom_parse_channels(struct pcidev *dev, uint16_t reg_offs) 413 | { 414 | uint16_t chn_data; 415 | int idx; 416 | 417 | printf("Enabled channels:\n"); 418 | 419 | for (idx=0; iwl_regulatory[idx].offs; idx++) { 420 | dev->ops->eeprom_read16(dev, reg_offs + iwl_regulatory[idx].offs, &chn_data); 421 | if (chn_data) { 422 | printf(" %3d (%s%s) %d dBm, flags %02x\n", 423 | iwl_regulatory[idx].chn & CHN_MASK, 424 | (iwl_regulatory[idx].chn & CHN_2G) ? "2.4G" : "5G", 425 | (iwl_regulatory[idx].chn & CHN_HT) ? ", HT" : "", 426 | chn_data >> 8, 427 | chn_data & 0xFF 428 | ); 429 | } 430 | } 431 | } 432 | #endif 433 | 434 | 435 | static void iwl_eeprom_parse(struct pcidev *dev) 436 | { 437 | uint16_t vid,did,svid,sdid,ver; 438 | 439 | bool mode11n; 440 | uint16_t sku_cap, 441 | oem_mode, 442 | sig[2], 443 | mac[3], 444 | radio; 445 | 446 | bool is4965 = false; 447 | uint16_t sig_offs = 0x158; 448 | uint16_t reg_offs, 449 | cal_offs; 450 | 451 | if (dev->ops->eeprom_size == IWL_EEPROM_SIZE_4965) { 452 | is4965 = true; 453 | sig_offs = 0xC0; 454 | } 455 | 456 | dev->ops->eeprom_read16(dev, 0x0e, &vid); 457 | dev->ops->eeprom_read16(dev, 0x10, &did); 458 | dev->ops->eeprom_read16(dev, 0x12, &svid); 459 | dev->ops->eeprom_read16(dev, 0x14, &sdid); 460 | dev->ops->eeprom_read16(dev, 0x88, &ver); 461 | 462 | printf("\nDevice ID : %04x:%04x, %04x:%04x\n", vid, did, svid, sdid); 463 | printf("EEPROM ver : %04x\n", ver); 464 | 465 | dev->ops->eeprom_read16(dev, 0x8A, &sku_cap); 466 | dev->ops->eeprom_read16(dev, 0x8C, &oem_mode); 467 | 468 | if (is4965) 469 | reg_offs = 0x005f; 470 | else 471 | dev->ops->eeprom_read16(dev, IWL_REG_OFFS_ADDR, ®_offs); 472 | reg_offs <<= 1; 473 | printf("Regulatory data @%04x\n", reg_offs); 474 | 475 | 476 | dev->ops->eeprom_read16(dev, IWL_CAL_OFFS_ADDR, &cal_offs); 477 | cal_offs <<= 1; 478 | printf("Calibration data @%04x\n", cal_offs); 479 | 480 | 481 | sig_offs = reg_offs+2; 482 | dev->ops->eeprom_read16(dev, sig_offs, sig); 483 | dev->ops->eeprom_read16(dev, sig_offs+2, sig+1); 484 | 485 | mode11n = (0x0040 == ( sku_cap & 0x0040)) && 486 | // (0x1000 == ( oem_mode & 0x7001)) && // 4965 & 5k cards 487 | (0x1000 == ( oem_mode & 0x7000)) && // 6k cards 488 | (0x6f4d == sig[0]) && 489 | (0x0057 == (sig[1] & 0x00FF)); 490 | 491 | printf("\nSKU CAP : %04x\n", sku_cap); 492 | printf("OEM MODE: %04x\n", oem_mode); 493 | printf("SIG [0] : %04x\n", sig[0]); 494 | printf("SIG [1] : %04x\n", sig[1]); 495 | 496 | dev->ops->eeprom_read16(dev, 0x2a, mac); 497 | dev->ops->eeprom_read16(dev, 0x2c, mac+1); 498 | dev->ops->eeprom_read16(dev, 0x2e, mac+2); 499 | dev->ops->eeprom_read16(dev, 0x90, &radio); 500 | 501 | 502 | printf("MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", 503 | mac[0] & 0xFF, mac[0] >> 8, 504 | mac[1] & 0xFF, mac[1] >> 8, 505 | mac[2] & 0xFF, mac[2] >> 8); 506 | printf("RF config [%04X]: %s\n Tx antenna: %s%s%s\n Rx antenna: %s%s%s\n", 507 | radio, iwl_rf_config_type[radio & IWL_RF_CONFIG_TYPE_MSK], 508 | ((radio >> 8) & 1) ? "A" : "", 509 | ((radio >> 8) & 2) ? "B" : "", 510 | ((radio >> 8) & 4) ? "C" : "", 511 | ((radio >>12) & 1) ? "A" : "", 512 | ((radio >>12) & 2) ? "B" : "", 513 | ((radio >>12) & 4) ? "C" : "" 514 | ); 515 | printf("Mode 802.11n: %sabled\n", mode11n ? "en" : "dis"); 516 | 517 | 518 | // 6k checksum... 519 | 520 | uint16_t c=0, b; 521 | int16_t i; 522 | 523 | for (i=0; i<0x580; i+=2) { 524 | //for (i=2; iops->eeprom_size-2; i+=2) { 525 | dev->ops->eeprom_read16(dev, i+2, &b); 526 | c ^= b; 527 | } 528 | dev->ops->eeprom_read16(dev, dev->ops->eeprom_size-2, &b); 529 | printf("CSUM test : %04x\n", c); 530 | printf("CSUM stored: %04x\n", b); 531 | 532 | #ifdef PARSE_SHOW_CHANNELS 533 | if (!debug) return; 534 | iwl_eeprom_parse_channels(dev, reg_offs); 535 | #endif 536 | } 537 | 538 | struct io_driver io_iwl4965 = { 539 | .name = "iwl4965", 540 | .valid_ids = (struct pci_id*) &iwl4965_ids, 541 | .mmap_size = IWL_MMAP_LENGTH, 542 | .eeprom_size = IWL_EEPROM_SIZE_4965, 543 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 544 | .eeprom_writable = true, 545 | 546 | .init_device = &iwl_init_device, 547 | .eeprom_init = NULL, 548 | .eeprom_check = NULL, 549 | .eeprom_lock = &iwl_eeprom_lock, 550 | .eeprom_release = &iwl_eeprom_release, 551 | .eeprom_read16 = &iwl_eeprom_read16, 552 | .eeprom_write16 = &iwl_eeprom_write16, 553 | .eeprom_patch11n = &iwl_eeprom_patch11n, 554 | .eeprom_parse = &iwl_eeprom_parse, 555 | .pdata = NULL 556 | }; 557 | 558 | struct io_driver io_iwl5k = { 559 | .name = "iwl5k", 560 | .valid_ids = (struct pci_id*) &iwl5k_ids, 561 | .mmap_size = IWL_MMAP_LENGTH, 562 | .eeprom_size = IWL_EEPROM_SIZE_5K, 563 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 564 | .eeprom_writable = true, 565 | 566 | .init_device = &iwl_init_device, 567 | .eeprom_init = NULL, 568 | .eeprom_check = NULL, 569 | .eeprom_lock = &iwl_eeprom_lock, 570 | .eeprom_release = &iwl_eeprom_release, 571 | .eeprom_read16 = &iwl_eeprom_read16, 572 | .eeprom_write16 = &iwl_eeprom_write16, 573 | .eeprom_patch11n = &iwl_eeprom_patch11n, 574 | .eeprom_parse = &iwl_eeprom_parse, 575 | .pdata = NULL 576 | }; 577 | 578 | struct io_driver io_iwl6k = { 579 | .name = "iwl6k", 580 | .valid_ids = (struct pci_id*) &iwl6k_ids, 581 | .mmap_size = IWL_MMAP_LENGTH, 582 | .eeprom_size = IWL_EEPROM_SIZE_5K, 583 | .eeprom_signature = IWL_EEPROM_SIGNATURE, 584 | .eeprom_writable = true, 585 | 586 | .init_device = &iwl_init_device, 587 | .eeprom_init = NULL, 588 | .eeprom_check = &iwl6k_eeprom_check, 589 | .eeprom_lock = &iwl_eeprom_lock, 590 | .eeprom_release = &iwl_eeprom_release, 591 | .eeprom_read16 = &iwl_eeprom_read16, 592 | .eeprom_write16 = &iwl_eeprom_write16, 593 | .eeprom_patch11n = &iwl_eeprom_patch11n, 594 | .eeprom_parse = &iwl_eeprom_parse, 595 | .pdata = NULL 596 | }; 597 | 598 | -------------------------------------------------------------------------------- /iwleeprom/iwlio.h: -------------------------------------------------------------------------------- 1 | /* 2 | **************************************************************************** 3 | * 4 | * iwleeprom - EEPROM reader/writer for intel wifi cards. 5 | * Copyright (C) 2010, Alexander "ittrium" Kalinichenko 6 | * ICQ: 152322, Skype: ittr1um 7 | * Copyright (C) 2010, Gennady "ShultZ" Kozlov 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation; either version 2 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | **************************************************************************** 21 | */ 22 | 23 | #ifndef iwlio_h_included 24 | #define iwlio_h_included 25 | #include "iwleeprom.h" 26 | 27 | #define INTEL_PCI_VID 0x8086 28 | 29 | extern struct io_driver io_iwl4965; 30 | extern struct io_driver io_iwl5k; 31 | extern struct io_driver io_iwl6k; 32 | 33 | #endif 34 | 35 | -------------------------------------------------------------------------------- /iwleeprom/obj/ath5kio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/obj/ath5kio.o -------------------------------------------------------------------------------- /iwleeprom/obj/ath9kio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/obj/ath9kio.o -------------------------------------------------------------------------------- /iwleeprom/obj/iwleeprom.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/obj/iwleeprom.o -------------------------------------------------------------------------------- /iwleeprom/obj/iwlio.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/obj/iwlio.o -------------------------------------------------------------------------------- /iwleeprom/padding.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andyvand/AtherosROMKit/c98fbe4140502dda263c32029774c3bf5da3f366/iwleeprom/padding.bin -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | - AtherosROMKit 2 | This is an Atheros ROM modding and recovery kit. 3 | 4 | It has the following projects: 5 | - Atheros EEPROM Tool RW512 (AnV) 6 | - Atheros EEPROM Tool RW512 Windows 8.1 (AnV) 7 | - dumpathrom (AnV) 8 | - iwleeprom (AnV) 9 | - AR9285_Optimized_ROM (AnV) 10 | - iwleeprom (MacNB) 11 | --------------------------------------------------------------------------------