LCOV - code coverage report
Current view: top level - arch/um/include/shared - irq_kern.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2023-04-06 08:38:28 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
       4             :  */
       5             : 
       6             : #ifndef __IRQ_KERN_H__
       7             : #define __IRQ_KERN_H__
       8             : 
       9             : #include <linux/interrupt.h>
      10             : #include <linux/time-internal.h>
      11             : #include <asm/ptrace.h>
      12             : #include "irq_user.h"
      13             : 
      14             : #define UM_IRQ_ALLOC    -1
      15             : 
      16             : int um_request_irq(int irq, int fd, enum um_irq_type type,
      17             :                    irq_handler_t handler, unsigned long irqflags,
      18             :                    const char *devname, void *dev_id);
      19             : 
      20             : #ifdef CONFIG_UML_TIME_TRAVEL_SUPPORT
      21             : /**
      22             :  * um_request_irq_tt - request an IRQ with timetravel handler
      23             :  *
      24             :  * @irq: the IRQ number, or %UM_IRQ_ALLOC
      25             :  * @fd: The file descriptor to request an IRQ for
      26             :  * @type: read or write
      27             :  * @handler: the (generic style) IRQ handler
      28             :  * @irqflags: Linux IRQ flags
      29             :  * @devname: name for this to show
      30             :  * @dev_id: data pointer to pass to the IRQ handler
      31             :  * @timetravel_handler: the timetravel interrupt handler, invoked with the IRQ
      32             :  *      number, fd, dev_id and time-travel event pointer.
      33             :  *
      34             :  * Returns: The interrupt number assigned or a negative error.
      35             :  *
      36             :  * Note that the timetravel handler is invoked only if the time_travel_mode is
      37             :  * %TT_MODE_EXTERNAL, and then it is invoked even while the system is suspended!
      38             :  * This function must call time_travel_add_irq_event() for the event passed with
      39             :  * an appropriate delay, before sending an ACK on the socket it was invoked for.
      40             :  *
      41             :  * If this was called while the system is suspended, then adding the event will
      42             :  * cause the system to resume.
      43             :  *
      44             :  * Since this function will almost certainly have to handle the FD's condition,
      45             :  * a read will consume the message, and after that it is up to the code using
      46             :  * it to pass such a message to the @handler in whichever way it can.
      47             :  *
      48             :  * If time_travel_mode is not %TT_MODE_EXTERNAL the @timetravel_handler will
      49             :  * not be invoked at all and the @handler must handle the FD becoming
      50             :  * readable (or writable) instead. Use um_irq_timetravel_handler_used() to
      51             :  * distinguish these cases.
      52             :  *
      53             :  * See virtio_uml.c for an example.
      54             :  */
      55             : int um_request_irq_tt(int irq, int fd, enum um_irq_type type,
      56             :                       irq_handler_t handler, unsigned long irqflags,
      57             :                       const char *devname, void *dev_id,
      58             :                       void (*timetravel_handler)(int, int, void *,
      59             :                                                  struct time_travel_event *));
      60             : #else
      61             : static inline
      62             : int um_request_irq_tt(int irq, int fd, enum um_irq_type type,
      63             :                       irq_handler_t handler, unsigned long irqflags,
      64             :                       const char *devname, void *dev_id,
      65             :                       void (*timetravel_handler)(int, int, void *,
      66             :                                                  struct time_travel_event *))
      67             : {
      68           0 :         return um_request_irq(irq, fd, type, handler, irqflags,
      69             :                               devname, dev_id);
      70             : }
      71             : #endif
      72             : 
      73             : static inline bool um_irq_timetravel_handler_used(void)
      74             : {
      75             :         return time_travel_mode == TT_MODE_EXTERNAL;
      76             : }
      77             : 
      78             : void um_free_irq(int irq, void *dev_id);
      79             : #endif

Generated by: LCOV version 1.14