From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by befuddled.reisers.ca (Postfix, from userid 65534) id 504EC1F036F; Sun, 18 Jun 2017 05:36:58 -0400 (EDT) Received: from mail-wr0-x241.google.com (mail-wr0-x241.google.com [IPv6:2a00:1450:400c:c0c::241]) by befuddled.reisers.ca (Postfix) with ESMTPS id 686991F034A for ; Sun, 18 Jun 2017 05:35:46 -0400 (EDT) Received: by mail-wr0-x241.google.com with SMTP id x23so10357135wrb.0 for ; Sun, 18 Jun 2017 02:35:46 -0700 (PDT) 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=dm8Yenl0AabNLcr1i14Eori6ys9EBafmazkSRZQA76E=; b=DadEI2pM5Lo5+VcPWhnZ7/JnGsM9GkLQrKYf5s5rb+cEP6WLQLgvHrldo09jFxF2NL cx7ROIfd36cMi+N5FnmpQhQKhtuHtkux/qnolHn35I6u5qbyrYzHfG8D1uBXORSQLJw/ bIxFZLOi7GD3BdOf4MndqTmdJF8QHoZHIFlT/qF2fTozy2n4fJ+hI1Rhvua2l8Dpf3RZ rURv3PpwlISrggtxp0mSsaF6zW5TLLS/SPeOcuuHcVPDYtef1kHzDSBBV9lrx7AJ7Eyc 8Kk/WY/CbjguSIAPLLBgc9Epr+rSgAUWgYldPaCLO9cwdZmIKGx7pDYk6QG8DwDk/kXf 1E+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=dm8Yenl0AabNLcr1i14Eori6ys9EBafmazkSRZQA76E=; b=LkqpStaG5XdxVQ0gkNEGrgO4NZ/Pm1O6L41gJ5GzvZuI5mW3LlE0e+iLlRmKiXa4za +6wtmoJpl0ZE1TxIbbQXEwh++fzO8rg+J2X74rBrGdwUv4V6VRteP7ooX5236SMAgJA0 FXA53j+oxqTm07x1HLrBGJ+UK5HuViu/ZZvHCpK6yh5k4mCucHbkw8uCJKoEQ5zadCNC uQEVksXcd6q+3PPRNCVuPjzgrJgLnqtiuAtewLhXz2MCER0FeM7vVynb/w2qnDtChqqZ fwPDjdC5KoaQPUVQy+pJlqIpn0cs+HJHgOALB4V1b6psMKRDmnfHD7+GQSZiH7O7pmEP +NfA== X-Gm-Message-State: AKS2vOyT1Xy3trgMiskR5KNQkeyJn1MRGfgOUrGc4jaCaDL7qQZo4Le5 CxaY5rttWaO0lA== X-Received: by 10.223.130.110 with SMTP id 101mr9130367wrb.21.1497778538748; Sun, 18 Jun 2017 02:35:38 -0700 (PDT) Received: from sanghar.laptop ([2a00:23c4:7320:5900:224:d6ff:fe76:7136]) by smtp.gmail.com with ESMTPSA id x94sm8773789wrb.47.2017.06.18.02.35.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 18 Jun 2017 02:35:37 -0700 (PDT) Received: by sanghar.laptop (sSMTP sendmail emulation); Sun, 18 Jun 2017 10:35:36 +0100 Message-Id: <20170618093536.021961426@gmail.com> User-Agent: quilt/0.65 Date: Sun, 18 Jun 2017 09:58:27 +0100 From: Okash Khawaja To: Greg Kroah-Hartman , Jiri Slaby , Samuel Thibault , linux-kernel@vger.kernel.org Cc: William Hubbs , Chris Brannon , Kirk Reiser , speakup@linux-speakup.org, devel@driverdev.osuosl.org, Okash Khawaja Subject: [patch v2 2/3] staging: speakup: check and convert dev name or ser to dev_t References: <20170618085825.601359240@gmail.com> 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 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-BeenThere: speakup@linux-speakup.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Speakup is a screen review system for Linux." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Jun 2017 09:37:00 -0000 This patch adds functionality to validate and convert either a device name or 'ser' member 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 --- drivers/staging/speakup/spk_priv.h | 2 + drivers/staging/speakup/spk_ttyio.c | 46 ++++++++++++++++++++++++++++++++++++ drivers/staging/speakup/spk_types.h | 1 3 files changed, 49 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,10 @@ #include "spk_types.h" #include "spk_priv.h" +#define DEV_PREFIX_LP "lp" + +const char *lp_supported[] = { "acntsa", "bns", "dummy", "txprt" }; + struct spk_ldisc_data { char buf; struct semaphore sem; @@ -16,6 +20,48 @@ 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) { + int i; + + for (i = 0; i < ARRAY_SIZE(lp_supported); i++) { + if (strcmp(synth->name, lp_supported[i]) == 0) + break; + } + + if (i >= ARRAY_SIZE(lp_supported)) { + 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 */