12d690920SAxel Dörfler/* 2664683a7SAxel Dörfler * Copyright 2003, Axel Dörfler, axeld@pinc-software.de. 3bdee97bcSAxel Dörfler * Distributed under the terms of the MIT License. 42d690920SAxel Dörfler */ 52d690920SAxel Dörfler 62d690920SAxel Dörfler#define FUNCTION(x) .global x; .type x,@function; x 72d690920SAxel Dörfler 82d690920SAxel Dörfler.text 92d690920SAxel Dörfler 102d690920SAxel Dörfler/* uint32 get_sdr1(void); 112d690920SAxel Dörfler */ 122d690920SAxel DörflerFUNCTION(get_sdr1): 132d690920SAxel Dörfler mfsdr1 %r3 142d690920SAxel Dörfler blr 152d690920SAxel Dörfler 162d690920SAxel Dörfler/* void set_sdr1(uint32 value); 172d690920SAxel Dörfler * r3 182d690920SAxel Dörfler */ 192d690920SAxel DörflerFUNCTION(set_sdr1): 202d690920SAxel Dörfler mtsdr1 %r3 212d690920SAxel Dörfler blr 222d690920SAxel Dörfler 232d690920SAxel Dörfler/* uint32 get_sr(void *virtualAddress); 242d690920SAxel Dörfler * r3 252d690920SAxel Dörfler */ 262d690920SAxel DörflerFUNCTION(get_sr): 272d690920SAxel Dörfler mfsrin %r3, %r3 282d690920SAxel Dörfler blr 292d690920SAxel Dörfler 302d690920SAxel Dörfler/* void set_sr(void *virtualAddress, uint32 value); 312d690920SAxel Dörfler * r3 r4 322d690920SAxel Dörfler */ 332d690920SAxel DörflerFUNCTION(set_sr): 34*4b8d0e68SFrançois Revol isync 352d690920SAxel Dörfler mtsrin %r4, %r3 36*4b8d0e68SFrançois Revol isync 372d690920SAxel Dörfler blr 382d690920SAxel Dörfler 392d690920SAxel Dörfler/* uint32 get_msr(void); 402d690920SAxel Dörfler */ 412d690920SAxel DörflerFUNCTION(get_msr): 422d690920SAxel Dörfler mfmsr %r3 432d690920SAxel Dörfler blr 442d690920SAxel Dörfler 452d690920SAxel Dörfler/* uint32 set_msr(uint32 value); 462d690920SAxel Dörfler * r3 472d690920SAxel Dörfler */ 482d690920SAxel DörflerFUNCTION(set_msr): 492d690920SAxel Dörfler mtmsr %r3 50*4b8d0e68SFrançois Revol isync 512d690920SAxel Dörfler blr 522d690920SAxel Dörfler 53716a16ceSIngo Weinhold/* uint32 get_pvr(void); 54716a16ceSIngo Weinhold */ 55716a16ceSIngo WeinholdFUNCTION(get_pvr): 56716a16ceSIngo Weinhold mfpvr %r3 57716a16ceSIngo Weinhold blr 58716a16ceSIngo Weinhold 592d690920SAxel Dörfler 602d690920SAxel Dörfler#define get_ibat(num) \ 612d690920SAxel Dörfler mfibatu %r4, num; \ 622d690920SAxel Dörfler stw %r4, 0(%r3); \ 632d690920SAxel Dörfler mfibatl %r4, num; \ 642d690920SAxel Dörfler stw %r4, 4(%r3); \ 652d690920SAxel Dörfler 662d690920SAxel Dörfler#define set_ibat(num); \ 672d690920SAxel Dörfler lwz %r4, 0(%r3); \ 682d690920SAxel Dörfler mtibatu num, %r4; \ 692d690920SAxel Dörfler lwz %r4, 4(%r3); \ 702d690920SAxel Dörfler mtibatl num, %r4; 712d690920SAxel Dörfler 722d690920SAxel Dörfler/* void get_ibat0-3(block_address_translation *bat); 732d690920SAxel Dörfler * r3 742d690920SAxel Dörfler */ 752d690920SAxel DörflerFUNCTION(get_ibat0): 762d690920SAxel Dörfler get_ibat(0) 772d690920SAxel Dörfler blr 782d690920SAxel DörflerFUNCTION(get_ibat1): 792d690920SAxel Dörfler get_ibat(1) 802d690920SAxel Dörfler blr 812d690920SAxel DörflerFUNCTION(get_ibat2): 822d690920SAxel Dörfler get_ibat(2) 832d690920SAxel Dörfler blr 842d690920SAxel DörflerFUNCTION(get_ibat3): 852d690920SAxel Dörfler get_ibat(3) 862d690920SAxel Dörfler blr 872d690920SAxel Dörfler 882d690920SAxel Dörfler/* void set_ibat0-3(block_address_translation *bat); 892d690920SAxel Dörfler * r3 902d690920SAxel Dörfler */ 912d690920SAxel DörflerFUNCTION(set_ibat0): 922d690920SAxel Dörfler set_ibat(0) 932d690920SAxel Dörfler blr 942d690920SAxel DörflerFUNCTION(set_ibat1): 952d690920SAxel Dörfler set_ibat(1) 962d690920SAxel Dörfler blr 972d690920SAxel DörflerFUNCTION(set_ibat2): 982d690920SAxel Dörfler set_ibat(2) 992d690920SAxel Dörfler blr 1002d690920SAxel DörflerFUNCTION(set_ibat3): 1012d690920SAxel Dörfler set_ibat(3) 1022d690920SAxel Dörfler blr 1032d690920SAxel Dörfler 1042d690920SAxel Dörfler/* void reset_ibats(void) 1052d690920SAxel Dörfler */ 1062d690920SAxel DörflerFUNCTION(reset_ibats): 1072d690920SAxel Dörfler li %r3, 0 1082d690920SAxel Dörfler mtibatu 0, %r3 1092d690920SAxel Dörfler mtibatl 0, %r3 1102d690920SAxel Dörfler mtibatu 1, %r3 1112d690920SAxel Dörfler mtibatl 1, %r3 1122d690920SAxel Dörfler mtibatu 2, %r3 1132d690920SAxel Dörfler mtibatl 2, %r3 1142d690920SAxel Dörfler mtibatu 3, %r3 1152d690920SAxel Dörfler mtibatl 3, %r3 1162d690920SAxel Dörfler blr 1172d690920SAxel Dörfler 1182d690920SAxel Dörfler#define get_dbat(num) \ 1192d690920SAxel Dörfler mfdbatu %r4, num; \ 1202d690920SAxel Dörfler stw %r4, 0(%r3); \ 1212d690920SAxel Dörfler mfdbatl %r4, num; \ 1222d690920SAxel Dörfler stw %r4, 4(%r3); 1232d690920SAxel Dörfler 1242d690920SAxel Dörfler#define set_dbat(num) \ 1252d690920SAxel Dörfler lwz %r4, 0(%r3); \ 1262d690920SAxel Dörfler mtdbatu num, %r4; \ 1272d690920SAxel Dörfler lwz %r4, 4(%r3); \ 1282d690920SAxel Dörfler mtdbatl num, %r4; 1292d690920SAxel Dörfler 1302d690920SAxel Dörfler/* void get_dbat0-3(block_address_translation *bat); 1312d690920SAxel Dörfler * r3 1322d690920SAxel Dörfler */ 1332d690920SAxel DörflerFUNCTION(get_dbat0): 1342d690920SAxel Dörfler get_dbat(0) 1352d690920SAxel Dörfler blr 1362d690920SAxel DörflerFUNCTION(get_dbat1): 1372d690920SAxel Dörfler get_dbat(1) 1382d690920SAxel Dörfler blr 1392d690920SAxel DörflerFUNCTION(get_dbat2): 1402d690920SAxel Dörfler get_dbat(2) 1412d690920SAxel Dörfler blr 1422d690920SAxel DörflerFUNCTION(get_dbat3): 1432d690920SAxel Dörfler get_dbat(3) 1442d690920SAxel Dörfler blr 1452d690920SAxel Dörfler 1462d690920SAxel Dörfler/* void set_dbat0-3(block_address_translation *bat); 1472d690920SAxel Dörfler * r3 1482d690920SAxel Dörfler */ 1492d690920SAxel DörflerFUNCTION(set_dbat0): 1502d690920SAxel Dörfler set_dbat(0) 1512d690920SAxel Dörfler blr 1522d690920SAxel DörflerFUNCTION(set_dbat1): 1532d690920SAxel Dörfler set_dbat(1) 1542d690920SAxel Dörfler blr 1552d690920SAxel DörflerFUNCTION(set_dbat2): 1562d690920SAxel Dörfler set_dbat(2) 1572d690920SAxel Dörfler blr 1582d690920SAxel DörflerFUNCTION(set_dbat3): 1592d690920SAxel Dörfler set_dbat(3) 1602d690920SAxel Dörfler blr 1612d690920SAxel Dörfler 1622d690920SAxel Dörfler/* void reset_dbats(void) 1632d690920SAxel Dörfler */ 1642d690920SAxel DörflerFUNCTION(reset_dbats): 1652d690920SAxel Dörfler li %r3, 0 1662d690920SAxel Dörfler mtdbatu 0, %r3 1672d690920SAxel Dörfler mtdbatl 0, %r3 1682d690920SAxel Dörfler mtdbatu 1, %r3 1692d690920SAxel Dörfler mtdbatl 1, %r3 1702d690920SAxel Dörfler mtdbatu 2, %r3 1712d690920SAxel Dörfler mtdbatl 2, %r3 1722d690920SAxel Dörfler mtdbatu 3, %r3 1732d690920SAxel Dörfler mtdbatl 3, %r3 1742d690920SAxel Dörfler blr 1752d690920SAxel Dörfler 17601b20991SAxel Dörfler/* void __eieio(void) 17701b20991SAxel Dörfler */ 17801b20991SAxel DörflerFUNCTION(__eieio): 17901b20991SAxel Dörfler eieio 18001b20991SAxel Dörfler blr 181