The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/firewire/firewire.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2003 Hidetoshi Shimokawa
    3  * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
    4  * All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the acknowledgement as bellow:
   16  *
   17  *    This product includes software developed by K. Kobayashi and H. Shimokawa
   18  *
   19  * 4. The name of the author may not be used to endorse or promote products
   20  *    derived from this software without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   24  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   25  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
   26  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   27  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   30  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   32  * POSSIBILITY OF SUCH DAMAGE.
   33  * 
   34  * $FreeBSD$
   35  *
   36  */
   37 
   38 #ifndef _FIREWIRE_H
   39 #define _FIREWIRE_H 1
   40 
   41 #define DEV_DEF  0
   42 #define DEV_DV   2
   43 
   44 struct fw_isochreq {
   45         unsigned char   ch:6,
   46                         tag:2;
   47 };
   48 
   49 struct fw_isobufreq {
   50         struct fw_bufspec {
   51                 unsigned int nchunk;
   52                 unsigned int npacket;
   53                 unsigned int psize;
   54         } tx, rx;
   55 };
   56 
   57 struct fw_addr {
   58         uint32_t hi;
   59         uint32_t lo;
   60 };
   61 
   62 struct fw_asybindreq {
   63         struct fw_addr start;
   64         unsigned long len;
   65 };
   66 
   67 struct fw_reg_req_t {
   68         uint32_t addr;
   69         uint32_t data;
   70 };
   71 
   72 #define MAXREC(x)       (2 << (x))
   73 #define FWPMAX_S400 (2048 + 20) /* MAXREC plus space for control data */
   74 #define FWMAXQUEUE 128
   75 
   76 #define FWLOCALBUS      0xffc0
   77 
   78 #define FWTCODE_WREQQ   0
   79 #define FWTCODE_WREQB   1
   80 #define FWTCODE_WRES    2
   81 #define FWTCODE_RREQQ   4
   82 #define FWTCODE_RREQB   5
   83 #define FWTCODE_RRESQ   6
   84 #define FWTCODE_RRESB   7
   85 #define FWTCODE_CYCS    8
   86 #define FWTCODE_LREQ    9
   87 #define FWTCODE_STREAM  0xa
   88 #define FWTCODE_LRES    0xb
   89 #define FWTCODE_PHY     0xe
   90 
   91 #define FWRETRY_1       0
   92 #define FWRETRY_X       1
   93 #define FWRETRY_A       2
   94 #define FWRETRY_B       3
   95 
   96 #define FWRCODE_COMPLETE        0
   97 #define FWRCODE_ER_CONFL        4
   98 #define FWRCODE_ER_DATA         5
   99 #define FWRCODE_ER_TYPE         6
  100 #define FWRCODE_ER_ADDR         7
  101 
  102 #define FWSPD_S100      0
  103 #define FWSPD_S200      1
  104 #define FWSPD_S400      2
  105 
  106 #define FWP_TL_VALID (1 << 7)
  107 
  108 struct fw_isohdr {
  109         uint32_t hdr[1];
  110 };
  111 
  112 struct fw_asyhdr {
  113         uint32_t hdr[4];
  114 };
  115 
  116 #if BYTE_ORDER == BIG_ENDIAN
  117 #define BIT4x2(x,y)      uint8_t  x:4, y:4
  118 #define BIT16x2(x,y)    uint32_t x:16, y:16
  119 #else
  120 #define BIT4x2(x,y)      uint8_t  y:4, x:4
  121 #define BIT16x2(x,y)    uint32_t y:16, x:16
  122 #endif
  123 
  124 
  125 #if BYTE_ORDER == BIG_ENDIAN
  126 #define COMMON_HDR(a,b,c,d)     uint32_t a:16,b:8,c:4,d:4
  127 #define COMMON_RES(a,b,c,d)     uint32_t a:16,b:4,c:4,d:8
  128 #else
  129 #define COMMON_HDR(a,b,c,d)     uint32_t d:4,c:4,b:8,a:16
  130 #define COMMON_RES(a,b,c,d)     uint32_t d:8,c:4,b:4,a:16
  131 #endif
  132 
  133 struct fw_pkt {
  134         union {
  135                 uint32_t ld[0];
  136                 struct {
  137                         COMMON_HDR(, , tcode, );
  138                 } common;
  139                 struct {
  140                         COMMON_HDR(len, chtag, tcode, sy);
  141                         uint32_t payload[0];
  142                 } stream;
  143                 struct {
  144                         COMMON_HDR(dst, tlrt, tcode, pri);
  145                         BIT16x2(src, );
  146                 } hdr;
  147                 struct {
  148                         COMMON_HDR(dst, tlrt, tcode, pri);
  149                         BIT16x2(src, dest_hi);
  150                         uint32_t dest_lo;
  151                 } rreqq;
  152                 struct {
  153                         COMMON_HDR(dst, tlrt, tcode, pri);
  154                         COMMON_RES(src, rtcode, , );
  155                         uint32_t :32;
  156                 } wres;
  157                 struct {
  158                         COMMON_HDR(dst, tlrt, tcode, pri);
  159                         BIT16x2(src, dest_hi);
  160                         uint32_t dest_lo;
  161                         BIT16x2(len, extcode);
  162                 } rreqb;
  163                 struct {
  164                         COMMON_HDR(dst, tlrt, tcode, pri);
  165                         BIT16x2(src, dest_hi);
  166                         uint32_t dest_lo;
  167                         uint32_t data;
  168                 } wreqq;
  169                 struct {
  170                         COMMON_HDR(dst, tlrt, tcode, pri);
  171                         BIT16x2(src, dest_hi);
  172                         uint32_t dest_lo;
  173                         uint32_t data;
  174                 } cyc;
  175                 struct {
  176                         COMMON_HDR(dst, tlrt, tcode, pri);
  177                         COMMON_RES(src, rtcode, , );
  178                         uint32_t :32;
  179                         uint32_t data;
  180                 } rresq;
  181                 struct {
  182                         COMMON_HDR(dst, tlrt, tcode, pri);
  183                         BIT16x2(src, dest_hi);
  184                         uint32_t dest_lo;
  185                         BIT16x2(len, extcode);
  186                         uint32_t payload[0];
  187                 } wreqb;
  188                 struct {
  189                         COMMON_HDR(dst, tlrt, tcode, pri);
  190                         BIT16x2(src, dest_hi);
  191                         uint32_t dest_lo;
  192                         BIT16x2(len, extcode);
  193                         uint32_t payload[0];
  194                 } lreq;
  195                 struct {
  196                         COMMON_HDR(dst, tlrt, tcode, pri);
  197                         COMMON_RES(src, rtcode, , );
  198                         uint32_t :32;
  199                         BIT16x2(len, extcode);
  200                         uint32_t payload[0];
  201                 } rresb;
  202                 struct {
  203                         COMMON_HDR(dst, tlrt, tcode, pri);
  204                         COMMON_RES(src, rtcode, , );
  205                         uint32_t :32;
  206                         BIT16x2(len, extcode);
  207                         uint32_t payload[0];
  208                 } lres;
  209         } mode;
  210 };
  211 
  212 /*
  213  * Response code (rtcode)
  214  */
  215 /* The node has successfully completed the command. */
  216 #define RESP_CMP                0
  217 /* A resource conflict was detected. The request may be retried. */
  218 #define RESP_CONFLICT_ERROR     4
  219 /* Hardware error, data is unavailable. */
  220 #define RESP_DATA_ERROR         5
  221 /* A field in the request packet header was set to an unsupported or incorrect
  222  * value, or an invalid transaction was attempted (e.g., a write to a read-only
  223  * address). */
  224 #define RESP_TYPE_ERROR         6
  225 /* The destination offset field in the request was set to an address not
  226  * accessible in the destination node. */
  227 #define RESP_ADDRESS_ERROR      7
  228 
  229 /*
  230  * Extended transaction code (extcode)
  231  */
  232 #define EXTCODE_MASK_SWAP       1
  233 #define EXTCODE_CMP_SWAP        2
  234 #define EXTCODE_FETCH_ADD       3
  235 #define EXTCODE_LITTLE_ADD      4
  236 #define EXTCODE_BOUNDED_ADD     5
  237 #define EXTCODE_WRAP_ADD        6
  238 
  239 struct fw_eui64 {
  240         uint32_t hi, lo;
  241 };
  242 #define FW_EUI64_BYTE(eui, x) \
  243         ((((x)<4)?                              \
  244                 ((eui)->hi >> (8*(3-(x)))):     \
  245                 ((eui)->lo >> (8*(7-(x))))      \
  246         ) & 0xff)
  247 #define FW_EUI64_EQUAL(x, y) \
  248         ((x).hi == (y).hi && (x).lo == (y).lo)
  249 
  250 struct fw_asyreq {
  251         struct fw_asyreq_t{
  252                 unsigned char sped;
  253                 unsigned int type;
  254 #define FWASREQNODE     0
  255 #define FWASREQEUI      1
  256 #define FWASRESTL       2
  257 #define FWASREQSTREAM   3
  258                 unsigned short len;
  259                 union {
  260                         struct fw_eui64 eui;
  261                 }dst;
  262         }req;
  263         struct fw_pkt pkt;
  264         uint32_t data[512];
  265 };
  266 
  267 struct fw_devinfo {
  268         struct fw_eui64 eui;
  269         uint16_t dst;
  270         uint16_t status;
  271 };
  272 
  273 #define FW_MAX_DEVLST 70
  274 struct fw_devlstreq {
  275         uint16_t n;
  276         uint16_t info_len;
  277         struct fw_devinfo dev[FW_MAX_DEVLST];
  278 };
  279 
  280 #define FW_SELF_ID_PORT_CONNECTED_TO_CHILD 3
  281 #define FW_SELF_ID_PORT_CONNECTED_TO_PARENT 2
  282 #define FW_SELF_ID_PORT_NOT_CONNECTED 1
  283 #define FW_SELF_ID_PORT_NOT_EXISTS 0
  284 #if BYTE_ORDER == BIG_ENDIAN
  285 union fw_self_id {
  286         struct {
  287                 uint32_t  id:2,
  288                           phy_id:6,
  289                           sequel:1,
  290                           link_active:1,
  291                           gap_count:6,
  292                           phy_speed:2,
  293                           phy_delay:2,
  294                           contender:1,
  295                           power_class:3,
  296                           port0:2,
  297                           port1:2,
  298                           port2:2,
  299                           initiated_reset:1,
  300                           more_packets:1;
  301         } p0;
  302         struct {
  303                 uint32_t
  304                           id:2,
  305                           phy_id:6,
  306                           sequel:1,
  307                           sequence_num:3,
  308                           :2,
  309                           porta:2,
  310                           portb:2,
  311                           portc:2,
  312                           portd:2,
  313                           porte:2,
  314                           portf:2,
  315                           portg:2,
  316                           porth:2,
  317                           :1,
  318                           more_packets:1;
  319         } p1;
  320 };
  321 #else
  322 union fw_self_id {
  323         struct {
  324                 uint32_t  more_packets:1,
  325                           initiated_reset:1,
  326                           port2:2,
  327                           port1:2,
  328                           port0:2,
  329                           power_class:3,
  330                           contender:1,
  331                           phy_delay:2,
  332                           phy_speed:2,
  333                           gap_count:6,
  334                           link_active:1,
  335                           sequel:1,
  336                           phy_id:6,
  337                           id:2;
  338         } p0;
  339         struct {
  340                 uint32_t  more_packets:1,
  341                           reserved1:1,
  342                           porth:2,
  343                           portg:2,
  344                           portf:2,
  345                           porte:2,
  346                           portd:2,
  347                           portc:2,
  348                           portb:2,
  349                           porta:2,
  350                           reserved2:2,
  351                           sequence_num:3,
  352                           sequel:1,
  353                           phy_id:6,
  354                           id:2;
  355         } p1;
  356 };
  357 #endif
  358 
  359 
  360 struct fw_topology_map {
  361         uint32_t crc:16,
  362                  crc_len:16;
  363         uint32_t generation;
  364         uint32_t self_id_count:16,
  365                  node_count:16;
  366         union fw_self_id self_id[4*64];
  367 };
  368 
  369 struct fw_speed_map {
  370         uint32_t crc:16,
  371                  crc_len:16;
  372         uint32_t generation;
  373         uint8_t  speed[64][64];
  374 };
  375 
  376 struct fw_crom_buf {
  377         struct fw_eui64 eui;
  378         uint32_t len;
  379         void *ptr;
  380 };
  381 
  382 /*
  383  * FireWire specific system requests.
  384  */
  385 #define FW_SSTBUF       _IOWR('S', 86, struct fw_isobufreq)
  386 #define FW_GSTBUF       _IOWR('S', 87, struct fw_isobufreq)
  387 #define FW_SRSTREAM     _IOWR('S', 88, struct fw_isochreq)
  388 #define FW_GRSTREAM     _IOWR('S', 89, struct fw_isochreq)
  389 #define FW_STSTREAM     _IOWR('S', 90, struct fw_isochreq)
  390 #define FW_GTSTREAM     _IOWR('S', 91, struct fw_isochreq)
  391 
  392 #define FW_ASYREQ       _IOWR('S', 92, struct fw_asyreq)
  393 #define FW_IBUSRST      _IOR('S', 1, unsigned int)
  394 #define FW_GDEVLST      _IOWR('S', 2, struct fw_devlstreq)
  395 #define FW_SBINDADDR    _IOWR('S', 3, struct fw_asybindreq)
  396 #define FW_CBINDADDR    _IOWR('S', 4, struct fw_asybindreq)
  397 #define FW_GTPMAP       _IOR('S', 5, struct fw_topology_map)
  398 #define FW_GCROM        _IOWR('S', 7, struct fw_crom_buf)
  399 
  400 #define FW_SDEUI64      _IOW('S', 20, struct fw_eui64)
  401 #define FW_GDEUI64      _IOR('S', 21, struct fw_eui64)
  402 
  403 #define FWOHCI_RDREG    _IOWR('S', 80, struct fw_reg_req_t)
  404 #define FWOHCI_WRREG    _IOWR('S', 81, struct fw_reg_req_t)
  405 #define FWOHCI_RDPHYREG _IOWR('S', 82, struct fw_reg_req_t)
  406 #define FWOHCI_WRPHYREG _IOWR('S', 83, struct fw_reg_req_t)
  407 
  408 #define DUMPDMA         _IOWR('S', 82, uint32_t)
  409 
  410 #ifdef _KERNEL
  411 
  412 #define FWMAXNDMA 0x100 /* 8 bits DMA channel id. in device No. */
  413 
  414 #if defined(__DragonFly__) || __FreeBSD_version < 500000
  415 #define dev2unit(x)     ((minor(x) & 0xff) | (minor(x) >> 8))
  416 #define unit2minor(x)   (((x) & 0xff) | (((x) << 8) & ~0xffff))
  417 #endif
  418 
  419 #define MAKEMINOR(f, u, s)      \
  420         unit2minor((f) | (((u) & 0xff) << 8) | (s & 0xff))
  421 #define DEV2UNIT(x)     ((dev2unit(x) & 0xff00) >> 8)
  422 #define DEV2SUB(x)      (dev2unit(x) & 0xff)
  423 
  424 #define FWMEM_FLAG      0x10000
  425 #define DEV_FWMEM(x)    (dev2unit(x) & FWMEM_FLAG)
  426 #endif
  427 #endif

Cache object: e96a53ce028a85f7f199b4d92188f3b5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.