1/* 2 * Copyright 2010 Tilera Corporation. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 * NON INFRINGEMENT. See the GNU General Public License for 12 * more details. 13 * 14 * Tilera TILE Processor hypervisor console 15 */ 16 17#include <linux/console.h> 18#include <linux/delay.h> 19#include <linux/err.h> 20#include <linux/init.h> 21#include <linux/moduleparam.h> 22#include <linux/types.h> 23 24#include <hv/hypervisor.h> 25 26#include "hvc_console.h" 27 28static int hvc_tile_put_chars(uint32_t vt, const char *buf, int count) 29{ 30 return hv_console_write((HV_VirtAddr)buf, count); 31} 32 33static int hvc_tile_get_chars(uint32_t vt, char *buf, int count) 34{ 35 int i, c; 36 37 for (i = 0; i < count; ++i) { 38 c = hv_console_read_if_ready(); 39 if (c < 0) 40 break; 41 buf[i] = c; 42 } 43 44 return i; 45} 46 47static const struct hv_ops hvc_tile_get_put_ops = { 48 .get_chars = hvc_tile_get_chars, 49 .put_chars = hvc_tile_put_chars, 50}; 51 52static int __init hvc_tile_console_init(void) 53{ 54 extern void disable_early_printk(void); 55 hvc_instantiate(0, 0, &hvc_tile_get_put_ops); 56 add_preferred_console("hvc", 0, NULL); 57 disable_early_printk(); 58 return 0; 59} 60console_initcall(hvc_tile_console_init); 61 62static int __init hvc_tile_init(void) 63{ 64 hvc_alloc(0, 0, &hvc_tile_get_put_ops, 128); 65 return 0; 66} 67device_initcall(hvc_tile_init); 68