<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri",sans-serif;}
span.EmailStyle20
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="RU" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoPlainText"><span lang="EN-US">Hi Andy. <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Thanks for review.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Please read my answers inline.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> -----Original Message-----<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> From: Andy Shevchenko [<a href="mailto:andy.shevchenko@gmail.com">mailto:andy.shevchenko@gmail.com</a>]<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Sent: 16 мая 2018 г. 0:22<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> To: Oleksandr Shamray <<a href="mailto:oleksandrs@mellanox.com">oleksandrs@mellanox.com</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Cc: Greg Kroah-Hartman <<a href="mailto:gregkh@linuxfoundation.org">gregkh@linuxfoundation.org</a>>; Arnd Bergmann
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:arnd@arndb.de">arnd@arndb.de</a>>; Linux Kernel Mailing List
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:linux-kernel@vger.kernel.org">linux-kernel@vger.kernel.org</a>>; linux-arm Mailing List
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:linux-arm-kernel@lists.infradead.org">linux-arm-kernel@lists.infradead.org</a>>; devicetree
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:devicetree@vger.kernel.org">devicetree@vger.kernel.org</a>>;
<a href="mailto:openbmc@lists.ozlabs.org">openbmc@lists.ozlabs.org</a>; Joel Stanley
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:joel@jms.id.au">joel@jms.id.au</a>>; Jiří Pírko <<a href="mailto:jiri@resnulli.us">jiri@resnulli.us</a>>; Tobias Klauser
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:tklauser@distanz.ch">tklauser@distanz.ch</a>>; open list:SERIAL DRIVERS <linux-
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <a href="mailto:serial@vger.kernel.org">
serial@vger.kernel.org</a>>; Vadim Pasternak <<a href="mailto:vadimp@mellanox.com">vadimp@mellanox.com</a>>;
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> system-sw-low-level <<a href="mailto:system-sw-low-level@mellanox.com">system-sw-low-level@mellanox.com</a>>; Rob Herring
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:robh+dt@kernel.org">robh+dt@kernel.org</a>>;
<a href="mailto:openocd-devel-owner@lists.sourceforge.net">openocd-devel-owner@lists.sourceforge.net</a>;
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> linux- <a href="mailto:api@vger.kernel.org">
api@vger.kernel.org</a>; David S. Miller <<a href="mailto:davem@davemloft.net">davem@davemloft.net</a>>;
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Mauro Carvalho Chehab <<a href="mailto:mchehab@kernel.org">mchehab@kernel.org</a>>; Jiri Pirko
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:jiri@mellanox.com">jiri@mellanox.com</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Subject: Re: [patch v21 1/4] drivers: jtag: Add JTAG core driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> On Tue, May 15, 2018 at 5:21 PM, Oleksandr Shamray
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <<a href="mailto:oleksandrs@mellanox.com">oleksandrs@mellanox.com</a>> wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > Initial patch for JTAG driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > JTAG class driver provide infrastructure to support
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > hardware/software JTAG platform drivers. It provide user layer API
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > interface for flashing and debugging external devices which equipped
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > with JTAG interface using standard transactions.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > Driver exposes set of IOCTL to user space for:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - XFER:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - SIR (Scan Instruction Register, IEEE 1149.1 Data Register scan);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - SDR (Scan Data Register, IEEE 1149.1 Instruction Register scan);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - RUNTEST (Forces the IEEE 1149.1 bus to a run state for a specified<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > number of clocks).<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - SIOCFREQ/GIOCFREQ for setting and reading JTAG frequency.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > Driver core provides set of internal APIs for allocation and<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > registration:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - jtag_register;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - jtag_unregister;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - jtag_alloc;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > - jtag_free;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > Platform driver on registration with jtag-core creates the next
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > entry in dev folder:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > /dev/jtagX<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > 0xB0 all RATIO devices in development:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > <<a href="mailto:vgo@ratio.de">mailto:vgo@ratio.de</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > 0xB1 00-1F PPPoX <<a href="mailto:mostrows@styx.uwaterloo.ca">mailto:mostrows@styx.uwaterloo.ca</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +0xB2 00-0f linux/jtag.h JTAG driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +<<a href="mailto:oleksandrs@mellanox.com">mailto:oleksandrs@mellanox.com</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Consider to preserve style (upper vs. lower).<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">JTAG in code is lower (jtag) cane but in descriptions and notes it is upper (JTAG).<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">In all places which do not correspond to this I will fix.
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + This provides basic core functionality support for JTAG class devices.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + Hardware that is equipped with a JTAG microcontroller can be<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + supported by using this driver's interfaces.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + This driver exposes a set of IOCTLs to the user space for<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + the following commands:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + SDR: (Scan Data Register) Performs an IEEE 1149.1 Data Register scan<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + SIR: (Scan Instruction Register) Performs an IEEE 1149.1 Instruction<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + Register scan.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + RUNTEST: Forces the IEEE 1149.1 bus to a run state for a specified<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + number of clocks or a specified time period.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Something feels wrong with formatting here.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Will fix<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +#define MAX_JTAG_NAME_LEN (sizeof("jtag") + 5)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Interesting definition. Why not to set to 10 explicitly? And why 10?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> (16 sounds better)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">5 - is a max len of JTAG device id in device name. I will add define to it.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">In general I don't see the case for the system with hundreds JTAG interfaces.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">I will limit maximum jtag master to 255 devices and change id len to 3<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">#define MAX_JTAG_ID_STR_LEN 5<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">#define MAX_JTAG_NAME_LEN (sizeof("jtag") + MAX_JTAG_ID_STR_LEN)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +struct jtag {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + struct miscdevice miscdev;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + struct device *dev;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Doesn't miscdev parent contain exactly this one?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Yes. <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Will fix.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + const struct jtag_ops *ops;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + int id;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + bool opened;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + struct mutex open_lock;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + unsigned long priv[0];<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +};<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + err = copy_to_user(u64_to_user_ptr(xfer.tdio),<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + (void *)(xfer_data), data_size);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Redundant parens in one case. Check the rest similar places.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Yes.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +static int jtag_open(struct inode *inode, struct file *file) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + struct jtag *jtag = container_of(file->private_data, struct jtag,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + miscdev);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> I would don't care about length and put it on one line.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">But following to LINUX kernel style, it should be no longer than 80 symbols.
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">It will not pass by ./scripts/checkpatch.pl<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Will it be OK to send a patch which failed 80 symbols limitation check?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + if (jtag->opened) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + jtag->opened = true;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + jtag->opened = false;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Can it be opened non exclusively several times? If so, this needs to
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> be a ref counter instead.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">It can be opened only once.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + if (!ops->idle || !ops->mode_set || !ops->status_get || !ops->xfer)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + return NULL;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Are all of them mandatory?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Yes, except "mode_set"<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Will remove mode_set from check<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +int jtag_register(struct jtag *jtag)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Perhaps devm_ variant.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Jtag driver uses miscdevice and related misc_register and misc_deregister calls for creation and destruction. There is no device object prior to call to misc_register, which could be used in devm_jtag_register.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +#define jtag_u64_to_ptr(arg) ((void *)(uintptr_t)arg)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Redundant. Removed.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Where is this used or supposed to be used?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +#define JTAG_MAX_XFER_DATA_LEN 65535<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Is this limitation from some spec?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Otherwise why not to allow 64K?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">It not limited by specification. <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">But we enforce an upper bound for the length here, to prevent users from draining kernel memory with giant buffers.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > +/**<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * struct jtag_ops - callbacks for jtag control functions:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + *<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * @freq_get: get frequency function. Filled by device driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * @freq_set: set frequency function. Filled by device driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * @status_get: set status function. Filled by device driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * @idle: set JTAG to idle state function. Filled by device driver<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> > + * @xfer: send JTAG xfer function. Filled by device driver */<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Perhaps you need to describe which of them are _really_ mandatory and
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> which are optional.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Ok<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> --<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> With Best Regards,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Andy Shevchenko<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Best Regards,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Oleksandr Shamray<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>