Print this page
10521 Convert iec61883(7I) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/iec61883.7i
          +++ new/usr/src/man/man7i/iec61883.7i
   1      -'\" te
   2    1  .\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved
   3    2  .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License. You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.
   4    3  .\"  See the License for the specific language governing permissions and limitations under the License. When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the
   5    4  .\" fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   6      -.TH IEC61883 7I "Mar 27, 2009"
   7      -.SH NAME
   8      -iec61883 \- IEC 61883 interfaces
   9      -.SH SYNOPSIS
  10      -.LP
  11      -.nf
  12      -#include <sys/av/iec61883.h>
  13      -.fi
  14      -
  15      -.SH DESCRIPTION
  16      -.sp
  17      -.LP
        5 +.Dd July  9, 2018
        6 +.Dt IEC61883 7I
        7 +.Os
        8 +.Sh NAME
        9 +.Nm iec61883
       10 +.Nd IEC 61883 interfaces
       11 +.Sh SYNOPSIS
       12 +.In sys/av/iec61883.h
       13 +.Sh DESCRIPTION
  18   14  The set of interfaces described in this man page can be used to control and
  19   15  exchange data with consumer audio/video devices using protocols specified
  20      -in\fIIEC 61883 Consumer Electronic Audio/Video Equipment - Digital
  21      -Interface\fR, including Common Isochronous Packet (CIP), Connection Management
       16 +in
       17 +.%T "IIEC 61883 Consumer Electronic Audio/Video Equipment - Digital Interface"
       18 +including Common Isochronous Packet (CIP), Connection Management
  22   19  Procedures (CMP) and Function Control Protocol (FCP).
  23      -.sp
  24      -.LP
  25      -An \fBiec61883\fR compliant driver exports two device nodes for isochronous and
  26      -for asynchronous transactions. See the \fBFILES\fR section of this man page for
  27      -the namespace definition.
  28      -.SS "Isochronous Transfers"
  29      -.sp
  30      -.LP
       20 +.Pp
       21 +An
       22 +.Nm
       23 +compliant driver exports two device nodes for isochronous and
       24 +for asynchronous transactions.
       25 +See the
       26 +.Sx FILES
       27 +section of this man page for the namespace definition.
       28 +.Ss "Isochronous Transfers"
  31   29  Two methods are provided to receive/transmit isochronous data: using
  32      -\fBmmap\fR(2) in combination with \fBioctl\fR(2), and \fBread\fR(2) or
  33      -\fBwrite\fR(2).
  34      -.SS "Mmap/Ioctl"
  35      -.sp
  36      -.LP
       30 +.Xr mmap 2
       31 +in combination with
       32 +.Xr ioctl 2 ,
       33 +and
       34 +.Xr read 2
       35 +or
       36 +.Xr write 2 .
       37 +.Ss "Mmap/Ioctl"
  37   38  This method provides better performance and finer-grained control than
  38      -read/write, and is a method of choice for most applications. The data buffer is
       39 +read/write, and is a method of choice for most applications.
       40 +The data buffer is
  39   41  mapped into a user process address space, which means no data copying between
  40      -the kernel and an application is necessary. Synchronization between user
  41      -processes and the driver is performed using \fBioctl\fR(2) commands.
  42      -.sp
  43      -.LP
       42 +the kernel and an application is necessary.
       43 +Synchronization between user
       44 +processes and the driver is performed using
       45 +.Xr ioctl 2
       46 +commands.
       47 +.Pp
  44   48  An application allocates resources for isochronous transfer using
  45      -\fBIEC61883_ISOCH_INIT\fR. Then the data buffer can be mapped into the process
  46      -space using \fBmmap\fR(2).
  47      -.sp
  48      -.LP
       49 +.Dv IEC61883_ISOCH_INIT .
       50 +Then the data buffer can be mapped into the process
       51 +space using
       52 +.Xr mmap 2 .
       53 +.Pp
  49   54  A circular data buffer consists of one or more equal size frame buffers
  50   55  (further referred to as frames, unless to avoid ambiguity with AV frames).
  51   56  Frames are numbered starting with zero and are always transferred sequentially.
  52      -Frames consist equal sized packets. Each packet contains a CIP header and one
  53      -or more data blocks.
  54      -.sp
  55      -.LP
       57 +Frames consist equal sized packets.
       58 +Each packet contains a CIP header and one or more data blocks.
       59 +.Pp
  56   60  A driver and an application act as a producer and a consumer: producer supplies
  57      -\fBfull\fR frames (filled with data) to the consumer, and the producer is not
  58      -allowed to access those frames until the consumer claims them \fBempty\fR.
  59      -.sp
  60      -.LP
  61      -A transfer can be initiated and suspended with \fBIEC61883_START\fR and
  62      -\fBIEC61883_STOP\fR commands respectively. \fBIEC61883_RECV\fR or
  63      -\fBIEC61883_XMIT\fR is used for producer-consumer synchronization.
  64      -.SS "Read/Write"
  65      -.sp
  66      -.LP
  67      -Using this method, an application calls \fBread\fR(2) or \fBwrite\fR(2) to
  68      -receive or transmit a specified amount of data. Bus-specific overhead, such as
  69      -isochronous packet headers, is handled by the driver and is not exposed to
  70      -applications. Data returned by \fBread\fR(2) contains CIP headers and data
  71      -blocks. Empty packets are not returned by \fBread\fR(2). \fBwrite\fR(2) data
  72      -should meet the same requirements.
  73      -.sp
  74      -.LP
  75      -If one or more channels have been allocated since \fBopen\fR(2) (see
  76      -\fBIEC61883_ISOCH_INIT\fR), the data is received/transmitted using channel that
  77      -was created the last.
  78      -.sp
  79      -.LP
       61 +.Em full
       62 +frames (filled with data) to the consumer, and the producer is not
       63 +allowed to access those frames until the consumer claims them
       64 +.Em empty .
       65 +.Pp
       66 +A transfer can be initiated and suspended with
       67 +.Dv IEC61883_START
       68 +and
       69 +.Dv IEC61883_STOP
       70 +commands respectively.
       71 +.Dv IEC61883_RECV
       72 +or
       73 +.Dv IEC61883_XMIT
       74 +is used for producer-consumer synchronization.
       75 +.Ss "Read/Write"
       76 +Using this method, an application calls
       77 +.Xr read 2
       78 +or
       79 +.Xr write 2
       80 +to receive or transmit a specified amount of data.
       81 +Bus-specific overhead, such as isochronous packet headers, is handled by the driver
       82 +and is not exposed to applications.
       83 +Data returned by
       84 +.Xr read 2
       85 +contains CIP headers and data blocks.
       86 +Empty packets are not returned by
       87 +.Xr read 2 .
       88 +.Xr write 2
       89 +data should meet the same requirements.
       90 +.Pp
       91 +If one or more channels have been allocated since
       92 +.Xr open 2
       93 +(see
       94 +.Dv IEC61883_ISOCH_INIT ) ,
       95 +the data is received/transmitted using channel that was created the last.
       96 +.Pp
  80   97  If no channels were allocated, the driver uses the broadcast channel by default
  81      -and allocates the default-size data buffer. During transmit, the first packet's
  82      -CIP header is used to auto-detect the data format. If it is one of the formats
  83      -supported by the driver, it is properly transmitted (with inserted empty
  84      -packets and timestamps).
  85      -.sp
  86      -.LP
       98 +and allocates the default-size data buffer.
       99 +During transmit, the first packet's CIP header is used to auto-detect the data format.
      100 +If it is one of the formats supported by the driver, it is properly transmitted (with
      101 +inserted empty packets and timestamps).
      102 +.Pp
  87  103  For both methods, if during transmit the driver runs out of data, it transmits
  88  104  empty packets containing only a CIP header of the next to be transmitted
  89      -packet, as defined in \fIIEC 61883-1\fR.
  90      -.SS "Connection Management Procedures"
  91      -.sp
  92      -.LP
      105 +packet, as defined in
      106 +.Em IEC 61883-1 .
      107 +.Ss "Connection Management Procedures"
  93  108  Applications wishing to follow Connection Management Procedures (CMP) in
  94      -combination with isochronous transfers should use the \fBioctl\fR(2)
  95      -\fBIEC61883_PLUG_INIT, IEC61883_PLUG_FINI, IEC61883_PLUG_REG_READ\fR and
  96      -\fBIEC61883_PLUG_REG_CAS\fR commands.
  97      -.SS "Asynchronous Transactions"
  98      -.sp
  99      -.LP
 100      -\fBread\fR(2), \fBwrite\fR(2), \fBioctl\fR(2), and \fBpoll\fR(2) can be used
 101      -with asynchronous nodes. Asynchronous data exchange between a driver and an
      109 +combination with isochronous transfers should use the
      110 +.Xr ioctl 2
      111 +.Dv IEC61883_PLUG_INIT ,
      112 +.Dv IEC61883_PLUG_FINI ,
      113 +.Dv IEC61883_PLUG_REG_READ
      114 +and
      115 +.Dv IEC61883_PLUG_REG_CAS
      116 +commands.
      117 +.Ss "Asynchronous Transactions"
      118 +.Xr read 2 ,
      119 +.Xr write 2 ,
      120 +.Xr ioctl 2 ,
      121 +and
      122 +.Xr poll 2
      123 +can be used
      124 +with asynchronous nodes.
      125 +Asynchronous data exchange between a driver and an
 102  126  application utilizes a common data structure called asynchronous request (ARQ):
 103      -.sp
 104      -.in +2
 105      -.nf
      127 +.Bd -literal -offset 2n
 106  128  typedef struct iec61883_arq {
 107  129          int        arq_type;
 108  130          int        arq_len;
 109  131          union {
 110  132                  uint32_t   quadlet;
 111  133                  uint64_t   octlet;
 112  134                  uint8_t    buf[8];
 113  135          } arq_data;
 114  136  } iec61883_arq_t;
 115      -.fi
 116      -.in -2
 117      -.sp
 118      -
 119      -.sp
 120      -.LP
 121      -\fBarq_type\fR contains \fBARQ\fR type:
 122      -.sp
 123      -.ne 2
 124      -.na
 125      -\fB\fBIEC61883_ARQ_FCP_CMD\fR\fR
 126      -.ad
 127      -.br
 128      -.na
 129      -\fB\fBIEC61883_ARQ_FCP_RESP\fR\fR
 130      -.ad
 131      -.sp .6
 132      -.RS 4n
 133      -\fBFCP\fR command and response frame respectively. Outgoing frames are sent
 134      -using \fBwrite\fR(2), incoming frames are received with \fBread\fR(2).
 135      -.sp
 136      -See \fIIEC 61883-1\fR for the FCP frame structure definition.
 137      -.RE
 138      -
 139      -.sp
 140      -.ne 2
 141      -.na
 142      -\fB\fBIEC61883_ARQ_BUS_RESET\fR\fR
 143      -.ad
 144      -.sp .6
 145      -.RS 4n
 146      -Returned by the driver when a bus reset occurs. There is no data associated
 147      -with this request type, and \fBarq_len\fR is set to 0.
 148      -.RE
 149      -
 150      -.sp
 151      -.LP
 152      -If \fBarq_len\fR is 4 or 8, then data should be supplied in
 153      -\fBarq_data.quadlet\fR or \fBarq_data.octlet\fR respectively, otherwise up to 8
 154      -bytes can be put in \fBarq_data.buf\fR, with the rest of the data following
 155      -immediately after.
 156      -.SS "write(2)"
 157      -.sp
 158      -.LP
 159      -For a request to be sent to a target, an \fBiec61883_arq_t\fR structure along
 160      -with associated data is passed to the driver using \fBwrite\fR(2).
 161      -\fBwrite()\fR blocks until the request is completed.
 162      -.SS "read(2)"
 163      -.sp
 164      -.LP
 165      -A driver collects incoming ARQs in the internal buffer. Buffer size can be
 166      -changed using the \fBioctl\fR(2) command \fBIEC61883_FCP_SET_IBUF_SIZE\fR.
 167      -.sp
 168      -.LP
 169      -Reading an ARQ takes one or two steps depending on data length. An application
 170      -first reads \fBsizeof (iec61883_arq_t)\fR bytes: if \fBarq_len\fR is less than
 171      -or equal 4, which is usually the case, no additional step is needed. Otherwise,
 172      -the remaining \fBarq_len - 4\fR bytes should be read and concatenated.
 173      -.sp
 174      -.LP
 175      -\fBread\fR(2) blocks until the specified amount of data is available, unless
 176      -\fBO_NONBLOCK\fR or \fBO_NDELAY\fR flag was set during \fBopen\fR(2), in which
 177      -case \fBread\fR(2) returns immediately.
 178      -.SS "poll(2)"
 179      -.sp
 180      -.LP
 181      -Applications can \fBpoll\fR(2) asynchronous nodes on the \fBPOLLIN\fR event.
 182      -.SS "Bus Reset"
 183      -.sp
 184      -.LP
      137 +.Ed
      138 +.Pp
      139 +.Fa arq_type
      140 +contains
      141 +.Sy ARQ
      142 +type:
      143 +.Pp
      144 +.Bl -tag -width " " -compact
      145 +.It Dv IEC61883_ARQ_FCP_CMD
      146 +.It Dv IEC61883_ARQ_FCP_RESP
      147 +.Pp
      148 +.Sy FCP
      149 +command and response frame respectively.
      150 +Outgoing frames are sent using
      151 +.Xr write 2 ,
      152 +incoming frames are received with
      153 +.Xr read 2 .
      154 +.Pp
      155 +See
      156 +.Em IIEC 61883-1
      157 +for the FCP frame structure definition.
      158 +.Pp
      159 +.It Dv IEC61883_ARQ_BUS_RESET
      160 +.Pp
      161 +Returned by the driver when a bus reset occurs.
      162 +There is no data associated with this request type, and \fBarq_len\fR is set to 0.
      163 +.El
      164 +.Pp
      165 +If
      166 +.Fa arq_len
      167 +is 4 or 8, then data should be supplied in
      168 +.Fa arq_data.quadlet
      169 +or
      170 +.Fa arq_data.octlet
      171 +respectively, otherwise up to 8 bytes can be put in
      172 +.Fa arq_data.buf ,
      173 +with the rest of the data following immediately after.
      174 +.Ss "write(2)"
      175 +For a request to be sent to a target, an
      176 +.Vt iec61883_arq_t
      177 +structure along with associated data is passed to the driver using
      178 +.Xr write 2 .
      179 +.Xr write 2
      180 +blocks until the request is completed.
      181 +.Ss "read(2)"
      182 +A driver collects incoming ARQs in the internal buffer.
      183 +Buffer size can be changed using the
      184 +.Xr ioctl 2
      185 +command
      186 +.Vt IEC61883_FCP_SET_IBUF_SIZE .
      187 +.Pp
      188 +Reading an ARQ takes one or two steps depending on data length.
      189 +An application
      190 +first reads
      191 +.Ql sizeof (iec61883_arq_t)
      192 +bytes: if
      193 +.Fa arq_len
      194 +is less than or equal 4, which is usually the case, no additional step is needed.
      195 +Otherwise,
      196 +the remaining
      197 +.Ql arq_len - 4
      198 +bytes should be read and concatenated.
      199 +.Pp
      200 +.Xr read 2
      201 +blocks until the specified amount of data is available, unless
      202 +.Dv O_NONBLOCK
      203 +or
      204 +.Dv O_NDELAY
      205 +flag was set during
      206 +.Xr open 2 ,
      207 +in which case
      208 +.Xr read 2
      209 +returns immediately.
      210 +.Ss "poll(2)"
      211 +Applications can
      212 +.Xr poll 2
      213 +asynchronous nodes on the
      214 +.Dv POLLIN
      215 +event.
      216 +.Ss "Bus Reset"
 185  217  In case of a bus reset, the driver notifies an application by generating an
 186      -\fBARQ\fR of type \fBIEC61883_ARQ_BUS_RESET\fR.
 187      -.sp
 188      -.LP
      218 +.Sy ARQ
      219 +of type
      220 +.Dv IEC61883_ARQ_BUS_RESET .
      221 +.Pp
 189  222  If there were established isochronous connections before bus reset, the driver
 190      -attempts to restore all connections as described in \fIIEC 61883\fR and resume
 191      -any active transfers that were in progress.
 192      -.SH IOCTLS
 193      -.sp
 194      -.LP
      223 +attempts to restore all connections as described in
      224 +.Em IEC 61883
      225 +and resume any active transfers that were in progress.
      226 +.Sh IOCTLS
 195  227  The following commands only apply to isochronous nodes:
 196      -.sp
 197      -.ne 2
 198      -.na
 199      -\fB\fBIEC61883_ISOCH_INIT\fR\fR
 200      -.ad
 201      -.sp .6
 202      -.RS 4n
      228 +.Bl -tag -width " "
      229 +.It Dv IEC61883_ISOCH_INIT
      230 +.Pp
 203  231  This command allocates a data buffer and isochronous resources (if necessary)
 204      -for the isochronous transfer. The argument is a pointer to the structure:
 205      -.sp
 206      -.in +2
 207      -.nf
      232 +for the isochronous transfer.
      233 +The argument is a pointer to the structure:
      234 +.Bd -literal -offset 2n
 208  235  typedef struct iec61883_isoch_init {
 209      -      int ii_version;       /* interface version */
      236 +      int   ii_version;     /* interface version */
 210  237        int   ii_pkt_size;    /* packet size */
 211  238        int   ii_frame_size;  /* packets/frame */
 212  239        int   ii_frame_cnt;   /* # of frames */
 213  240        int   ii_direction;   /* xfer direction */
 214  241        int   ii_bus_speed;   /* bus speed */
 215  242        uint64_t ii_channel;  /* channel mask */
 216  243        int   ii_dbs;         /* DBS */
 217  244        int   ii_fn;          /* FN */
 218  245        int   ii_rate_n;      /* rate numerator */
 219  246        int   ii_rate_d;      /* rate denominator */
 220  247        int   ii_ts_mode;     /* timestamp mode */
 221  248        int   ii_flags;       /* flags */
 222  249        int   ii_handle;      /* isoch handle */
 223  250        int   ii_frame_rcnt;  /* # of frames */
 224      -      off_t   *ii_mmap_off  /* mmap offset */
      251 +      off_t *ii_mmap_off    /* mmap offset */
 225  252        int   ii_rchannel;    /* channel */
 226  253        int   ii_error;       /* error code */
 227  254  } iec61883_isoch_init_t;
 228      -.fi
 229      -.in -2
 230      -.sp
 231      -
 232      -\fBii_version\fR should be set to \fBIEC61883_V1_0\fR.
 233      -.sp
 234      -The driver attempts to allocate a data buffer consisting of \fBii_frame_cnt\fR
 235      -frames, with \fBii_frame_size\fR packets in each frame. Packet size in bytes is
 236      -specified by \fBii_pkt_size\fR specifies and should be a multiple of 512 and
 237      -compatible with \fBii_bus_speed\fR.
 238      -.sp
 239      -\fBii_direction\fR can take one of the following values:
 240      -.sp
 241      -.ne 2
 242      -.na
 243      -\fB\fBIEC61883_DIR_RECV\fR\fR
 244      -.ad
 245      -.sp .6
 246      -.RS 4n
      255 +.Ed
      256 +.Pp
      257 +.Fa ii_version
      258 +should be set to
      259 +.Dv IEC61883_V1_0 .
      260 +.Pp
      261 +The driver attempts to allocate a data buffer consisting of
      262 +.Fa ii_frame_cnt
      263 +frames, with
      264 +.Fa ii_frame_size
      265 +packets in each frame.
      266 +Packet size in bytes is specified by
      267 +.Fa ii_pkt_size
      268 +specifies and should be a multiple of 512 and compatible with
      269 +.Fa ii_bus_speed .
      270 +.Pp
      271 +.Fa ii_direction
      272 +can take one of the following values:
      273 +.Bl -tag -width "IEC61883_DIR_RECV"
      274 +.It Dv IEC61883_DIR_RECV
 247  275  Receiving isochronous data.
 248      -.RE
 249      -
 250      -.sp
 251      -.ne 2
 252      -.na
 253      -\fB\fBIEC61883_DIR_XMIT\fR\fR
 254      -.ad
 255      -.sp .6
 256      -.RS 4n
      276 +.It Dv IEC61883_DIR_XMIT
 257  277  Transmitting isochronous data.
 258      -.RE
 259      -
 260      -\fBii_bus_speed\fR chooses bus speed to be used and can be either
 261      -\fBIEC61883_S100, IEC61883_S200\fR or \fBIEC61883_S400\fR.
 262      -.sp
 263      -\fBii_channel\fR is a mask that specifies an isochronous channel number to be
 264      -used, with the \fIN\fRth bit representing channel \fIN\fR. When transmitting
 265      -data, several bits can be set at a time, in which case the driver chooses one,
 266      -for example, \fB0x3FF\fR means a range from 0 to 9. In case of receive, only
 267      -one bit can be set.
 268      -.sp
 269      -\fBii_dbs\fR specifies data block size in quadlets, for example, DBS value for
 270      -\fBSD-DVCR\fR is \fB0x78\fR. Refer to \fIIEC 61883\fR for more details on DBS.
 271      -.sp
 272      -ii_fn specifies fraction number, which defines the number of blocks in which a
 273      -source packet is divided. Allowed values are from 0 to 3. Refer to IEC 61883
      278 +.El
      279 +.Pp
      280 +.Fa ii_bus_speed
      281 +chooses bus speed to be used and can be either
      282 +.Dv IEC61883_S100 ,
      283 +.Dv IEC61883_S200
      284 +or
      285 +.Dv IEC61883_S400 .
      286 +.Pp
      287 +.Fa ii_channel
      288 +is a mask that specifies an isochronous channel number to be
      289 +used, with the
      290 +.Em N Ns th
      291 +bit representing channel
      292 +.Em N .
      293 +When transmitting data, several bits can be set at a time, in which case the
      294 +driver chooses one, for example,
      295 +.Sy 0x3FF
      296 +means a range from 0 to 9.
      297 +In case of receive, only one bit can be set.
      298 +.Pp
      299 +.Fa ii_dbs
      300 +specifies data block size in quadlets, for example, DBS value for
      301 +.Dv SD-DVCR
      302 +is
      303 +.Sy 0x78 .
      304 +Refer to
      305 +.Em IEC 61883
      306 +for more details on DBS.
      307 +.Pp
      308 +.Fa ii_fn
      309 +specifies fraction number, which defines the number of blocks in which a
      310 +source packet is divided.
      311 +Allowed values are from 0 to 3.
      312 +Refer to
      313 +.Em IEC 61883
 274  314  for more details on FN.
 275      -.sp
      315 +.Pp
 276  316  Data rate expected by the AV device can be lower than the bus speed, in which
 277  317  case the driver has to periodically insert empty packets into the data stream
 278      -to avoid device buffer overflows. This rate is specified with a fraction N/D,
 279      -set by \fBii_rate_n\fR and \fBii_rate_d\fR respectively. Any integer numbers
 280      -can be used, or the following predefined constants:
 281      -.sp
 282      -.ne 2
 283      -.na
 284      -\fB\fBIEC61883_RATE_N_DV_NTSC IEC61883_RATE_D_DV_NTSC\fR\fR
 285      -.ad
 286      -.sp .6
 287      -.RS 4n
 288      -Data rate expected by \fBDV-NTSC\fR devices.
 289      -.RE
 290      -
 291      -.sp
 292      -.ne 2
 293      -.na
 294      -\fB\fBIEC61883_RATE_N_DV_PAL IEC61883_RATE_D_DV_PAL\fR\fR
 295      -.ad
 296      -.sp .6
 297      -.RS 4n
 298      -Data rate expected by \fBDV-PAL\fR devices.
 299      -.RE
 300      -
      318 +to avoid device buffer overflows.
      319 +This rate is specified with a fraction N/D,
      320 +set by
      321 +.Fa ii_rate_n
      322 +and
      323 +.Fa ii_rate_d
      324 +respectively.
      325 +Any integer numbers can be used, or the following predefined constants:
      326 +.Pp
      327 +.Bl -tag -width "IEC61883_RATE_N_DV_NTSC" -compact
      328 +.It Dv IEC61883_RATE_N_DV_NTSC
      329 +.It Dv IEC61883_RATE_D_DV_NTSC
      330 +Data rate expected by
      331 +.Sy DV-NTSC
      332 +devices.
      333 +.Pp
      334 +.It Dv IEC61883_RATE_N_DV_PAL
      335 +.It Dv IEC61883_RATE_D_DV_PAL
      336 +Data rate expected by
      337 +.Sy DV-PAL
      338 +devices.
      339 +.El
      340 +.Pp
 301  341  During data transmission, a timestamp based on the current value of the cycle
 302      -timer is usually required. \fBii_ts_mode\fR defines timestamp mode to be used:
 303      -.sp
 304      -.ne 2
 305      -.na
 306      -\fB\fBIEC61883_TS_SYT\fR\fR
 307      -.ad
 308      -.sp .6
 309      -.RS 4n
      342 +timer is usually required.
      343 +.Fa ii_ts_mode
      344 +defines timestamp mode to be used:
      345 +.Bl -tag -width IEC61883_TS_NONE
      346 +.It Dv IEC61883_TS_SYT
 310  347  Driver puts a timestamp in the SYT field of the first CIP header of each frame.
 311      -.RE
 312      -
 313      -.sp
 314      -.ne 2
 315      -.na
 316      -\fB\fBIEC61883_TS_NONE\fR\fR
 317      -.ad
 318      -.sp .6
 319      -.RS 4n
      348 +.It Dv IEC61883_TS_NONE
 320  349  No timestamps.
 321      -.RE
 322      -
 323      -\fBii_dbs, ii_fn, ii_rate_n, ii_rate_d\fR and \fBii_ts_mode\fR are only
 324      -required for transmission. In other case these should be set to 0.
 325      -.sp
 326      -\fBii_flags\fR should be set to 0.
 327      -.sp
 328      -If command succeeds, \fBii_handle\fR contains a handle that should be used with
 329      -other isochronous commands. \fBii_frame_rcnt\fR contains the number of
 330      -allocated frames (can be less than \fBii_frame_cnt\fR). \fBii_mmap_off\fR
 331      -contains an offset to be used in \fBmmap\fR(2), for example, to map an entire
 332      -data receive buffer:
 333      -.sp
 334      -.in +2
 335      -.nf
      350 +.El
      351 +.Pp
      352 +.Fa ii_dbs ,
      353 +.Fa ii_fn ,
      354 +.Fa ii_rate_n ,
      355 +.Fa ii_rate_d
      356 +and
      357 +.Fa ii_ts_mode
      358 +are only required for transmission.
      359 +In other case these should be set to 0.
      360 +.Pp
      361 +.Fa ii_flags
      362 +should be set to 0.
      363 +.Pp
      364 +If command succeeds,
      365 +.Fa ii_handle
      366 +contains a handle that should be used with other isochronous commands.
      367 +.Fa ii_frame_rcnt
      368 +contains the number of allocated frames (can be less than
      369 +.Fa ii_frame_cnt ) .
      370 +.Fa ii_mmap_off
      371 +contains an offset to be used in
      372 +.Xr mmap 2 ,
      373 +for example, to map an entire data receive buffer:
      374 +.Bd -literal -offset 2n
 336  375  pa = mmap(NULL, init.ii_pkt_size *
 337  376        init.ii_frame_size * init.ii_frame_rcnt,
 338  377        PROT_READ, MAP_PRIVATE, fd, init.ii_mmap_off);
 339      -.fi
 340      -.in -2
 341      -.sp
 342      -
 343      -\fBii_rchannel\fR contains channel number.
 344      -.sp
 345      -In case of command success, \fBii_error\fR is set to 0; otherwise one of the
 346      -following values can be returned:
 347      -.sp
 348      -.ne 2
 349      -.na
 350      -\fB\fBIEC61883_ERR_NOMEM\fR\fR
 351      -.ad
 352      -.sp .6
 353      -.RS 4n
      378 +.Ed
      379 +.Pp
      380 +.Fa ii_rchannel
      381 +contains channel number.
      382 +.Pp
      383 +In case of command success,
      384 +.Fa ii_error
      385 +is set to 0; otherwise one of the following values can be returned:
      386 +.Bl -tag -width IEC61883_ERR_NOCHANNEL
      387 +.It Dv IEC61883_ERR_NOMEM
 354  388  Not enough memory for the data buffer.
 355      -.RE
 356      -
 357      -.sp
 358      -.ne 2
 359      -.na
 360      -\fB\fBIEC61883_ERR_NOCHANNEL\fR\fR
 361      -.ad
 362      -.sp .6
 363      -.RS 4n
      389 +.It Dv IEC61883_ERR_NOCHANNEL
 364  390  Cannot allocate isochronous channel.
 365      -.RE
 366      -
 367      -.sp
 368      -.ne 2
 369      -.na
 370      -\fB\fBIEC61883_ERR_PKT_SIZE\fR\fR
 371      -.ad
 372      -.sp .6
 373      -.RS 4n
      391 +.It Dv IEC61883_ERR_PKT_SIZE
 374  392  Packet size is not allowed at this bus speed.
 375      -.RE
 376      -
 377      -.sp
 378      -.ne 2
 379      -.na
 380      -\fB\fBIEC61883_ERR_VERSION\fR\fR
 381      -.ad
 382      -.sp .6
 383      -.RS 4n
      393 +.It Dv IEC61883_ERR_VERSION
 384  394  Interface version is not supported.
 385      -.RE
 386      -
 387      -.sp
 388      -.ne 2
 389      -.na
 390      -\fB\fBIEC61883_ERR_INVAL\fR\fR
 391      -.ad
 392      -.sp .6
 393      -.RS 4n
      395 +.It Dv IEC61883_ERR_INVAL
 394  396  One or more the parameters are invalid
 395      -.RE
 396      -
 397      -.sp
 398      -.ne 2
 399      -.na
 400      -\fB\fBIEC61883_ERR_OTHER\fR\fR
 401      -.ad
 402      -.sp .6
 403      -.RS 4n
      397 +.It Dv IEC61883_ERR_OTHER
 404  398  Unspecified error type.
 405      -.RE
 406      -
 407      -.RE
 408      -
 409      -.sp
 410      -.ne 2
 411      -.na
 412      -\fB\fBIEC61883_ISOCH_FINI\fR\fR
 413      -.ad
 414      -.sp .6
 415      -.RS 4n
 416      -Argument is a handle returned by \fBIEC61883_ISOCH_INIT\fR. This command frees
 417      -any resources associated with this handle. There must be no active transfers
      399 +.El
      400 +.It Dv IEC61883_ISOCH_FINI
      401 +.Pp
      402 +Argument is a handle returned by
      403 +.Dv IEC61883_ISOCH_INIT .
      404 +This command frees any resources associated with this handle.
      405 +There must be no active transfers
 418  406  and the data buffer must be unmapped; otherwise the command fails.
 419      -.RE
 420      -
 421      -.sp
 422      -.ne 2
 423      -.na
 424      -\fB\fBIEC61883_START\fR\fR
 425      -.ad
 426      -.sp .6
 427      -.RS 4n
 428      -This command starts an isochronous transfer. The argument is a handle returned
 429      -by \fBIEC61883_ISOCH_INIT\fR.
 430      -.RE
 431      -
 432      -.sp
 433      -.ne 2
 434      -.na
 435      -\fB\fBIEC61883_STOP\fR\fR
 436      -.ad
 437      -.sp .6
 438      -.RS 4n
 439      -This command stops an isochronous transfer. The argument is a handle returned
 440      -by \fBIEC61883_ISOCH_INIT\fR.
 441      -.RE
 442      -
 443      -.sp
 444      -.ne 2
 445      -.na
 446      -\fB\fBIEC61883_RECV\fR\fR
 447      -.ad
 448      -.sp .6
 449      -.RS 4n
 450      -This command is used to receive full frames and return empty frames to the
 451      -driver. The argument is a pointer to the structure:
 452      -.sp
 453      -.in +2
 454      -.nf
      407 +.It Dv IEC61883_START
      408 +.Pp
      409 +This command starts an isochronous transfer.
      410 +The argument is a handle returned
      411 +by
      412 +.Dv IEC61883_ISOCH_INIT .
      413 +.It Dv IEC61883_STOP
      414 +.Pp
      415 +This command stops an isochronous transfer.
      416 +The argument is a handle returned by
      417 +.Dv IEC61883_ISOCH_INIT .
      418 +.It Dv IEC61883_RECV
      419 +.Pp
      420 +This command is used to receive full frames and return empty frames to the driver.
      421 +The argument is a pointer to the structure:
      422 +.Bd -literal -offset 2n
 455  423  typedef struct iec61883_recv {
 456      -        int rx_handle;     /* isoch handle */
 457      -        int rx_flags;      /* flags */
 458      -iec61883_xfer_t rx_xfer;   /* xfer params */
      424 +        int   rx_handle;    /* isoch handle */
      425 +        int   rx_flags;     /* flags */
      426 +        iec61883_xfer_t rx_xfer;   /* xfer params */
 459  427  } iec61883_recv_t;
 460  428  
 461  429  typedef struct iec61883_xfer {
 462  430          int   xf_empty_idx; /* first empty frame */
 463      -        int xf_empty_cnt;   /* empty frame count */
      431 +        int   xf_empty_cnt; /* empty frame count */
 464  432          int   xf_full_idx;  /* first full frame */
 465  433          int   xf_full_cnt;  /* full frame count */
 466  434          int   xf_error;     /* error */
 467  435  } iec61883_xfer_t;
 468      -.fi
 469      -.in -2
 470      -.sp
 471      -
 472      -\fBrx_flags\fR should be set to 0.
 473      -.sp
 474      -An application sets \fBxf_empty_idx\fR and \fBxf_empty_cnt\fR to indicate
 475      -frames it no longer needs. E.g. if a buffer consists of 6 frames,
 476      -\fBxf_empty_idx\fR is 4, \fBxf_empty_cnt\fR is 3 - means that frames 4, 5 and 0
 477      -can now be reused by the driver. If there are no empty frames, for example, the
 478      -first time this command is called, \fBxf_empty_cnt\fR should be set to 0.
 479      -.sp
 480      -When the command returns, \fBxf_full_idx\fR and \fBxf_full_cnt\fR specifies the
 481      -frames that are full. \fBxf_error\fR is always 0.
 482      -.sp
      436 +.Ed
      437 +.Pp
      438 +.Fa rx_flags
      439 +should be set to 0.
      440 +.Pp
      441 +An application sets
      442 +.Fa xf_empty_idx
      443 +and
      444 +.Fa xf_empty_cnt
      445 +to indicate frames it no longer needs.
      446 +E. g.  if a buffer consists of 6 frames,
      447 +.Fa xf_empty_idx
      448 +is 4,
      449 +.Fa xf_empty_cnt
      450 +is 3 - means that frames 4, 5 and 0 can now be reused by the driver.
      451 +If there are no empty frames, for example, the
      452 +first time this command is called,
      453 +.Fa xf_empty_cnt
      454 +should be set to 0.
      455 +.Pp
      456 +When the command returns,
      457 +.Fa xf_full_idx
      458 +and
      459 +.Fa xf_full_cnt
      460 +specifies the frames that are full.
      461 +.Fa xf_error
      462 +is always 0.
      463 +.Pp
 483  464  In general, AV frame boundaries are not aligned with the frame buffer
 484  465  boundaries, because the first received packet might not be the first packet of
 485  466  an AV frame, and, in contrast with the read/write method, the driver does not
 486  467  remove empty CIP packets.
 487      -.sp
      468 +.Pp
 488  469  Applications should detect empty packets by comparing adjacent packets'
 489  470  continuity counters (DBC field of the CIP header).
 490      -.RE
 491      -
 492      -.sp
 493      -.ne 2
 494      -.na
 495      -\fB\fBIEC61883_XMIT\fR\fR
 496      -.ad
 497      -.sp .6
 498      -.RS 4n
      471 +.It Dv IEC61883_XMIT
      472 +.Pp
 499  473  This command is used to transmit full frames and get more empty frames from the
 500      -driver. The argument is a pointer to the structure:
 501      -.sp
 502      -.in +2
 503      -.nf
      474 +driver.
      475 +The argument is a pointer to the structure:
      476 +.Bd -literal -offset 2n
 504  477  typedef struct iec61883_xmit {
 505  478          int   tx_handle;         /* isoch handle */
 506  479          int   tx_flags;          /* flags */
 507  480          iec61883_xfer_t tx_xfer; /* xfer params */
 508  481          int   tx_miss_cnt;       /* missed cycles */
 509  482   } iec61883_xmit_t;
 510      -.fi
 511      -.in -2
 512      -.sp
 513      -
 514      -\fBtx_flags\fR should be set to zero.
 515      -.sp
 516      -The application sets \fBxf_full_idx\fR and \fBxf_full_cnt\fR to specify frames
 517      -it wishes to transmit. If there are no frames to transmit (e.g. the first time
 518      -this command is called), \fBxf_full_cnt\fR should be set to 0.
 519      -.sp
 520      -When the command returns, \fBxf_empty_idx\fR and \fBxf_empty_cnt\fR specifies
 521      -empty frames which can be to transmit more data. \fBxf_error\fR is always 0.
 522      -.sp
 523      -\fBtx_miss_cnt\fR contains the number of isochronous cycles missed since last
 524      -transfer due to data buffer under run. This can happen when an application does
 525      -not supply data fast enough.
 526      -.sp
      483 +.Ed
      484 +.Pp
      485 +.Fa tx_flags
      486 +should be set to zero.
      487 +.Pp
      488 +The application sets
      489 +.Fa xf_full_idx
      490 +and
      491 +.Fa xf_full_cnt
      492 +to specify frames it wishes to transmit.
      493 +If there are no frames to transmit (e. g. the first time this command is called),
      494 +.Fa xf_full_cnt
      495 +should be set to 0.
      496 +.Pp
      497 +When the command returns,
      498 +.Fa xf_empty_idx
      499 +and
      500 +.Fa xf_empty_cnt
      501 +specifies empty frames which can be to transmit more data.
      502 +.Fa xf_error
      503 +is always 0.
      504 +.Pp
      505 +.Fa tx_miss_cnt
      506 +contains the number of isochronous cycles missed since last
      507 +transfer due to data buffer under run.
      508 +This can happen when an application does not supply data fast enough.
 527  509  For the purposes of time stamping, the driver considers the first packet in a
 528  510  frame buffer to be the first packet of an AV frame.
 529      -.RE
 530      -
 531      -.sp
 532      -.ne 2
 533      -.na
 534      -\fB\fBIEC61883_PLUG_INIT\fR\fR
 535      -.ad
 536      -.sp .6
 537      -.RS 4n
 538      -This command returns a handle for the specified plug. The argument is a pointer
      511 +.It Dv IEC61883_PLUG_INIT
      512 +.Pp
      513 +This command returns a handle for the specified plug.
      514 +The argument is a pointer
 539  515  to the structure:
 540      -.sp
 541      -.in +2
 542      -.nf
      516 +.Bd -literal -offset 2n
 543  517  typedef struct iec61883_plug_init {
 544  518          int   pi_ver;     /* interface version */
 545  519          int   pi_loc;     /* plug location */
 546  520          int   pi_type;    /* plug type */
 547  521          int   pi_num;     /* plug number */
 548  522          int   pi_flags;   /* flags */
 549  523          int   pi_handle;  /* plug handle */
 550  524          int   pi_rnum;    /* plug number */
 551  525   } iec61883_plug_init_t;
 552      -.fi
 553      -.in -2
 554      -.sp
 555      -
 556      -\fBpi_ver\fR should be set to \fBIEC61883_V1_0\fR.
 557      -.sp
 558      -\fBpi_loc\fR specifies plug location:
 559      -.sp
 560      -.ne 2
 561      -.na
 562      -\fB\fBIEC61883_LOC_LOCAL\fR\fR
 563      -.ad
 564      -.sp .6
 565      -.RS 4n
 566      -On the local unit (local plug). A plug control register (PCR) is allocated.
      526 +.Ed
      527 +.Pp
      528 +.Fa pi_ver
      529 +should be set to
      530 +.Dv IEC61883_V1_0 .
      531 +.Pp
      532 +.Fa pi_loc
      533 +specifies plug location:
      534 +.Bl -tag -width IEC61883_LOC_REMOTE
      535 +.It Dv IEC61883_LOC_LOCAL
      536 +On the local unit (local plug).
      537 +A plug control register (PCR) is allocated.
 567  538  Command fails if the plug already exists
 568      -.RE
 569      -
 570      -.sp
 571      -.ne 2
 572      -.na
 573      -\fB\fBIEC61883_LOC_REMOTE\fR\fR
 574      -.ad
 575      -.sp .6
 576      -.RS 4n
 577      -On the remote unit (remote plug). The plug should exist on the remote unit,
      539 +.It Dv IEC61883_LOC_REMOTE
      540 +On the remote unit (remote plug).
      541 +The plug should exist on the remote unit,
 578  542  otherwise the command fails.
 579      -.RE
 580      -
 581      -\fBpi_type\fR specifies isochronous plug type:
 582      -.sp
 583      -.ne 2
 584      -.na
 585      -\fB\fBIEC61883_PLUG_IN IEC61883_PLUG_OUT\fR\fR
 586      -.ad
 587      -.sp .6
 588      -.RS 4n
      543 +.El
      544 +.Pp
      545 +.Fa pi_type
      546 +specifies isochronous plug type:
      547 +.Pp
      548 +.Bl -tag -width " " -compact
      549 +.It Dv IEC61883_PLUG_IN
      550 +.It Dv IEC61883_PLUG_OUT
      551 +.Pp
 589  552  Input or output plugs.
 590      -.RE
 591      -
 592      -.sp
 593      -.ne 2
 594      -.na
 595      -\fB\fBIEC61883_PLUG_MASTER_IN IEC61883_PLUG_MASTER_OUT\fR\fR
 596      -.ad
 597      -.sp .6
 598      -.RS 4n
 599      -Master input or master output plug. These plugs always exist on the local unit.
 600      -.RE
 601      -
 602      -\fBpi_num\fR specifies plug number. This should be 0 for master plugs, and from
 603      -0 to 31 for input/output plugs. Alternatively, a special value
 604      -\fBIEC61883_PLUG_ANY\fR can be used to let the driver choose a free plug
 605      -number, create the plug and return the number in \fBpi_rnum\fR.
 606      -.sp
 607      -\fBpi_flags\fR should be set to 0.
 608      -.sp
 609      -If the command succeeds, \fBpi_handle\fR contains a handle that should be used
 610      -with other plug commands.
 611      -.RE
 612      -
 613      -.sp
 614      -.ne 2
 615      -.na
 616      -\fB\fBIEC61883_PLUG_FINI\fR\fR
 617      -.ad
 618      -.sp .6
 619      -.RS 4n
 620      -Argument is a handle returned by \fBIEC61883_PLUG_INIT\fR. This command frees
 621      -any resources associated with this handle, including the PCR.
 622      -.RE
 623      -
 624      -.sp
 625      -.ne 2
 626      -.na
 627      -\fB\fBIEC61883_PLUG_REG_READ\fR\fR
 628      -.ad
 629      -.sp .6
 630      -.RS 4n
 631      -Read plug register value. The argument is a pointer to the structure:
 632      -.sp
 633      -.in +2
 634      -.nf
      553 +.Pp
      554 +.It Dv IEC61883_PLUG_MASTER_IN
      555 +.It Dv IEC61883_PLUG_MASTER_OUT
      556 +.Pp
      557 +Master input or master output plug.
      558 +These plugs always exist on the local unit.
      559 +.El
      560 +.Pp
      561 +.Fa pi_num
      562 +specifies plug number.
      563 +This should be 0 for master plugs, and from 0 to 31 for input/output plugs.
      564 +Alternatively, a special value
      565 +.Dv IEC61883_PLUG_ANY
      566 +can be used to let the driver choose a free plug
      567 +number, create the plug and return the number in
      568 +.Fa pi_rnum .
      569 +.Pp
      570 +.Fa pi_flags
      571 +should be set to 0.
      572 +.Pp
      573 +If the command succeeds,
      574 +.Fa pi_handle
      575 +contains a handle that should be used with other plug commands.
      576 +.It Dv IEC61883_PLUG_FINI
      577 +.Pp
      578 +Argument is a handle returned by
      579 +.Dv IEC61883_PLUG_INIT .
      580 +This command frees any resources associated with this handle, including the PCR.
      581 +.It Dv IEC61883_PLUG_REG_READ
      582 +.Pp
      583 +Read plug register value.
      584 +The argument is a pointer to the structure:
      585 +.Bd -literal -offset 2n
 635  586  typedef struct iec61883_plug_reg_val {
 636  587          int         pr_handle; /* plug handle */
 637      -        uint32_t     pr_val;    /* register value */
      588 +        uint32_t    pr_val;    /* register value */
 638  589  } iec61883_plug_reg_val_t;
 639      -.fi
 640      -.in -2
 641      -.sp
 642      -
 643      -\fBpr_handle\fR is a handle returned by \fBIEC61883_PLUG_INIT\fR. Register
 644      -value is returned in \fBpr_val\fR.
 645      -.RE
 646      -
 647      -.sp
 648      -.ne 2
 649      -.na
 650      -\fB\fBIEC61883_PLUG_REG_CAS\fR\fR
 651      -.ad
 652      -.sp .6
 653      -.RS 4n
 654      -Atomically compare and swap plug register value. The argument is a pointer to
 655      -the structure:
 656      -.sp
 657      -.in +2
 658      -.nf
      590 +.Ed
      591 +.Pp
      592 +.Fa pr_handle
      593 +is a handle returned by
      594 +.Dv IEC61883_PLUG_INIT .
      595 +Register
      596 +value is returned in
      597 +.Fa pr_val .
      598 +.It Dv IEC61883_PLUG_REG_CAS
      599 +.Pp
      600 +Atomically compare and swap plug register value.
      601 +The argument is a pointer to the structure:
      602 +.Bd -literal -offset 2n
 659  603  typedef struct iec61883_plug_reg_lock {
 660  604          int        pl_handle; /* plug handle */
 661  605          uint32_t   pl_arg;    /* compare arg */
 662  606          uint32_t   pl_data;   /* write value */
 663  607          UINT32_t   pl_old;    /* original value */
 664  608  } iec61883_plug_reg_lock_t;
 665      -.fi
 666      -.in -2
 667      -.sp
 668      -
 669      -pr_handle is a handle returned by IEC61883_PLUG_INIT.
 670      -.sp
 671      -Original register value is compared with pl_arg and if they are equal, register
 672      -value is replaced with pl_data. In any case, the original value is stored in
 673      -pl_old.
 674      -.RE
 675      -
 676      -.sp
 677      -.LP
      609 +.Ed
      610 +.Pp
      611 +.Fa pr_handle
      612 +is a handle returned by IEC61883_PLUG_INIT.
      613 +.Pp
      614 +Original register value is compared with
      615 +.Fa pl_arg
      616 +and if they are equal, register value is replaced with
      617 +.Fa pl_data .
      618 +In any case, the original value is stored in
      619 +.Fa pl_old .
      620 +.El
      621 +.Pp
 678  622  The following commands only apply to asynchronous nodes:
 679      -.sp
 680      -.ne 2
 681      -.na
 682      -\fB\fBIEC61883_ARQ_GET_IBUF_SIZE\fR\fR
 683      -.ad
 684      -.sp .6
 685      -.RS 4n
 686      -This command returns current incoming ARQ buffer size. The argument is a
 687      -pointer to \fBint\fR.
 688      -.RE
 689      -
 690      -.sp
 691      -.ne 2
 692      -.na
 693      -\fB\fBIEC61883_ARQ_SET_IBUF_SIZE\fR\fR
 694      -.ad
 695      -.sp .6
 696      -.RS 4n
 697      -This command changes incoming ARQ buffer size. The argument is the new buffer
      623 +.Bl -tag -width " "
      624 +.It Dv IEC61883_ARQ_GET_IBUF_SIZE
      625 +.Pp
      626 +This command returns current incoming ARQ buffer size.
      627 +The argument is a
      628 +pointer to
      629 +.Vt int .
      630 +.It Dv IEC61883_ARQ_SET_IBUF_SIZE
      631 +.Pp
      632 +This command changes incoming ARQ buffer size.
      633 +The argument is the new buffer
 698  634  size in bytes.
 699      -.RE
 700      -
 701      -.SH FILES
 702      -.sp
 703      -.ne 2
 704      -.na
 705      -\fB\fB/dev/av/N/async\fR\fR
 706      -.ad
 707      -.RS 19n
      635 +.El
      636 +.Sh FILES
      637 +.Bl -tag -width /dev/av/N/async
      638 +.It Pa /dev/av/N/async
 708  639  Device node for asynchronous data
 709      -.RE
 710      -
 711      -.sp
 712      -.ne 2
 713      -.na
 714      -\fB\fB/dev/av/N/isoch\fR\fR
 715      -.ad
 716      -.RS 19n
      640 +.It Pa /dev/av/N/isoch
 717  641  Device has been disconnected
 718      -.RE
 719      -
 720      -.SH ERRORS
 721      -.sp
 722      -.ne 2
 723      -.na
 724      -\fB\fBEIO\fR\fR
 725      -.ad
 726      -.RS 10n
      642 +.El
      643 +.Sh ERRORS
      644 +.Bl -tag -width EFAULT
      645 +.It Er EIO
 727  646  Bus operation failed.
 728      -.sp
 729  647  DMA failure.
 730      -.RE
 731      -
 732      -.sp
 733      -.ne 2
 734      -.na
 735      -\fB\fBEFAULT\fR\fR
 736      -.ad
 737      -.RS 10n
 738      -\fBioctl\fR(2) argument points to an illegal address.
 739      -.RE
 740      -
 741      -.sp
 742      -.ne 2
 743      -.na
 744      -\fB\fBEINVAL\fR\fR
 745      -.ad
 746      -.RS 10n
      648 +.It Er EFAULT
      649 +.Xr ioctl 2
      650 +argument points to an illegal address.
      651 +.It Er EINVAL
 747  652  Invalid argument or argument combination.
 748      -.RE
 749      -
 750      -.sp
 751      -.ne 2
 752      -.na
 753      -\fB\fBENODEV\fR\fR
 754      -.ad
 755      -.RS 10n
      653 +.It Er ENODEV
 756  654  Device has been disconnected.
 757      -.RE
 758      -
 759      -.SH ATTRIBUTES
 760      -.sp
 761      -.LP
 762      -See \fBattributes\fR(5) for descriptions of the following attributes:
 763      -.sp
 764      -
 765      -.sp
 766      -.TS
 767      -box;
 768      -c | c
 769      -l | l .
 770      -ATTRIBUTE TYPE  ATTRIBUTE VALUE
 771      -_
 772      -Architecture    All
 773      -_
 774      -Stability level Committed
 775      -.TE
 776      -
 777      -.SH SEE ALSO
 778      -.sp
 779      -.LP
 780      -\fBioctl\fR(2), \fBmmap\fR(2), \fBopen\fR(2), \fBpoll\fR(2), \fBread\fR(2),
 781      -\fBwrite\fR(2), \fBattributes\fR(5), \fBav1394\fR(7D)
 782      -.sp
 783      -.LP
 784      -\fIIEC 61883 Consumer audio/video equipment - Digital interface\fR
 785      -.sp
 786      -.LP
 787      -\fIIEEE Std 1394-1995 Standard for a High Performance Serial Bus\fR
      655 +.El
      656 +.Sh ARCHITECTURE
      657 +All
      658 +.Sh INTERFACE STABILITY
      659 +Committed
      660 +.Sh SEE ALSO
      661 +.Xr ioctl 2 ,
      662 +.Xr mmap 2 ,
      663 +.Xr open 2 ,
      664 +.Xr poll 2 ,
      665 +.Xr read 2 ,
      666 +.Xr write 2 ,
      667 +.Xr attributes 5 ,
      668 +.Xr av1394 7D
      669 +.Rs
      670 +.%B IIEC 61883 Consumer audio/video equipment - Digital interface
      671 +.Re
      672 +.Rs
      673 +.%B IEEE Std 1394-1995 Standard for a High Performance Serial Bus
      674 +.Re
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX