2010-05-29 07:09:12 +04:00
/*
2010-07-02 22:19:35 +04:00
* Copyright 2010 Tilera Corporation . All Rights Reserved .
2010-05-29 07:09:12 +04:00
*
2010-07-02 22:19:35 +04:00
* 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 , version 2.
2010-05-29 07:09:12 +04:00
*
2010-07-02 22:19:35 +04:00
* 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 , GOOD TITLE or
* NON INFRINGEMENT . See the GNU General Public License for
* more details .
2010-05-29 07:09:12 +04:00
*
* Tilera TILE Processor hypervisor console
*/
# include <linux/console.h>
# include <linux/delay.h>
# include <linux/err.h>
# include <linux/init.h>
# include <linux/moduleparam.h>
# include <linux/types.h>
# include <hv/hypervisor.h>
# include "hvc_console.h"
static int hvc_tile_put_chars ( uint32_t vt , const char * buf , int count )
{
return hv_console_write ( ( HV_VirtAddr ) buf , count ) ;
}
static int hvc_tile_get_chars ( uint32_t vt , char * buf , int count )
{
int i , c ;
for ( i = 0 ; i < count ; + + i ) {
c = hv_console_read_if_ready ( ) ;
if ( c < 0 )
break ;
buf [ i ] = c ;
}
return i ;
}
static const struct hv_ops hvc_tile_get_put_ops = {
. get_chars = hvc_tile_get_chars ,
. put_chars = hvc_tile_put_chars ,
} ;
static int __init hvc_tile_console_init ( void )
{
extern void disable_early_printk ( void ) ;
hvc_instantiate ( 0 , 0 , & hvc_tile_get_put_ops ) ;
add_preferred_console ( " hvc " , 0 , NULL ) ;
disable_early_printk ( ) ;
return 0 ;
}
console_initcall ( hvc_tile_console_init ) ;
static int __init hvc_tile_init ( void )
{
2010-09-12 22:57:14 +04:00
struct hvc_struct * s ;
s = hvc_alloc ( 0 , 0 , & hvc_tile_get_put_ops , 128 ) ;
return IS_ERR ( s ) ? PTR_ERR ( s ) : 0 ;
2010-05-29 07:09:12 +04:00
}
device_initcall ( hvc_tile_init ) ;