1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 252cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* 352cb4d4fSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2000 452cb4d4fSJean-Christophe PLAGNIOL-VILLARD * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it 552cb4d4fSJean-Christophe PLAGNIOL-VILLARD */ 652cb4d4fSJean-Christophe PLAGNIOL-VILLARD 752cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifndef _STDIO_DEV_H_ 852cb4d4fSJean-Christophe PLAGNIOL-VILLARD #define _STDIO_DEV_H_ 952cb4d4fSJean-Christophe PLAGNIOL-VILLARD 1027b4225bSTom Rini #include <stdio.h> 1152cb4d4fSJean-Christophe PLAGNIOL-VILLARD #include <linux/list.h> 1252cb4d4fSJean-Christophe PLAGNIOL-VILLARD 1352cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* 1452cb4d4fSJean-Christophe PLAGNIOL-VILLARD * STDIO DEVICES 1552cb4d4fSJean-Christophe PLAGNIOL-VILLARD */ 1652cb4d4fSJean-Christophe PLAGNIOL-VILLARD 1752cb4d4fSJean-Christophe PLAGNIOL-VILLARD #define DEV_FLAGS_INPUT 0x00000001 /* Device can be used as input console */ 1852cb4d4fSJean-Christophe PLAGNIOL-VILLARD #define DEV_FLAGS_OUTPUT 0x00000002 /* Device can be used as output console */ 197b3c4c3aSSimon Glass #define DEV_FLAGS_DM 0x00000004 /* Device priv is a struct udevice * */ 2052cb4d4fSJean-Christophe PLAGNIOL-VILLARD 2152cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* Device information */ 2252cb4d4fSJean-Christophe PLAGNIOL-VILLARD struct stdio_dev { 2352cb4d4fSJean-Christophe PLAGNIOL-VILLARD int flags; /* Device flags: input/output/system */ 2452cb4d4fSJean-Christophe PLAGNIOL-VILLARD int ext; /* Supported extensions */ 255294e978SAlexey Brodkin char name[32]; /* Device name */ 2652cb4d4fSJean-Christophe PLAGNIOL-VILLARD 2752cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* GENERAL functions */ 2852cb4d4fSJean-Christophe PLAGNIOL-VILLARD 29709ea543SSimon Glass int (*start)(struct stdio_dev *dev); /* To start the device */ 30709ea543SSimon Glass int (*stop)(struct stdio_dev *dev); /* To stop the device */ 3152cb4d4fSJean-Christophe PLAGNIOL-VILLARD 3252cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* OUTPUT functions */ 3352cb4d4fSJean-Christophe PLAGNIOL-VILLARD 34709ea543SSimon Glass /* To put a char */ 35709ea543SSimon Glass void (*putc)(struct stdio_dev *dev, const char c); 36709ea543SSimon Glass /* To put a string (accelerator) */ 37709ea543SSimon Glass void (*puts)(struct stdio_dev *dev, const char *s); 3852cb4d4fSJean-Christophe PLAGNIOL-VILLARD 3952cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* INPUT functions */ 4052cb4d4fSJean-Christophe PLAGNIOL-VILLARD 41709ea543SSimon Glass /* To test if a char is ready... */ 42709ea543SSimon Glass int (*tstc)(struct stdio_dev *dev); 43709ea543SSimon Glass int (*getc)(struct stdio_dev *dev); /* To get that char */ 4452cb4d4fSJean-Christophe PLAGNIOL-VILLARD 4552cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* Other functions */ 4652cb4d4fSJean-Christophe PLAGNIOL-VILLARD 4752cb4d4fSJean-Christophe PLAGNIOL-VILLARD void *priv; /* Private extensions */ 4852cb4d4fSJean-Christophe PLAGNIOL-VILLARD struct list_head list; 4952cb4d4fSJean-Christophe PLAGNIOL-VILLARD }; 5052cb4d4fSJean-Christophe PLAGNIOL-VILLARD 5152cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* 5252cb4d4fSJean-Christophe PLAGNIOL-VILLARD * VARIABLES 5352cb4d4fSJean-Christophe PLAGNIOL-VILLARD */ 5452cb4d4fSJean-Christophe PLAGNIOL-VILLARD extern struct stdio_dev *stdio_devices[]; 5552cb4d4fSJean-Christophe PLAGNIOL-VILLARD extern char *stdio_names[MAX_FILES]; 5652cb4d4fSJean-Christophe PLAGNIOL-VILLARD 5752cb4d4fSJean-Christophe PLAGNIOL-VILLARD /* 5852cb4d4fSJean-Christophe PLAGNIOL-VILLARD * PROTOTYPES 5952cb4d4fSJean-Christophe PLAGNIOL-VILLARD */ 6052cb4d4fSJean-Christophe PLAGNIOL-VILLARD int stdio_register (struct stdio_dev * dev); 61d97143a6SSimon Glass int stdio_register_dev(struct stdio_dev *dev, struct stdio_dev **devp); 629fb02491SSimon Glass 639fb02491SSimon Glass /** 649fb02491SSimon Glass * stdio_init_tables() - set up stdio tables ready for devices 659fb02491SSimon Glass * 669fb02491SSimon Glass * This does not add any devices, but just prepares stdio for use. 679fb02491SSimon Glass */ 689fb02491SSimon Glass int stdio_init_tables(void); 699fb02491SSimon Glass 709fb02491SSimon Glass /** 719fb02491SSimon Glass * stdio_add_devices() - Add stdio devices to the table 729fb02491SSimon Glass * 739fb02491SSimon Glass * This makes calls to all the various subsystems that use stdio, to make 749fb02491SSimon Glass * them register with stdio. 759fb02491SSimon Glass */ 769fb02491SSimon Glass int stdio_add_devices(void); 779fb02491SSimon Glass 789fb02491SSimon Glass /** 799fb02491SSimon Glass * stdio_init() - Sets up stdio ready for use 809fb02491SSimon Glass * 819fb02491SSimon Glass * This calls stdio_init_tables() and stdio_add_devices() 829fb02491SSimon Glass */ 8352cb4d4fSJean-Christophe PLAGNIOL-VILLARD int stdio_init(void); 849fb02491SSimon Glass 857e3be7cfSJean-Christophe PLAGNIOL-VILLARD void stdio_print_current_devices(void); 86869588deSSimon Glass #if CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) 8732d01926SHans de Goede int stdio_deregister(const char *devname, int force); 8832d01926SHans de Goede int stdio_deregister_dev(struct stdio_dev *dev, int force); 8952cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 9052cb4d4fSJean-Christophe PLAGNIOL-VILLARD struct list_head* stdio_get_list(void); 91d7be3056SMike Frysinger struct stdio_dev* stdio_get_by_name(const char* name); 9252cb4d4fSJean-Christophe PLAGNIOL-VILLARD struct stdio_dev* stdio_clone(struct stdio_dev *dev); 9352cb4d4fSJean-Christophe PLAGNIOL-VILLARD 9452cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_LCD 9552cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_lcd_init (void); 9652cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 9752cb4d4fSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) 9852cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_video_init (void); 9952cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 10052cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_KEYBOARD 10152cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_keyboard_init (void); 10252cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 10352cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_USB_TTY 10452cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_usbtty_init (void); 10552cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 10652cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_NETCONSOLE 10752cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_nc_init (void); 10852cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 10952cb4d4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_JTAG_CONSOLE 11052cb4d4fSJean-Christophe PLAGNIOL-VILLARD int drv_jtag_console_init (void); 11152cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 11298ab435fSVadim Bendebury #ifdef CONFIG_CBMEM_CONSOLE 11398ab435fSVadim Bendebury int cbmemc_init(void); 11498ab435fSVadim Bendebury #endif 11552cb4d4fSJean-Christophe PLAGNIOL-VILLARD 11652cb4d4fSJean-Christophe PLAGNIOL-VILLARD #endif 117