xref: /openbmc/u-boot/include/stdio_dev.h (revision e8f80a5a)
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