1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright (c) 2013 Joyent, Inc. All rights reserved. 14 */ 15 16 /* 17 * bcm2835 boot console implementation 18 */ 19 20 #include "miniuart.h" 21 22 /* 23 * There are a few different potential boot consoles that we could have on the 24 * bcm2835. There is both a mini uart and a full functioning uart. Generally, 25 * people will use the mini uart, but we want to support both. As such we have a 26 * single global ops vector that we set once during bcons_init and never again. 27 */ 28 #define BMC2835_CONSNAME_MAX 24 29 typedef struct bcm2835_consops { 30 char bco_name[BMC2835_CONSNAME_MAX]; 31 void (*bco_putc)(uint8_t); 32 uint8_t (*bco_getc)(void); 33 int (*bco_isc)(void); 34 } bcm2835_consops_t; 35 36 static bcm2835_consops_t consops; 37 38 /* 39 * For now, we only support the mini uart. 40 */ 41 void 42 bcons_init(char *bstr) 43 { 44 bcm2835_miniuart_init(); 45 consops.bco_putc = bcm2835_miniuart_putc; 46 consops.bco_getc = bcm2835_miniuart_getc; 47 consops.bco_isc = bcm2835_miniuart_isc; 48 } 49 50 void 51 bcons_putchar(int c) 52 { 53 consops.bco_putc(c); 54 } 55 56 void 57 bcons_puts(const char *str) 58 { 59 const char *c = str; 60 while (*c != '\0') 61 consops.bco_putc(*c++); 62 } 63 64 int 65 bcons_getchar(void) 66 { 67 return (consops.bco_getc()); 68 } 69 70 int 71 bcons_ischar(void) 72 { 73 return (consops.bco_isc()); 74 }