1*95e1ffb1Schristos /* $NetBSD: linux_sg.h,v 1.3 2005/12/11 12:20:19 christos Exp $ */ 2d3b9209dSchristos 3d3b9209dSchristos /* 4d3b9209dSchristos * Copyright (c) 2004 Soren S. Jorvang. All rights reserved. 5d3b9209dSchristos * 6d3b9209dSchristos * Redistribution and use in source and binary forms, with or without 7d3b9209dSchristos * modification, are permitted provided that the following conditions 8d3b9209dSchristos * are met: 9d3b9209dSchristos * 1. Redistributions of source code must retain the above copyright 10d3b9209dSchristos * notice, this list of conditions, and the following disclaimer. 11d3b9209dSchristos * 2. Redistributions in binary form must reproduce the above copyright 12d3b9209dSchristos * notice, this list of conditions and the following disclaimer in the 13d3b9209dSchristos * documentation and/or other materials provided with the distribution. 14d3b9209dSchristos * 15d3b9209dSchristos * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16d3b9209dSchristos * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17d3b9209dSchristos * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18d3b9209dSchristos * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19d3b9209dSchristos * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20d3b9209dSchristos * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21d3b9209dSchristos * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22d3b9209dSchristos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23d3b9209dSchristos * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24d3b9209dSchristos * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25d3b9209dSchristos * SUCH DAMAGE. 26d3b9209dSchristos */ 27d3b9209dSchristos 28d3b9209dSchristos #ifndef _LINUX_SG_H 29d3b9209dSchristos #define _LINUX_SG_H 30d3b9209dSchristos 31d3b9209dSchristos /* sg driver version 3 */ 32d3b9209dSchristos #define LINUX_SG_EMULATED_HOST _LINUX_IO('"', 0x03) 33d3b9209dSchristos #define LINUX_SG_SET_TRANSFORM _LINUX_IO('"', 0x04) 34d3b9209dSchristos #define LINUX_SG_GET_TRANSFORM _LINUX_IO('"', 0x05) 35d3b9209dSchristos #define LINUX_SG_SET_RESERVED_SIZE _LINUX_IO('"', 0x75) 36d3b9209dSchristos #define LINUX_SG_GET_RESERVED_SIZE _LINUX_IO('"', 0x72) 37d3b9209dSchristos #define LINUX_SG_GET_SCSI_ID _LINUX_IO('"', 0x76) 38d3b9209dSchristos #define LINUX_SG_SET_FORCE_LOW_DMA _LINUX_IO('"', 0x79) 39d3b9209dSchristos #define LINUX_SG_GET_LOW_DMA _LINUX_IO('"', 0x7a) 40d3b9209dSchristos #define LINUX_SG_SET_FORCE_PACK_ID _LINUX_IO('"', 0x7b) 41d3b9209dSchristos #define LINUX_SG_GET_PACK_ID _LINUX_IO('"', 0x7c) 42d3b9209dSchristos #define LINUX_SG_GET_NUM_WAITING _LINUX_IO('"', 0x7d) 43d3b9209dSchristos #define LINUX_SG_GET_SG_TABLESIZE _LINUX_IO('"', 0x7f) 44d3b9209dSchristos #define LINUX_SG_GET_VERSION_NUM _LINUX_IO('"', 0x82) 45d3b9209dSchristos #define LINUX_SG_SCSI_RESET _LINUX_IO('"', 0x84) 46d3b9209dSchristos #define LINUX_SG_IO _LINUX_IO('"', 0x85) 47d3b9209dSchristos #define LINUX_SG_GET_REQUEST_TABLE _LINUX_IO('"', 0x86) 48d3b9209dSchristos #define LINUX_SG_SET_KEEP_ORPHAN _LINUX_IO('"', 0x87) 49d3b9209dSchristos #define LINUX_SG_GET_KEEP_ORPHAN _LINUX_IO('"', 0x88) 50d3b9209dSchristos #define LINUX_SG_GET_ACCESS_COUNT _LINUX_IO('"', 0x89) 51d3b9209dSchristos /* sg driver version 2 */ 52d3b9209dSchristos #define LINUX_SG_SET_TIMEOUT _LINUX_IO('"', 0x01) 53d3b9209dSchristos #define LINUX_SG_GET_TIMEOUT _LINUX_IO('"', 0x02) 54d3b9209dSchristos #define LINUX_SG_GET_COMMAND_Q _LINUX_IO('"', 0x70) 55d3b9209dSchristos #define LINUX_SG_SET_COMMAND_Q _LINUX_IO('"', 0x71) 56d3b9209dSchristos #define LINUX_SG_SET_DEBUG _LINUX_IO('"', 0x7e) 57d3b9209dSchristos #define LINUX_SG_NEXT_CMD_LEN _LINUX_IO('"', 0x83) 58d3b9209dSchristos 59d3b9209dSchristos 60d3b9209dSchristos struct linux_sg_io_hdr { 61d3b9209dSchristos int interface_id; 62d3b9209dSchristos #define SG_DXFER_NONE -1 63d3b9209dSchristos #define SG_DXFER_TO_DEV -2 64d3b9209dSchristos #define SG_DXFER_FROM_DEV -3 65d3b9209dSchristos #define SG_DXFER_TO_FROM_DEV -4 66d3b9209dSchristos #define SG_DXFER_UNKNOWN -5 67d3b9209dSchristos int dxfer_direction; 68d3b9209dSchristos unsigned char cmd_len; 69d3b9209dSchristos unsigned char mx_sb_len; 70d3b9209dSchristos unsigned short iovec_count; 71d3b9209dSchristos unsigned int dxfer_len; 72d3b9209dSchristos void *dxferp; 73d3b9209dSchristos unsigned char *cmdp; 74d3b9209dSchristos unsigned char *sbp; 75d3b9209dSchristos unsigned int timeout; 76d3b9209dSchristos unsigned int flags; 77d3b9209dSchristos int pack_id; 78d3b9209dSchristos void *usr_ptr; 79d3b9209dSchristos unsigned char status; 80d3b9209dSchristos unsigned char masked_status; 81d3b9209dSchristos unsigned char msg_status; 82d3b9209dSchristos unsigned char sb_len_wr; 83d3b9209dSchristos unsigned short host_status; 84d3b9209dSchristos unsigned short driver_status; 85d3b9209dSchristos int resid; 86d3b9209dSchristos unsigned int duration; 87d3b9209dSchristos unsigned int info; 88d3b9209dSchristos }; 89d3b9209dSchristos 90d3b9209dSchristos #define SG_MAX_SENSE 16 91d3b9209dSchristos 92d3b9209dSchristos /* 93d3b9209dSchristos * Host codes 94d3b9209dSchristos */ 95d3b9209dSchristos #define LINUX_DID_OK 0x00 /* OK */ 96d3b9209dSchristos #define LINUX_DID_NO_CONNECT 0x01 /* timeout during connect */ 97d3b9209dSchristos #define LINUX_DID_BUS_BUSY 0x02 /* timeout during command */ 98d3b9209dSchristos #define LINUX_DID_TIME_OUT 0x03 /* other timeout */ 99d3b9209dSchristos #define LINUX_DID_BAD_TARGET 0x04 /* bad target */ 100d3b9209dSchristos #define LINUX_DID_ABORT 0x05 /* abort */ 101d3b9209dSchristos #define LINUX_DID_PARITY 0x06 /* parity error */ 102d3b9209dSchristos #define LINUX_DID_ERROR 0x07 /* internal error */ 103d3b9209dSchristos #define LINUX_DID_RESET 0x08 /* reset by somebody */ 104d3b9209dSchristos #define LINUX_DID_BAD_INTR 0x09 /* unexpected interrupt */ 105d3b9209dSchristos #define LINUX_DID_PASSTHROUGH 0x0a /* passthrough */ 106d3b9209dSchristos #define LINUX_DID_SOFT_ERROR 0x0b /* low driver wants retry */ 107d3b9209dSchristos #define LINUX_DID_IMM_RETRY 0x0c /* retry without decreasing retrycnt */ 108d3b9209dSchristos 109d3b9209dSchristos /* 110d3b9209dSchristos * Driver codes 111d3b9209dSchristos */ 112d3b9209dSchristos #define LINUX_DRIVER_BUSY 0x01 113d3b9209dSchristos #define LINUX_DRIVER_SOFT 0x02 114d3b9209dSchristos #define LINUX_DRIVER_MEDIA 0x03 115d3b9209dSchristos #define LINUX_DRIVER_ERROR 0x04 116d3b9209dSchristos 117d3b9209dSchristos #define LINUX_DRIVER_INVALID 0x05 118d3b9209dSchristos #define LINUX_DRIVER_TIMEOUT 0x06 119d3b9209dSchristos #define LINUX_DRIVER_HARD 0x07 120d3b9209dSchristos #define LINUX_DRIVER_SENSE 0x08 121d3b9209dSchristos 122d3b9209dSchristos #define LINUX_SUGGEST_RETRY 0x10 123d3b9209dSchristos #define LINUX_SUGGEST_ABORT 0x20 124d3b9209dSchristos #define LINUX_SUGGEST_REMAP 0x30 125d3b9209dSchristos #define LINUX_SUGGEST_DIE 0x40 126d3b9209dSchristos #define LINUX_SUGGEST_SENSE 0x80 127d3b9209dSchristos #define LINUX_SUGGEST_IS_OK 0xff 128d3b9209dSchristos 129d3b9209dSchristos #define LINUX_DRIVER_MASK 0x0f 130d3b9209dSchristos #define LINUX_SUGGEST_MASK 0xf0 131d3b9209dSchristos 132d3b9209dSchristos #endif /* !_LINUX_SG_H */ 133