Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1674284

[patch v4 2/3] staging: speakup: check and convert dev name or ser to dev_t

Path csiph.com!aioe.org!bofh.it!news.nic.it!robomod
From Okash Khawaja <okash.khawaja@gmail.com>
Newsgroups linux.kernel
Subject [patch v4 2/3] staging: speakup: check and convert dev name or ser to dev_t
Date Sun, 25 Jun 2017 20:50:02 +0200
Message-ID <tWkLE-bZ-19@gated-at.bofh.it> (permalink)
References <tWkLD-bZ-3@gated-at.bofh.it> <tWkLD-bZ-5@gated-at.bofh.it>
X-Original-To Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Samuel Thibault <samuel.thibault@ens-lyon.org>, Andy Shevchenko <andy.shevchenko@gmail.com>, linux-kernel@vger.kernel.org
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:user-agent:date:from:to:cc:subject:references :mime-version:content-disposition; bh=cVUmhz0MtBM9B4elS9ce4UzoXbnGyDmgcLYvvGNcBcg=; b=KDmmQdieyAOPpYe/OcOybgDzZJRjvEYUijMms0XNdsVzX6f2vrxp756rcwl7ibHEkm msOllpRVbtqkQiVWmOkZs5bdYSYHVLecYVthTbqaVpxe76yGZMq0O3eLYpNpnQT+5q74 X3sm2zMFudfFVdf1HRSbIEWa8PN6gaMoARjkav6yvqrjVCfTFoNhq46u60ndj2NJBhW5 W3ktsQI7rtGUB0KGo6gjfSs3iJo7azdFGcP1i021GQ/lFBRRr7GcgOmLmLSw/ioVZ4S4 avcXOb4Jv120dKa2gRWlrWOGE2x2R2tRLdxzoZ5qnfLLoEw45McT2dzMjw/Vw1fAUQXC aU/Q==
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:user-agent:date:from:to:cc:subject :references:mime-version:content-disposition; bh=cVUmhz0MtBM9B4elS9ce4UzoXbnGyDmgcLYvvGNcBcg=; b=WUREKoJDtcMW96IAMJMZQR86a9mMfqjDroDyNkPazF1OVP3PcTmkDgVe/h6+h2LcmO QNjJi5K0ddZ3CndSdNdXgZ4tfsATm+qrhkfFO18mA9kUS5q9x0Z5okTGyPaV5ZVHxjye sR2iH0TtRFsi+iAewtbwqDlxBhDQpllaYjlMPFWPdmi8qxKqku3pdtty76+ABb4sl5WV WMiRmnnw0wQPKVIOCpvfCRj1B3ZfcCkmj1xrNrnkH9bIn/h328Y8rKAvGnkWvj6ghxzT kGrQN8r0CQaUC4Of9LwYqup+LO/kRnM022CC0XbI3HHTpVcn293s5+EOoC45dI2fyPBi OhfA==
X-Gm-Message-State AKS2vOwjf0Psxaho/Ulqu4MBlqiMrsFxqS1lhDa99AeGY1vztSIUMb8t lMhXAnUSLupwqg==
X-Received by 10.223.151.44 with SMTP id r41mr11419394wrb.6.1498416342732; Sun, 25 Jun 2017 11:45:42 -0700 (PDT)
User-Agent quilt/0.65
MIME-Version 1.0
Content-Type text/plain; charset=ISO-8859-15
Content-Disposition inline; filename=12_check_and_convert_dev_or_ser_to_number
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 99
Organization linux.* mail to news gateway
X-Original-Cc William Hubbs <w.d.hubbs@gmail.com>, Chris Brannon <chris@the-brannons.com>, Kirk Reiser <kirk@reisers.ca>, speakup@linux-speakup.org, devel@driverdev.osuosl.org, Okash Khawaja <okash.khawaja@gmail.com>
X-Original-Date Sun, 25 Jun 2017 19:40:01 +0100
X-Original-Message-ID <20170625184540.205820491@gmail.com>
X-Original-References <20170625181353.GA10487@kroah.com> <20170625183959.270640619@gmail.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1674284

Show key headers only | View raw


