| /* |
| * The carl9170 firwmare gets copied into the device's |
| * Program RAM (pram), which has a size of 16K, but |
| * also has to accomodate the stack the device uses, |
| * which starts at the top of the 16k, so we pretend |
| * that we just have 16256 (16k - 128) of pram. |
| * |
| * This section documents some of the other areas |
| * mapped into the firmware processor's address space |
| * as well. |
| */ |
| |
| ENTRY(_start); |
| |
| MEMORY |
| { |
| eeprom : ORIGIN = 0x000000, LENGTH = 1024k |
| sram : ORIGIN = 0x100000, LENGTH = 96k |
| uart : ORIGIN = 0x1c0000, LENGTH = 4k |
| timer : ORIGIN = 0x1c1000, LENGTH = 4k |
| vflash : ORIGIN = 0x1c2000, LENGTH = 4k |
| wlan : ORIGIN = 0x1c3000, LENGTH = 4k |
| pci2ahb : ORIGIN = 0x1c4000, LENGTH = 4k |
| security : ORIGIN = 0x1c5000, LENGTH = 4k |
| gpio : ORIGIN = 0x1d0000, LENGTH = 4k |
| memctl : ORIGIN = 0x1d1000, LENGTH = 4k |
| irqctl : ORIGIN = 0x1d2000, LENGTH = 4k |
| usb : ORIGIN = 0x1e1000, LENGTH = 4k |
| pta : ORIGIN = 0x1e2000, LENGTH = 4k |
| pram : ORIGIN = 0x200000, LENGTH = 16256 |
| bogus : ORIGIN = 0x300000, LENGTH = 8k |
| } |
| |
| SECTIONS |
| { |
| .eeprom : { *(.eeprom*) } > eeprom |
| .sram : { *(.sram*) } > sram |
| |
| /* |
| * The ar9170 boot code will execute the code |
| * at address 0x04 from the loaded firmware as |
| * such we must ensure our starting routine |
| * is kept at that address. |
| */ |
| .padding : { |
| /* NOP NOP just in case */ |
| LONG(0x00090009) |
| } > pram |
| |
| .boot : { *(.boot) } > pram |
| /* anything else can be anywhere */ |
| |
| .text : { *(.text*) } > pram |
| .rodata : { *(.rodata*) } > pram |
| .bss : { *(.bss) } > pram |
| .data : { *(.data*) } > pram |
| |
| .fwdsc : { KEEP(*(.fwdsc)) } > bogus |
| } |