📄 busscan.s
字号:
/* LEON2/3 LIBIO low-level routines Written by Jiri Gaisler. Copyright (C) 2004 Gaisler Research AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/!unsigned int ahbslv_scan(register unsigned int vendor,register unsigned int driver) {! register unsigned int conf, mbar,i, *confp;! register unsigned int cfg_area = (unsigned int ) (LEON3_IO_AREA | LEON3_CONF_AREA | LEON3_AHB_SLAVE_CONF_AREA);! for (i = 0; i < LEON3_AHB_SLAVES; i++) ! {! confp = (unsigned int*)(cfg_area + (i * LEON3_AHB_CONF_WORDS * 4));! conf = *confp;! //mbar = *(unsigned int*)(i * LEON3_AHB_CONF_WORDS+ (4 * 4));! if ((amba_vendor(conf) == vendor) && (amba_device(conf) == driver)) {! return (unsigned int)confp;! }! }! return 0;!} .section ".text" .global ahbslv_scan .align 4 ahbslv_scan: mov %o0, %g1 mov -2048, %o5 mov 0, %o3 sll %o3, 5, %o0.LL11: add %o5, %o0, %o4 ld [%o5+%o0], %o2 srl %o2, 24, %o0 cmp %o0, %g1 bne,a .LL10 add %o3, 1, %o3 srl %o2, 12, %o0 and %o0, 4095, %o0 cmp %o0, %o1 be .LL1 mov %o4, %o2 add %o3, 1, %o3.LL10: cmp %o3, 7 bleu,a .LL11 sll %o3, 5, %o0 mov 0, %o2.LL1: retl mov %o2, %o0!unsigned int apbslv_scan(register unsigned int base,register unsigned int vendor, register unsigned int driver) {! register unsigned int conf, mbar,i, *confp;! for (i = 0; i < LEON3_APB_SLAVES; i++) ! {! confp = (unsigned int*)(base + (i * LEON3_APB_CONF_WORDS * 4));! conf = *confp;! //mbar = *(unsigned int*)(i * LEON3_AHB_CONF_WORDS+ (4 * 4));! if ((amba_vendor(conf) == vendor) && (amba_device(conf) == driver)) {! return (unsigned int)confp;! }! }! return 0;!} .section ".text" .align 4 .global apbslv_scan apbslv_scan: mov %o0, %g1 mov 0, %o4 sll %o4, 3, %o0.LL22: add %g1, %o0, %o5 ld [%g1+%o0], %o3 srl %o3, 24, %o0 cmp %o0, %o1 bne,a .LL21 add %o4, 1, %o4 srl %o3, 12, %o0 and %o0, 4095, %o0 cmp %o0, %o2 be .LL12 mov %o5, %o3 add %o4, 1, %o4.LL21: cmp %o4, 15 bleu,a .LL22 sll %o4, 3, %o0 mov 0, %o3.LL12: retl mov %o3, %o0!unsigned int getbase(register unsigned int *mbar,register unsigned int iobase) {! register unsigned int conf = mbar[1];! return ((iobase & 0xfff00000) |! ((conf & 0xfff00000)>> 12)) & (((conf & 0x0000fff0) <<4) | 0xfff00000);! !} .section ".text" .align 4 .global iobar_getbaseiobar_getbase: ld [%o0+4], %o2 sethi %hi(-1048576), %o3 and %o1, %o3, %o1 and %o2, %o3, %o0 srl %o0, 12, %o0 or %o1, %o0, %o1 sethi %hi(64512), %o0 or %o0, 1008, %o0 and %o2, %o0, %o2 sll %o2, 4, %o2 or %o2, %o3, %o2 and %o1, %o2, %o1 retl mov %o1, %o0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -