1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * (C) Copyright 2000 4 * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it 5 */ 6 7#ifndef _STDIO_DEV_H_ 8#define _STDIO_DEV_H_ 9 10#include <stdio.h> 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 * VARIABLES 53 */ 54extern struct stdio_dev *stdio_devices[]; 55extern char *stdio_names[MAX_FILES]; 56 57/* 58 * PROTOTYPES 59 */ 60int stdio_register(struct stdio_dev *dev); 61int stdio_register_dev(struct stdio_dev *dev, struct stdio_dev **devp); 62 63/** 64 * stdio_init_tables() - set up stdio tables ready for devices 65 * 66 * This does not add any devices, but just prepares stdio for use. 67 */ 68int stdio_init_tables(void); 69 70/** 71 * stdio_add_devices() - Add stdio devices to the table 72 * 73 * This makes calls to all the various subsystems that use stdio, to make 74 * them register with stdio. 75 */ 76int stdio_add_devices(void); 77 78/** 79 * stdio_init() - Sets up stdio ready for use 80 * 81 * This calls stdio_init_tables() and stdio_add_devices() 82 */ 83int stdio_init(void); 84 85void stdio_print_current_devices(void); 86int stdio_deregister(const char *devname, int force); 87 88/** 89 * stdio_deregister_dev() - deregister the device "devname". 90 * 91 * @dev: Stdio device to deregister 92 * @force: true to force deregistration even if in use 93 * 94 * returns 0 on success, -EBUSY if device is assigned 95 */ 96int stdio_deregister_dev(struct stdio_dev *dev, int force); 97struct list_head *stdio_get_list(void); 98struct stdio_dev *stdio_get_by_name(const char *name); 99struct stdio_dev *stdio_clone(struct stdio_dev *dev); 100 101int drv_lcd_init(void); 102int drv_video_init(void); 103int drv_keyboard_init(void); 104int drv_usbtty_init(void); 105int drv_nc_init(void); 106int drv_jtag_console_init(void); 107int cbmemc_init(void); 108 109#endif 110