cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

events_internal.h (2575B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Xen Event Channels (internal header)
      4 *
      5 * Copyright (C) 2013 Citrix Systems R&D Ltd.
      6 */
      7#ifndef __EVENTS_INTERNAL_H__
      8#define __EVENTS_INTERNAL_H__
      9
     10struct evtchn_loop_ctrl;
     11
     12struct evtchn_ops {
     13	unsigned (*max_channels)(void);
     14	unsigned (*nr_channels)(void);
     15
     16	int (*setup)(evtchn_port_t port);
     17	void (*remove)(evtchn_port_t port, unsigned int cpu);
     18	void (*bind_to_cpu)(evtchn_port_t evtchn, unsigned int cpu,
     19			    unsigned int old_cpu);
     20
     21	void (*clear_pending)(evtchn_port_t port);
     22	void (*set_pending)(evtchn_port_t port);
     23	bool (*is_pending)(evtchn_port_t port);
     24	void (*mask)(evtchn_port_t port);
     25	void (*unmask)(evtchn_port_t port);
     26
     27	void (*handle_events)(unsigned cpu, struct evtchn_loop_ctrl *ctrl);
     28	void (*resume)(void);
     29
     30	int (*percpu_init)(unsigned int cpu);
     31	int (*percpu_deinit)(unsigned int cpu);
     32};
     33
     34extern const struct evtchn_ops *evtchn_ops;
     35
     36int get_evtchn_to_irq(evtchn_port_t evtchn);
     37void handle_irq_for_port(evtchn_port_t port, struct evtchn_loop_ctrl *ctrl);
     38
     39unsigned int cpu_from_evtchn(evtchn_port_t evtchn);
     40
     41static inline unsigned xen_evtchn_max_channels(void)
     42{
     43	return evtchn_ops->max_channels();
     44}
     45
     46/*
     47 * Do any ABI specific setup for a bound event channel before it can
     48 * be unmasked and used.
     49 */
     50static inline int xen_evtchn_port_setup(evtchn_port_t evtchn)
     51{
     52	if (evtchn_ops->setup)
     53		return evtchn_ops->setup(evtchn);
     54	return 0;
     55}
     56
     57static inline void xen_evtchn_port_remove(evtchn_port_t evtchn,
     58					  unsigned int cpu)
     59{
     60	if (evtchn_ops->remove)
     61		evtchn_ops->remove(evtchn, cpu);
     62}
     63
     64static inline void xen_evtchn_port_bind_to_cpu(evtchn_port_t evtchn,
     65					       unsigned int cpu,
     66					       unsigned int old_cpu)
     67{
     68	evtchn_ops->bind_to_cpu(evtchn, cpu, old_cpu);
     69}
     70
     71static inline void clear_evtchn(evtchn_port_t port)
     72{
     73	evtchn_ops->clear_pending(port);
     74}
     75
     76static inline void set_evtchn(evtchn_port_t port)
     77{
     78	evtchn_ops->set_pending(port);
     79}
     80
     81static inline bool test_evtchn(evtchn_port_t port)
     82{
     83	return evtchn_ops->is_pending(port);
     84}
     85
     86static inline void mask_evtchn(evtchn_port_t port)
     87{
     88	return evtchn_ops->mask(port);
     89}
     90
     91static inline void unmask_evtchn(evtchn_port_t port)
     92{
     93	return evtchn_ops->unmask(port);
     94}
     95
     96static inline void xen_evtchn_handle_events(unsigned cpu,
     97					    struct evtchn_loop_ctrl *ctrl)
     98{
     99	return evtchn_ops->handle_events(cpu, ctrl);
    100}
    101
    102static inline void xen_evtchn_resume(void)
    103{
    104	if (evtchn_ops->resume)
    105		evtchn_ops->resume();
    106}
    107
    108void xen_evtchn_2l_init(void);
    109int xen_evtchn_fifo_init(void);
    110
    111#endif /* #ifndef __EVENTS_INTERNAL_H__ */