141ff9bdbSJoerg Sonnenberger /* 241ff9bdbSJoerg Sonnenberger * Copyright (c) 2003 Hidetoshi Shimokawa 341ff9bdbSJoerg Sonnenberger * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 441ff9bdbSJoerg Sonnenberger * All rights reserved. 541ff9bdbSJoerg Sonnenberger * 641ff9bdbSJoerg Sonnenberger * Redistribution and use in source and binary forms, with or without 741ff9bdbSJoerg Sonnenberger * modification, are permitted provided that the following conditions 841ff9bdbSJoerg Sonnenberger * are met: 941ff9bdbSJoerg Sonnenberger * 1. Redistributions of source code must retain the above copyright 1041ff9bdbSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer. 1141ff9bdbSJoerg Sonnenberger * 2. Redistributions in binary form must reproduce the above copyright 1241ff9bdbSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer in the 1341ff9bdbSJoerg Sonnenberger * documentation and/or other materials provided with the distribution. 1441ff9bdbSJoerg Sonnenberger * 3. All advertising materials mentioning features or use of this software 1541ff9bdbSJoerg Sonnenberger * must display the acknowledgement as bellow: 1641ff9bdbSJoerg Sonnenberger * 1741ff9bdbSJoerg Sonnenberger * This product includes software developed by K. Kobayashi and H. Shimokawa 1841ff9bdbSJoerg Sonnenberger * 1941ff9bdbSJoerg Sonnenberger * 4. The name of the author may not be used to endorse or promote products 2041ff9bdbSJoerg Sonnenberger * derived from this software without specific prior written permission. 2141ff9bdbSJoerg Sonnenberger * 2241ff9bdbSJoerg Sonnenberger * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2341ff9bdbSJoerg Sonnenberger * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 2441ff9bdbSJoerg Sonnenberger * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 2541ff9bdbSJoerg Sonnenberger * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 2641ff9bdbSJoerg Sonnenberger * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2741ff9bdbSJoerg Sonnenberger * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2841ff9bdbSJoerg Sonnenberger * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2941ff9bdbSJoerg Sonnenberger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3041ff9bdbSJoerg Sonnenberger * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 3141ff9bdbSJoerg Sonnenberger * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3241ff9bdbSJoerg Sonnenberger * POSSIBILITY OF SUCH DAMAGE. 3341ff9bdbSJoerg Sonnenberger * 34*f6b96077SFrançois Tigeot * $FreeBSD: head/sys/dev/firewire/sbp.h 190792 2009-04-07 02:33:46Z sbruno $ 35*f6b96077SFrançois Tigeot * 3641ff9bdbSJoerg Sonnenberger */ 3741ff9bdbSJoerg Sonnenberger 3841ff9bdbSJoerg Sonnenberger #define ORB_NOTIFY (1 << 31) 3941ff9bdbSJoerg Sonnenberger #define ORB_FMT_STD (0 << 29) 4041ff9bdbSJoerg Sonnenberger #define ORB_FMT_VED (2 << 29) 4141ff9bdbSJoerg Sonnenberger #define ORB_FMT_NOP (3 << 29) 4241ff9bdbSJoerg Sonnenberger #define ORB_FMT_MSK (3 << 29) 4341ff9bdbSJoerg Sonnenberger #define ORB_EXV (1 << 28) 4441ff9bdbSJoerg Sonnenberger /* */ 4541ff9bdbSJoerg Sonnenberger #define ORB_CMD_IN (1 << 27) 4641ff9bdbSJoerg Sonnenberger /* */ 4741ff9bdbSJoerg Sonnenberger #define ORB_CMD_SPD(x) ((x) << 24) 4841ff9bdbSJoerg Sonnenberger #define ORB_CMD_MAXP(x) ((x) << 20) 4941ff9bdbSJoerg Sonnenberger #define ORB_RCN_TMO(x) ((x) << 20) 5041ff9bdbSJoerg Sonnenberger #define ORB_CMD_PTBL (1 << 19) 5141ff9bdbSJoerg Sonnenberger #define ORB_CMD_PSZ(x) ((x) << 16) 5241ff9bdbSJoerg Sonnenberger 5341ff9bdbSJoerg Sonnenberger #define ORB_FUN_LGI (0 << 16) 5441ff9bdbSJoerg Sonnenberger #define ORB_FUN_QLG (1 << 16) 5541ff9bdbSJoerg Sonnenberger #define ORB_FUN_RCN (3 << 16) 5641ff9bdbSJoerg Sonnenberger #define ORB_FUN_LGO (7 << 16) 5741ff9bdbSJoerg Sonnenberger #define ORB_FUN_ATA (0xb << 16) 5841ff9bdbSJoerg Sonnenberger #define ORB_FUN_ATS (0xc << 16) 5941ff9bdbSJoerg Sonnenberger #define ORB_FUN_LUR (0xe << 16) 6041ff9bdbSJoerg Sonnenberger #define ORB_FUN_RST (0xf << 16) 6141ff9bdbSJoerg Sonnenberger #define ORB_FUN_MSK (0xf << 16) 6241ff9bdbSJoerg Sonnenberger #define ORB_FUN_RUNQUEUE 0xffff 6341ff9bdbSJoerg Sonnenberger 6441ff9bdbSJoerg Sonnenberger #define ORB_RES_CMPL 0 6541ff9bdbSJoerg Sonnenberger #define ORB_RES_FAIL 1 6641ff9bdbSJoerg Sonnenberger #define ORB_RES_ILLE 2 6741ff9bdbSJoerg Sonnenberger #define ORB_RES_VEND 3 6841ff9bdbSJoerg Sonnenberger 6941ff9bdbSJoerg Sonnenberger #define SBP_DEBUG(x) if (debug > x) { 7041ff9bdbSJoerg Sonnenberger #define END_DEBUG } 7141ff9bdbSJoerg Sonnenberger 7241ff9bdbSJoerg Sonnenberger struct ind_ptr { 73*f6b96077SFrançois Tigeot uint32_t hi,lo; 7441ff9bdbSJoerg Sonnenberger }; 7541ff9bdbSJoerg Sonnenberger 7641ff9bdbSJoerg Sonnenberger 7741ff9bdbSJoerg Sonnenberger #define SBP_RECV_LEN 32 7841ff9bdbSJoerg Sonnenberger 7941ff9bdbSJoerg Sonnenberger struct sbp_login_res{ 80*f6b96077SFrançois Tigeot uint16_t len; 81*f6b96077SFrançois Tigeot uint16_t id; 82*f6b96077SFrançois Tigeot uint16_t res0; 83*f6b96077SFrançois Tigeot uint16_t cmd_hi; 84*f6b96077SFrançois Tigeot uint32_t cmd_lo; 85*f6b96077SFrançois Tigeot uint16_t res1; 86*f6b96077SFrançois Tigeot uint16_t recon_hold; 8741ff9bdbSJoerg Sonnenberger }; 8841ff9bdbSJoerg Sonnenberger 8941ff9bdbSJoerg Sonnenberger struct sbp_status{ 9041ff9bdbSJoerg Sonnenberger #if BYTE_ORDER == BIG_ENDIAN 91*f6b96077SFrançois Tigeot uint8_t src:2, 9241ff9bdbSJoerg Sonnenberger resp:2, 9341ff9bdbSJoerg Sonnenberger dead:1, 9441ff9bdbSJoerg Sonnenberger len:3; 9541ff9bdbSJoerg Sonnenberger #else 96*f6b96077SFrançois Tigeot uint8_t len:3, 9741ff9bdbSJoerg Sonnenberger dead:1, 9841ff9bdbSJoerg Sonnenberger resp:2, 9941ff9bdbSJoerg Sonnenberger src:2; 10041ff9bdbSJoerg Sonnenberger #endif 101*f6b96077SFrançois Tigeot uint8_t status; 102*f6b96077SFrançois Tigeot uint16_t orb_hi; 103*f6b96077SFrançois Tigeot uint32_t orb_lo; 104*f6b96077SFrançois Tigeot uint32_t data[6]; 10541ff9bdbSJoerg Sonnenberger }; 10641ff9bdbSJoerg Sonnenberger /* src */ 10741ff9bdbSJoerg Sonnenberger #define SRC_NEXT_EXISTS 0 10841ff9bdbSJoerg Sonnenberger #define SRC_NO_NEXT 1 10941ff9bdbSJoerg Sonnenberger #define SRC_UNSOL 2 11041ff9bdbSJoerg Sonnenberger 11141ff9bdbSJoerg Sonnenberger /* resp */ 11241ff9bdbSJoerg Sonnenberger #define SBP_REQ_CMP 0 /* request complete */ 11341ff9bdbSJoerg Sonnenberger #define SBP_TRANS_FAIL 1 /* transport failure */ 11441ff9bdbSJoerg Sonnenberger #define SBP_ILLE_REQ 2 /* illegal request */ 11541ff9bdbSJoerg Sonnenberger #define SBP_VEND_DEP 3 /* vendor dependent */ 11641ff9bdbSJoerg Sonnenberger 11741ff9bdbSJoerg Sonnenberger /* status (resp == 0) */ 11841ff9bdbSJoerg Sonnenberger /* 0: No additional Information to report */ 11941ff9bdbSJoerg Sonnenberger /* 1: Request Type not supported */ 12041ff9bdbSJoerg Sonnenberger /* 2: Speed not supported */ 12141ff9bdbSJoerg Sonnenberger /* 3: Page size not supported */ 12241ff9bdbSJoerg Sonnenberger /* 4: Access denied */ 12341ff9bdbSJoerg Sonnenberger #define STATUS_ACCESS_DENY 4 124*f6b96077SFrançois Tigeot #define STATUS_LUR 5 12541ff9bdbSJoerg Sonnenberger /* 6: Maximum payload too small */ 12641ff9bdbSJoerg Sonnenberger /* 7: Reserved for future standardization */ 12741ff9bdbSJoerg Sonnenberger /* 8: Resource unavailabe */ 12841ff9bdbSJoerg Sonnenberger #define STATUS_RES_UNAVAIL 8 12941ff9bdbSJoerg Sonnenberger /* 9: Function Rejected */ 13041ff9bdbSJoerg Sonnenberger /* 10: Login ID not recognized */ 13141ff9bdbSJoerg Sonnenberger /* 11: Dummy ORB completed */ 13241ff9bdbSJoerg Sonnenberger /* 12: Request aborted */ 13341ff9bdbSJoerg Sonnenberger /* 255: Unspecified error */ 13441ff9bdbSJoerg Sonnenberger 13541ff9bdbSJoerg Sonnenberger /* status (resp == 1) */ 13641ff9bdbSJoerg Sonnenberger /* Referenced object */ 13741ff9bdbSJoerg Sonnenberger #define OBJ_ORB (0 << 6) /* 0: ORB */ 13841ff9bdbSJoerg Sonnenberger #define OBJ_DATA (1 << 6) /* 1: Data buffer */ 13941ff9bdbSJoerg Sonnenberger #define OBJ_PT (2 << 6) /* 2: Page table */ 14041ff9bdbSJoerg Sonnenberger #define OBJ_UNSPEC (3 << 6) /* 3: Unable to specify */ 14141ff9bdbSJoerg Sonnenberger /* Serial bus error */ 14241ff9bdbSJoerg Sonnenberger /* 0: Missing acknowledge */ 14341ff9bdbSJoerg Sonnenberger /* 1: Reserved; not to be used */ 14441ff9bdbSJoerg Sonnenberger /* 2: Time-out error */ 14541ff9bdbSJoerg Sonnenberger #define SBE_TIMEOUT 2 14641ff9bdbSJoerg Sonnenberger /* 3: Reserved; not to be used */ 14741ff9bdbSJoerg Sonnenberger /* 4: Busy retry limit exceeded: ack_busy_X */ 14841ff9bdbSJoerg Sonnenberger /* 5: Busy retry limit exceeded: ack_busy_A */ 14941ff9bdbSJoerg Sonnenberger /* 6: Busy retry limit exceeded: ack_busy_B */ 15041ff9bdbSJoerg Sonnenberger /* 7-A: Reserved for future standardization */ 15141ff9bdbSJoerg Sonnenberger /* B: Tardy retry limit exceeded */ 15241ff9bdbSJoerg Sonnenberger /* C: Confilict error */ 15341ff9bdbSJoerg Sonnenberger /* D: Data error */ 15441ff9bdbSJoerg Sonnenberger /* E: Type error */ 15541ff9bdbSJoerg Sonnenberger /* F: Address error */ 15641ff9bdbSJoerg Sonnenberger 15741ff9bdbSJoerg Sonnenberger 15841ff9bdbSJoerg Sonnenberger struct sbp_cmd_status{ 15941ff9bdbSJoerg Sonnenberger #define SBP_SFMT_CURR 0 16041ff9bdbSJoerg Sonnenberger #define SBP_SFMT_DEFER 1 16141ff9bdbSJoerg Sonnenberger #if BYTE_ORDER == BIG_ENDIAN 162*f6b96077SFrançois Tigeot uint8_t sfmt:2, 16341ff9bdbSJoerg Sonnenberger status:6; 164*f6b96077SFrançois Tigeot uint8_t valid:1, 16541ff9bdbSJoerg Sonnenberger mark:1, 16641ff9bdbSJoerg Sonnenberger eom:1, 16741ff9bdbSJoerg Sonnenberger ill_len:1, 16841ff9bdbSJoerg Sonnenberger s_key:4; 16941ff9bdbSJoerg Sonnenberger #else 170*f6b96077SFrançois Tigeot uint8_t status:6, 17141ff9bdbSJoerg Sonnenberger sfmt:2; 172*f6b96077SFrançois Tigeot uint8_t s_key:4, 17341ff9bdbSJoerg Sonnenberger ill_len:1, 17441ff9bdbSJoerg Sonnenberger eom:1, 17541ff9bdbSJoerg Sonnenberger mark:1, 17641ff9bdbSJoerg Sonnenberger valid:1; 17741ff9bdbSJoerg Sonnenberger #endif 178*f6b96077SFrançois Tigeot uint8_t s_code; 179*f6b96077SFrançois Tigeot uint8_t s_qlfr; 180*f6b96077SFrançois Tigeot uint32_t info; 181*f6b96077SFrançois Tigeot uint32_t cdb; 182*f6b96077SFrançois Tigeot uint8_t fru; 183*f6b96077SFrançois Tigeot uint8_t s_keydep[3]; 184*f6b96077SFrançois Tigeot uint32_t vend[2]; 18541ff9bdbSJoerg Sonnenberger }; 18641ff9bdbSJoerg Sonnenberger 18741ff9bdbSJoerg Sonnenberger #define ORB_FUN_NAMES \ 18841ff9bdbSJoerg Sonnenberger /* 0 */ "LOGIN", \ 18941ff9bdbSJoerg Sonnenberger /* 1 */ "QUERY LOGINS", \ 19041ff9bdbSJoerg Sonnenberger /* 2 */ "Reserved", \ 19141ff9bdbSJoerg Sonnenberger /* 3 */ "RECONNECT", \ 19241ff9bdbSJoerg Sonnenberger /* 4 */ "SET PASSWORD", \ 19341ff9bdbSJoerg Sonnenberger /* 5 */ "Reserved", \ 19441ff9bdbSJoerg Sonnenberger /* 6 */ "Reserved", \ 19541ff9bdbSJoerg Sonnenberger /* 7 */ "LOGOUT", \ 19641ff9bdbSJoerg Sonnenberger /* 8 */ "Reserved", \ 19741ff9bdbSJoerg Sonnenberger /* 9 */ "Reserved", \ 19841ff9bdbSJoerg Sonnenberger /* A */ "Reserved", \ 19941ff9bdbSJoerg Sonnenberger /* B */ "ABORT TASK", \ 20041ff9bdbSJoerg Sonnenberger /* C */ "ABORT TASK SET", \ 20141ff9bdbSJoerg Sonnenberger /* D */ "Reserved", \ 20241ff9bdbSJoerg Sonnenberger /* E */ "LOGICAL UNIT RESET", \ 20341ff9bdbSJoerg Sonnenberger /* F */ "TARGET RESET" 204