/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef __PSP_PSP_H
#define __PSP_PSP_H

#include <linux/list.h>
#include <linux/lockdep.h>
#include <linux/mutex.h>
#include <net/netns/generic.h>
#include <net/psp.h>
#include <net/sock.h>

extern struct xarray psp_devs;
extern struct mutex psp_devs_lock;

void psp_dev_free(struct psp_dev *psd);
int psp_dev_check_access(struct psp_dev *psd, struct net *net, bool admin);
bool psp_has_assoc_dev_in_ns(struct psp_dev *psd, struct net *net);
int psp_attach_netdev_notifier(void);

void psp_nl_notify_dev(struct psp_dev *psd, u32 cmd);

struct psp_assoc *psp_assoc_create(struct psp_dev *psd);
struct psp_dev *psp_dev_get_for_sock(struct sock *sk);
void psp_dev_tx_key_del(struct psp_dev *psd, struct psp_assoc *pas);
int psp_sock_assoc_set_rx(struct sock *sk, struct psp_assoc *pas,
			  struct psp_key_parsed *key,
			  struct netlink_ext_ack *extack);
int psp_sock_assoc_set_tx(struct sock *sk, struct psp_dev *psd,
			  u32 version, struct psp_key_parsed *key,
			  struct netlink_ext_ack *extack);
void psp_assocs_key_rotated(struct psp_dev *psd);

static inline void psp_dev_get(struct psp_dev *psd)
{
	refcount_inc(&psd->refcnt);
}

static inline bool psp_dev_tryget(struct psp_dev *psd)
{
	return refcount_inc_not_zero(&psd->refcnt);
}

static inline void psp_dev_put(struct psp_dev *psd)
{
	if (refcount_dec_and_test(&psd->refcnt))
		psp_dev_free(psd);
}

static inline bool psp_dev_is_registered(struct psp_dev *psd)
{
	lockdep_assert_held(&psd->lock);
	return !!psd->ops;
}

#endif /* __PSP_PSP_H */
