linux/drivers/char/dtlk.c
<<
ion>4.4/spa v 4.4/form v 4.4a ion>4. href="../linux+v3.7.4/drivers/char/dtlk.c">ion>4.4img src="../.static/gfx/right.png" alt=">>">io4/spa vio4spa class="lxr_search">ion> ="+search" method="post" onsubmit="return do_search(this);">ion>4.4input typ hidden" nam navtarget" on> ">ion>4.4input typ text" nam search" id search">ion>4.4buttptityp submit">Search4. onclick="return ajax_prefs();">ion>4.Prefsv 4.4/a>io4/spa vn>4. .4/div vn>4. .4form ac > ="ajax+*" method="post" onsubmit="return false;">io4input typ hidden" nam ajax_lookup" id ajax_lookup" on> ">in>4. .4/form vin>4. .4div class="headingbottpm">
4.
4. 4. .4div id search_results" class="search_results"v 4 vn>4. .4/div v 4div id content">v 4div id file_contents"
. .14/a>4spa  class="comment">/*                                              -*- linux-c -*-4/spa  v. .24/a>4spa  class="comment"> * dtlk.c - DoubleTalk PC driver for Linux4/spa  v. .34/a>4spa  class="comment"> *4/spa  v. .44/a>4spa  class="comment"> * Original author: Chris Pallotta <chris@allmedia.com>4/spa  v. .54/a>4spa  class="comment"> * Current maintainer: Jim Va  Zandt <jrv@vanzandt.mv.com>4/spa  v. .64/a>4spa  class="comment"> * 4/spa  v. .74/a>4spa  class="comment"> * 2000-03-18 Jim Va  Zandt: Fix polling.4/spa  v. .84/a>4spa  class="comment"> *  Eliminate dtlk_timer_ac >ve flag and separate dtlk_stop_timer4/spa  v. .94/a>4spa  class="comment"> *  func >
 .  Don't restart timer in dtlk_timer_tick.  Restart timer4/spa  v. 47"
a>4spa  class="comment"> *  in dtlk_poll after every poll.  dtlk_poll returns mask (duh).4/spa  v. 114/a>4spa  class="comment"> *  Eliminate unused func >
  dtlk_write_byte.  Misc. code cleanups.4/spa  v. 124/a>4spa  class="comment"> */4/spa  v. 134/a>v. 144/a>4spa  class="comment">/* This driver is for the DoubleTalk PC, a speech synthesizer4/spa  v. 154/a>4spa  class="comment">   manufac ured by RC Systems (http://www.rcsys.com/).  It was written4/spa  v. 164/a>4spa  class="comment">   based 
  documenta >
  in their User's Manual file and Developer's4/spa  v. 174/a>4spa  class="comment">   Tools disk.4/spa  v. 184/a>v. 194/a>4spa  class="comment">   The DoubleTalk PC contains four voice synthesizers: text-to-speech4/spa  v. 27"
a>4spa  class="comment">   (TTS), linear predic >ve coding (LPC), PCM/ADPCM, and CVSD.  It4/spa  v. 214/a>4spa  class="comment">   also has a tpte generator.  Output data for LPC are written tp the4/spa  v. 224/a>4spa  class="comment">   LPC port, and output data for the other modes are written tp the4/spa  v. 234/a>4spa  class="comment">   TTS port.4/spa  v. 244/a>v. 254/a>4spa  class="comment">   Two kinds of data ca  be read from the DoubleTalk: status4/spa  v. 264/a>4spa  class="comment">   informa >
  (in response tp the "\001?" interroga >
  command) is4/spa  v. 274/a>4spa  class="comment">   read from the TTS port, and index markers (which mark the progress4/spa  v. 284/a>4spa  class="comment">   of the speech) are read from the LPC port.  Not all models of the4/spa  v. 294/a>4spa  class="comment">   DoubleTalk PC implement index markers.  Both the TTS and LPC ports4/spa  v. 37"
a>4spa  class="comment">   ca  also display status flags.4/spa  v. 314/a>v. 324/a>4spa  class="comment">   The DoubleTalk PC generates no interrupts.4/spa  v. 334/a>v. 344/a>4spa  class="comment">   These charac eristics are mapped intp the Unix stream I/O model as4/spa  v. 354/a>4spa  class="comment">   follows:4/spa  v. 364/a>v. 374/a>4spa  class="comment">   "write" sends bytes tp the TTS port.  It is the responsibility of4/spa  v. 384/a>4spa  class="comment">   the user program tp switch modes among TTS, PCM/ADPCM, and CVSD.4/spa  v. 394/a>4spa  class="comment">   This driver was written for use with the text-to-speech4/spa  v. 47"
a>4spa  class="comment">   synthesizer.  If LPC output is needed some day, other minor device4/spa  v. 414/a>4spa  class="comment">   numbers ca  be used tp select among output modes.4/spa  v. 424/a>v. 434/a>4spa  class="comment">   "read" gets index markers from the LPC port.  If the device does4/spa  v. 444/a>4spa  class="comment">   not implement index markers, the read will fail with error EINVAL.4/spa  v. 454/a>v. 464/a>4spa  class="comment">   Status informa >
  is available using the DTLK_INTERROGATE ioctl.4/spa  v. 474/a>v. 484/a>4spa  class="comment"> */4/spa  v. 494/a>v. 57"
a>#include <linux/module.h"
a>>v. 514/a>v. 524/a>#define.4a href="+code=KERNEL" class="sref">KERNEL4/a>v. 53"
a>#include <linux/typ s.h"
a>>v. 54"
a>#include <linux/fs.h"
a>>v. 55"
a>#include <linux/mm.h"
a>>v. 56"
a>#include <linux/errno.h"
a>>        4spa  class="comment">/* for -EBUSY */4/spa  v. 57"
a>#include <linux/ioport.h"
a>>       4spa  class="comment">/* for request_reg>
  */4/spa  v. 58"
a>#include <linux/delay.h"
a>>        4spa  class="comment">/* for loops_per_jiffy */4/spa  v. 59"
a>#include <linux/sched.h"
a>>v. 67"
a>#include <linux/mutex.h"
a>>v. 61"
a>#include <asm/io.h"
a>>             4spa  class="comment">/* for inb_p, outb_p, inb, outb, etc. */4/spa  v. 62"
a>#include <asm/uaccess.h"
a>>        4spa  class="comment">/* for get_user, etc. */4/spa  v. 63"
a>#include <linux/wait.h"
a>>         4spa  class="comment">/* for wait_queue */4/spa  v. 64"
a>#include <linux/init.h"
a>>         4spa  class="comment">/* for __init, module_{init,exit} */4/spa  v. 65"
a>#include <linux/poll.h"
a>>         4spa  class="comment">/* for POLLIN, etc. */4/spa  v. 66"
a>#include <linux/dtlk.h"
a>>         4spa  class="comment">/* local header file for DoubleTalk on>
 s */4/spa  v. 674/a>v. 68"
