|
|
1.1 ! root 1: /* Declarations common the the C portions of the QEMU PALcode console. ! 2: ! 3: Copyright (C) 2011 Richard Henderson ! 4: ! 5: This file is part of QEMU PALcode. ! 6: ! 7: This program is free software; you can redistribute it and/or modify ! 8: it under the terms of the GNU General Public License as published by ! 9: the Free Software Foundation; either version 2 of the License or ! 10: (at your option) any later version. ! 11: ! 12: This program is distributed in the hope that it will be useful, ! 13: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the text ! 15: of the GNU General Public License for more details. ! 16: ! 17: You should have received a copy of the GNU General Public License ! 18: along with this program; see the file COPYING. If not see ! 19: <http://www.gnu.org/licenses/>. */ ! 20: ! 21: #ifndef PROTOS_H ! 22: #define PROTOS_H 1 ! 23: ! 24: #include <stdint.h> ! 25: #include <stdbool.h> ! 26: #include <stddef.h> ! 27: #include <string.h> ! 28: ! 29: ! 30: /* ! 31: * Call_Pal functions. ! 32: */ ! 33: ! 34: static inline void wrent(void *cb, unsigned long which) ! 35: { ! 36: register void *a0 __asm__("$16") = cb; ! 37: register unsigned long a1 __asm__("$17") = which; ! 38: ! 39: asm volatile ("call_pal 0x34" ! 40: : "+r"(a0), "+r"(a1) ! 41: : : "$1", "$22", "$23", "$24", "$25"); ! 42: } ! 43: ! 44: static inline unsigned long swpipl(unsigned long newipl) ! 45: { ! 46: register unsigned long v0 __asm__("$0"); ! 47: register unsigned long a0 __asm__("$16") = newipl; ! 48: ! 49: asm volatile ("call_pal 0x35" ! 50: : "=r"(v0), "+r"(a0) ! 51: : : "$1", "$22", "$23", "$24", "$25"); ! 52: ! 53: return v0; ! 54: } ! 55: ! 56: static inline unsigned long rdps(void) ! 57: { ! 58: register unsigned long v0 __asm__("$0"); ! 59: ! 60: asm volatile ("call_pal 0x36" ! 61: : "=r"(v0) : : "$1", "$22", "$23", "$24", "$25"); ! 62: ! 63: return v0; ! 64: } ! 65: ! 66: static inline void wrkgp(void) ! 67: { ! 68: asm volatile ("mov $29, $16\n\tcall_pal 0x37" ! 69: : : : "$16", "$1", "$22", "$23", "$24", "$25"); ! 70: } ! 71: ! 72: static inline unsigned long wtint(unsigned long skip) ! 73: { ! 74: register unsigned long v0 __asm__("$0"); ! 75: register unsigned long a0 __asm__("$16") = skip; ! 76: ! 77: asm volatile ("call_pal 0x3e" ! 78: : "=r"(v0), "+r"(a0) ! 79: : : "$1", "$22", "$23", "$24", "$25"); ! 80: ! 81: return v0; ! 82: } ! 83: ! 84: /* ! 85: * Cserve functions. ! 86: */ ! 87: ! 88: static inline unsigned long ldq_p(unsigned long addr) ! 89: { ! 90: register unsigned long v0 __asm__("$0"); ! 91: register unsigned long a0 __asm__("$16") = 1; ! 92: register unsigned long a1 __asm__("$17") = addr; ! 93: ! 94: asm volatile ("call_pal 9" ! 95: : "=r"(v0), "+r"(a0), "+r"(a1) : ! 96: : "$18", "$19", "$20", "$21"); ! 97: ! 98: return v0; ! 99: } ! 100: ! 101: static inline unsigned long stq_p(unsigned long port, unsigned long val) ! 102: { ! 103: register unsigned long v0 __asm__("$0"); ! 104: register unsigned long a0 __asm__("$16") = 2; ! 105: register unsigned long a1 __asm__("$17") = port; ! 106: register unsigned long a2 __asm__("$18") = val; ! 107: ! 108: asm volatile ("call_pal 9" ! 109: : "=r"(v0), "+r"(a0), "+r"(a1), "+r"(a2) : ! 110: : "$19", "$20", "$21"); ! 111: ! 112: return v0; ! 113: } ! 114: ! 115: static inline unsigned long get_wall_time(void) ! 116: { ! 117: register unsigned long v0 __asm__("$0"); ! 118: register unsigned long a0 __asm__("$16") = 3; ! 119: ! 120: asm("call_pal 9" : "=r"(v0), "+r"(a0) : : "$17", "$18", "$19", "$20", "$21"); ! 121: ! 122: return v0; ! 123: } ! 124: ! 125: static inline unsigned long get_alarm(void) ! 126: { ! 127: register unsigned long v0 __asm__("$0"); ! 128: register unsigned long a0 __asm__("$16") = 4; ! 129: ! 130: asm("call_pal 9" : "=r"(v0), "+r"(a0) : : "$17", "$18", "$19", "$20", "$21"); ! 131: ! 132: return v0; ! 133: } ! 134: ! 135: static inline void set_alarm_rel(unsigned long nsec) ! 136: { ! 137: register unsigned long a0 __asm__("$16") = 5; ! 138: register unsigned long a1 __asm__("$17") = nsec; ! 139: ! 140: asm volatile ("call_pal 9" ! 141: : "+r"(a0), "+r"(a1) ! 142: : : "$0", "$18", "$19", "$20", "$21"); ! 143: } ! 144: ! 145: static inline void set_alarm_abs(unsigned long nsec) ! 146: { ! 147: register unsigned long a0 __asm__("$16") = 6; ! 148: register unsigned long a1 __asm__("$17") = nsec; ! 149: ! 150: asm volatile ("call_pal 9" ! 151: : "+r"(a0), "+r"(a1) ! 152: : : "$0", "$18", "$19", "$20", "$21"); ! 153: } ! 154: ! 155: /* ! 156: * I/O functions ! 157: */ ! 158: ! 159: extern void *pci_io_base; ! 160: extern void *pci_mem_base; ! 161: ! 162: static inline uint8_t inb(unsigned long port) ! 163: { ! 164: return *(volatile uint8_t *)(pci_io_base + port); ! 165: } ! 166: ! 167: static inline uint16_t inw(unsigned long port) ! 168: { ! 169: return *(volatile uint16_t *)(pci_io_base + port); ! 170: } ! 171: ! 172: static inline uint32_t inl(unsigned long port) ! 173: { ! 174: return *(volatile uint32_t *)(pci_io_base + port); ! 175: } ! 176: ! 177: static inline void outb(uint8_t val, unsigned long port) ! 178: { ! 179: *(volatile uint8_t *)(pci_io_base + port) = val; ! 180: } ! 181: ! 182: static inline void outw(uint16_t val, unsigned long port) ! 183: { ! 184: *(volatile uint16_t *)(pci_io_base + port) = val; ! 185: } ! 186: ! 187: static inline void outl(uint32_t val, unsigned long port) ! 188: { ! 189: *(volatile uint32_t *)(pci_io_base + port) = val; ! 190: } ! 191: ! 192: /* ! 193: * CRB functions ! 194: */ ! 195: ! 196: extern unsigned long crb_dispatch(long select, long a1, long a2, ! 197: long a3, long a4); ! 198: extern unsigned long crb_fixup(unsigned long vptptr, unsigned long hwrpb); ! 199: ! 200: /* ! 201: * The Console ! 202: */ ! 203: ! 204: extern bool have_vga; ! 205: ! 206: extern void do_console(void); ! 207: extern void entInt(void); ! 208: ! 209: /* ! 210: * Utils ! 211: */ ! 212: ! 213: extern int printf(const char *, ...); ! 214: extern void ndelay(unsigned long nsec); ! 215: ! 216: static inline void udelay(unsigned long msec) ! 217: { ! 218: ndelay(msec * 1000); ! 219: } ! 220: ! 221: /* ! 222: * Initialization ! 223: */ ! 224: extern void ps2port_setup(void); ! 225: extern void pci_setup(void); ! 226: ! 227: #endif /* PROTOS_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.