|
|
1.1 ! root 1: /* ! 2: * Creation Date: <2003/12/19 18:46:21 samuel> ! 3: * Time-stamp: <2004/04/12 16:27:12 samuel> ! 4: * ! 5: * <mol.c> ! 6: * ! 7: * ! 8: * ! 9: * Copyright (C) 2003, 2004 Samuel Rydh ([email protected]) ! 10: * ! 11: * This program is free software; you can redistribute it and/or ! 12: * modify it under the terms of the GNU General Public License ! 13: * version 2 ! 14: * ! 15: */ ! 16: ! 17: #include "config.h" ! 18: #include "kernel/kernel.h" ! 19: #include "arch/common/nvram.h" ! 20: #include "libc/vsprintf.h" ! 21: #include "libc/string.h" ! 22: #include "mol/mol.h" ! 23: #include "osi_calls.h" ! 24: #include <stdarg.h> ! 25: ! 26: void ! 27: exit( int status ) ! 28: { ! 29: OSI_Exit(); ! 30: } ! 31: ! 32: void ! 33: fatal_error( const char *err ) ! 34: { ! 35: printk("Fatal error: %s\n", err ); ! 36: OSI_Exit(); ! 37: } ! 38: ! 39: void ! 40: panic( const char *err ) ! 41: { ! 42: printk("Panic: %s\n", err ); ! 43: OSI_Exit(); ! 44: ! 45: /* won't come here... this keeps the gcc happy */ ! 46: for( ;; ) ! 47: ; ! 48: } ! 49: ! 50: ! 51: /************************************************************************/ ! 52: /* print using OSI interface */ ! 53: /************************************************************************/ ! 54: ! 55: static int do_indent; ! 56: ! 57: int ! 58: printk( const char *fmt, ... ) ! 59: { ! 60: char *p, buf[1024]; ! 61: va_list args; ! 62: int i; ! 63: ! 64: va_start(args, fmt); ! 65: i = vnsprintf(buf, sizeof(buf), fmt, args); ! 66: va_end(args); ! 67: ! 68: for( p=buf; *p; p++ ) { ! 69: if( *p == '\n' ) ! 70: do_indent = 0; ! 71: if( do_indent++ == 1 ) { ! 72: OSI_PutC( '>' ); ! 73: OSI_PutC( '>' ); ! 74: OSI_PutC( ' ' ); ! 75: } ! 76: OSI_PutC( *p ); ! 77: } ! 78: return i; ! 79: } ! 80: ! 81: ! 82: /************************************************************************/ ! 83: /* TTY iface */ ! 84: /************************************************************************/ ! 85: ! 86: static int ttychar = -1; ! 87: ! 88: static int ! 89: tty_avail( void ) ! 90: { ! 91: return OSI_CallAvailable( OSI_TTY_GETC ); ! 92: } ! 93: ! 94: int ! 95: availchar( void ) ! 96: { ! 97: if( !tty_avail() ) ! 98: return 0; ! 99: ! 100: if( ttychar < 0 ) ! 101: ttychar = OSI_TTYGetc(); ! 102: if( ttychar < 0 ) ! 103: OSI_USleep(1); ! 104: return (ttychar >= 0); ! 105: } ! 106: ! 107: int ! 108: getchar( void ) ! 109: { ! 110: int ch; ! 111: ! 112: if( !tty_avail() ) ! 113: return 0; ! 114: ! 115: if( ttychar < 0 ) ! 116: return OSI_TTYGetc(); ! 117: ch = ttychar; ! 118: ttychar = -1; ! 119: return ch; ! 120: } ! 121: ! 122: int ! 123: putchar( int c ) ! 124: { ! 125: printk("%c", c ); ! 126: ! 127: if( tty_avail() ) ! 128: OSI_TTYPutc( c ); ! 129: return c; ! 130: } ! 131: ! 132: ! 133: /************************************************************************/ ! 134: /* MOL specific stuff */ ! 135: /************************************************************************/ ! 136: ! 137: int ! 138: arch_nvram_size( void ) ! 139: { ! 140: return OSI_NVRamSize(); ! 141: } ! 142: ! 143: void ! 144: arch_nvram_put( char *buf ) ! 145: { ! 146: int i, size = arch_nvram_size(); ! 147: ! 148: for( i=0; i<size; i++ ) ! 149: OSI_WriteNVRamByte( i, buf[i] ); ! 150: } ! 151: ! 152: void ! 153: arch_nvram_get( char *buf ) ! 154: { ! 155: int i, size = arch_nvram_size(); ! 156: ! 157: /* support for zapping the nvram */ ! 158: if( get_bool_res("zap_nvram") == 1 ) { ! 159: memset( buf, 0, size ); ! 160: return; ! 161: } ! 162: ! 163: for( i=0; i<size; i++ ) ! 164: buf[i] = OSI_ReadNVRamByte( i ); ! 165: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.