162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * File: pn_dev.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Phonet network device
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2008 Nokia Corporation.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef PN_DEV_H
1162306a36Sopenharmony_ci#define PN_DEV_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/list.h>
1462306a36Sopenharmony_ci#include <linux/mutex.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistruct net;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct phonet_device_list {
1962306a36Sopenharmony_ci	struct list_head list;
2062306a36Sopenharmony_ci	struct mutex lock;
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct phonet_device_list *phonet_device_list(struct net *net);
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct phonet_device {
2662306a36Sopenharmony_ci	struct list_head list;
2762306a36Sopenharmony_ci	struct net_device *netdev;
2862306a36Sopenharmony_ci	DECLARE_BITMAP(addrs, 64);
2962306a36Sopenharmony_ci	struct rcu_head	rcu;
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciint phonet_device_init(void);
3362306a36Sopenharmony_civoid phonet_device_exit(void);
3462306a36Sopenharmony_ciint phonet_netlink_register(void);
3562306a36Sopenharmony_cistruct net_device *phonet_device_get(struct net *net);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciint phonet_address_add(struct net_device *dev, u8 addr);
3862306a36Sopenharmony_ciint phonet_address_del(struct net_device *dev, u8 addr);
3962306a36Sopenharmony_ciu8 phonet_address_get(struct net_device *dev, u8 addr);
4062306a36Sopenharmony_ciint phonet_address_lookup(struct net *net, u8 addr);
4162306a36Sopenharmony_civoid phonet_address_notify(int event, struct net_device *dev, u8 addr);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciint phonet_route_add(struct net_device *dev, u8 daddr);
4462306a36Sopenharmony_ciint phonet_route_del(struct net_device *dev, u8 daddr);
4562306a36Sopenharmony_civoid rtm_phonet_notify(int event, struct net_device *dev, u8 dst);
4662306a36Sopenharmony_cistruct net_device *phonet_route_get_rcu(struct net *net, u8 daddr);
4762306a36Sopenharmony_cistruct net_device *phonet_route_output(struct net *net, u8 daddr);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#define PN_NO_ADDR	0xff
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciextern const struct seq_operations pn_sock_seq_ops;
5262306a36Sopenharmony_ciextern const struct seq_operations pn_res_seq_ops;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif
55