This patch adds functionality to validate and convert either a device
name or 'ser' memmber of synth into dev_t. Subsequent patch in this set
will call it to convert user-specified device into device number. For
device name, this patch does some basic sanity checks on the string
passed in. It currently supports ttyS*, ttyUSB* and, for selected
synths, lp*.

The patch also introduces a string member variable named 'dev_name' to
struct spk_synth. 'dev_name' represents the device name - ttyUSB0 etc -
which needs conversion to dev_t.

Signed-off-by: Okash Khawaja <okash.khawaja@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

---
 drivers/staging/speakup/spk_priv.h  |    2 +
 drivers/staging/speakup/spk_ttyio.c |   42 ++++++++++++++++++++++++++++++++++++
 drivers/staging/speakup/spk_types.h |    1 
 3 files changed, 45 insertions(+)

--- a/drivers/staging/speakup/spk_priv.h
+++ b/drivers/staging/speakup/spk_priv.h
@@ -40,6 +40,8 @@
 
 #define KT_SPKUP 15
 #define SPK_SYNTH_TIMEOUT 100000 /* in micro-seconds */
+#define SYNTH_DEFAULT_DEV "ttyS0"
+#define SYNTH_DEFAULT_SER 0
 
 const struct old_serial_port *spk_serial_init(int index);
 void spk_stop_serial_interrupt(void);
--- a/drivers/staging/speakup/spk_ttyio.c
+++ b/drivers/staging/speakup/spk_ttyio.c
@@ -7,6 +7,11 @@
 #include "spk_types.h"
 #include "spk_priv.h"
 
+#define DEV_PREFIX_LP "lp"
+
+static const char * const lp_supported[] = { "acntsa", "bns", "dummy",
+	"txprt" };
+
 struct spk_ldisc_data {
 	char buf;
 	struct semaphore sem;
@@ -16,6 +21,43 @@ struct spk_ldisc_data {
 static struct spk_synth *spk_ttyio_synth;
 static struct tty_struct *speakup_tty;
 
+int ser_to_dev(int ser, dev_t *dev_no)
+{
+	if (ser < 0 || ser > (255 - 64)) {
+		pr_err("speakup: Invalid ser param. Must be between 0 and 191 inclusive.\n");
+		return -EINVAL;
+	}
+
+	*dev_no = MKDEV(4, (64 + ser));
+	return 0;
+}
+
+static int get_dev_to_use(struct spk_synth *synth, dev_t *dev_no)
+{
+	/* use ser only when dev is not specified */
+	if (strcmp(synth->dev_name, SYNTH_DEFAULT_DEV) ||
+	    synth->ser == SYNTH_DEFAULT_SER) {
+		/* for /dev/lp* check if synth is supported */
+		if (strncmp(synth->dev_name, DEV_PREFIX_LP,
+		    strlen(DEV_PREFIX_LP)) == 0)
+			if (match_string(lp_supported, ARRAY_SIZE(lp_supported),
+			    synth->name) < 0)  {
+				int i;
+
+				pr_err("speakup: lp* is only supported on:");
+				for (i = 0; i < ARRAY_SIZE(lp_supported); i++)
+					pr_cont(" %s", lp_supported[i]);
+				pr_cont("\n");
+
+				return -ENOTSUPP;
+			}
+
+		return tty_dev_name_to_number(synth->dev_name, dev_no);
+	}
+
+	return ser_to_dev(synth->ser, dev_no);
+}
+
 static int spk_ttyio_ldisc_open(struct tty_struct *tty)
 {
 	struct spk_ldisc_data *ldisc_data;
--- a/drivers/staging/speakup/spk_types.h
+++ b/drivers/staging/speakup/spk_types.h
@@ -169,6 +169,7 @@ struct spk_synth {
 	int jiffies;
 	int full;
 	int ser;
+	char *dev_name;
 	short flags;
 	short startup;
 	const int checkval; /* for validating a proper synth module */

Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

[patch v4 0/3] staging: speakup: support more than ttyS* Okash Khawaja <okash.khawaja@gmail.com> - 2017-06-25 20:50 +0200
  [patch v4 2/3] staging: speakup: check and convert dev name or ser to dev_t Okash Khawaja <okash.khawaja@gmail.com> - 2017-06-25 20:50 +0200

csiph-web