From: Karl Hiramoto <karl@hiramoto.org>
To: linux-atm-general@lists.sourceforge.net, netdev@vger.kernel.org,
chas@cmf.nrl.navy.mil, davem@davemloft.net
Cc: Karl Hiramoto <karl@hiramoto.org>
Subject: [PATCH v4 1/9] atm: propagate signal changes via notifier
Date: Thu, 8 Jul 2010 10:34:47 +0200 [thread overview]
Message-ID: <1278578095-25324-2-git-send-email-karl@hiramoto.org> (raw)
In-Reply-To: <1278578095-25324-1-git-send-email-karl@hiramoto.org>
Add notifier chain for changes in atm_dev.
Clients like br2684 will call register_atmdevice_notifier() to be notified of
changes. Drivers will call atm_dev_signal_change() to notify clients like
br2684 of the change.
On DSL and ATM devices it's usefull to have a know if you have a carrier
signal. netdevice LOWER_UP changes can be propagated to userspace via netlink
monitor.
Signed-off-by: Karl Hiramoto <karl@hiramoto.org>
---
include/linux/atmdev.h | 20 ++++++++++++++++++++
net/atm/common.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index 817b237..649dd24 100644
--- a/include/linux/atmdev.h
+++ b/include/linux/atmdev.h
@@ -431,6 +431,15 @@ struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
int number,unsigned long *flags); /* number == -1: pick first available */
struct atm_dev *atm_dev_lookup(int number);
void atm_dev_deregister(struct atm_dev *dev);
+
+/*
+ * atm_dev_signal_change
+ *
+ * Propagate lower layer signal change in atm_dev->signal to netdevice.
+ * The event will be sent via a notifier call chain.
+ */
+void atm_dev_signal_change(struct atm_dev *dev, char signal);
+
void vcc_insert_socket(struct sock *sk);
@@ -510,6 +519,17 @@ void register_atm_ioctl(struct atm_ioctl *);
*/
void deregister_atm_ioctl(struct atm_ioctl *);
+
+
+/*
+ * register_atmdevice_notifier - register atm_dev notify events
+ *
+ * Clients like br2684 will register notify events
+ * Currently we notify of signal found/lost
+ */
+int register_atmdevice_notifier(struct notifier_block *nb);
+void unregister_atmdevice_notifier(struct notifier_block *nb);
+
#endif /* __KERNEL__ */
#endif
diff --git a/net/atm/common.c b/net/atm/common.c
index b43feb1..940404a 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -37,6 +37,8 @@ EXPORT_SYMBOL(vcc_hash);
DEFINE_RWLOCK(vcc_sklist_lock);
EXPORT_SYMBOL(vcc_sklist_lock);
+static ATOMIC_NOTIFIER_HEAD(atm_dev_notify_chain);
+
static void __vcc_insert_socket(struct sock *sk)
{
struct atm_vcc *vcc = atm_sk(sk);
@@ -212,6 +214,22 @@ void vcc_release_async(struct atm_vcc *vcc, int reply)
}
EXPORT_SYMBOL(vcc_release_async);
+void atm_dev_signal_change(struct atm_dev *dev, char signal)
+{
+ pr_debug("%s signal=%d dev=%p number=%d dev->signal=%d\n",
+ __func__, signal, dev, dev->number, dev->signal);
+
+ /* atm driver sending invalid signal */
+ WARN_ON(signal < ATM_PHY_SIG_LOST || signal > ATM_PHY_SIG_FOUND);
+
+ if (dev->signal == signal)
+ return; /* no change */
+
+ dev->signal = signal;
+
+ atomic_notifier_call_chain(&atm_dev_notify_chain, signal, dev);
+}
+EXPORT_SYMBOL(atm_dev_signal_change);
void atm_dev_release_vccs(struct atm_dev *dev)
{
@@ -781,6 +799,18 @@ int vcc_getsockopt(struct socket *sock, int level, int optname,
return vcc->dev->ops->getsockopt(vcc, level, optname, optval, len);
}
+int register_atmdevice_notifier(struct notifier_block *nb)
+{
+ return atomic_notifier_chain_register(&atm_dev_notify_chain, nb);
+}
+EXPORT_SYMBOL_GPL(register_atmdevice_notifier);
+
+void unregister_atmdevice_notifier(struct notifier_block *nb)
+{
+ atomic_notifier_chain_unregister(&atm_dev_notify_chain, nb);
+}
+EXPORT_SYMBOL_GPL(unregister_atmdevice_notifier);
+
static int __init atm_init(void)
{
int error;
--
1.7.1
next prev parent reply other threads:[~2010-07-08 8:35 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-08 8:34 [PATCH v4 0/9] atm: propagate atm_dev signal carrier to LOWER_UP of netdevice Karl Hiramoto
2010-07-08 8:34 ` Karl Hiramoto [this message]
2010-07-09 4:47 ` [PATCH v4 1/9] atm: propagate signal changes via notifier David Miller
2010-07-09 6:36 ` Karl Hiramoto
2010-07-09 6:38 ` David Miller
2010-07-09 6:50 ` Simon Horman
2010-07-09 6:53 ` David Miller
2010-07-09 7:04 ` Simon Horman
2010-07-09 11:16 ` chas williams - CONTRACTOR
2010-07-09 12:22 ` Simon Horman
2010-07-09 16:48 ` David Miller
2010-07-09 17:44 ` chas williams - CONTRACTOR
2010-07-08 8:34 ` [PATCH v4 2/9] atm/br2684: register notifier event for carrier signal changes Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 3/9] atm/adummy: add syfs DEVICE_ATTR to change signal Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 4/9] atm/idt77105.c: call atm_dev_signal_change() when signal changes Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 5/9] atm/solos-pci: " Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 6/9] atm/suni.c: " Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 7/9] usb/atm/cxacru.c: " Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 8/9] usb/atm/speedtch.c: " Karl Hiramoto
2010-07-08 8:34 ` [PATCH v4 9/9] usb/atm/ueagle-atm.c: " Karl Hiramoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1278578095-25324-2-git-send-email-karl@hiramoto.org \
--to=karl@hiramoto.org \
--cc=chas@cmf.nrl.navy.mil \
--cc=davem@davemloft.net \
--cc=linux-atm-general@lists.sourceforge.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).