a>#ifdef.4a href="+code=TRACING" class="sref">TRACING4/a>v. 694/a>#define.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4a href="+code=str" class="sref">str4/a>).4a href="+code=printk" class="sref">printk4/a>(4a href="+code=str" class="sref">str4/a>);v. 704/a>#define.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">")"4/spa  )v. 71"
a>#else                           4spa  class="comment">/* !TRACING */4/spa  v. 724/a>#define.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4a href="+code=str" class="sref">str4/a>).((void) 0)v. 734/a>#define.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>.((void) 0)v. 74"
a>#endif                          4spa  class="comment">/* TRACING */4/spa  v. 754/a>v. 76"
a>static.4a href="+code=DEFINE_MUTEX" class="sref">DEFINE_MUTEX4/a>(4a href="+code=dtlk_mutex" class="sref">dtlk_mutex4/a>);v. 77"
a>static.void.4a href="+code=dtlk_timer_tick" class="sref">dtlk_timer_tick4/a>(unsigned long.4a href="+code=data" class="sref">data4/a>);v. 784/a>v. 79"
a>static.int.4a href="+code=dtlk_major" class="sref">dtlk_major"
a>;v. 80"
a>static.int.4a href="+code=dtlk_port_lpc" class="sref">dtlk_port_lpc"
a>;v. 81"
a>static.int.4a href="+code=dtlk_port_tts" class="sref">dtlk_port_tts4/a>;v. 82"
a>static.int.4a href="+code=dtlk_busy" class="sref">dtlk_busy4/a>;v. 83"
a>static.int.4a href="+code=dtlk_has_indexing" class="sref">dtlk_has_indexing4/a>;v. 84"
a>static.unsigned int.4a href="+code=dtlk_portlist" class="sref">dtlk_portlist"
a>[] =v. 854/a>{0x25e, 0x29e, 0x2de, 0x31e, 0x35e, 0x39e, 0};v. 86"
a>static.4a href="+code=wait_queue_head_t" class="sref">wait_queue_head_t4/a>.4a href="+code=dtlk_process_list" class="sref">dtlk_process_list4/a>;v. 87"
a>static.4a href="+code=DEFINE_TIMER" class="sref">DEFINE_TIMER4/a>(4a href="+code=dtlk_timer" class="sref">dtlk_timer4/a>,.4a href="+code=dtlk_timer_tick" class="sref">dtlk_timer_tick4/a>, 0, 0);v. 884/a>v. 894/a>4spa  class="comment">/* prototyp s for file_opera >
 s struct */4/spa  v. 90"
a>static.4a href="+code=ssize_t" class="sref">ssize_t4/a>.4a href="+code=dtlk_read" class="sref">dtlk_read4/a>(struct 4a href="+code=file" class="sref">file4/a>.*, char 4a href="+code=__user" class="sref">__user4/a>.*,v. 91"
a>                         4a href="+code=size_t" class="sref">size_t4/a>.4a href="+code=nbytes" class="sref">nbytes4/a>,.4a href="+code=loff_t" class="sref">loff_t4/a>.*.4a href="+code=ppos" class="sref">ppos4/a>);v. 92"
a>static.4a href="+code=ssize_t" class="sref">ssize_t4/a>.4a href="+code=dtlk_write" class="sref">dtlk_write4/a>(struct 4a href="+code=file" class="sref">file4/a>.*, c
 st char 4a href="+code=__user" class="sref">__user4/a>.*,v. 93"
a>                          4a href="+code=size_t" class="sref">size_t4/a>.4a href="+code=nbytes" class="sref">nbytes4/a>,.4a href="+code=loff_t" class="sref">loff_t4/a>.*.4a href="+code=ppos" class="sref">ppos4/a>);v. 94"
a>static.unsigned int.4a href="+code=dtlk_poll" class="sref">dtlk_poll4/a>(struct 4a href="+code=file" class="sref">file4/a>.*, 4a href="+code=poll_table" class="sref">poll_table4/a>.*);v. 95"
a>static.int.4a href="+code=dtlk_open" class="sref">dtlk_open4/a>(struct 4a href="+code=inode" class="sref">inode4/a>.*, struct 4a href="+code=file" class="sref">file4/a>.*);v. 96"
a>static.int.4a href="+code=dtlk_release" class="sref">dtlk_release4/a>(struct 4a href="+code=inode" class="sref">inode4/a>.*, struct 4a href="+code=file" class="sref">file4/a>.*);v. 97"
a>static.long.4a href="+code=dtlk_ioctl" class="sref">dtlk_ioctl4/a>(struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>,v. 98"
a>                       unsigned int.4a href="+code=cmd" class="sref">cmd4/a>,.unsigned long.4a href="+code=arg" class="sref">arg4/a>);v. 994/a>v.100"
a>static.c
 st struct 4a href="+code=file_opera >
 s" class="sref">file_opera >
 s4/a>.4a href="+code=dtlk_fops" class="sref">dtlk_fops4/a>.=v.101"
a>{v.102"
a>        .4a href="+code=owner" class="sref">owner"
a>          =.4a href="+code=THIS_MODULE" class="sref">THIS_MODULE4/a>,v.103"
a>        .4a href="+code=read" class="sref">read4/a>           =.4a href="+code=dtlk_read" class="sref">dtlk_read4/a>,v.104"
a>        .4a href="+code=write" class="sref">write4/a>          =.4a href="+code=dtlk_write" class="sref">dtlk_write4/a>,v.105"
a>        .4a href="+code=poll" class="sref">poll4/a>           =.4a href="+code=dtlk_poll" class="sref">dtlk_poll4/a>,v.106"
a>        .4a href="+code=unlocked_ioctl" class="sref">unlocked_ioctl4/a>.=.4a href="+code=dtlk_ioctl" class="sref">dtlk_ioctl4/a>,v.107"
a>        .4a href="+code=open" class="sref">open4/a>           =.4a href="+code=dtlk_open" class="sref">dtlk_open4/a>,v.108"
a>        .4a href="+code=release" class="sref">release4/a>        =.4a href="+code=dtlk_release" class="sref">dtlk_release4/a>,v.109"
a>        .4a href="+code=llseek" class="sref">llseek4/a>         =.4a href="+code=no_llseek" class="sref">no_llseek4/a>,v.147"
a>};v.1114/a>v.1124/a>4spa  class="comment">/* local prototyp s */4/spa  v.113"
a>static.int.4a href="+code=dtlk_dev_probe" class="sref">dtlk_dev_probe4/a>(void);v.114"
a>static.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4/a>.*4a href="+code=dtlk_interroga e" class="sref">dtlk_interroga e4/a>(void);v.115"
a>static.int.4a href="+code=dtlk_readable" class="sref">dtlk_readable4/a>(void);v.116"
a>static.char 4a href="+code=dtlk_read_lpc" class="sref">dtlk_read_lpc4/a>(void);v.117"
a>static.char 4a href="+code=dtlk_read_tts" class="sref">dtlk_read_tts4/a>(void);v.1184/a>static.int.4a href="+code=dtlk_writeable" class="sref">dtlk_writeable4/a>(void);v.119"
a>static.char 4a href="+code=dtlk_write_bytes" class="sref">dtlk_write_bytes4/a>(c
 st char *4a href="+code=buf" class="sref">buf4/a>,.int.4a href="+code=n" class="sref">n4/a>);v.120"
