From d992ac713287c3631f979800e1d130c67a2778b0 Mon Sep 17 00:00:00 2001 From: Jean Tourrilhes Date: Fri, 23 Jan 2004 06:34:22 -0800 Subject: [PATCH] [IRDA]: Update dongle api. From Martin Diehl. * change dongle api such that raw r/w and modem line helpers are directly called, not virtual callbacks. --- drivers/net/irda/sir-dev.h | 12 +++++------- drivers/net/irda/sir_core.c | 4 ++++ drivers/net/irda/sir_dev.c | 8 ++++++++ drivers/net/irda/sir_dongle.c | 6 ------ drivers/net/irda/sir_kthread.c | 12 +++--------- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/drivers/net/irda/sir-dev.h b/drivers/net/irda/sir-dev.h index 06e60e6aa41fc..f0b8bc3637e58 100644 --- a/drivers/net/irda/sir-dev.h +++ b/drivers/net/irda/sir-dev.h @@ -121,15 +121,17 @@ extern int sirdev_set_dongle(struct sir_dev *dev, IRDA_DONGLE type); extern void sirdev_write_complete(struct sir_dev *dev); extern int sirdev_receive(struct sir_dev *dev, const unsigned char *cp, size_t count); +/* low level helpers for SIR device/dongle setup */ +extern int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len); +extern int sirdev_raw_read(struct sir_dev *dev, char *buf, int len); +extern int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts); + /* not exported */ extern int sirdev_get_dongle(struct sir_dev *self, IRDA_DONGLE type); extern int sirdev_put_dongle(struct sir_dev *self); -extern int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len); -extern int sirdev_raw_read(struct sir_dev *dev, char *buf, int len); extern void sirdev_enable_rx(struct sir_dev *dev); - extern int sirdev_schedule_request(struct sir_dev *dev, int state, unsigned param); extern int __init irda_thread_create(void); extern void __exit irda_thread_join(void); @@ -195,10 +197,6 @@ struct sir_dev { const struct sir_driver * drv; void *priv; - /* dongle callbacks to the SIR device */ - int (*read)(struct sir_dev *, char *buf, int len); - int (*write)(struct sir_dev *, const char *buf, int len); - int (*set_dtr_rts)(struct sir_dev *, int dtr, int rts); }; #endif /* IRDA_SIR_H */ diff --git a/drivers/net/irda/sir_core.c b/drivers/net/irda/sir_core.c index 29a7716ba9dfd..a49f910c835b6 100644 --- a/drivers/net/irda/sir_core.c +++ b/drivers/net/irda/sir_core.c @@ -37,6 +37,10 @@ EXPORT_SYMBOL(sirdev_set_dongle); EXPORT_SYMBOL(sirdev_write_complete); EXPORT_SYMBOL(sirdev_receive); +EXPORT_SYMBOL(sirdev_raw_write); +EXPORT_SYMBOL(sirdev_raw_read); +EXPORT_SYMBOL(sirdev_set_dtr_rts); + static int __init sir_core_init(void) { return irda_thread_create(); diff --git a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c index 42eed5f658b65..1c887279f1cae 100644 --- a/drivers/net/irda/sir_dev.c +++ b/drivers/net/irda/sir_dev.c @@ -117,6 +117,14 @@ int sirdev_raw_read(struct sir_dev *dev, char *buf, int len) return count; } +int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts) +{ + int ret = -ENXIO; + if (dev->drv->set_dtr_rts != 0) + ret = dev->drv->set_dtr_rts(dev, dtr, rts); + return ret; +} + /**********************************************************************/ /* called from client driver - likely with bh-context - to indicate diff --git a/drivers/net/irda/sir_dongle.c b/drivers/net/irda/sir_dongle.c index 75d602fee2bbc..c5b76746e72b0 100644 --- a/drivers/net/irda/sir_dongle.c +++ b/drivers/net/irda/sir_dongle.c @@ -102,12 +102,6 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type) err = -ESTALE; goto out_unlock; /* rmmod already pending */ } - - /* Initialize dongle driver callbacks */ - dev->read = sirdev_raw_read; - dev->write = sirdev_raw_write; - dev->set_dtr_rts = dev->drv->set_dtr_rts; - dev->dongle_drv = drv; if (!drv->open || (err=drv->open(dev))!=0) diff --git a/drivers/net/irda/sir_kthread.c b/drivers/net/irda/sir_kthread.c index 51148178ac707..69d6ee5d28da8 100644 --- a/drivers/net/irda/sir_kthread.c +++ b/drivers/net/irda/sir_kthread.c @@ -311,15 +311,9 @@ static void irda_config_fsm(void *data) break; case SIRDEV_STATE_SET_DTR_RTS: - if (dev->drv->set_dtr_rts) { - int dtr, rts; - - dtr = (fsm->param&0x02) ? TRUE : FALSE; - rts = (fsm->param&0x01) ? TRUE : FALSE; - ret = dev->drv->set_dtr_rts(dev,dtr,rts); - } - else - ret = -EINVAL; + ret = sirdev_set_dtr_rts(dev, + (fsm->param&0x02) ? TRUE : FALSE, + (fsm->param&0x01) ? TRUE : FALSE); next_state = SIRDEV_STATE_DONE; break; -- 2.53.0