Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0+ 2 : : /* 3 : : * hvc_console.h 4 : : * Copyright (C) 2005 IBM Corporation 5 : : * 6 : : * Author(s): 7 : : * Ryan S. Arnold <rsa@us.ibm.com> 8 : : * 9 : : * hvc_console header information: 10 : : * moved here from arch/powerpc/include/asm/hvconsole.h 11 : : * and drivers/char/hvc_console.c 12 : : */ 13 : : 14 : : #ifndef HVC_CONSOLE_H 15 : : #define HVC_CONSOLE_H 16 : : #include <linux/kref.h> 17 : : #include <linux/tty.h> 18 : : #include <linux/spinlock.h> 19 : : 20 : : /* 21 : : * This is the max number of console adapters that can/will be found as 22 : : * console devices on first stage console init. Any number beyond this range 23 : : * can't be used as a console device but is still a valid tty device. 24 : : */ 25 : : #define MAX_NR_HVC_CONSOLES 16 26 : : 27 : : /* 28 : : * The Linux TTY code does not support dynamic addition of tty derived devices 29 : : * so we need to know how many tty devices we might need when space is allocated 30 : : * for the tty device. Since this driver supports hotplug of vty adapters we 31 : : * need to make sure we have enough allocated. 32 : : */ 33 : : #define HVC_ALLOC_TTY_ADAPTERS 8 34 : : 35 : : struct hvc_struct { 36 : : struct tty_port port; 37 : : spinlock_t lock; 38 : : int index; 39 : : int do_wakeup; 40 : : char *outbuf; 41 : : int outbuf_size; 42 : : int n_outbuf; 43 : : uint32_t vtermno; 44 : : const struct hv_ops *ops; 45 : : int irq_requested; 46 : : int data; 47 : : struct winsize ws; 48 : : struct work_struct tty_resize; 49 : : struct list_head next; 50 : : unsigned long flags; 51 : : }; 52 : : 53 : : /* implemented by a low level driver */ 54 : : struct hv_ops { 55 : : int (*get_chars)(uint32_t vtermno, char *buf, int count); 56 : : int (*put_chars)(uint32_t vtermno, const char *buf, int count); 57 : : int (*flush)(uint32_t vtermno, bool wait); 58 : : 59 : : /* Callbacks for notification. Called in open, close and hangup */ 60 : : int (*notifier_add)(struct hvc_struct *hp, int irq); 61 : : void (*notifier_del)(struct hvc_struct *hp, int irq); 62 : : void (*notifier_hangup)(struct hvc_struct *hp, int irq); 63 : : 64 : : /* tiocmget/set implementation */ 65 : : int (*tiocmget)(struct hvc_struct *hp); 66 : : int (*tiocmset)(struct hvc_struct *hp, unsigned int set, unsigned int clear); 67 : : 68 : : /* Callbacks to handle tty ports */ 69 : : void (*dtr_rts)(struct hvc_struct *hp, int raise); 70 : : }; 71 : : 72 : : /* Register a vterm and a slot index for use as a console (console_init) */ 73 : : extern int hvc_instantiate(uint32_t vtermno, int index, 74 : : const struct hv_ops *ops); 75 : : 76 : : /* register a vterm for hvc tty operation (module_init or hotplug add) */ 77 : : extern struct hvc_struct * hvc_alloc(uint32_t vtermno, int data, 78 : : const struct hv_ops *ops, int outbuf_size); 79 : : /* remove a vterm from hvc tty operation (module_exit or hotplug remove) */ 80 : : extern int hvc_remove(struct hvc_struct *hp); 81 : : 82 : : /* data available */ 83 : : int hvc_poll(struct hvc_struct *hp); 84 : : void hvc_kick(void); 85 : : 86 : : /* Resize hvc tty terminal window */ 87 : : extern void __hvc_resize(struct hvc_struct *hp, struct winsize ws); 88 : : 89 : 0 : static inline void hvc_resize(struct hvc_struct *hp, struct winsize ws) 90 : : { 91 : 0 : unsigned long flags; 92 : : 93 : 0 : spin_lock_irqsave(&hp->lock, flags); 94 : 0 : __hvc_resize(hp, ws); 95 : 0 : spin_unlock_irqrestore(&hp->lock, flags); 96 : 0 : } 97 : : 98 : : /* default notifier for irq based notification */ 99 : : extern int notifier_add_irq(struct hvc_struct *hp, int data); 100 : : extern void notifier_del_irq(struct hvc_struct *hp, int data); 101 : : extern void notifier_hangup_irq(struct hvc_struct *hp, int data); 102 : : 103 : : 104 : : #if defined(CONFIG_XMON) && defined(CONFIG_SMP) 105 : : #include <asm/xmon.h> 106 : : #else 107 : 0 : static inline int cpus_are_in_xmon(void) 108 : : { 109 : 0 : return 0; 110 : : } 111 : : #endif 112 : : 113 : : #endif // HVC_CONSOLE_H