a>static.char 4a href="+code=dtlk_write_tts" class="sref">dtlk_write_tts4/a>(char);v.1214/a>4spa  class="comment">/*4/spa  v.1224/a>4spa  class="comment">   static.void.dtlk_handle_error(char, char, unsigned int);4/spa  v.1234/a>4spa  class="comment"> */4/spa  v.1244/a>v.125"
a>static.4a href="+code=ssize_t" class="sref">ssize_t4/a>.4a href="+code=dtlk_read" class="sref">dtlk_read4/a>(struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>, char 4a href="+code=__user" class="sref">__user4/a>.*4a href="+code=buf" class="sref">buf4/a>,v.126"
a>                         4a href="+code=size_t" class="sref">size_t4/a>.4a href="+code=count" class="sref">count4/a>,.4a href="+code=loff_t" class="sref">loff_t4/a>.*.4a href="+code=ppos" class="sref">ppos4/a>)v.1274/a>{v.128"
a>        unsigned int.4a href="+code=minor" class="sref">minor4/a>.=.4a href="+code=iminor" class="sref">iminor4/a>(4a href="+code=file" class="sref">file4/a>->4a href="+code=f_pathnam  ole" class="sref">filUs.h"
a>>viminine"="dr4L46aref">n4/a>);v     >, char 4a href="+cocpathnam  ole" clchist4/a>;v. 37"
a>     ed int.4a href="+coinor" class="srefnor4/a>0/a>,.4a href="+coretribytes" class="sreretribyist4/a>;v. 314/a>v      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu(f">dtlk_rt;)"4/spa/a>;v     /a>4spa  class="comment">/f">pri(t;)&quhe DoubleTalk - f">dtlk_r()\ng">&quo;t"> */4/spa  vv     if /a>(4a href="+code=minor" class="sref">minor4/!a>.=.4a href="+cohe DTMINOIMER" class="srefe DTMINOInor4/|| !a>.4a href="+code=dtlk_has_indexing" class="sref">dtlk_has_indexing4/a>)v             t="retu-a>.4a href="+coor EINing" class="sreor EINist4/a>;vv      s f/a>(4a href="+coretribytes" class="sreretribyist4/a>0;a>,.4a href="+coretribytes" class="sreretribyist4ude &a>,.4a href="+code loops_per_jif_t" class="sref" loops_per_jiist4/a>,.4a href="+coretribytes" class="sreretribyist4++) /a>{v             whr fi/a>(4a href="+coinor" class="srefnor4/de &a>,.4a href="+code=count" class="sref">count4 &&int.4a href="+code=dtlk_readable" class="sref">dtlk_readable4/)) /a>{v             
a>      =.4a href="+cocpathnam  ole" clchist4    =.4a href="+code=dtlk_read_lpc" class="sref">dtlk_read_lpc4/a/a>;v                     /a>4spa  class="comment">/*     f">pri(t;)&quf">dtlk_r()the rs 0x%02x\ng">&qu/a>,o;t"> */4/spa  v                     if /a>(4a href="+copute=__user" class="srepute=__unor4/a>(4a href="+cocpathnam  ole" clchist4/a>,.4a href="+code=buf" class="sref">buf4++)/a>)v                             t="retu-a>.4a href="+cooFAULTEXT" class="sreoFAULTist4/a>;v             
a>      =.4a href="+coinor" class="srefnor4++/a>;v             }a>;v             if /a>(4a href="+coinor" class="srefnor4/a>)v             
a>     t="retua>(4a href="+coinor" class="srefnor4/a>;v             if /a>(4a href="+code=file" class="sref">file4/a>->4a href="+codeus flathnam  ole" clasus flunt4 &ua>(4a href="+coO_NONBLOCKathnam  ole" clO_NONBLOCKnor4/a>)v                     bhe k/a>;v             a>(4a href="+codsleep_no interriadable" class="sredsleep_no interriadanor4/100, 0);v     }a>;v     if /a>(4a href="+coretribytes" class="sreretribyist4/a   =.4a href="+code loops_per_jif_t" class="sref" loops_per_jiist4/a>)v             a>(4a href="+cope=printk" class="sref">printk4/a>(4a href="+cof">K_ERIMER" class="sref">K_ERIe_t4/a>(4spa  class="string">&quf">dtlk_rart tsnb, \ng">"4/spa/a>;v      =.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>;v     t="retu-a>.4a href="+cooAGAINEXT" class="sreoAGAINRET4/a>;v. 56"}a>;vvstatic.4a href="+code=ssize_t" class="sref">ssize_t4/a>.4a href="+code=dtlk_write" class="sref">dtlk_write4/a>(struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>, c
 st char 4a href="+code=__user" class="sref">__user4/a>.*4a href="+code=buf" class="sref">buf4/a>,v                          4a href="+code=size_t" class="sref">size_t4/a>.4a href="+code=count" class="sref">count4/a>,.4a href="+code=loff_t" class="sref">loff_t4/a>.*.4a href="+code=ppos" class="sref">ppos4/a>)v. 67"/a>{v     ed int.4a href="+coinor" class="srefnor4/a>0/a>,.4a href="+coretribytes" class="sreretribyist4/a>0/a>,.4a href="+cocpathnam  ole" clchist4/a>;vv      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu(f">dtot;write"4/spa/a>;v. 64"
a>#ifdef.4a href="+code=TRACING" class="sref">TRACING4/a>v      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu \g">&quite"4/spa/a>;v     /a>{v             ed int.4a href="+coinor" class="srefnor4/a>,.4a href="+cocpathnam  ole" clchist4/a>;v              s f/a>(4a href="+coinor" class="srefnor4/a>0;ua>(4a href="+coinor" class="srefnor4/de &a>,.4a href="+code=count" class="sref">count4;ua>(4a href="+coinor" class="srefnor4++) /a>{v                     if /a>(4a href="+coor get_unor" class="sreor get_unor4/a>(4a href="+cocpathnam  ole" clchist4/a>,.4a href="+code=buf" class="sref">buf4 +ua>(4a href="+coinor" class="srefnor4)/a>)v             
a>     
a>     t="retu-a>.4a href="+cooFAULTEXT" class="sreoFAULTist4/a>;v                     if /a>(4spa  class="stringer&# ger&#ot;4/sp/de &   =.4a href="+cocpathnam  ole" clchist4 &&int.4a href="+cocpathnam  ole" clchist4 &e &   >(4spa  class="stringer&#~ger&#ot;4/sp/a>)v                              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu%cite"4/sp/a>,.4a href="+cocpathnam  ole" clchist4a/a>;v                     a>#ea>;v             
a>              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\\%03oite"4/sp/a>,.4a href="+cocpathnam  ole" clchist4a/a>;v             }a>;v              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\g">&quite"4/spa/a>;v     }a>;v. 784
a>#ena>;vv     ef /a>(4a href="+coie=iminor" class="sref">iminor4/a>(4a href="+code=file" class="sref">file4/a>->4a href="+code=f_pathnam  ole" class="sref">filUs.h"
a>>viminine"="dr4L46aref">n4//!a>.=.4a href="+cohe DTMINOIMER" class="srefe DTMINOInor4/a>)v             t="retu-a>.4a href="+coor EINing" class="sreor EINist4/a>;vv     whr fi/1) /a>{v             whr fi/a>(4a href="+coinor" class="srefnor4/de &a>,.4a href="+code=count" class="sref">count4 &&i!a>.4a href="+coor get_unor" class="sreor get_unor4/a>(4a href="+cocpathnam  ole" clchist4/a>,.4a href="+code=buf" class="sref">buf4) &&a>{v                    /a>(4a href="+cocpathnam  ole" clchist4/a   =.4a href="+cofe DTCLEAIMER" class="srefe DTCLEAInor4/|| a>.4a href="+code=dtlk_writeable" class="sref">dtlk_writeable4/))) /a>{v                     a>.4a href="+code=dtlk_write_tts" class="sref">dtlk_write_tts4/>,.4a href="+cocpathnam  ole" clchist4a/a>;v             
a>     >,.4a href="+code=buf" class="sref">buf4++/a>;v                      =.4a href="+coinor" class="srefnor4++/a>;v                     if /a>(4a href="+coinor" class="srefnor4/d#37; 5/a  d) 0)v             
a>     
a>     /a>4spa  class="comment">We yiel andrart t >coil ux/sculed */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>again.">   Thrscucet is ttransfsizer4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>enersed 500nds by/sec, but isatper's4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>std wienoughsed keep upuse with 9;s4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>sa speech synthesietc. */4/spa  v                             a>(4a href="+codsleep_no interriadable" class="sredsleep_no interriadanor4/1a/a>;v                     a>#el/a>{v             
a>             aa>4spa  class="comment">is tRDY bit goet esio 2-3 be c */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>aftrivek_wstrPCM, agoet 1>again */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>18.-190 be c lnerizerHere, wefor wech4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>upued 250 be c ta for tRDY bit toech4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>go nonesioetc. */4/spa  v                              s f/a>(4a href="+coretribytes" class="sreretribyist4/a>0;a  v                                  a>(4a href="+coretribytes" class="sreretribyist4/de &a>,.4a href="+code loops_per_jif_t" class="sref" loops_per_jiist4 / (4000/>,.4a href="+coHZf_t" class="sreHZist4a/a>;v             
a>                  a>(4a href="+coretribytes" class="sreretribyist4++) 0)v                                     if /a>(4a href="+coir innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4) & 0)v                      >                  a>(4a href="+coTTS_WRITABODULE" class="srefTS_WRITABODnor4/a>)v             
a>                             bhe k/a>;v                     }a>;v                     a>(4a href="+coretribytes" class="sreretribyist4/a>0;a  v             }a>;v             if /a>(4a href="+coinor" class="srefnor4/a   =.4a href="+code=count" class="sref">count4/a>)v                     t="retua>(4a href="+coinor" class="srefnor4/a>;v             if /a>(4a href="+code=file" class="sref">file4/a>->4a href="+codeus flathnam  ole" clasus flunt4 &ua>(4a href="+coO_NONBLOCKathnam  ole" clO_NONBLOCKnor4/a>)v             
a>     bhe k/a>;vv              =.4a href="+codsleep_no interriadable" class="sredsleep_no interriadanor4/1a/a>;vv             if /++a>(4a href="+coretribytes" class="sreretribyist4/da>&g10/a>.*.4a href="+coHZf_t" class="sreHZist4a { aa>4spa  class="comment">or w no more isang10/e c */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>rs fr  ctvek_wueue */4/spa  v             
a>      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&quar/d:vek_wuert touportite"4/spa  v                      >      >(4spa  class="string">&qufr in(f">dtlk_port_)/a>0x%02x\ng">"4/sp/a  v                            a>(4a href="+coir innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)a/a>;v                      =.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>;v             
a>     t="retu-a>.4a href="+coo -EBing" class="sreo -EBRET4/a>;v             }a>;v.126"
a>     }a>;v      =.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>;v.128"
a>     t="retu-a>.4a href="+cooAGAINEXT" class="sreoAGAINRET4/a>;v;v. 37"a>;vstatic.unsigned int.4a href="+code=dtlk_poll" class="sref">dtlk_poll4/a>(struct 4a href="+code=file" class="sref">file4/act 4a href="+code=file" class="sref">file4>.*, 4a href="+code=poll_table" class="sref">poll_table4/a.*, 4a href="+coor wble" class="sreor wecr4/a>)v{v     ed int.4a href="+codasintk" class="sredasiist4/a>0;a  v     >,.unsigned long.4a href="+coexpirbytes" class="sreexpirbyRET4/a>;vv      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu f">dtlk_pite"4/spa/a>;v      a>4spa  class="comment">/*4/spa  v4spa  class="comment">>>>>>>>>
a>static.loed ijuot;4/spa  v4spa  class="comment">>>>>>>>>f">pri(t;)&qu.g">&quo;ot;4/spa  v4spa  class="comment">>>>>>>>>f">pri(t;)&qude &%ldda>&g">&qu/aer_jiby-jo;ot;4/spa  v4spa  class="comment">>>>>>>>>j=er_jiby;ot;4/spa  v4spa  class="comment">>>>>>>ue */4/spa  v      =.4a href="+cof">poor wble" class="sref">poor wnor4/a>(4a href="+code=file" class="sref">file4, &nt.4a href="+code=dtlr_process_list" class="sref">dtlk_process_list4>.*, 4a href="+coor wble" class="sreor wecr4//a>;vv     if /a>(4a href="+cof">dtlk_has_indexing" class="sref">dtlk_has_indexing4 &&int.4a href="+code=dtlk_readable" class="sref">dtlk_readable4/)) /a>{v             filUs.h"
a>>vdtlk_timer4//a>;v             nt.4a href="+codasintk" class="sredasiist4/a>nt.4a href="+coor POLntk" class="sreor POLnor4/|>nt.4a href="+coor PRDNORMntk" class="sreor PRDNORMRET4/a>;v     }a>;v     if /a>(4a href="+cof">dtlk_writeable" class="sref">dtlk_writeable4/)) /a>{v             a>(4a href="+covdtlk_timer4//a>;v             nt.4a href="+codasintk" class="sredasiist4/|a>nt.4a href="+coor POUTEXT" class="sreor POUTnor4/|>nt.4a href="+coor PWRNORMntk" class="sreor PWRNORMRET4/a>;v     }a>;v     aa>4spa  class="comment">is re are no excepera a>, diera >
ue */4/spa  vv        4spa  class="comment">/s re wonper&#t be any no interrs, so wefset aert tr noswridetc. */4/spa  v      =.4a href="+coexpirbytes" class="sreexpirbyRET4/a>nt.4a href="+coer_jibytes" class="sreer_jibyRET4/+ 3act 4a href="+coHZf_t" class="sreHZist4 /0">./a>;v      =.4a href="+comodtlk_timer" class="sremodtlk_tible4/&nt.4a href="+code=dtlk_timer" class="sref">dtlk_timer4>.*, 4a href="+coexpirbytes" class="sreexpirbyRET4//a>;vv     t="retua>(4a href="+codasintk" class="sredasiist4/a>;v. 67"}a>;vvstatic.void.4a href="+code=dtlk_timer_tick" class="sref">dtlk_timer_tick4/a>(unsigned long.4a href="+code=data" class="sref">data4//a>v{v      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu f">dtlk_timer_tite"4/spa/a>;v      =.4a href="+cowake_up_no interriadable" class="srewake_up_no interriadable4/&nt.4a href="+code=dtlr_process_list" class="sref">dtlk_process_list4a/a>;v;vvstatic.long.4a href="+code=dtlk_ioctl" class="sref">dtlk_ioctl4/a>(struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>,v                       unsigned int.4a href="+code=cmd" class="sref">cmd4/a>,v             
a>    >,.unsigned long.4a href="+code=arg" class="sref">arg4/a>,v{v     st char 4a href="+code=__user" class="sref">__user4/a>.*4a href="+cof">nnor" class="sref">nRET4/a>(st char 4a href="+code=__user" class="sref">__user4/a)ng.4a href="+code=arg" class="sref">arg4/a>;v     ic.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4/a>.*4a href="+cosnnor" class="sresparg4/a>;v     st char 4a href="+colk_pvapoll" class="sref"_pvaparg4/a>;v      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu f">dtlk_ioite"4/spa/a>;v;v     switch /a>(4a href="+coce=cmd" class="sref">cmd4) /a>{vv     >ase  =.4a href="+cofe DTINTERROGATDULE" class="srefe DTINTERROGATD109":/a>v             a>(4a href="+codutex_>unlntk" class="sredutex_>unlble4/&nt.4a href="+code=dtdutexngs" class="sref">dtdutexist4a/a>;v             >.*4a href="+cosnnor" class="sresparg4/a>.=.4a href="+code=dtlk_interroga e" class="sref">dtlk_interroga e4/a/a>;v             a>(4a href="+codutex_f">unlntk" class="sredutex_f">unlble4/&nt.4a href="+code=dtdutexngs" class="sref">dtdutexist4a/a>;v             if /a>(4a href="+cocopy_toe=__user" class="srecopy_toe=__unor4/a>(4a href="+cof">nnor" class="sref">nRET4>.*, 4a href="+cosnnor" class="sresparg4, thesof/a>(struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4))/a>)v                     t="retu-a>.4a href="+coor EINing" class="sreor EINist4/a>;v             t="retu./a>;v;v     >ase  =.4a href="+cofe DTSTATUSULE" class="srefe DTSTATUS109":/a>v             ar 4a href="+colk_pvapoll" class="sref"_pvaparg4/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>;v             t="retua>(4a href="+copute=__user" class="srepute=__unor4/a>(4a href="+colk_pvapoll" class="sref"_pvaparg4>.*, 4a href="+cof">nnor" class="sref">nRET4)/a>;v;v     default:/a>v             t="retu-a>.4a href="+coor EINing" class="sreor EINist4/a>;v     }a>;v;vvNote isaw nobody edrifsets f">dtbusy..etc. */4/spa  vstated int.4a href="+code=dtlk_open" class="sref">dtlk_open4/a>(struct 4a href="+co6aref">iminine"="dr46aref">n4/a>.*4a href="+co6aref">iminine"="dr46aref">n4, ic.struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>)v{v      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu(f">dtlk_oite"4/spa/a>;v;v      =.4a href="+conon_llsiteatlk_open" class="srenon_llsiteatlk_onor4/a>(4a href="+co6aref">iminine"="dr46aref">n4, >.*4a href="+code=file" class="sref">file4//a>;v     switch /a>(4a href="+coie=iminor" class="sref">iminor4/a>(4a href="+co6aref">iminine"="dr46aref">n4)) /a>{v     >ase  =.4a href="+cofe DTMINOIMER" class="srefe DTMINOInor4:/a>v             if /a>(4a href="+cof">dtbusypen" class="sref">dtbusyile4/a>)v                     t="retu-a>.4a href="+coo -EBing" class="sreo -EBRET4/a>;v             t="retua>(4a href="+conon_llsiteatlk_open" class="srenon_llsiteatlk_onor4/a>(4a href="+co6aref">iminine"="dr46aref">n4, >.*4a href="+code=file" class="sref">file4//a>;vv     default:/a>v             t="retu-a>.4a href="+cooNXIOing" class="sreoNXIORET4/a>;v     }a>;v;vvstated int.4a href="+code=dtreleasepen" class="sref">dtreleasepen4/a>(struct 4a href="+co6aref">iminine"="dr46aref">n4/a>.*4a href="+co6aref">iminine"="dr46aref">n4, ic.struct 4a href="+code=file" class="sref">file4/a>.*4a href="+code=file" class="sref">file4/a>)v{v      =.4a href="+code=TRACE_TEXT" class="sref">TRACE_TEXT4/a>(4spa  class="string">&qu(f">dtreleaseite"4/spa/a>;v;v     switch /a>(4a href="+coie=iminor" class="sref">iminor4/a>(4a href="+co6aref">iminine"="dr46aref">n4)) /a>{v     >ase  =.4a href="+cofe DTMINOIMER" class="srefe DTMINOInor4:/a>v             bhe k/a>;v;v     default:/a>v             bhe k/a>;v     }a>;v      =.4a href="+code=TRACE_RET" class="sref">TRACE_RET4/a>;v     a>;v      =.4a href="+cofdtlk_timer4//a>;vv.128"
a>     t="retu./a>;v;v. 37"a>;vstated int.4a href="+co__in wble" class="sre__in w128"
.=.4a href="+code=dtlk wble" class="srede=dtlk wble4/ic.v/a>)v{v     ed int.4a href="+coerimer" class="sreeriRET4/a>;vv      =.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/a>./a>;v      =.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4/a>./a>;v      =.4a href="+cof">dtbusypen" class="sref">dtbusyile4/a>./a>;v     nt.4a href="+code=dtdajminor" class="srede=dtdajmiarg4/a>.=.4a href="+coregistti_chrdevnor" class="sreregistti_chrdevble4/0/a>>(4spa  class="string">&quar/dite"4/sp/a&nt.4a href="+code=dtfop_tts" class="sref">dtfop_mer4//a>;v     if /a>(4a href="+cof">dtdajminor" class="srede=dtdajmiarg4/de &a0) /a>{v             a>(4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_ERIMER" class="sref">K_ERIe_t4/a>(4spa  class="string">&quDoubleTalk PC - >annot registti device\ng">"4/spa/a>;v             t="retua>(4a href="+cof">dtdajminor" class="srede=dtdajmiarg4/a>;v     }a>;v      =.4a href="+coerimer" class="sreeriRET4/a>.=.4a href="+code=dtdevtlk_bepen" class="sref">dtdevtlk_bea e4/a/a>;v     if /a>(4a href="+coerimer" class="sreeriRET4) /a>{v             a>(4a href="+counregistti_chrdevnor" class="sreunregistti_chrdevtts4/>,.4a href="+cof">dtdajminor" class="srede=dtdajmiarg4/a>>(4spa  class="string">&quar/dite"4/spa/a>;v             t="retua>(4a href="+coerimer" class="sreeriRET4/a>;v     }a>;v     nt.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu, MAJOR/d#37;d\ng">"4/sp/ua>(4a href="+cof">dtdajminor" class="srede=dtdajmiarg4a/a>;vv     a>(4a href="+co6aitoor wqueue_hea=cmd" class="sre6aitoor wqueue_hea=ble4/&nt.4a href="+code=dtlr_process_list" class="sref">dtlk_process_list4a/a>;vv     t="retu./a>;v;vvstatic.void.4a href="+co__ex wble" class="sre__ex w128"
.=.4a href="+code=dtcleanunnor" class="srede=dtcleanun128"
/ic.v/a>)v{v      =.4a href="+code=dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/a>(4spa  class="string">&qugoodbyeg">"4/sp/u8a/a>;v     nt.4a href="+codsleep_no interriadable" class="sredsleep_no interriadanor4/500);>             a  4spa  class="comment">nap 0.50/e c but */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>could be awakened */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>earliti by */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.unsals..etc. */4/spa  vv      =.4a href="+code=dtlk_write_tts" class="sref">dtlk_write_tts4/>,.4a href="+cofe DTCLEAIMER" class="srefe DTCLEAInor4a/a>;v      =.4a href="+counregistti_chrdevnor" class="sreunregistti_chrdevtts4/>,.4a href="+cof">dtdajminor" class="srede=dtdajmiarg4/a>>(4spa  class="string">&quar/dite"4/spa/a>;v      =.4a href="+corelease_regioopen" class="srerelease_regiootts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/ua>(4a href="+cofe DTIO_EXTEN_RET" class="srefe DTIO_EXTEN_nor4a/a>;v;vvdtlk wble" class="srede=dtlk wble4a/a>;vdtcleanunnor" class="srede=dtcleanun128"a/a>;v;v4spa  class="comment">------------------------------------------------------------------------tc. */4/spa  vvstated int.4a href="+code=dtre_readable" class="sref">dtlk_readable4/ic.v/a>)v{vTING 424/a>v      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu f">dtlk_reada=d#37;u@d#37;ug">"4/sp/ua>(4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4//!a>0x7f/ua>(4a href="+coer_jibytes" class="sreer_jibyRET4a/a>;v#ena>;v     t="retua>(4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4//!a>0x7f/a>;v;v;vstated int.4a href="+cof">dtlk_writeable" class="sref">dtlk_writeable4/ic.v/a>)v{v     aa>4spa  class="comment">f">TRACE_T(g">&qu f">dtlk_writeag">&quo;tc. */4/spa  vTINGMORE 37"a>;v      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu f">dtlk_writea=d#37;ug">"4/sp/u/a>(4a href="+coir innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4) & a>(4a href="+coTTS_WRITABODULE" class="srefTS_WRITABODnor4/!=0a/a>;v#ena>;v     t="retua>(4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4) & a>(4a href="+coTTS_WRITABODULE" class="srefTS_WRITABODnor4/a>;v;vvstated int.4a href="+co__in wble" class="sre__in w128"
.=.4a href="+code=dtdevtlk_bepen" class="sref">dtdevtlk_bea e4/ic.v/a>)v{v        unsigned int.4a href="+cotespvapoll" class="sretespvapile4/a>./a>;v     ed int.4a href="+coinor" class="srefnor4/a>./a>;v     ic.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4/a>.*4a href="+cosnnor" class="sresparg4/a>;vv     if /a>(4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/|>nt.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>v             t="retu-a>.4a href="+coo -EBing" class="sreo -EBRET4/a>;vv      s f/a>(4a href="+coinor" class="srefnor4/a>./>nt.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/>nt.4a href="+coinor" class="srefnor4++) /a>{v{v             >.*4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&quDoubleTalk PC - Pk_p/d#37;03x/a>d#37;04x\ng">"4/sp/a  v                    nt.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/u/a>(4a href="+cotespvapoll" class="sretespvapile4/a>a>(4a href="+codrwinnor" class="srefrwintts4/>,.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]))a/a>;v#ena>;vv             if /! =.4a href="+corequesp_regioopen" class="srerequesp_regiootts4/>,.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/ua>(4a href="+cofe DTIO_EXTEN_RET" class="srefe DTIO_EXTEN_nor4, a>;v                      >     >>(4spa  class="string">&quar/dite"4/spa)/a>v             
a>     consetue/a>;v             a>(4a href="+cotespvapoll" class="sretespvapile4/a>a>(4a href="+codrwinnor" class="srefrwintts4/>,.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4])/a>;v             if //a>(4a href="+cotespvapoll" class="sretespvapile4/&a>0xfbff)/a  0x107f) /a>{v                     nt.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/a>nt.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/a>{v                     nt.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4/a>nt.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/+ 1/a>{vv                     nt.4a href="+cosnnor" class="sresparg4/a>.=.4a href="+code=dtlk_interroga e" class="sref">dtlk_interroga e4/a/a>;v             
a>     >.*4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&quDoubleTalk PC ap/d#37;03x-d#37;03x,tite"4/spa  v                     a>     >>(4spa  class="string">&quROM drivra ad#37;s, serial number d#37;ug">"4/sp/a  v                            nt.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/ua>(4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4] +a  v             
a>            nt.4a href="+cofe DTIO_EXTEN_RET" class="srefe DTIO_EXTEN_nor4 - 1/a  v             
a>            nt.4a href="+cosnnor" class="sresparg4/a>->4a href="+corom_drivra pen" class="srerom_drivra arg4/ua>(4a href="+cosnnor" class="sresparg4/a>->4a href="+coserial_numbernor" class="sreserial_numberRET4a/a>;vv             
a>      a>4spa  class="comment">put LPC lk_p ed o known>
a>se, soot;4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>f">dtlk_reada() g"drs vapid resulttc. */4/spa  v                     gt;4a href="+coout innor" class="sreout inntk4/0xff/ua>(4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/; a>;v;v             
a>      a>4spa  class="comment">INIT s="str angneddex marker c. */4/spa  v                     gt;4a href="+cof">dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/a>(4spa  class="string">&qu\036\1@\0\0012I\rg">"4/sp/u8a/a>;v                      a>4spa  class="comment">poststr anneddex takrs 18 msec.  Here, we */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>or w up  o 100 msec  o see wheis r it */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>appearsetc. */4/spa  v                     nt.4a href="+codsleep_no interriadable" class="sredsleep_no interriadanor4/100a/a>;v                     nt.4a href="+cof">dtlk_has_indexing" class="sref">dtlk_has_indexing4 a>.=.4a href="+code=dtlk_readable" class="sref">dtlk_readable4/)/a>;vTING 424/a>v                     gt;4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu, as_index/d#37;d\ng">"4/sp/ua>(4a href="+cof">dtlk_has_indexing" class="sref">dtlk_has_indexing4)/a>;v#ena>;v                     /a>{vThis macro records ten>
amplrs lk_r from>is  LPC lk_p,  s flatti displaytc. */4/spa  v             
a>                 \a  v(4a href="+coinor" class="srefnor4/a>./>nt.4a href="+coinor" class="srefnor4/de &a1./>nt.4a href="+coinor" class="srefnor4++)    
a>                 \a  v             
a>                          \a  v nt.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/;         \a  v nt.4a href="+co__delayble" class="sre__delaytts4/>,.4a href="+coloops_per_er_jyble" class="sreloops_per_er_jytts4//1000000/>,.4a href="+coHZf_t" class="sreHZist4));>            \a  v;v                             rs/c nt.4a href="+cobuffernor" class="srebuffernor4[1000]/a>{v             
a>             ed int.4a href="+cobnor" class="srebnor4/a>./ua>(4a href="+codnor" class="srefnor4/ua>(4a href="+coenor" class="srejRET4/a>;vv                              =.4a href="+coLOOKULE" class="sreLOOK 98"/a>v                              =.4a href="+coout innor" class="sreout inntk4/0xff/ua>(4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/;/a>v             
a>             nt.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>./a>;v                              =.4a href="+coLOOKULE" class="sreLOOK 98"/a>v                              =.4a href="+cof">dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/a>(4spa  class="string">&qu\0012I\rg">"4/sp/u4/;/a>v             
a>             nt.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>./a>;v                             nt.4a href="+co__delayble" class="sre__delaytts4/50 * nt.4a href="+coloops_per_er_jyble" class="sreloops_per_er_jytts4 / /1000/>,.4a href="+coHZf_t" class="sreHZist4));a>;v                              =.4a href="+coout innor" class="sreout inntk4/0xff/ua>(4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/;/a>v             
a>             nt.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>./a>;v                     a>       =.4a href="+coLOOKULE" class="sreLOOK 98"/a>v;v                              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\ng">"4/spa/a>;v             
a>              s f/a>(4a href="+coenor" class="srejRET4/a>./>nt.4a href="+coenor" class="srejRET4/de &aa>(4a href="+cobnor" class="srebnor4/>nt.4a href="+coenor" class="srejRET4++)a>;v                                      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu/d#37;02xg">"4/sp/ua>(4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+coenor" class="srejRET4])/a>;v                              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\ng">"4/spa/a>;v             
a>     }a>;v#en                           a>4spa  class="comment">INSCOPDtc. */4/spa  v;v;v                     /a>{vThis macro records ten>
amplrs lk_r from>is  TTS lk_p,  s flatti displaytc. */4/spa  v             
a>                 \a  v(4a href="+coinor" class="srefnor4/a>./>nt.4a href="+coinor" class="srefnor4/de &a1./>nt.4a href="+coinor" class="srefnor4++)    
a>                 \a  v             
a>                          \a  v nt.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/         \a  v nt.4a href="+co__delayble" class="sre__delaytts4/>,.4a href="+coloops_per_er_jyble" class="sreloops_per_er_jytts4//1000000/>,.4a href="+coHZf_t" class="sreHZist4));>    4spa  class="comment">1 ustc. */4/sp \a  v;v                             rs/c nt.4a href="+cobuffernor" class="srebuffernor4[1000]/a>{v             
a>             ed int.4a href="+cobnor" class="srebnor4/a>./ua>(4a href="+codnor" class="srefnor4/ua>(4a href="+coenor" class="srejRET4/a>;vv                              =.4a href="+comdelayble" class="sremdelaytts4/10);>       4spa  class="comment">10 mstc. */4/spa  v                              =.4a href="+coLOOKULE" class="sreLOOK 98"/a>v             
a>             nt.4a href="+coout innor" class="sreout inntk4/0x03/ua>(4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>;v                              =.4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+cobnor" class="srebnor4++]/a>./a>;v                              =.4a href="+coLOOKULE" class="sreLOOK 98"/a>v             
a>             nt.4a href="+coLOOKULE" class="sreLOOK 98"/a>vv                              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\ng">"4/spa/a>;v             
a>              s f/a>(4a href="+coenor" class="srejRET4/a>./>nt.4a href="+coenor" class="srejRET4/de &aa>(4a href="+cobnor" class="srebnor4/>nt.4a href="+coenor" class="srejRET4++)a>;v                     a>               =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu/d#37;02xg">"4/sp/ua>(4a href="+cobuffernor" class="srebuffernor4[a>(4a href="+coenor" class="srejRET4])/a>;v                              =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu\ng">"4/spa/a>;v                     }a>;v#en                           a>4spa  class="comment">OUTSCOPDtc. */4/spa  vv                     nt.4a href="+cof">dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/a>(4spa  class="string">&quDouble Talk foundg">"4/sp/u18a/a>;vv                     t="retu./a>;v             }a>;v             nt.4a href="+corelease_regioopen" class="srerelease_regiootts4/>,.4a href="+cof">dtlk_pss_list" class="sref">dtlk_pss_lnor4[a>(4a href="+coinor" class="srefnor4]/ua>(4a href="+cofe DTIO_EXTEN_RET" class="srefe DTIO_EXTEN_nor4a/a>;v     }a>;v;v      =.4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_INFOing" class="sref">K_INFO126"
a>(4spa  class="string">&quDoubleTalk PC - not found\ng">"4/spa/a>;v     t="retu-a>.4a href="+cooNODEVing" class="sreoNODEVRET4/a>;v;v;v4spa  class="comment" */4/spa  v4spa  class="comment">
a>static.vof">dtlkndleterror(rs/c op, rs/c rc,    unsigned i">imi) */4/spa  v4spa  class="comment">{ */4/spa  v4spa  class="comment">f">pri(f">K_INFOg">&qu\nDoubleTalk PC - MINOI:/d#37;d, OPCODE:/d#37;d, ERROI:/d#37;d\ng">&qu/ua*/4/spa  v4spa  class="comment">">imi, op, rc)uot;4/spa  v4spa  class="comment">}ot;4/spa  v4spa  class="commentc. */4/spa  vv4spa  class="comment">lk_interrog>is  DoubleTalk PC and t="retuits lk_settitc. */4/spa  vstatic.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4/a>.*4a href="+cof">dtlk_interroga e" class="sref">dtlk_interroga e4/ic.v/a>)v{v        unsignrs/c a>.*4a href="+colist" class="sretRET4/a>;v     ic>statrs/c nt.4a href="+cobufnor" class="srebufnor4[sizeof(ic.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4)/+ 1]/a>{v     ed int.4a href="+cototapoll" class="sretotapnor4/ua>(4a href="+coinor" class="srefnor4/a>{v     
a>static.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4/ct 4a href="+co
a>suings" class="sre
a>suinor4/a>{v      =.4a href="+cof">TRACE_Tngs" class="sref">TRACE_Tntk4/a>(4spa  class="string">&qu(f">dtlk_interrogg">"4/spa/a>;v     nt.4a href="+code=dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/a>(4spa  class="string">&qu\030\001?g">"4/sp/u3a/a>;v      s f/a>(4a href="+cototapoll" class="sretotapnor4/a>./ua>(4a href="+codnor" class="srefnor4/a>./>nt.4a href="+coinor" class="srefnor4/de &a5./>nt.4a href="+coinor" class="srefnor4++) /a>{v             nt.4a href="+cobufnor" class="srebufnor4[a>(4a href="+cototapoll" class="sretotapnor4]/a>.=.4a href="+cof">dtlk_rort_tts" class="sref">dtlk_rort_ntk4/a/a>;v             if /a>(4a href="+cototapoll" class="sretotapnor4/a>-& 2/&& a>(4a href="+cobufnor" class="srebufnor4[a>(4a href="+cototapoll" class="sretotapnor4]/aa>0x7f/a>)v                     blk_k/a>;v             if /a>(4a href="+cototapoll" class="sretotapnor4/ae &asizeof(ic.struct 4a href="+code=dtlk_settings" class="sref">dtlk_settings4)/a>)v             
a>      >(4a href="+cototapoll" class="sretotapnor4++/a>;v     }a>;v     /a>4spa  class="comment" */4/spa  v4spa  class="comment">>>>>>>>>if /i==50)>f">pri(g">&qulk_interrog() lk_r ovinten\ng">&qu)uot;4/spa  v4spa  class="comment">>>>>>>>> s f/i=./>iae &sizeof(buf)/>i++)ot;4/spa  v4spa  class="comment">>>>>>>>>f">pri(g">&qu/d#37;02xg">&qu, buf[i])uot;4/spa  v4spa  class="comment">>>>>>>>>f">pri(g">&qu\ng">&qu)uot;4/spa  v4spa  class="comment">>>>>>>c. */4/spa  v     >.*4a href="+colist" class="sretRET4/a>.=.4a href="+cobufnor" class="srebufnor4/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+co
erial_numbernor" class="sreserial_numberRET4/a>.=.4a href="+colist" class="sretRET4[0]/+ .=.4a href="+colist" class="sretRET4[1] * 256;  a>4spa  class="comment">serial number is */4/spa  v4spa  class="comment">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>little a>#e4spc. */4/spa  v      =.4a href="+colist" class="sretRET4/+= 2/a>;v;v      =.4a href="+coinor" class="srefnor4/a>./a>;v     while (a>.*4a href="+colist" class="sretRET4/!a>a>(4spa  class="string#39;\rg#39;ot;4/spa /a>{v              =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+corom_drivra pen" class="srerom_drivra arg4[a>(4a href="+coinor" class="srefnor4] = a>.*4a href="+colist" class="sretRET4/a>;v             if /a>(4a href="+coinor" class="srefnor4/de &asizeof( =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+corom_drivra pen" class="srerom_drivra arg4) - 1/a>)v                     nt.4a href="+coinor" class="srefnor4++/a>;v             >.*4a href="+colist" class="sretRET4++/a>;v     }a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+corom_drivra pen" class="srerom_drivra arg4[a>(4a href="+coinor" class="srefnor4] = ./a>;v      =.4a href="+colist" class="sretRET4++/a>;v;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+com"+cngs" class="srem"+cnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+copunc_levepoll" class="srepunc_levepnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+co s mant_freqngs" class="sre s mant_freqnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+copitcholl" class="srepitchnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+co
peedngs" class="sre
peednor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     >.*4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+covolumcngs" class="srevolumcnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+cotoncngs" class="sretoncnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coexpresvra pen" class="sreexpresvra nor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coext_dict_loadedngs" class="sreext_dict_loadednor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coext_dict_
a>suings" class="sreext_dict_
a>suinor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+cofree_ramngs" class="sre ree_ramnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coarticulatra pen" class="srearticulatra nor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coreverbnor" class="srereverbnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v     nt.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+coeobnor" class="sreeobnor4/a>a>.*4a href="+colist" class="sretRET4++/a>;v      =.4a href="+co
a>suings" class="sre
a>suinor4. =.4a href="+colk_has_indexing" class="srelk_has_indexing4 a>.=.4a href="+code=dtlk_has_indexing" class="sref">dtlk_has_indexing4/a>;v     >.*4a href="+cof">TRARETngs" class="sref">TRARETing4/a>;v     t="retu& =.4a href="+co
a>suings" class="sre
a>suinor4/a>;v;vvstatrs/c nt.4a href="+cof">dtlk_rort_tts" class="sref">dtlk_rort_ntk4/ic.v/a>)v{v     ed int.4a href="+colk_pvapoll" class="srelk_pvap128"/ua>(4a href="+cot="ribynor" class="sret="ribynor4/a>./a>;v     rs/c nt.4a href="+cocholl" class="srechnor4/a>;v     nt.4a href="+cof">TRACE_Tngs" class="sref">TRACE_Tntk4/a>(4spa  class="string">&qu(f">dtlk_rort_g">"4/spa/a>;vv     >a>4spa  class="comment">driify DT is lk_ry, lk_r rs/c,>or w  s fACKpc. */4/spa  v     do /a>{v             nt.4a href="+colk_pvapoll" class="srelk_pvap128"/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>{v     } while (/>,.4a href="+colk_pvapoll" class="srelk_pvap128"/& a>(4a href="+coTTSAREADABLEngs" class="srefTSAREADABLEarg4) aa>0/&&a>{v              a>(4a href="+cot="ribynor" class="sret="ribynor4++/de &aa>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)/a>{v     if /a>(4a href="+cot="ribynor" class="sret="ribynor4/a>-& a>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)a>{v             >,.4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_ERRntk" class="sref">K_ERR 98"
>>(4spa  class="string">&quar/dtlk_rort_() timeout\ng">"4/spa/a>;vv     nt.4a href="+cocholl" class="srechnor4/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/      
a>4spa  class="comment">lkput from>TTS lk_ppc. */4/spa  v      =.4a href="+cocholl" class="srechnor4/&a>0x7f/a>;v     >.*4a href="+coout innor" class="sreout inntk4/ =.4a href="+cocholl" class="srechnor4/ua>(4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>;v;v      =.4a href="+cot="ribynor" class="sret="ribynor4/a>./a>;v     do /a>{v             nt.4a href="+colk_pvapoll" class="srelk_pvap128"/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/a>{v     } while (/>,.4a href="+colk_pvapoll" class="srelk_pvap128"/& a>(4a href="+coTTSAREADABLEngs" class="srefTSAREADABLEarg4) !a>0/&&a>{v             
a>(4a href="+cot="ribynor" class="sret="ribynor4++/de &aa>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)/a>{v     if /a>(4a href="+cot="ribynor" class="sret="ribynor4/a>-& a>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)a>{v             >,.4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_ERRntk" class="sref">K_ERR 98"
>>(4spa  class="string">&quar/dtlk_rort_() timeout\ng">"4/spa/a>;vv     >.*4a href="+cof">TRARETngs" class="sref">TRARETing4/a>;v     t="retunt.4a href="+cocholl" class="srechnor4/a>;v;vvstatrs/c nt.4a href="+cof">dtlk_road_lpc" class="sref">dtlk_road_ntk4/ic.v/a>)v{v     ed int.4a href="+cot="ribynor" class="sret="ribynor4/a>./a>;v     rs/c nt.4a href="+cocholl" class="srechnor4/a>;v     nt.4a href="+cof">TRACE_Tngs" class="sref">TRACE_Tntk4/a>(4spa  class="string">&qu(f">dtlk_road_g">"4/spa/a>;vv     >a>4spa  class="comment">no need  o test -- this is only called when>is  lk_p es lk_readapc. */4/spa  v;v      =.4a href="+cocholl" class="srechnor4/a>.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/;      
a>4spa  class="comment">lkput from>LPC lk_p c. */4/spa  vv      =.4a href="+coout innor" class="sreout inntk4/0xff/ua>(4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/;/a>vv     >a>4spa  class="comment">acknowledgstr a lk_r takrs 3-4 */4/spa  v4spa  class="comment">>>>>>>>>usec.  Here, we>or w up  o 20>usec */4/spa  v4spa  class="comment">>>>>>>>> s fis  acknowledgecomm c. */4/spa  v      =.4a href="+cot="ribynor" class="sret="ribynor4/a>/>,.4a href="+coloops_per_er_jyble" class="sreloops_per_er_jytts4 * 20) / /1000000/>,.4a href="+coHZf_t" class="sreHZist4);/a>v     while (.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_poad_lpc" class="sref">dtlk_poad_arg4/ !a>0x7f/&& --a>.4a href="+cot="ribynor" class="sret="ribynor4/a>-& 0a/a>;v     if /a>(4a href="+cot="ribynor" class="sret="ribynor4/aa>0/a>)v             nt.4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_ERRntk" class="sref">K_ERR 98"
>>(4spa  class="string">&quar/dtlk_road_() timeout\ng">"4/spa/a>;vv      =.4a href="+cof">TRARETngs" class="sref">TRARETing4/a>;v     t="retunt.4a href="+cocholl" class="srechnor4/a>;v;vv4spa  class="comment">lk_wr n ds by  o tts lk_p c. */4/spa  vstatrs/c nt.4a href="+cof">dtlk_wrids bynor" class="srede=dtlk_wrids byntk4/const rs/c a>.*4a href="+cobufnor" class="srebufnor4, ed int.4a href="+co pen" class="srentts4)a>{v{v     rs/c nt.4a href="+covapoll" class="srevap128"/a>./a>;v     
a>4spa  class="comment">>f">pri(g">&qude=dtlk_wrids by(\g">&qud#37;-*s\g">&qu, d#37;d)\ng">&qu/un, buf/un/; c. */4/spa  v      =.4a href="+cof">TRACE_Tngs" class="sref">TRACE_Tntk4/a>(4spa  class="string">&qu(f">dtlk_wrids byg">"4/spa/a>;v     while (.=.4a href="+co pen" class="srentts4-- a>-& 0aa>;v             nt.4a href="+covapoll" class="srevap128"/a>nt.4a href="+cof">dtlk_wrirt_tts" class="sref">dtlk_wrirt_ntk4/a>.*4a href="+cobufnor" class="srebufnor4++a/a>;v     nt.4a href="+cof">TRARETngs" class="sref">TRARETing4/a>;v     t="retunt.4a href="+covapoll" class="srevap128"/a>;v;vvstatrs/c nt.4a href="+cof">dtlk_wrirt_tts" class="sref">dtlk_wrirt_ntk4/rs/c nt.4a href="+cocholl" class="srechnor4aa>;v{v     ed int.4a href="+cot="ribynor" class="sret="ribynor4/a>./a>;vTINGMOREngs" class="sref">TINGMORE 314/a>v      =.4a href="+code=printk" class="sref">printk4/a>(4spa  class="string">&qu/ f">dtlk_wrirt_(g">"4/spa/a>;v     if /a>(4spa  class="string#39; g#39;ot;4/sp/de &a>nt.4a href="+cocholl" class="srechnor4/&& a>(4a href="+cocholl" class="srechnor4/&e &a>n>(4spa  class="string#39;~g#39;ot;4/spaa>;v             >,.4a href="+cole=printk" class="sref">printk4/a>(4spa  class="string">&qug#39;d#37;cg#39;d">"4/sp/ua>(4a href="+cocholl" class="srechnor4a/a>;v     elsea>;v             >,.4a href="+cole=printk" class="sref">printk4/a>(4spa  class="string">&qu0xd#37;02xg">"4/sp/ua>(4a href="+cocholl" class="srechnor4a/a>;v#ena>;v     if /a>(4a href="+cocholl" class="srechnor4/!a>nt.4a href="+cofe DTCLEARntk" class="srefe DTCLEARarg4/   >a>4spa  class="comment">no flow control> s fCLEAR s="cand c. */4/spa  v     
a>     while ((.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/& a>(4a href="+coTTSAWRITABLEngs" class="srefTSAWRITABLEtts4)/aa>0/&&a>{v                    >,.4a href="+cot="ribynor" class="sret="ribynor4++/de &aa>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)    >a>4spa  class="comment">DT lk_ry? c. */4/spa  v                     ;a>{v     if /a>(4a href="+cot="ribynor" class="sret="ribynor4/a>-& a>(4a href="+cofe DTMAXARETRIESnor" class="srefe DTMAXARETRIEStts4)a>{v             nt.4a href="+cole=printk" class="sref">printk4/a>(4a href="+cof">K_ERRntk" class="sref">K_ERR 98"
>>(4spa  class="string">&quar/dtlk_wrirt_() timeout\ng">"4/spa/a>;v;v     nt.4a href="+coout innor" class="sreout inntk4/ =.4a href="+cocholl" class="srechnor4/ua>(4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/>     na>4spa  class="comment">output to>TTS lk_ppc. */4/spa  v     na>4spa  class="comment">is  RDY bit goes zero 2-3>usec aftti lk_wstr, and goes */4/spa  v4spa  class="comment">>>>>>>  1 again 180-190>usecflatti.  Here, we>or w up  o 1. 4/4/spa  v4spa  class="comment">>>>>>>>>usecf s fis  RDY bit  o go zero.pc. */4/spa  v      s f/a>(4a href="+cot="ribynor" class="sret="ribynor4/a>./int.4a href="+cot="ribynor" class="sret="ribynor4/de &aa>(4a href="+coloops_per_er_jyble" class="sreloops_per_er_jytts4 / /100000/>,.4a href="+coHZf_t" class="sreHZist4); >,.4a href="+cot="ribynor" class="sret="ribynor4++)a>{v             if /(.=.4a href="+codr innor" class="srefr intts4/>,.4a href="+cof">dtlk_port_tts" class="sref">dtlk_port_tts4)/& a>(4a href="+coTTSAWRITABLEngs" class="srefTSAWRITABLEtts4)/aa>0)a>{v                     blk_k/a>;v;vTINGMOREngs" class="sref">TINGMORE 314/a>v     nt.4a href="+cole=printk" class="sref">printk4/a>(4spa  class="string">&qu)\ng">"4/spa/a>;v#ena>;v     t="retu./a>;v;vv&quGPLg">"4/spa/a>;v





Ts  original LXR software byfis  >;vLXR s="cunitynor4/uthis expericommal drivra  byf>;v

lxi.s="ux.no kindly hosted byf>;v