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