Annotation of qemu/roms/openbios/arch/ppc/mol/mol.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.