/* PALcode and C runtime functions for the CLIPPER system emulation. Copyright (C) 2011 Richard Henderson This file is part of QEMU PALcode. 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 text of the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not see . */ #include "pal.h" #include SYSTEM_H /* * Sys_Setup * * Do any system specific setup necessary. * * INPUT PARAMETERS * * a0 = whami * p7 = return address */ .globl Sys_Setup .ent Sys_Setup Sys_Setup: .frame $sp, 0, p7, 0 LOAD_PHYS_CCHIP t0 lda t0, TYPHOON_CCHIP_DIR0(t0) // DIR[23] differ from DIR[01] by 0x400 // DIR[13] differ from DIR[02] by 0x40 and a0, 2, t4 and a0, 1, t3 sll t4, 9, t4 sll t3, 6, t3 addq t0, t4, t0 addq t0, t3, t0 // IIC[0-4] differ from DIR[0-4] by 0x100 lda t2, 0x100(t0) mtpr t0, ptCpuDIR mtpr t2, ptCpuIIC ret .end Sys_Setup /* * Sys_Dev_Vector * * Load the SRM interrupt vector for the system. * * INPUT PARAMETERS * * p7 = return address * * OUTPUT PARAMETERS * * a1 = interrupt vector */ .globl Sys_Dev_Vector .ent Sys_Dev_Vector Sys_Dev_Vector: .frame $sp, 0, p7, 0 mfpr a1, ptCpuDIR // Load int mask for this CPU ldq_p a1, 0(a1) beq a1, CallPal_Rti // No interrupts asserted? cttz a1, a1 // Find the first asserted interrupt. cmpeq a1, 55, a0 // Is this an ISA interrupt? addq a1, 16, a1 // PCI interrupt numbers start at 16 beq a0, 1f LOAD_PHYS_PCHIP0_IACK a1 // IACK results in the ISA irq ldl_p a1, 0(a1) 1: sll a1, 4, a1 lda a1, 0x800(a1) ret $31, (p7), 0 .end Sys_Dev_Vector /* * Cserve_Ena * * Unmask a PCI interrupt */ .globl Cserve_Ena Cserve_Ena: // FIXME hw_rei ENDFN Cserve_Ena /* * Cserve_Dis * * Mask a PCI interrupt */ .globl Cserve_Dis Cserve_Dis: // FIXME hw_rei ENDFN Cserve_Dis /* * PCI parameters */ .section .sdata .align 3 .globl pci_io_base .type pci_io_base, @object .size pci_io_base, 8 pci_io_base: .quad PIO_KSEG_ADDR + TYPHOON_PCHIP0_PCI_IO .globl pci_conf_base .type pci_conf_base, @object .size pci_conf_base, 8 pci_conf_base: .quad PIO_KSEG_ADDR + TYPHOON_PCHIP0_PCI_CONF .align 3 .globl pci_mem_base .type pci_mem_base, @object .size pci_mem_base, 8 pci_mem_base: .quad PIO_KSEG_ADDR + TYPHOON_PCHIP0_PCI_MEM