diff --git a/doc/spec-sw.in b/doc/spec-sw.in index 375ec5ffd83f994c99620db34ea3852f60a01bed..4d24f6053d25e1a743214b3dc4e7831ce340ac31 100644 --- a/doc/spec-sw.in +++ b/doc/spec-sw.in @@ -39,7 +39,7 @@ @titlepage @title SPEC Software Support -@subtitle Version 2.0-rc1 (@value{update-month}) +@subtitle (@value{update-month}) @subtitle A driver for the SPEC card and its FMC modules @author Alessandro Rubini for CERN (BE-CO-HT) @end titlepage @@ -627,9 +627,7 @@ The port supports hardware timestamping for user frames through the standard Linux mechanisms, but at this point no sample code is provided in this package. -@b{Warning:} While frame transmission is perfectly working, there is -still a problem in the RX data path and no data can be received with -this version of the software and gateware. +@b{Warning}: time stamping is not working, but we are on the problem. @c ========================================================================== @node Accessing the DIO Channels @@ -691,15 +689,26 @@ non-selected channels are ignored by the driver. To stop output generation, the application must request a starting time of 0.0 seconds for the channels it wants to stop. -@b{Warning}: there is a problem with pulse output at a specified time, -only immediate pulse is working. The bug is in the FPGA binary and is -being worked on. - @b{Warning}: currently the @i{pulse train} mode is not supported by software. -Specifics about the use of individual fields is shown in the driver itself -and in the user-space programs that call the command. +Specifics about the use of individual fields is shown in the header +(in a big comment block), in the driver itself and in the user-space +programs that call @i{ioctl}. + +In lab environments you may be concerned about the duration of the +@i{ioctl} implementation, because it sometimes seems to do more work +than needed. To verify whether we have an over-engineering problem in +kernel space, I provided a simple measurement of how much time is +spent in the @i{Ioctl} itself. The @i{make} variable +@code{WR_NIC_CFLAGS} can be used to pass extra flags to the compiler, +and the macro @code{DIO_STAT} enables the time measurement. +Compiling with the following command thus enable such measurement +and associated @i{printk} -- the time is usually 5 microseconds for me: + +@example + make WR_NIC_FLAGS=-DDIO_STAT +@end example @c ========================================================================== @node WR-NIC User Tool @@ -709,16 +718,22 @@ In the @file{tools/} subdirectory of this project, you find the @file{wr-dio-cmd} program, which is a command-line interface to the @i{ioctl} command to simplify initial access to the DIO device. -Please note that neither timestamping nor pulse generation works -if the WR core is running and has valid times: it must either be -a master or a slave in synchronized state. +Please note that neither timestamping nor pulse generation work +if the WR core is not running or has an invalid time: it must either be +a master or a synchronized slave. + +Moreover, please note that this tool is just a demonstration to quickly +test the I/O features of the device (and for me to verify the kernel +part is actually working): for serious use you should call +@i{ioctl} by yourself with proper arguments, and avoid all the parsing +of ASCII and repeated invocation of this program. This is the general syntax of the command: @example wr-dio-cmd <ifname> <cmd> [<args> ...] @end example -@c FIXME: wr-dio-cmd <ifname> <cmd> [<args> ...] [<cmd> [<args> ...]] +@c FIXME: wr-dio-cmd <ifname> <cmd> [<args> ...] The arguments have the following meaning @@ -731,36 +746,40 @@ The arguments have the following meaning @item cmd - The specific command. Currently the tool supports @code{stamp} - and @code{pulse}. + The specific command. Supported commands are listed below. + Each command takes zero or more of arguments. If you pass + a wrong number of arguments no help is provided in the error + message. If one argument is wrong (e.g., not a number) the + error message is meant to be directly helpful. @end table -@c FIXME: argument to stamp -The @code{stamp} command currently takes no arguments. It reports -to stdout all the available timestamps, scanning the FIFO for all -channels in order. Later I'll add a <i>channel</i> argument to restrict -the report to only one channel (the driver already supports this). +The current version of the tool supports the following commands: + +@table @code -The @code{pulse} command receives three arguments: +@item stamp [<channel>] +@itemx stampm [<channel-mask>] -@example - wr-dio-cmd wr0 pulse <channel> <fraction> <start> -@end example + The commands are used to retrieve timestamps from the card. + If no arguments are passed, the tool reports to @i{stdout} all + timestamps for all channels (they are ordered by channel, not + by time). If one integer argument is passed, it can be a channel + number in the range 0 to 4 (@code{stamp} command) or a mask + in the range 0 to 0x1f (@code{stampm} command). -The @code{channel} argument is a number, in the range 0-4. The -@code{fraction} argument is a decimal number, for example @code{.1} -representing the length in second of the pulse; the length is -truncated to a multiple of 8ns. The @code{start} argument is -either the string @code{now}, or an absolute number of seconds, or -a relative number of seconds. A relative time is expressed as -@code{+@i{nr}} (for example, @code{+3}) and requests the pulse -at the start of a second, @i{nr} seconds in the future. +@item pulse <channel> <duration> <when> -@c FIXME: support fractional starting times + Channel is an integer in the range 0 to 4. The duration must + be specified as a fraction of a second (decimal number, with + leading dot), the @code{when} argument can be the string @code{now}, + an absolute time (@code{<seconds>.<fraction>}) or a relative + time (@code{+<seconds>.<fraction}). In the last case, the + current second is added to @code{<seconds>} while the fraction + is not modified. The @code{+} form is useful for simple checks with + visual inspection. -@b{Warning}: due to problems in the current gateware, only immediate -pulses are actually generated by hardware. +@end table @c ========================================================================== @node The Future of WR-NIC @@ -863,16 +882,18 @@ The tools currently available are: @itemize @bullet @item Identification of the mezzanine is completely missing; every @i{fmc} -driver at this point takes hold of every device. +driver at this point takes hold of every device. We are working on this, +and the next version of spec-sw will support identification, with a flag +to run without identification for users whose EEPROM has not been programmed. @item Both spec and wr-nic should have GPIO support with @i{gpiolib}; -there is skeletal support but no real code for actual I/O. - -@item The NIC data transfer only works in the transmit direction. This looks -like a bug in the gateware and we are investigating on both sides. +there is skeletal support but no real code for actual I/O. This is not +a priority, just a wish list for better Linux integration. @item The NIC driver should directly support setting the White Rabbit -mode for each card (grandmaster, free-running master or slave). +mode for each card (grandmaster, free-running master or slave). This +will be supported at module load time, not at runtime (for that please +use the UART). @item DIO support in @i{wr-nic} is missing some of the features listed in @file{wr-dio.h}. @@ -881,13 +902,11 @@ in @file{wr-dio.h}. and timestamps to be collected without polling the FIFO. @item The @i{wr-nic} functionality should be completely detached from -the specific mezzanine. +the specific mezzanine. This is a longer-term desire. @item The package should be verified with a wide range of kernel versions. Currently I compiled and tested only under Linux-3.4. -@item A number of temporary @i{printk} should be removed. - @end itemize @c ########################################################################## @@ -897,4 +916,4 @@ Currently I compiled and tested only under Linux-3.4. @c LocalWords: gnudd titlepage iftex texinfo CERN documentlanguage settitle @c LocalWords: documentencoding setfilename afourpaper paragraphindent EEPROM @c LocalWords: setchapternewpage finalout eeprom gateware devmem devfn busid -@c LocalWords: speclib Gennum +@c LocalWords: speclib Gennum timestamps stampm ifname timespec timestamp