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