blob: 8fb9a12dd87694630ba582176e6efa4f4919f5fb [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
wdenke831ad52002-10-17 21:52:26 +00002/*
3 * (C) Copyright 2000
4 * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
wdenke831ad52002-10-17 21:52:26 +00005 */
6
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +02007#ifndef _STDIO_DEV_H_
8#define _STDIO_DEV_H_
9
Tom Rini27b42252018-05-03 09:12:26 -040010#include <stdio.h>
Jean-Christophe PLAGNIOL-VILLARDc1de7a62008-08-31 04:24:55 +020011#include <linux/list.h>
wdenke831ad52002-10-17 21:52:26 +000012
wdenke831ad52002-10-17 21:52:26 +000013/*
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +020014 * STDIO DEVICES
wdenke831ad52002-10-17 21:52:26 +000015 */
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 */
Simon Glass7b3c4c32017-07-27 09:31:04 -060019#define DEV_FLAGS_DM 0x00000004 /* Device priv is a struct udevice * */
wdenke831ad52002-10-17 21:52:26 +000020
Andy Shevchenkod9b0ac92021-02-11 17:09:36 +020021int stdio_file_to_flags(const int file);
22
wdenk47cd00f2003-03-06 13:39:27 +000023/* Device information */
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +020024struct stdio_dev {
wdenke831ad52002-10-17 21:52:26 +000025 int flags; /* Device flags: input/output/system */
26 int ext; /* Supported extensions */
Alexey Brodkin5294e972015-02-25 21:26:46 +030027 char name[32]; /* Device name */
wdenke831ad52002-10-17 21:52:26 +000028
29/* GENERAL functions */
30
Simon Glass709ea542014-07-23 06:54:59 -060031 int (*start)(struct stdio_dev *dev); /* To start the device */
32 int (*stop)(struct stdio_dev *dev); /* To stop the device */
wdenke831ad52002-10-17 21:52:26 +000033
34/* OUTPUT functions */
35
Simon Glass709ea542014-07-23 06:54:59 -060036 /* To put a char */
37 void (*putc)(struct stdio_dev *dev, const char c);
38 /* To put a string (accelerator) */
39 void (*puts)(struct stdio_dev *dev, const char *s);
wdenke831ad52002-10-17 21:52:26 +000040
41/* INPUT functions */
42
Simon Glass709ea542014-07-23 06:54:59 -060043 /* To test if a char is ready... */
44 int (*tstc)(struct stdio_dev *dev);
45 int (*getc)(struct stdio_dev *dev); /* To get that char */
wdenke831ad52002-10-17 21:52:26 +000046
47/* Other functions */
48
49 void *priv; /* Private extensions */
Jean-Christophe PLAGNIOL-VILLARDc1de7a62008-08-31 04:24:55 +020050 struct list_head list;
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +020051};
wdenke831ad52002-10-17 21:52:26 +000052
53/*
wdenke831ad52002-10-17 21:52:26 +000054 * VARIABLES
55 */
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +020056extern struct stdio_dev *stdio_devices[];
wdenke831ad52002-10-17 21:52:26 +000057extern char *stdio_names[MAX_FILES];
58
59/*
60 * PROTOTYPES
61 */
Simon Glass3bcd0ce2020-08-11 11:23:38 -060062int stdio_register(struct stdio_dev *dev);
Simon Glassd97143a2014-07-23 06:55:05 -060063int stdio_register_dev(struct stdio_dev *dev, struct stdio_dev **devp);
Simon Glass9fb02492014-09-03 17:37:01 -060064
65/**
66 * stdio_init_tables() - set up stdio tables ready for devices
67 *
68 * This does not add any devices, but just prepares stdio for use.
69 */
70int stdio_init_tables(void);
71
72/**
73 * stdio_add_devices() - Add stdio devices to the table
74 *
75 * This makes calls to all the various subsystems that use stdio, to make
76 * them register with stdio.
77 */
78int stdio_add_devices(void);
79
80/**
81 * stdio_init() - Sets up stdio ready for use
82 *
83 * This calls stdio_init_tables() and stdio_add_devices()
84 */
85int stdio_init(void);
86
Simon Glass3bcd0ce2020-08-11 11:23:38 -060087void stdio_print_current_devices(void);
Simon Glass4225f2f2020-08-11 11:23:41 -060088
89/**
90 * stdio_deregister_dev() - deregister the device "devname".
91 *
92 * @dev: Stdio device to deregister
93 * @force: true to force deregistration even if in use
94 *
95 * returns 0 on success, -EBUSY if device is assigned
96 */
Hans de Goede32d01922014-09-20 16:54:37 +020097int stdio_deregister_dev(struct stdio_dev *dev, int force);
Simon Glass3bcd0ce2020-08-11 11:23:38 -060098struct list_head *stdio_get_list(void);
99struct stdio_dev *stdio_get_by_name(const char *name);
100struct stdio_dev *stdio_clone(struct stdio_dev *dev);
Jean-Christophe PLAGNIOL-VILLARDc1de7a62008-08-31 04:24:55 +0200101
Simon Glass3bcd0ce2020-08-11 11:23:38 -0600102int drv_lcd_init(void);
103int drv_video_init(void);
104int drv_keyboard_init(void);
105int drv_usbtty_init(void);
106int drv_nc_init(void);
107int drv_jtag_console_init(void);
Vadim Bendebury98ab4352012-10-12 18:48:47 +0000108int cbmemc_init(void);
wdenke831ad52002-10-17 21:52:26 +0000109
Jean-Christophe PLAGNIOL-VILLARD52cb4d42009-05-16 12:14:54 +0200110#endif