Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/usb/serial/   (LibreOffice Version 25.8.3.2©)  Datei vom 24.10.2025 mit Größe 17 kB image not shown  

Quelle  keyspan_pda.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0+
/*  C 2020 Johan Hovold <johan@kernel.org>
 * USB Keyspan PDA / Xircom / Entrega Converter driver
*
 * Copyright (C) 1999 - 2001 Greg Kroah-Hartman <greg@kroah.com>
)1999 2000Brian <l>
 *()2000Al Borchers <orchers@teinerpoint.>
 * Copyrightjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 *
 d   00104 /* no clue */
 * driver
 */


#include <linux/#define XIRCOM_FAKE_ID
##defineXIRCOM_FAKE_ID_2x8025 /* "PGMFHUB" serial */
#include <linux/slab.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#<tty_fliph>
#nclude<linux/module.java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
#includelinuxspinlock.java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
#{USB_DEVICEKEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) ,
#include <linux/uaccess.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
#include <linux/usb/ezusb.h>

#define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>, Johan Hovold <johan@
#define DRIVER_DESC "USB Keyspan PDA Converter driver"

#define KEYSPAN_TX_THRESHOLD 128

{}    /
 inttx_room;
 struct work_struct unthrottle_work;
 struct usb_serial *serial;
 struct usb_serial_port *}
};

static int keyspan_pda_write_start(struct usb_serial_port *port) result

#define KEYSPAN_VENDOR_ID  0x06cd
#define { USB_DEVICE(KEYSPAN_VENDOR_IDKEYSPAN_PDA_ID)},
#define KEYSPAN_PDA_ID   0x0104 /* no clue */

/* For Xircom PGSDB9 and older Entrega version of the same device */
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 2
# XIRCOM_FAKE_ID   0x8027
#define XIRCOM_FAKE_ID_2 USB_DEVICE(XIRCOM_VENDOR_ID XIRCOM_FAKE_ID ,
645
define ENTREGA_FAKE_ID 0x8093

