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

connector.h (3927B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * 	connector.h
      4 * 
      5 * 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
      6 * All rights reserved.
      7 */
      8#ifndef __CONNECTOR_H
      9#define __CONNECTOR_H
     10
     11
     12#include <linux/refcount.h>
     13
     14#include <linux/list.h>
     15#include <linux/workqueue.h>
     16
     17#include <net/sock.h>
     18#include <uapi/linux/connector.h>
     19
     20#define CN_CBQ_NAMELEN		32
     21
     22struct cn_queue_dev {
     23	atomic_t refcnt;
     24	unsigned char name[CN_CBQ_NAMELEN];
     25
     26	struct list_head queue_list;
     27	spinlock_t queue_lock;
     28
     29	struct sock *nls;
     30};
     31
     32struct cn_callback_id {
     33	unsigned char name[CN_CBQ_NAMELEN];
     34	struct cb_id id;
     35};
     36
     37struct cn_callback_entry {
     38	struct list_head callback_entry;
     39	refcount_t refcnt;
     40	struct cn_queue_dev *pdev;
     41
     42	struct cn_callback_id id;
     43	void (*callback) (struct cn_msg *, struct netlink_skb_parms *);
     44
     45	u32 seq, group;
     46};
     47
     48struct cn_dev {
     49	struct cb_id id;
     50
     51	u32 seq, groups;
     52	struct sock *nls;
     53
     54	struct cn_queue_dev *cbdev;
     55};
     56
     57/**
     58 * cn_add_callback() - Registers new callback with connector core.
     59 *
     60 * @id:		unique connector's user identifier.
     61 *		It must be registered in connector.h for legal
     62 *		in-kernel users.
     63 * @name:	connector's callback symbolic name.
     64 * @callback:	connector's callback.
     65 * 		parameters are %cn_msg and the sender's credentials
     66 */
     67int cn_add_callback(const struct cb_id *id, const char *name,
     68		    void (*callback)(struct cn_msg *, struct netlink_skb_parms *));
     69/**
     70 * cn_del_callback() - Unregisters new callback with connector core.
     71 *
     72 * @id:		unique connector's user identifier.
     73 */
     74void cn_del_callback(const struct cb_id *id);
     75
     76
     77/**
     78 * cn_netlink_send_mult - Sends message to the specified groups.
     79 *
     80 * @msg: 	message header(with attached data).
     81 * @len:	Number of @msg to be sent.
     82 * @portid:	destination port.
     83 *		If non-zero the message will be sent to the given port,
     84 *		which should be set to the original sender.
     85 * @group:	destination group.
     86 * 		If @portid and @group is zero, then appropriate group will
     87 *		be searched through all registered connector users, and
     88 *		message will be delivered to the group which was created
     89 *		for user with the same ID as in @msg.
     90 *		If @group is not zero, then message will be delivered
     91 *		to the specified group.
     92 * @gfp_mask:	GFP mask.
     93 *
     94 * It can be safely called from softirq context, but may silently
     95 * fail under strong memory pressure.
     96 *
     97 * If there are no listeners for given group %-ESRCH can be returned.
     98 */
     99int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 group, gfp_t gfp_mask);
    100
    101/**
    102 * cn_netlink_send - Sends message to the specified groups.
    103 *
    104 * @msg:	message header(with attached data).
    105 * @portid:	destination port.
    106 *		If non-zero the message will be sent to the given port,
    107 *		which should be set to the original sender.
    108 * @group:	destination group.
    109 * 		If @portid and @group is zero, then appropriate group will
    110 *		be searched through all registered connector users, and
    111 *		message will be delivered to the group which was created
    112 *		for user with the same ID as in @msg.
    113 *		If @group is not zero, then message will be delivered
    114 *		to the specified group.
    115 * @gfp_mask:	GFP mask.
    116 *
    117 * It can be safely called from softirq context, but may silently
    118 * fail under strong memory pressure.
    119 *
    120 * If there are no listeners for given group %-ESRCH can be returned.
    121 */
    122int cn_netlink_send(struct cn_msg *msg, u32 portid, u32 group, gfp_t gfp_mask);
    123
    124int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name,
    125			  const struct cb_id *id,
    126			  void (*callback)(struct cn_msg *, struct netlink_skb_parms *));
    127void cn_queue_del_callback(struct cn_queue_dev *dev, const struct cb_id *id);
    128void cn_queue_release_callback(struct cn_callback_entry *);
    129
    130struct cn_queue_dev *cn_queue_alloc_dev(const char *name, struct sock *);
    131void cn_queue_free_dev(struct cn_queue_dev *dev);
    132
    133int cn_cb_equal(const struct cb_id *, const struct cb_id *);
    134
    135#endif				/* __CONNECTOR_H */