From: Greg KH <greg@kroah.com>
To: linux-usb-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] More USB fixes for 2.5.68
Date: Thu, 24 Apr 2003 16:47:33 -0700 [thread overview]
Message-ID: <10512280533869@kroah.com> (raw)
In-Reply-To: <10512280532458@kroah.com>
ChangeSet 1.1165.2.15, 2003/04/23 17:48:10-07:00, greg@kroah.com
[PATCH] USB: kobil_sct: add support for new tty tiocmget and tiocmset functions.
drivers/usb/serial/kobil_sct.c | 200 +++++++++++++++++++++++------------------
1 files changed, 116 insertions(+), 84 deletions(-)
diff -Nru a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
--- a/drivers/usb/serial/kobil_sct.c Thu Apr 24 16:21:37 2003
+++ b/drivers/usb/serial/kobil_sct.c Thu Apr 24 16:21:37 2003
@@ -81,6 +81,9 @@
static int kobil_write_room(struct usb_serial_port *port);
static int kobil_ioctl(struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg);
+static int kobil_tiocmget(struct usb_serial_port *port, struct file *file);
+static int kobil_tiocmset(struct usb_serial_port *port, struct file *file,
+ unsigned int set, unsigned int clear);
static void kobil_read_int_callback( struct urb *urb, struct pt_regs *regs );
static void kobil_write_callback( struct urb *purb, struct pt_regs *regs );
@@ -106,6 +109,8 @@
.attach = kobil_startup,
.shutdown = kobil_shutdown,
.ioctl = kobil_ioctl,
+ .tiocmget = kobil_tiocmget,
+ .tiocmset = kobil_tiocmset,
.open = kobil_open,
.close = kobil_close,
.write = kobil_write,
@@ -490,11 +495,120 @@
}
+static int kobil_tiocmget(struct usb_serial_port *port, struct file *file)
+{
+ struct kobil_private * priv;
+ int result;
+ unsigned char *transfer_buffer;
+ int transfer_buffer_length = 8;
+
+ priv = usb_get_serial_port_data(port);
+ if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID) {
+ // This device doesn't support ioctl calls
+ return -EINVAL;
+ }
+
+ // allocate memory for transfer buffer
+ transfer_buffer = (unsigned char *) kmalloc(transfer_buffer_length, GFP_KERNEL);
+ if (!transfer_buffer) {
+ return -ENOMEM;
+ }
+ memset(transfer_buffer, 0, transfer_buffer_length);
+
+ result = usb_control_msg( port->serial->dev,
+ usb_rcvctrlpipe(port->serial->dev, 0 ),
+ SUSBCRequest_GetStatusLineState,
+ USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
+ 0,
+ 0,
+ transfer_buffer,
+ transfer_buffer_length,
+ KOBIL_TIMEOUT);
+
+ dbg("%s - port %d Send get_status_line_state URB returns: %i. Statusline: %02x",
+ __FUNCTION__, port->number, result, transfer_buffer[0]);
+
+ if ((transfer_buffer[0] & SUSBCR_GSL_DSR) != 0) {
+ priv->line_state |= TIOCM_DSR;
+ } else {
+ priv->line_state &= ~TIOCM_DSR;
+ }
+
+ kfree(transfer_buffer);
+ return priv->line_state;
+}
+
+static int kobil_tiocmset(struct usb_serial_port *port, struct file *file,
+ unsigned int set, unsigned int clear)
+{
+ struct kobil_private * priv;
+ int result;
+ int dtr = 0;
+ int rts = 0;
+ unsigned char *transfer_buffer;
+ int transfer_buffer_length = 8;
+
+ priv = usb_get_serial_port_data(port);
+ if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID) {
+ // This device doesn't support ioctl calls
+ return -EINVAL;
+ }
+
+ // allocate memory for transfer buffer
+ transfer_buffer = (unsigned char *) kmalloc(transfer_buffer_length, GFP_KERNEL);
+ if (! transfer_buffer) {
+ return -ENOMEM;
+ }
+ memset(transfer_buffer, 0, transfer_buffer_length);
+
+ if (set & TIOCM_RTS)
+ rts = 1;
+ if (set & TIOCM_DTR)
+ dtr = 1;
+ if (clear & TIOCM_RTS)
+ rts = 0;
+ if (clear & TIOCM_DTR)
+ dtr = 0;
+
+ if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID) {
+ if (dtr != 0)
+ dbg("%s - port %d Setting DTR", __FUNCTION__, port->number);
+ else
+ dbg("%s - port %d Clearing DTR", __FUNCTION__, port->number);
+ result = usb_control_msg( port->serial->dev,
+ usb_rcvctrlpipe(port->serial->dev, 0 ),
+ SUSBCRequest_SetStatusLinesOrQueues,
+ USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
+ ((dtr != 0) ? SUSBCR_SSL_SETDTR : SUSBCR_SSL_CLRDTR),
+ 0,
+ transfer_buffer,
+ 0,
+ KOBIL_TIMEOUT);
+ } else {
+ if (rts != 0)
+ dbg("%s - port %d Setting RTS", __FUNCTION__, port->number);
+ else
+ dbg("%s - port %d Clearing RTS", __FUNCTION__, port->number);
+ result = usb_control_msg( port->serial->dev,
+ usb_rcvctrlpipe(port->serial->dev, 0 ),
+ SUSBCRequest_SetStatusLinesOrQueues,
+ USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
+ ((rts != 0) ? SUSBCR_SSL_SETRTS : SUSBCR_SSL_CLRRTS),
+ 0,
+ transfer_buffer,
+ 0,
+ KOBIL_TIMEOUT);
+ }
+ dbg("%s - port %d Send set_status_line URB returns: %i", __FUNCTION__, port->number, result);
+ kfree(transfer_buffer);
+ return (result < 0) ? result : 0;
+}
+
+
static int kobil_ioctl(struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct kobil_private * priv;
- int mask;
int result;
unsigned short urb_val = 0;
unsigned char *transfer_buffer;
@@ -605,90 +719,8 @@
kfree(transfer_buffer);
return ((result < 0) ? -EFAULT : 0);
- case TIOCMGET: // 0x5415
- // allocate memory for transfer buffer
- transfer_buffer = (unsigned char *) kmalloc(transfer_buffer_length, GFP_KERNEL);
- if (! transfer_buffer) {
- return -ENOBUFS;
- } else {
- memset(transfer_buffer, 0, transfer_buffer_length);
- }
-
- result = usb_control_msg( port->serial->dev,
- usb_rcvctrlpipe(port->serial->dev, 0 ),
- SUSBCRequest_GetStatusLineState,
- USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
- 0,
- 0,
- transfer_buffer,
- transfer_buffer_length,
- KOBIL_TIMEOUT
- );
-
- dbg("%s - port %d Send get_status_line_state (TIOCMGET) URB returns: %i. Statusline: %02x",
- __FUNCTION__, port->number, result, transfer_buffer[0]);
-
- if ((transfer_buffer[0] & SUSBCR_GSL_DSR) != 0) {
- priv->line_state |= TIOCM_DSR;
- } else {
- priv->line_state &= ~TIOCM_DSR;
- }
-
- kfree(transfer_buffer);
- return put_user(priv->line_state, (unsigned long *) arg);
-
- case TIOCMSET: // 0x5418
- if (get_user(mask, (unsigned long *) arg)){
- return -EFAULT;
- }
- // allocate memory for transfer buffer
- transfer_buffer = (unsigned char *) kmalloc(transfer_buffer_length, GFP_KERNEL);
- if (! transfer_buffer) {
- return -ENOBUFS;
- } else {
- memset(transfer_buffer, 0, transfer_buffer_length);
- }
-
- if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID) {
- if ((mask & TIOCM_DTR) != 0){
- dbg("%s - port %d Setting DTR", __FUNCTION__, port->number);
- } else {
- dbg("%s - port %d Clearing DTR", __FUNCTION__, port->number);
- }
- result = usb_control_msg( port->serial->dev,
- usb_rcvctrlpipe(port->serial->dev, 0 ),
- SUSBCRequest_SetStatusLinesOrQueues,
- USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
- ( ((mask & TIOCM_DTR) != 0) ? SUSBCR_SSL_SETDTR : SUSBCR_SSL_CLRDTR),
- 0,
- transfer_buffer,
- 0,
- KOBIL_TIMEOUT
- );
-
- } else {
- if ((mask & TIOCM_RTS) != 0){
- dbg("%s - port %d Setting RTS", __FUNCTION__, port->number);
- } else {
- dbg("%s - port %d Clearing RTS", __FUNCTION__, port->number);
- }
- result = usb_control_msg( port->serial->dev,
- usb_rcvctrlpipe(port->serial->dev, 0 ),
- SUSBCRequest_SetStatusLinesOrQueues,
- USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
- (((mask & TIOCM_RTS) != 0) ? SUSBCR_SSL_SETRTS : SUSBCR_SSL_CLRRTS),
- 0,
- transfer_buffer,
- 0,
- KOBIL_TIMEOUT
- );
- }
- dbg("%s - port %d Send set_status_line (TIOCMSET) URB returns: %i", __FUNCTION__, port->number, result);
-
- kfree(transfer_buffer);
- return ((result < 0) ? -EFAULT : 0);
}
- return 0;
+ return -ENOIOCTLCMD;
}
next prev parent reply other threads:[~2003-04-25 0:22 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-24 23:46 [BK PATCH] USB changes for 2.5.68 Greg KH
2003-04-24 23:47 ` [PATCH] More USB fixes " Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH [this message]
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-24 23:47 ` Greg KH
2003-04-25 4:14 ` [BK PATCH] USB changes " Greg KH
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=10512280533869@kroah.com \
--to=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
/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).