linux/include/scsi/scsi_bsg_iscsi.h
<<
>>
Prefs
   1/*
   2 *  iSCSI Transport BSG Interface
   3 *
   4 *  Copyright (C) 2009   James Smart, Emulex Corporation
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2 of the License, or
   9 *  (at your option) any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to the Free Software
  18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 *
  20 */
  21
  22#ifndef SCSI_BSG_ISCSI_H
  23#define SCSI_BSG_ISCSI_H
  24
  25/*
  26 * This file intended to be included by both kernel and user space
  27 */
  28
  29#include <scsi/scsi.h>
  30
  31/*
  32 * iSCSI Transport SGIO v4 BSG Message Support
  33 */
  34
  35/* Default BSG request timeout (in seconds) */
  36#define ISCSI_DEFAULT_BSG_TIMEOUT      (10 * HZ)
  37
  38
  39/*
  40 * Request Message Codes supported by the iSCSI Transport
  41 */
  42
  43/* define the class masks for the message codes */
  44#define ISCSI_BSG_CLS_MASK     0xF0000000      /* find object class */
  45#define ISCSI_BSG_HST_MASK     0x80000000      /* iscsi host class */
  46
  47/* iscsi host Message Codes */
  48#define ISCSI_BSG_HST_VENDOR           (ISCSI_BSG_HST_MASK | 0x000000FF)
  49
  50
  51/*
  52 * iSCSI Host Messages
  53 */
  54
  55/* ISCSI_BSG_HST_VENDOR : */
  56
  57/* Request:
  58 * Note: When specifying vendor_id, be sure to read the Vendor Type and ID
  59 *   formatting requirements specified in scsi_netlink.h
  60 */
  61struct iscsi_bsg_host_vendor {
  62        /*
  63         * Identifies the vendor that the message is formatted for. This
  64         * should be the recipient of the message.
  65         */
  66        uint64_t vendor_id;
  67
  68        /* start of vendor command area */
  69        uint32_t vendor_cmd[0];
  70};
  71
  72/* Response:
  73 */
  74struct iscsi_bsg_host_vendor_reply {
  75        /* start of vendor response area */
  76        uint32_t vendor_rsp[0];
  77};
  78
  79
  80/* request (CDB) structure of the sg_io_v4 */
  81struct iscsi_bsg_request {
  82        uint32_t msgcode;
  83        union {
  84                struct iscsi_bsg_host_vendor    h_vendor;
  85        } rqst_data;
  86} __attribute__((packed));
  87
  88
  89/* response (request sense data) structure of the sg_io_v4 */
  90struct iscsi_bsg_reply {
  91        /*
  92         * The completion result. Result exists in two forms:
  93         * if negative, it is an -Exxx system errno value. There will
  94         * be no further reply information supplied.
  95         * else, it's the 4-byte scsi error result, with driver, host,
  96         * msg and status fields. The per-msgcode reply structure
  97         * will contain valid data.
  98         */
  99        uint32_t result;
 100
 101        /* If there was reply_payload, how much was recevied ? */
 102        uint32_t reply_payload_rcv_len;
 103
 104        union {
 105                struct iscsi_bsg_host_vendor_reply      vendor_reply;
 106        } reply_data;
 107};
 108
 109
 110#endif /* SCSI_BSG_ISCSI_H */
 111