Rev 534 | Rev 847 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 534 | Rev 846 | ||
|---|---|---|---|
| Line 24... | Line 24... | ||
| 24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | # |
27 | # |
| 28 | 28 | ||
| - | 29 | #include <arch/boot/boot.h> |
|
| - | 30 | ||
| 29 | .register %g2, #scratch |
31 | .register %g2, #scratch |
| 30 | .register %g3, #scratch |
32 | .register %g3, #scratch |
| 31 | .register %g6, #scratch |
33 | .register %g6, #scratch |
| 32 | .register %g7, #scratch |
34 | .register %g7, #scratch |
| 33 | 35 | ||
| Line 48... | Line 50... | ||
| 48 | .half 0 |
50 | .half 0 |
| 49 | 51 | ||
| 50 | .align 8 |
52 | .align 8 |
| 51 | 53 | ||
| 52 | 1: |
54 | 1: |
| - | 55 | flushw ! flush all but the active register window |
|
| - | 56 | ||
| - | 57 | /* |
|
| - | 58 | * Prepare to copy the kernel image to 4M. |
|
| - | 59 | */ |
|
| - | 60 | ||
| - | 61 | set LMA, %g1 ! source address |
|
| - | 62 | set VMA, %g2 ! destination address (VMA) |
|
| - | 63 | set hardcoded_ktext_size, %g3 ! link address of hardcoded_ktext_size |
|
| - | 64 | set hardcoded_kdata_size, %g4 ! link address of hardcoded_kdata_size |
|
| - | 65 | ||
| - | 66 | sub %g3, %g2, %g3 ! offset of hardcoded_ktext_size from the beginning of the load address |
|
| - | 67 | sub %g4, %g2, %g4 ! offset of hardcoded_kdata_size from the beginning of the load address |
|
| - | 68 | ||
| - | 69 | ldx [%g3 + %g1], %g3 ! hardcoded_ktext_size -> %g3 |
|
| - | 70 | ldx [%g4 + %g1], %g4 ! hardcoded_kdata_size -> %g4 |
|
| - | 71 | ||
| - | 72 | add %g3, %g4, %g3 ! size of kernel text and data |
|
| - | 73 | ||
| - | 74 | /* |
|
| - | 75 | * Start copying the kernel from higher addresses towards lower addresses. |
|
| - | 76 | */ |
|
| - | 77 | ||
| - | 78 | 2: dec %g3 |
|
| - | 79 | ldub [%g1 + %g3], %g4 |
|
| - | 80 | stb %g4, [%g2 + %g3] |
|
| - | 81 | cmp %g3, 0 |
|
| - | 82 | bnz 2b |
|
| - | 83 | nop |
|
| - | 84 | ||
| - | 85 | set relocated, %g1 |
|
| - | 86 | jmp %g1 |
|
| - | 87 | nop |
|
| - | 88 | ||
| - | 89 | relocated: |
|
| 53 | set ofw, %l0 |
90 | set ofw, %l0 |
| 54 | 91 | ||
| 55 | call ofw_init |
92 | call ofw_init |
| 56 | stx %o4, [%l0] |
93 | stx %o4, [%l0] |
| 57 | 94 | ||