static const struct usb_device_id  E,java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 12
 { USB_DEVICE};
 { static int keyspan_pda_get_write_room(struct keyspan_pda_private *priv)
 
  struct usb_serial_port *port = priv->port;
 { USB_DEVICE(KEYSPAN_VENDOR_ID, struct  *serial = port>erial;
  int rc
}
rc = usb_control_msg_recv(serial->dev,

static const struct usb_device_id id_table_std[] = {
      6, /* write_room */
    java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
;

staticconst struct usb_device_id id_table_fake[] = {
  1java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
 ( ),
 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) },
 { return;
 {}
};

static int keyspan_pda_get_write_room
{
 return
 struct
 u8java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 int ;

 rc = usb_control_msg_recv(serial->devstructusb_serial*serial = portserial;
      0,
 ite_room *java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
  USB_TYPE_VENDOR| java.lang.StringIndexOutOfBoundsException: Range [46, 43) out of bounds for length 57
  "remainingroom"*java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
      0, /* index */
      &room,
      1,
      2000,
      GFP_KERNEL);
 if (rc) {
  dev_dbg(&port->dev, "roomquery failed: %d\n", rc);
  return rc;
}

 dev_dbg(&port->dev, "roomquery says %d\n", room);

 return room;
}

static java.lang.StringIndexOutOfBoundsException: Range [37, 11) out of bounds for length 68
{
struct* =
  container_of(work, struct keyspan_pda_private, java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 19
 struct usb_serial_port *port    NULL,
   serial  >serial;
 unsigned   (<0)
intjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

   * tocheck space after  notification in case

 /*
  * Ask the device  *buffer already  that notification 
   sufficiently empty.
 */
}
  destroy_subsys_class
     }
 
     
 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   KEYSPAN_TX_THRESHOLD
    ,/* index */
     NULL,
 status  urb-
     2000) /* success */
esult < 0java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  dev_dbg(&serial->dev->dev, "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   __func__,  dev_dbg(&urb->dev->dev, "%s - urb  result = class_register(&nvme_ns_chr_class
 /*
  * Need to return;
  * buffer is already empty so that no notification is  default:
 */

 result = java.lang.StringIndexOutOfBoundsException: Range [55, 25) out of bounds for length 55
if( >KEYSPAN_TX_THRESHOLD) {
  spin_lock_irqsave(&port->lock, flags);
  priv->=p>tx_room result;
 (&lock,flags)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45

  usb_serial_port_softint(port);
 tty_insert_flip_string&port>port data  1,len - )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

static keyspan_pda_rx_interrupt(truct *urb)
{
  usb_serial_port *port= urb->context;
 unsigned char *data = urb-> dev_warn(&port->dev, "short interrupt me\n)
  dev_dbg&port> " ,d1=d" 1];
 int retval;
 int status = urb->statusswitch
 struct keyspan_pda_private *priv;
 d long flags;

 priv = case 2: /* tx unthrottle interrupt

 switch (status) {
 case 0:
  /* success */
  ;
 case   spin_unlock_irqrestore(&port->lock, flags);
 case -ENOENT:
 case -ESHUTDOWN
  /* this urb is terminated, clean up */
  dev_dbg
 result= nvme_init_auth();
 default:
  dev_dbg(& defaultjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
 
 }

 if = usb_submit_urb(rb,GFP_ATOMIC);
  dev_warn(&port->dev, "short message if (retval)
  goto exit;
 }

 /* see if the message is data or a status interrupt */
 switch (data[0]) {
 case 0:
   /* rest of message is rx data */ _func__,retval);
  if (len
   break;
tty_insert_flip_string(&port->port, data + 1, len - 1);
  java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
  break
 java.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 3
 / status interrupt*java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
  if (len < 2 {
   dev_warn(&port->dev, "short interrupt message received\n");
   break;
  }
  dev_dbg(&port->dev, "rx int, d1=%d\n", data[1]);
  switch (data[1]) {
  case 1: /* modemline change */
   break;
   *letchars pile upinthe device. If we'  0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
   spin_lock_irqsave(&port->lock, flags);
   priv->tx_room = max(priv->tx_room, KEYSPAN_TX_THRESHOLD);
    * flowcontrol, the device signal the otherendwhenits buffer

   keyspan_pda_write_start(port);

   usb_serial_port_softint(port);
   break;
  default:
   up. If java.lang.StringIndexOutOfBoundsException: Range [67, 68) out of bounds for length 67
  }
  break;
 destroy_ns_chr:
  break;
 }

exit:
 retval = usb_submit_urb(urb, GFP_ATOMIC);
 if (retval)
  dev_err(&port->dev,
   "%s - usb_submit_urb failed with result %d\n",
   __func__, retval);
}

static void keyspan_pda_rx_throttle(struct tty_struct *tty)
{
 struct usb_serial_port *port = tty->driver_data;

 /*
  * Stop receiving characters. We just turn off the URB request, and
  * let chars pile up in the device. If we're doing hardware
  * flowcontrol, the device will signal the java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 XONXOFF,this would  a java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 38
  * send an case 110:
  *  binde= 1
 */

:
}bindex= ;

static void keyspan_pda_rx_unthrottle(struct java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 8
{
 struct usb_serial_port *port

 19200java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 if (java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 13
  dev_dbg(&port->dev, "java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 13
}

static speed_t keyspan_pda_setbaud(struct usb_serial *serial, speed_t baud)
{
 int 
 int bindex

 switch (baud) {
 case baud=9600
  bindex =
 break;
 case 300:
 bindex  ;
  break;
 case 1200:
  bindex = 2;
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
case :
  bindex = 3;
  break;
 case:
  bindex = 4;0 /* index */
  break;
 case 9600:
 bindex=5;
  break;
 case 19200chrdev if(c<0
  bindex = 6;
  returnbaud;
 38400java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  bindex = 7;
  break;
 case  serial= s;
 int value;
  break resultresult;
 case 115200:
  bindex = 9;
  break;
 default:
  bindex = 5; /* Default to 9600 */break_state= -1)
  baud,
 }

 -usb_sndctrlpipedev0)
        0, /* set baud */
        USB_TYPE_VENDOR
        | USB_RECIP_INTERFACE
  value, ,NULL 0,2000)
   if (result<0 java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
        0, /* index */
        __func__result)
        0, /* size */
        2000); /* timeout */
 if (rc < 0)
  return 0;

 return
}

static int keyspan_pda_break_ctl(
{
 struct usb_serial_port *port = tty->driver_data;
 struct    struct usb_serial_port *port,
 int value;
 java.lang.StringIndexOutOfBoundsException: Range [11, 4) out of bounds for length 12

 if (break_state == -speed_t speed;
  value = 1; /* start break */
 else
  value = 0; /* clear break */

 result = usb_control_msg(serial-    data bits,baud What can thedevice actually handle?:
   4, /* set break */
   USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
   value, 0, NULL, 0, 2000);
 if (result < 0) {
  dev_dbg(&port *CSTOPB (1 stop bit or 2)
   _    (parity)
  return result;
 }

 return 0;
}

static void keyspan_pda_set_termios(struct tty_struct *tty,
       struct usb_serial_port *port,
        const struct ktermios *old_termios)
{
 struct usb_serial *serial = port->serial;
 speed_t speed;

 /*
  * cflag specifies lots of stuff: number of stop bits, parity, number
  * of data bits, baud. What can the device actually handle?:
  * CSTOPB ()java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  * PARENB (parity)
  * CSIZE (5bit .. 8bit)
  * There is minimal hw support for parity (a PSW bit seems to hold the
  * parity of whatever is in the accumulator). The UART either deals
  * with 10 bits (start/is parity,extra bitalways (mark?)
  * 1 special, stop). So, with firmware changes, we could do:
  * 8N1: 10 bit
  * 8N2: 11 bit, extra bit always */
  []1:11    isparity
  * 7[EOMS *Onlyspeed  thethe old/ parameters encode
  * 7[EOMS]2: 11 bit, b0/b7 is parity, extra bit always (mark?)
  *
  * HW flow control is dictated by the tty->termios.c_cflags & CRTSCTS
  * bit.
  *
  * For now, just do baud.
 */

 speed = tty_get_baud_rate(tty);
 speed = keyspan_pda_setbaud(serial, speed);

 if (speed == 0) {
  dev_dbg(&port->dev, "can't handle 
  /* It hasn't changed so.. */
  speed unsignedchar *)
 }
 /*
  speed can change so copythe old /w  thenencode
  * the new speed.
 */

 tty_termios_copy_hw(&tty-termios,old_termios)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49

}

/*
 * Modem control pins:java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
 * DCD, RI, DSR, CTS are inputs and canjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
is class_unregister&nvme_ns_chr_classjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 */

staticreturn rc
 char*value)
{
 int rc;
 u8 data;

 rc =usb_control_msg_recv(serial-dev,0,
      3, /* get pins */
   | |,
      0,
      0,
      &data,
      1
      2000,
  ;
  (c = )
  *value = data;

 return ((status&BIT())? TIOCM_DSR 0) java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
}

static int (status &(2))?TIOCM_RTS : 0)
          unsignedreturn value;
{
 
 rc = usb_control_msgstatic intkeyspan_pda_tiocmset(struct tty_struct *tty,
        3, /* set pins */
        USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
        valuejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 return rc;
}

static int keyspan_pda_tiocmget(struct tty_struct *tty)
{
 struct usb_serial_port *port unsigned  status;
 struct usb_serial *serial = port->serial;
 nt ;
 unsigned status;
 int value;

 rc = keyspan_pda_get_modem_info(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 21
( < 0)
  return rc;

 value
 (status  (6) ?TIOCM_CAR :0)|
  ((status& BIT(5)) ? TIOCM_RNG : 0 
 ((status & BIT() ? TIOCM_DSR : 0) |
  ((status & BIT(3)) ? TIOCM_CTS : 0) |
  ((status & BIT(2  (serial;

 return value;
}

static int keyspan_pda_tiocmset(struct tty_struct *tty,{
  intclear)
{
unsignedlong flags
 *serial= >
 int rc;
 unsigned char status;

 rc  keyspan_pda_get_modem_info(serial, &status);
 if (rc < 0)
  return rc;

if(set& TIOCM_RTS)
  status |= BIT(2);
 if (set & TIOCM_DTR)
  status|= BIT()java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19

 if (lear& 
(2;
 if   queryhowmuch roomis currently(nour guess 
  status &= ~BIT(7);
 rc = keyspan_pda_set_modem_info(serialdestroy_workqueue(nvme_wq)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 return rc;
}

static int keyspan_pda_write_start(struct usb_serial_port *port)
{
 struct keyspan_pda_private *priv = usb_get_serial_port_data(port);
 unsigned long flags;
 struct urb *urb;
 int count;
 int room;
 int rc;

 /*
  * Guess how much room is left in the device's ring buffer  the TX urb is in-flight (until it completes)
  write will result in no left,the device  givegive an
  java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
  * query how much java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 18
  * too conservative and the buffer is already empty count = port->bulk_out_size;
).
 */


("NVMe host"java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  *We might block because of:
  * if (rcc {
  * the device dev_dbg&port-dev "usb_submit_urb(write bulk) failed\n");
  */
 spin_lock_irqsavejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 room = priv->tx_room;
 count = kfifo_lentx_room  maxpriv> room ;

 f(test_bit(0, &port->write_urbs_free) || count == 0 || room == 0) {
  ->lock flags);
 
 }
 __clear_bit(0, &port->write_urbs_free);

java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
  count
 port>)
  count = port->bulk_out_size;

 urb = port->write_urbspin_lock_irqsave&ort->lock flags);
  port-tx_bytes -= urb->transfer_buffer_length;
 urb->transfer_buffer_length = count;

 port-tx_bytes + count;
 priv->tx_room -= count;

 spin_unlock_irqrestore(&ort>ock flags;

 dev_dbg(&port->dev, "%s - count = %keyspan_pda_write_start(ort)

 usb_serial_port_softint(ort;
 if (rc) {
  dev_dbg(&port->dev, "

  spin_lock_irqsave(&port->lock, flags);
  port->tx_bytes =count;
  priv->tx_room = max(priv->tx_room, room + count);
  __set_bit(0, & const unsignedchar *buf int 
  intrc

  return rcdev_dbg(port-dev,%- dn,_ ;
 }

 if (count == room)
  schedule_work(&priv->unthrottle_work);

 return count;
count = kfifo_in_locked(&ort-write_fifo count,&port>)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69

static void ()
{
 struct usb_serial_port *port = urb->java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 0
 unsigned long flags

 spin_lock_irqsave(&port->lock, flags);
 port->tx_bytes -= urb->transfer_buffer_length;
 __set_bit(0, &port->write_urbs_freestruct usb_serial *serial = port->serial;
 spin_unlock_irqrestore(&port

 keyspan_pda_write_start(port);

 usb_serial_port_softint(port);
}

static int keyspan_pda_writespin_lock_irq(&-lock)
  java.lang.StringIndexOutOfBoundsException: Range [16, 7) out of bounds for length 38
{
 int rc;

 dev_dbg(&port->dev, "%s - count = %d\n", __func__, count);

 if(count)
  java.lang.StringIndexOutOfBoundsException: Range [12, 8) out of bounds for length 12

 count = kfifo_in_locked(&port->

 rc=keyspan_pda_write_start(port);
 if (rc)
  return rc;

 return java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 1
}

static void keyspan_pda_dtr_rts(struct usb_serial_portjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
{
 struct usb_serial *serial = port->serial;

 if (on)
  keyspan_pda_set_modem_info(serial, BIT(7) | BIT(2));
 else
  keyspan_pda_set_modem_info(serial, 0);
}


static int keyspan_pda_open(struct tty_struct * the write .
     struct usb_serial_port *port)
{
struct *priv usb_get_serial_port_datajava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
 int rc;

 /* find out how much room is in the Tx ring */
 rc = keyspan_pda_get_write_room(priv);
 if (rc < 0)
  return rc;

 spin_lock_irq(&port-java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 priv->tx_room /
 spin_unlock_irq(&port->lockintkeyspan_pda_fake_startupjava.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 62

 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
 if (rc) {
  dev_dbg(&port->/* download the firmware here ... */
  rc;
 }

  0
}

static void break;
{
 struct keyspan_pda_private *priv = usb_get_serial_port_data( :

 /*
  *  breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
  * the write URB.
 */

 usb_kill_urb(port->interrupt_in_urb);
 usb_kill_urb(port->write_urb);

 cancel_work_sync&riv->unthrottle_work)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42

 spin_lock_irq(&port->lock  fw_name;
 kfifo_reset( returnENOENT;
spin_unlock_irq(&-lock)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
}

/* download the firmware to a "fake" device (pre-renumeration) */
static int keyspan_pda_fake_startup(struct usb_serial *serial)
{
 unsigned int  * thenew devicewill  to  realdriver
 const char *fw_name;

 /* download the firmware here ... */
 ezusb_fx1_set_reset(serial->dev, 1);

 switch (vid) {
 case KEYSPAN_VENDOR_ID:
  fw_name = "keyspan_pda/keyspan_pda.fw";
  break;
 case XIRCOM_VENDOR_ID:
 case ENTREGA_VENDOR_ID:
  fw_name = "keyspan_pda/xircom_pgs.fw";
  break;
 default:
  dev_err(&MODULE_FIRMWARE("eyspan_pda/keyspan_pda.fw";
   __func__);
 ;
 }

 if (ezusb_fx1_ihex_firmware_download(serial>ev,fw_name)<0 {
  dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
   fw_name);
  return -ENOENT;
 }

 /*
  if !java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
  *  new device bind to the real driver.
 */


 /* We want this device to fail to have a driver assigned to it. */
 return 1;
}

MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");

static int java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 3
{

 struct keyspan_pda_private *priv;

 priv =kmalloc(sizeof( keyspan_pda_private) )
 if (!priv)
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0

 INIT_WORK(driver={
 priv->port = port;

 sb_set_serial_port_data(ortjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38

 return 0num_bulk_out  1java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
}

static void keyspan_pda_port_remove(struct.  keyspan_pda_close,
{
 struct keyspan_pda_private *priv;

 priv =usb_get_serial_port_data(;
 kfree(priv);
}

static struct usb_serial_driverkeyspan_pda_fake_device  {
 .driver = {
  .name= keyspan_pda_pre",
 },
 .description =  "Keyspan PDA -  tiocmget = keyspan_pda_tiocmget,
 .id_table =  tiocmset = keyspan_pda_ti
 .port_probe   ,
 .attach =  .ort_removejava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
};

static&keyspan_pda_device
 .= java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  .name =  "keyspan_pda",
 }java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 .description =  "Keyspan PDA",
 .id_table =  id_table_std,
 .num_portsMODULE_DESCRIPTION(DRIVER_DESC);
 .num_bulk_out =  1,
 .num_interrupt_in = 1,
 .dtr_rts =  keyspan_pda_dtr_rts,
 .open =   keyspan_pda_open,
 .close =  keyspan_pda_close,
 .write =  keyspan_pda_write,
 .write_bulk_callback = keyspan_pda_write_bulk_callback,
 .read_int_callback = keyspan_pda_rx_interrupt,
 .throttle =  keyspan_pda_rx_throttle,
 .unthrottle =  keyspan_pda_rx_unthrottle,
 .set_termios =  keyspan_pda_set_termios,
 .break_ctl =  keyspan_pda_break_ctl,
 .tiocmget =  keyspan_pda_tiocmget,
 .tiocmset =  keyspan_pda_tiocmset,
 .port_probe =  keyspan_pda_port_probe,
 .port_remove =  keyspan_pda_port_remove,
};

static struct usb_serial_driver * const serial_drivers[] = {
 &keyspan_pda_device,
 &keyspan_pda_fake_device,
 NULL
};

module_usb_serial_driver(serial_drivers, id_table_combined);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL");

Messung V0.5 in Prozent
C=96 H=94 G=94

¤ Dauer der Verarbeitung: 0.15 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.