1/* 2 * (C) Copyright 2000 3 * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8#ifndef _STDIO_DEV_H_ 9#define _STDIO_DEV_H_ 10 11#include <linux/list.h> 12 13/* 14 * STDIO DEVICES 15 */ 16 17#define DEV_FLAGS_INPUT 0x00000001 /* Device can be used as input console */ 18#define DEV_FLAGS_OUTPUT 0x00000002 /* Device can be used as output console */ 19#define DEV_FLAGS_DM 0x00000004 /* Device priv is a struct udevice * */ 20 21/* Device information */ 22struct stdio_dev { 23 int flags; /* Device flags: input/output/system */ 24 int ext; /* Supported extensions */ 25 char name[32]; /* Device name */ 26 27/* GENERAL functions */ 28 29 int (*start)(struct stdio_dev *dev); /* To start the device */ 30 int (*stop)(struct stdio_dev *dev); /* To stop the device */ 31 32/* OUTPUT functions */ 33 34 /* To put a char */ 35 void (*putc)(struct stdio_dev *dev, const char c); 36 /* To put a string (accelerator) */ 37 void (*puts)(struct stdio_dev *dev, const char *s); 38 39/* INPUT functions */ 40 41 /* To test if a char is ready... */ 42 int (*tstc)(struct stdio_dev *dev); 43 int (*getc)(struct stdio_dev *dev); /* To get that char */ 44 45/* Other functions */ 46 47 void *priv; /* Private extensions */ 48 struct list_head list; 49}; 50 51/* 52 * VIDEO EXTENSIONS 53 */ 54#define VIDEO_FORMAT_RGB_INDEXED 0x0000 55#define VIDEO_FORMAT_RGB_DIRECTCOLOR 0x0001 56#define VIDEO_FORMAT_YUYV_4_4_4 0x0010 57#define VIDEO_FORMAT_YUYV_4_2_2 0x0011 58 59typedef struct { 60 void *address; /* Address of framebuffer */ 61 ushort width; /* Horizontal resolution */ 62 ushort height; /* Vertical resolution */ 63 uchar format; /* Format */ 64 uchar colors; /* Colors number or color depth */ 65 void (*setcolreg) (int, int, int, int); 66 void (*getcolreg) (int, void *); 67} video_ext_t; 68 69/* 70 * VARIABLES 71 */ 72extern struct stdio_dev *stdio_devices[]; 73extern char *stdio_names[MAX_FILES]; 74 75/* 76 * PROTOTYPES 77 */ 78int stdio_register (struct stdio_dev * dev); 79int stdio_register_dev(struct stdio_dev *dev, struct stdio_dev **devp); 80 81/** 82 * stdio_init_tables() - set up stdio tables ready for devices 83 * 84 * This does not add any devices, but just prepares stdio for use. 85 */ 86int stdio_init_tables(void); 87 88/** 89 * stdio_add_devices() - Add stdio devices to the table 90 * 91 * This makes calls to all the various subsystems that use stdio, to make 92 * them register with stdio. 93 */ 94int stdio_add_devices(void); 95 96/** 97 * stdio_init() - Sets up stdio ready for use 98 * 99 * This calls stdio_init_tables() and stdio_add_devices() 100 */ 101int stdio_init(void); 102 103void stdio_print_current_devices(void); 104#if CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) 105int stdio_deregister(const char *devname, int force); 106int stdio_deregister_dev(struct stdio_dev *dev, int force); 107#endif 108struct list_head* stdio_get_list(void); 109struct stdio_dev* stdio_get_by_name(const char* name); 110struct stdio_dev* stdio_clone(struct stdio_dev *dev); 111 112#ifdef CONFIG_LCD 113int drv_lcd_init (void); 114#endif 115#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) 116int drv_video_init (void); 117#endif 118#ifdef CONFIG_KEYBOARD 119int drv_keyboard_init (void); 120#endif 121#ifdef CONFIG_USB_TTY 122int drv_usbtty_init (void); 123#endif 124#ifdef CONFIG_NETCONSOLE 125int drv_nc_init (void); 126#endif 127#ifdef CONFIG_JTAG_CONSOLE 128int drv_jtag_console_init (void); 129#endif 130#ifdef CONFIG_CBMEM_CONSOLE 131int cbmemc_init(void); 132#endif 133 134#endif 135