1098ca2bdSWarner Losh /*- 2*718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-4-Clause 3*718cf2ccSPedro F. Giffuni * 477ee030bSHidetoshi Shimokawa * Copyright (c) 2003 Hidetoshi Shimokawa 53c60ba66SKatsushi Kobayashi * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 63c60ba66SKatsushi Kobayashi * All rights reserved. 73c60ba66SKatsushi Kobayashi * 83c60ba66SKatsushi Kobayashi * Redistribution and use in source and binary forms, with or without 93c60ba66SKatsushi Kobayashi * modification, are permitted provided that the following conditions 103c60ba66SKatsushi Kobayashi * are met: 113c60ba66SKatsushi Kobayashi * 1. Redistributions of source code must retain the above copyright 123c60ba66SKatsushi Kobayashi * notice, this list of conditions and the following disclaimer. 133c60ba66SKatsushi Kobayashi * 2. Redistributions in binary form must reproduce the above copyright 143c60ba66SKatsushi Kobayashi * notice, this list of conditions and the following disclaimer in the 153c60ba66SKatsushi Kobayashi * documentation and/or other materials provided with the distribution. 163c60ba66SKatsushi Kobayashi * 3. All advertising materials mentioning features or use of this software 173c60ba66SKatsushi Kobayashi * must display the acknowledgement as bellow: 183c60ba66SKatsushi Kobayashi * 193c60ba66SKatsushi Kobayashi * This product includes software developed by K. Kobayashi and H. Shimokawa 203c60ba66SKatsushi Kobayashi * 213c60ba66SKatsushi Kobayashi * 4. The name of the author may not be used to endorse or promote products 223c60ba66SKatsushi Kobayashi * derived from this software without specific prior written permission. 233c60ba66SKatsushi Kobayashi * 243c60ba66SKatsushi Kobayashi * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 253c60ba66SKatsushi Kobayashi * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 263c60ba66SKatsushi Kobayashi * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 273c60ba66SKatsushi Kobayashi * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 283c60ba66SKatsushi Kobayashi * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 293c60ba66SKatsushi Kobayashi * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 303c60ba66SKatsushi Kobayashi * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 313c60ba66SKatsushi Kobayashi * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 323c60ba66SKatsushi Kobayashi * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 333c60ba66SKatsushi Kobayashi * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 343c60ba66SKatsushi Kobayashi * POSSIBILITY OF SUCH DAMAGE. 353c60ba66SKatsushi Kobayashi * 363c60ba66SKatsushi Kobayashi */ 373c60ba66SKatsushi Kobayashi 383c60ba66SKatsushi Kobayashi #ifndef _FIREWIRE_H 393c60ba66SKatsushi Kobayashi #define _FIREWIRE_H 1 403c60ba66SKatsushi Kobayashi 413c60ba66SKatsushi Kobayashi #define DEV_DEF 0 423c60ba66SKatsushi Kobayashi #define DEV_DV 2 433c60ba66SKatsushi Kobayashi 443c60ba66SKatsushi Kobayashi struct fw_isochreq { 4523667f08SAlexander Kabaev unsigned char ch:6; 4623667f08SAlexander Kabaev unsigned char tag:2; 473c60ba66SKatsushi Kobayashi }; 483c60ba66SKatsushi Kobayashi 493c60ba66SKatsushi Kobayashi struct fw_isobufreq { 506cada79aSHidetoshi Shimokawa struct fw_bufspec { 513c60ba66SKatsushi Kobayashi unsigned int nchunk; 523c60ba66SKatsushi Kobayashi unsigned int npacket; 533c60ba66SKatsushi Kobayashi unsigned int psize; 543c60ba66SKatsushi Kobayashi } tx, rx; 553c60ba66SKatsushi Kobayashi }; 563c60ba66SKatsushi Kobayashi 573c60ba66SKatsushi Kobayashi struct fw_addr { 5803161bbcSDoug Rabson uint32_t hi; 5903161bbcSDoug Rabson uint32_t lo; 603c60ba66SKatsushi Kobayashi }; 613c60ba66SKatsushi Kobayashi 623c60ba66SKatsushi Kobayashi struct fw_asybindreq { 633c60ba66SKatsushi Kobayashi struct fw_addr start; 643c60ba66SKatsushi Kobayashi unsigned long len; 653c60ba66SKatsushi Kobayashi }; 663c60ba66SKatsushi Kobayashi 673c60ba66SKatsushi Kobayashi struct fw_reg_req_t { 6803161bbcSDoug Rabson uint32_t addr; 6903161bbcSDoug Rabson uint32_t data; 703c60ba66SKatsushi Kobayashi }; 713c60ba66SKatsushi Kobayashi 7294b6f028SHidetoshi Shimokawa #define MAXREC(x) (2 << (x)) 733c60ba66SKatsushi Kobayashi #define FWPMAX_S400 (2048 + 20) /* MAXREC plus space for control data */ 7430177c81SHidetoshi Shimokawa #define FWMAXQUEUE 128 753c60ba66SKatsushi Kobayashi 763c60ba66SKatsushi Kobayashi #define FWLOCALBUS 0xffc0 773c60ba66SKatsushi Kobayashi 783c60ba66SKatsushi Kobayashi #define FWTCODE_WREQQ 0 793c60ba66SKatsushi Kobayashi #define FWTCODE_WREQB 1 803c60ba66SKatsushi Kobayashi #define FWTCODE_WRES 2 813c60ba66SKatsushi Kobayashi #define FWTCODE_RREQQ 4 823c60ba66SKatsushi Kobayashi #define FWTCODE_RREQB 5 833c60ba66SKatsushi Kobayashi #define FWTCODE_RRESQ 6 843c60ba66SKatsushi Kobayashi #define FWTCODE_RRESB 7 853c60ba66SKatsushi Kobayashi #define FWTCODE_CYCS 8 863c60ba66SKatsushi Kobayashi #define FWTCODE_LREQ 9 873c60ba66SKatsushi Kobayashi #define FWTCODE_STREAM 0xa 883c60ba66SKatsushi Kobayashi #define FWTCODE_LRES 0xb 893c60ba66SKatsushi Kobayashi #define FWTCODE_PHY 0xe 903c60ba66SKatsushi Kobayashi 913c60ba66SKatsushi Kobayashi #define FWRETRY_1 0 923c60ba66SKatsushi Kobayashi #define FWRETRY_X 1 933c60ba66SKatsushi Kobayashi #define FWRETRY_A 2 943c60ba66SKatsushi Kobayashi #define FWRETRY_B 3 953c60ba66SKatsushi Kobayashi 963c60ba66SKatsushi Kobayashi #define FWRCODE_COMPLETE 0 973c60ba66SKatsushi Kobayashi #define FWRCODE_ER_CONFL 4 983c60ba66SKatsushi Kobayashi #define FWRCODE_ER_DATA 5 993c60ba66SKatsushi Kobayashi #define FWRCODE_ER_TYPE 6 1003c60ba66SKatsushi Kobayashi #define FWRCODE_ER_ADDR 7 1013c60ba66SKatsushi Kobayashi 102d717909fSSean Bruno /* 103d717909fSSean Bruno * Defined 1394a-2000 104d717909fSSean Bruno * Table 5B-1 105d717909fSSean Bruno */ 1063c60ba66SKatsushi Kobayashi #define FWSPD_S100 0 1073c60ba66SKatsushi Kobayashi #define FWSPD_S200 1 1083c60ba66SKatsushi Kobayashi #define FWSPD_S400 2 109d717909fSSean Bruno #define FWSPD_S800 3 110d717909fSSean Bruno #define FWSPD_S1600 4 111d717909fSSean Bruno #define FWSPD_S3200 5 1123c60ba66SKatsushi Kobayashi 1133c60ba66SKatsushi Kobayashi #define FWP_TL_VALID (1 << 7) 1143c60ba66SKatsushi Kobayashi 1153c60ba66SKatsushi Kobayashi struct fw_isohdr { 11603161bbcSDoug Rabson uint32_t hdr[1]; 1173c60ba66SKatsushi Kobayashi }; 118e715bfaeSHidetoshi Shimokawa 1193c60ba66SKatsushi Kobayashi struct fw_asyhdr { 12003161bbcSDoug Rabson uint32_t hdr[4]; 1213c60ba66SKatsushi Kobayashi }; 122e715bfaeSHidetoshi Shimokawa 12377ee030bSHidetoshi Shimokawa #if BYTE_ORDER == BIG_ENDIAN 12403161bbcSDoug Rabson #define BIT4x2(x,y) uint8_t x:4, y:4 12503161bbcSDoug Rabson #define BIT16x2(x,y) uint32_t x:16, y:16 12677ee030bSHidetoshi Shimokawa #else 12703161bbcSDoug Rabson #define BIT4x2(x,y) uint8_t y:4, x:4 12803161bbcSDoug Rabson #define BIT16x2(x,y) uint32_t y:16, x:16 12977ee030bSHidetoshi Shimokawa #endif 13077ee030bSHidetoshi Shimokawa 13177ee030bSHidetoshi Shimokawa 13277ee030bSHidetoshi Shimokawa #if BYTE_ORDER == BIG_ENDIAN 13303161bbcSDoug Rabson #define COMMON_HDR(a,b,c,d) uint32_t a:16,b:8,c:4,d:4 13403161bbcSDoug Rabson #define COMMON_RES(a,b,c,d) uint32_t a:16,b:4,c:4,d:8 13577ee030bSHidetoshi Shimokawa #else 13603161bbcSDoug Rabson #define COMMON_HDR(a,b,c,d) uint32_t d:4,c:4,b:8,a:16 13703161bbcSDoug Rabson #define COMMON_RES(a,b,c,d) uint32_t d:8,c:4,b:4,a:16 1383c60ba66SKatsushi Kobayashi #endif 139e715bfaeSHidetoshi Shimokawa 140e715bfaeSHidetoshi Shimokawa struct fw_pkt { 141e715bfaeSHidetoshi Shimokawa union { 14203161bbcSDoug Rabson uint32_t ld[0]; 143e715bfaeSHidetoshi Shimokawa struct { 14477ee030bSHidetoshi Shimokawa COMMON_HDR(, , tcode, ); 145e715bfaeSHidetoshi Shimokawa } common; 146e715bfaeSHidetoshi Shimokawa struct { 14777ee030bSHidetoshi Shimokawa COMMON_HDR(len, chtag, tcode, sy); 14803161bbcSDoug Rabson uint32_t payload[0]; 149e715bfaeSHidetoshi Shimokawa } stream; 150e715bfaeSHidetoshi Shimokawa struct { 15177ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 15277ee030bSHidetoshi Shimokawa BIT16x2(src, ); 153e715bfaeSHidetoshi Shimokawa } hdr; 154e715bfaeSHidetoshi Shimokawa struct { 15577ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 15677ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 15703161bbcSDoug Rabson uint32_t dest_lo; 158e715bfaeSHidetoshi Shimokawa } rreqq; 159e715bfaeSHidetoshi Shimokawa struct { 16077ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 16177ee030bSHidetoshi Shimokawa COMMON_RES(src, rtcode, , ); 16203161bbcSDoug Rabson uint32_t :32; 163e715bfaeSHidetoshi Shimokawa } wres; 164e715bfaeSHidetoshi Shimokawa struct { 16577ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 16677ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 16703161bbcSDoug Rabson uint32_t dest_lo; 16877ee030bSHidetoshi Shimokawa BIT16x2(len, extcode); 169e715bfaeSHidetoshi Shimokawa } rreqb; 170e715bfaeSHidetoshi Shimokawa struct { 17177ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 17277ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 17303161bbcSDoug Rabson uint32_t dest_lo; 17403161bbcSDoug Rabson uint32_t data; 175e715bfaeSHidetoshi Shimokawa } wreqq; 176e715bfaeSHidetoshi Shimokawa struct { 17777ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 17877ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 17903161bbcSDoug Rabson uint32_t dest_lo; 18003161bbcSDoug Rabson uint32_t data; 181e715bfaeSHidetoshi Shimokawa } cyc; 182e715bfaeSHidetoshi Shimokawa struct { 18377ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 18477ee030bSHidetoshi Shimokawa COMMON_RES(src, rtcode, , ); 18503161bbcSDoug Rabson uint32_t :32; 18603161bbcSDoug Rabson uint32_t data; 187e715bfaeSHidetoshi Shimokawa } rresq; 188e715bfaeSHidetoshi Shimokawa struct { 18977ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 19077ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 19103161bbcSDoug Rabson uint32_t dest_lo; 19277ee030bSHidetoshi Shimokawa BIT16x2(len, extcode); 19303161bbcSDoug Rabson uint32_t payload[0]; 194e715bfaeSHidetoshi Shimokawa } wreqb; 195e715bfaeSHidetoshi Shimokawa struct { 19677ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 19777ee030bSHidetoshi Shimokawa BIT16x2(src, dest_hi); 19803161bbcSDoug Rabson uint32_t dest_lo; 19977ee030bSHidetoshi Shimokawa BIT16x2(len, extcode); 20003161bbcSDoug Rabson uint32_t payload[0]; 201e715bfaeSHidetoshi Shimokawa } lreq; 202e715bfaeSHidetoshi Shimokawa struct { 20377ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 20477ee030bSHidetoshi Shimokawa COMMON_RES(src, rtcode, , ); 20503161bbcSDoug Rabson uint32_t :32; 20677ee030bSHidetoshi Shimokawa BIT16x2(len, extcode); 20703161bbcSDoug Rabson uint32_t payload[0]; 208e715bfaeSHidetoshi Shimokawa } rresb; 209e715bfaeSHidetoshi Shimokawa struct { 21077ee030bSHidetoshi Shimokawa COMMON_HDR(dst, tlrt, tcode, pri); 21177ee030bSHidetoshi Shimokawa COMMON_RES(src, rtcode, , ); 21203161bbcSDoug Rabson uint32_t :32; 21377ee030bSHidetoshi Shimokawa BIT16x2(len, extcode); 21403161bbcSDoug Rabson uint32_t payload[0]; 215e715bfaeSHidetoshi Shimokawa } lres; 216e715bfaeSHidetoshi Shimokawa } mode; 2173c60ba66SKatsushi Kobayashi }; 218e715bfaeSHidetoshi Shimokawa 219c4778b5dSHidetoshi Shimokawa /* 220c4778b5dSHidetoshi Shimokawa * Response code (rtcode) 221c4778b5dSHidetoshi Shimokawa */ 222c4778b5dSHidetoshi Shimokawa /* The node has successfully completed the command. */ 223c4778b5dSHidetoshi Shimokawa #define RESP_CMP 0 224c4778b5dSHidetoshi Shimokawa /* A resource conflict was detected. The request may be retried. */ 225c4778b5dSHidetoshi Shimokawa #define RESP_CONFLICT_ERROR 4 226c4778b5dSHidetoshi Shimokawa /* Hardware error, data is unavailable. */ 227c4778b5dSHidetoshi Shimokawa #define RESP_DATA_ERROR 5 228c4778b5dSHidetoshi Shimokawa /* A field in the request packet header was set to an unsupported or incorrect 229c4778b5dSHidetoshi Shimokawa * value, or an invalid transaction was attempted (e.g., a write to a read-only 230c4778b5dSHidetoshi Shimokawa * address). */ 231c4778b5dSHidetoshi Shimokawa #define RESP_TYPE_ERROR 6 232c4778b5dSHidetoshi Shimokawa /* The destination offset field in the request was set to an address not 233c4778b5dSHidetoshi Shimokawa * accessible in the destination node. */ 234c4778b5dSHidetoshi Shimokawa #define RESP_ADDRESS_ERROR 7 235c4778b5dSHidetoshi Shimokawa 236c4778b5dSHidetoshi Shimokawa /* 237c4778b5dSHidetoshi Shimokawa * Extended transaction code (extcode) 238c4778b5dSHidetoshi Shimokawa */ 239c4778b5dSHidetoshi Shimokawa #define EXTCODE_MASK_SWAP 1 240c4778b5dSHidetoshi Shimokawa #define EXTCODE_CMP_SWAP 2 241c4778b5dSHidetoshi Shimokawa #define EXTCODE_FETCH_ADD 3 242c4778b5dSHidetoshi Shimokawa #define EXTCODE_LITTLE_ADD 4 243c4778b5dSHidetoshi Shimokawa #define EXTCODE_BOUNDED_ADD 5 244c4778b5dSHidetoshi Shimokawa #define EXTCODE_WRAP_ADD 6 245c4778b5dSHidetoshi Shimokawa 2463c60ba66SKatsushi Kobayashi struct fw_eui64 { 24703161bbcSDoug Rabson uint32_t hi, lo; 2483c60ba66SKatsushi Kobayashi }; 249c547b896SHidetoshi Shimokawa #define FW_EUI64_BYTE(eui, x) \ 250c547b896SHidetoshi Shimokawa ((((x) < 4)? \ 251c547b896SHidetoshi Shimokawa ((eui)->hi >> (8 * (3 - (x)))): \ 252c547b896SHidetoshi Shimokawa ((eui)->lo >> (8 * (7 - (x)))) \ 253c547b896SHidetoshi Shimokawa ) & 0xff) 2540981f5f0SHidetoshi Shimokawa #define FW_EUI64_EQUAL(x, y) \ 2550981f5f0SHidetoshi Shimokawa ((x).hi == (y).hi && (x).lo == (y).lo) 256e715bfaeSHidetoshi Shimokawa 2573c60ba66SKatsushi Kobayashi struct fw_asyreq { 2583c60ba66SKatsushi Kobayashi struct fw_asyreq_t { 2593c60ba66SKatsushi Kobayashi unsigned char sped; 2603c60ba66SKatsushi Kobayashi unsigned int type; 2613c60ba66SKatsushi Kobayashi #define FWASREQNODE 0 2623c60ba66SKatsushi Kobayashi #define FWASREQEUI 1 2633c60ba66SKatsushi Kobayashi #define FWASRESTL 2 2643c60ba66SKatsushi Kobayashi #define FWASREQSTREAM 3 2653c60ba66SKatsushi Kobayashi unsigned short len; 2663c60ba66SKatsushi Kobayashi union { 2673c60ba66SKatsushi Kobayashi struct fw_eui64 eui; 2683c60ba66SKatsushi Kobayashi } dst; 2693c60ba66SKatsushi Kobayashi } req; 2703c60ba66SKatsushi Kobayashi struct fw_pkt pkt; 27103161bbcSDoug Rabson uint32_t data[512]; 2723c60ba66SKatsushi Kobayashi }; 273e715bfaeSHidetoshi Shimokawa 274c547b896SHidetoshi Shimokawa struct fw_devinfo { 275c547b896SHidetoshi Shimokawa struct fw_eui64 eui; 27603161bbcSDoug Rabson uint16_t dst; 27703161bbcSDoug Rabson uint16_t status; 278c547b896SHidetoshi Shimokawa }; 279c547b896SHidetoshi Shimokawa 280c547b896SHidetoshi Shimokawa #define FW_MAX_DEVLST 70 2813c60ba66SKatsushi Kobayashi struct fw_devlstreq { 28203161bbcSDoug Rabson uint16_t n; 28303161bbcSDoug Rabson uint16_t info_len; 284c547b896SHidetoshi Shimokawa struct fw_devinfo dev[FW_MAX_DEVLST]; 2853c60ba66SKatsushi Kobayashi }; 286e715bfaeSHidetoshi Shimokawa 287f25a0888SSean Bruno /* 288f25a0888SSean Bruno * Defined in IEEE 1394a-2000 289f25a0888SSean Bruno * 4.3.4.1 290f25a0888SSean Bruno */ 2913c60ba66SKatsushi Kobayashi #define FW_SELF_ID_PORT_CONNECTED_TO_CHILD 3 2923c60ba66SKatsushi Kobayashi #define FW_SELF_ID_PORT_CONNECTED_TO_PARENT 2 2933c60ba66SKatsushi Kobayashi #define FW_SELF_ID_PORT_NOT_CONNECTED 1 2943c60ba66SKatsushi Kobayashi #define FW_SELF_ID_PORT_NOT_EXISTS 0 295a71c4d42SSean Bruno 296a71c4d42SSean Bruno #define FW_SELF_ID_PAGE0 0 297a71c4d42SSean Bruno #define FW_SELF_ID_PAGE1 1 298a71c4d42SSean Bruno 29977ee030bSHidetoshi Shimokawa #if BYTE_ORDER == BIG_ENDIAN 30077ee030bSHidetoshi Shimokawa union fw_self_id { 30177ee030bSHidetoshi Shimokawa struct { 30203161bbcSDoug Rabson uint32_t id:2, 30377ee030bSHidetoshi Shimokawa phy_id:6, 30477ee030bSHidetoshi Shimokawa sequel:1, 30577ee030bSHidetoshi Shimokawa link_active:1, 30677ee030bSHidetoshi Shimokawa gap_count:6, 30777ee030bSHidetoshi Shimokawa phy_speed:2, 308a71c4d42SSean Bruno reserved:2, 30977ee030bSHidetoshi Shimokawa contender:1, 31077ee030bSHidetoshi Shimokawa power_class:3, 31177ee030bSHidetoshi Shimokawa port0:2, 31277ee030bSHidetoshi Shimokawa port1:2, 31377ee030bSHidetoshi Shimokawa port2:2, 31477ee030bSHidetoshi Shimokawa initiated_reset:1, 31577ee030bSHidetoshi Shimokawa more_packets:1; 31677ee030bSHidetoshi Shimokawa } p0; 31777ee030bSHidetoshi Shimokawa struct { 31803161bbcSDoug Rabson uint32_t 31977ee030bSHidetoshi Shimokawa id:2, 32077ee030bSHidetoshi Shimokawa phy_id:6, 32177ee030bSHidetoshi Shimokawa sequel:1, 32277ee030bSHidetoshi Shimokawa sequence_num:3, 323f25a0888SSean Bruno reserved2:2, 324f25a0888SSean Bruno port3:2, 325f25a0888SSean Bruno port4:2, 326f25a0888SSean Bruno port5:2, 327f25a0888SSean Bruno port6:2, 328f25a0888SSean Bruno port7:2, 329f25a0888SSean Bruno port8:2, 330f25a0888SSean Bruno port9:2, 331f25a0888SSean Bruno port10:2, 332f25a0888SSean Bruno reserved1:1, 33377ee030bSHidetoshi Shimokawa more_packets:1; 33477ee030bSHidetoshi Shimokawa } p1; 335f25a0888SSean Bruno struct { 336f25a0888SSean Bruno uint32_t 337f25a0888SSean Bruno id:2, 338f25a0888SSean Bruno phy_id:6, 339f25a0888SSean Bruno sequel:1, 340f25a0888SSean Bruno sequence_num:3, 341f25a0888SSean Bruno :2, 342f25a0888SSean Bruno port11:2, 343f25a0888SSean Bruno port12:2, 344f25a0888SSean Bruno port13:2, 345f25a0888SSean Bruno port14:2, 346f25a0888SSean Bruno port15:2, 347f25a0888SSean Bruno :8; 348f25a0888SSean Bruno } p2; 34977ee030bSHidetoshi Shimokawa }; 35077ee030bSHidetoshi Shimokawa #else 3513c60ba66SKatsushi Kobayashi union fw_self_id { 3523c60ba66SKatsushi Kobayashi struct { 35303161bbcSDoug Rabson uint32_t more_packets:1, 3543c60ba66SKatsushi Kobayashi initiated_reset:1, 3553c60ba66SKatsushi Kobayashi port2:2, 3563c60ba66SKatsushi Kobayashi port1:2, 3573c60ba66SKatsushi Kobayashi port0:2, 3583c60ba66SKatsushi Kobayashi power_class:3, 3593c60ba66SKatsushi Kobayashi contender:1, 360a71c4d42SSean Bruno reserved:2, 3613c60ba66SKatsushi Kobayashi phy_speed:2, 3623c60ba66SKatsushi Kobayashi gap_count:6, 3633c60ba66SKatsushi Kobayashi link_active:1, 3643c60ba66SKatsushi Kobayashi sequel:1, 3653c60ba66SKatsushi Kobayashi phy_id:6, 3663c60ba66SKatsushi Kobayashi id:2; 3673c60ba66SKatsushi Kobayashi } p0; 3683c60ba66SKatsushi Kobayashi struct { 36903161bbcSDoug Rabson uint32_t more_packets:1, 3703c60ba66SKatsushi Kobayashi reserved1:1, 371f25a0888SSean Bruno port10:2, 372f25a0888SSean Bruno port9:2, 373f25a0888SSean Bruno port8:2, 374f25a0888SSean Bruno port7:2, 375f25a0888SSean Bruno port6:2, 376f25a0888SSean Bruno port5:2, 377f25a0888SSean Bruno port4:2, 378f25a0888SSean Bruno port3:2, 3793c60ba66SKatsushi Kobayashi reserved2:2, 3803c60ba66SKatsushi Kobayashi sequence_num:3, 3813c60ba66SKatsushi Kobayashi sequel:1, 3823c60ba66SKatsushi Kobayashi phy_id:6, 3833c60ba66SKatsushi Kobayashi id:2; 3843c60ba66SKatsushi Kobayashi } p1; 385f25a0888SSean Bruno struct { 386f25a0888SSean Bruno uint32_t 387f25a0888SSean Bruno reserved3:8, 388f25a0888SSean Bruno port15:2, 389f25a0888SSean Bruno port14:2, 390f25a0888SSean Bruno port13:2, 391f25a0888SSean Bruno port12:2, 392f25a0888SSean Bruno port11:2, 393f25a0888SSean Bruno reserved4:2, 394f25a0888SSean Bruno sequence_num:3, 395f25a0888SSean Bruno sequel:1, 396f25a0888SSean Bruno phy_id:6, 397f25a0888SSean Bruno id:2; 398f25a0888SSean Bruno } p2; 3993c60ba66SKatsushi Kobayashi }; 400e715bfaeSHidetoshi Shimokawa #endif 401e715bfaeSHidetoshi Shimokawa 402e715bfaeSHidetoshi Shimokawa 4033c60ba66SKatsushi Kobayashi struct fw_topology_map { 40403161bbcSDoug Rabson uint32_t crc:16, 4053c60ba66SKatsushi Kobayashi crc_len:16; 40603161bbcSDoug Rabson uint32_t generation; 40703161bbcSDoug Rabson uint32_t self_id_count:16, 4083c60ba66SKatsushi Kobayashi node_count:16; 4093c60ba66SKatsushi Kobayashi union fw_self_id self_id[4 * 64]; 4103c60ba66SKatsushi Kobayashi }; 411e715bfaeSHidetoshi Shimokawa 4123c60ba66SKatsushi Kobayashi struct fw_speed_map { 41303161bbcSDoug Rabson uint32_t crc:16, 4143c60ba66SKatsushi Kobayashi crc_len:16; 41503161bbcSDoug Rabson uint32_t generation; 41603161bbcSDoug Rabson uint8_t speed[64][64]; 4173c60ba66SKatsushi Kobayashi }; 418e715bfaeSHidetoshi Shimokawa 4193c60ba66SKatsushi Kobayashi struct fw_crom_buf { 4203c60ba66SKatsushi Kobayashi struct fw_eui64 eui; 421e340a7acSHidetoshi Shimokawa uint32_t len; 4223c60ba66SKatsushi Kobayashi void *ptr; 4233c60ba66SKatsushi Kobayashi }; 424e715bfaeSHidetoshi Shimokawa 4253c60ba66SKatsushi Kobayashi /* 426ee126d67SHidetoshi Shimokawa * FireWire specific system requests. 4273c60ba66SKatsushi Kobayashi */ 4283c60ba66SKatsushi Kobayashi #define FW_SSTBUF _IOWR('S', 86, struct fw_isobufreq) 4293c60ba66SKatsushi Kobayashi #define FW_GSTBUF _IOWR('S', 87, struct fw_isobufreq) 4303c60ba66SKatsushi Kobayashi #define FW_SRSTREAM _IOWR('S', 88, struct fw_isochreq) 4313c60ba66SKatsushi Kobayashi #define FW_GRSTREAM _IOWR('S', 89, struct fw_isochreq) 4323c60ba66SKatsushi Kobayashi #define FW_STSTREAM _IOWR('S', 90, struct fw_isochreq) 4333c60ba66SKatsushi Kobayashi #define FW_GTSTREAM _IOWR('S', 91, struct fw_isochreq) 4343c60ba66SKatsushi Kobayashi 4353c60ba66SKatsushi Kobayashi #define FW_ASYREQ _IOWR('S', 92, struct fw_asyreq) 4363c60ba66SKatsushi Kobayashi #define FW_IBUSRST _IOR('S', 1, unsigned int) 4373c60ba66SKatsushi Kobayashi #define FW_GDEVLST _IOWR('S', 2, struct fw_devlstreq) 4383c60ba66SKatsushi Kobayashi #define FW_SBINDADDR _IOWR('S', 3, struct fw_asybindreq) 4393c60ba66SKatsushi Kobayashi #define FW_CBINDADDR _IOWR('S', 4, struct fw_asybindreq) 4403c60ba66SKatsushi Kobayashi #define FW_GTPMAP _IOR('S', 5, struct fw_topology_map) 4413c60ba66SKatsushi Kobayashi #define FW_GCROM _IOWR('S', 7, struct fw_crom_buf) 4423c60ba66SKatsushi Kobayashi 443233b1b97SHidetoshi Shimokawa #define FW_SDEUI64 _IOW('S', 20, struct fw_eui64) 444233b1b97SHidetoshi Shimokawa #define FW_GDEUI64 _IOR('S', 21, struct fw_eui64) 445233b1b97SHidetoshi Shimokawa 4463c60ba66SKatsushi Kobayashi #define FWOHCI_RDREG _IOWR('S', 80, struct fw_reg_req_t) 4473c60ba66SKatsushi Kobayashi #define FWOHCI_WRREG _IOWR('S', 81, struct fw_reg_req_t) 448f9c8c31dSHidetoshi Shimokawa #define FWOHCI_RDPHYREG _IOWR('S', 82, struct fw_reg_req_t) 449f9c8c31dSHidetoshi Shimokawa #define FWOHCI_WRPHYREG _IOWR('S', 83, struct fw_reg_req_t) 4503c60ba66SKatsushi Kobayashi 45103161bbcSDoug Rabson #define DUMPDMA _IOWR('S', 82, uint32_t) 4523c60ba66SKatsushi Kobayashi 4533c60ba66SKatsushi Kobayashi #ifdef _KERNEL 4543c60ba66SKatsushi Kobayashi 4553c60ba66SKatsushi Kobayashi #define FWMAXNDMA 0x100 /* 8 bits DMA channel id. in device No. */ 4563c60ba66SKatsushi Kobayashi 457a160e00eSHidetoshi Shimokawa #define MAKEMINOR(f, u, s) \ 4586bfa9a2dSEd Schouten ((f) | (((u) & 0xff) << 8) | (s & 0xff)) 4593c60ba66SKatsushi Kobayashi #define DEV2UNIT(x) ((dev2unit(x) & 0xff00) >> 8) 4606cada79aSHidetoshi Shimokawa #define DEV2SUB(x) (dev2unit(x) & 0xff) 4613c60ba66SKatsushi Kobayashi 4623c60ba66SKatsushi Kobayashi #define FWMEM_FLAG 0x10000 4633c60ba66SKatsushi Kobayashi #define DEV_FWMEM(x) (dev2unit(x) & FWMEM_FLAG) 4643c60ba66SKatsushi Kobayashi #endif 4653c60ba66SKatsushi Kobayashi #endif 466