LCOV - code coverage report
Current view: top level - tty/hvc - hvc_console.h (source / functions) Coverage Total Hit
Test: TTY Combined Coverage Lines: 0.0 % 2 0
Test Date: 2025-08-26 15:45:50 Functions: 0.0 % 1 0

            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 <[email protected]>
       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              :         int outbuf_size;
      41              :         int n_outbuf;
      42              :         uint32_t vtermno;
      43              :         const struct hv_ops *ops;
      44              :         int irq_requested;
      45              :         int data;
      46              :         struct winsize ws;
      47              :         struct work_struct tty_resize;
      48              :         struct list_head next;
      49              :         unsigned long flags;
      50              :         u8 outbuf[] __aligned(sizeof(long));
      51              : };
      52              : 
      53              : /* implemented by a low level driver */
      54              : struct hv_ops {
      55              :         ssize_t (*get_chars)(uint32_t vtermno, u8 *buf, size_t count);
      56              :         ssize_t (*put_chars)(uint32_t vtermno, const u8 *buf, size_t 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, bool active);
      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 void 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              : static inline void hvc_resize(struct hvc_struct *hp, struct winsize ws)
      90              : {
      91              :         unsigned long flags;
      92              : 
      93              :         spin_lock_irqsave(&hp->lock, flags);
      94              :         __hvc_resize(hp, ws);
      95              :         spin_unlock_irqrestore(&hp->lock, flags);
      96              : }
      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
        

Generated by: LCOV version 2.0-1