jazz/08-12-16: scsi_cmnd.h.diff

File scsi_cmnd.h.diff, 6.9 KB (added by jazz, 16 years ago)
  • include/scsi/scsi_cmnd.h

    old new  
    22#define _SCSI_SCSI_CMND_H
    33
    44#include <linux/dma-mapping.h>
     5#include <linux/blkdev.h>
    56#include <linux/list.h>
    67#include <linux/types.h>
    78#include <linux/timer.h>
     9#include <linux/scatterlist.h>
     10#include <linux/blkdev.h>
    811
    9 struct request;
    10 struct scatterlist;
     12struct Scsi_Host;
    1113struct scsi_device;
    1214
     15/*
     16 * MAX_COMMAND_SIZE is:
     17 * The longest fixed-length SCSI CDB as per the SCSI standard.
     18 * fixed-length means: commands that their size can be determined
     19 * by their opcode and the CDB does not carry a length specifier, (unlike
     20 * the VARIABLE_LENGTH_CMD(0x7f) command). This is actually not exactly
     21 * true and the SCSI standard also defines extended commands and
     22 * vendor specific commands that can be bigger than 16 bytes. The kernel
     23 * will support these using the same infrastructure used for VARLEN CDB's.
     24 * So in effect MAX_COMMAND_SIZE means the maximum size command scsi-ml
     25 * supports without specifying a cmd_len by ULD's
     26 */
     27#define MAX_COMMAND_SIZE 16
     28#if (MAX_COMMAND_SIZE > BLK_MAX_CDB)
     29# error MAX_COMMAND_SIZE can not be bigger than BLK_MAX_CDB
     30#endif
     31
     32struct scsi_data_buffer {
     33  struct sg_table table;
     34  unsigned length;
     35  int resid;
     36};
    1337
    1438/* embedded in scsi_cmnd */
    1539struct scsi_pointer {
     
    3256  struct list_head list;  /* scsi_cmnd participates in queue lists */
    3357  struct list_head eh_entry; /* entry for the host eh_cmd_q */
    3458  int eh_eflags;    /* Used by error handlr */
    35   void (*done) (struct scsi_cmnd *);  /* Mid-level done function */
    3659
    3760  /*
    3861   * A SCSI Command is assigned a nonzero serial_number before passed
    3962   * to the driver's queue command function.  The serial_number is
    4063   * cleared when scsi_done is entered indicating that the command
    41    * has been completed.  It currently doesn't have much use other
    42    * than printk's.  Some lldd's use this number for other purposes.
    43    * It's almost certain that such usages are either incorrect or
    44    * meaningless.  Please kill all usages other than printk's.  Also,
    45    * as this number is always identical to ->pid, please convert
    46    * printk's to use ->pid, so that we can kill this field.
     64   * has been completed.  It is a bug for LLDDs to use this number
     65   * for purposes other than printk (and even that is only useful
     66   * for debugging).
    4767   */
    4868  unsigned long serial_number;
     69
    4970  /*
    5071   * This is set to jiffies as it was when the command was first
    5172   * allocated.  It is used to time how long the command has
     
    5778  int allowed;
    5879  int timeout_per_command;
    5980
    60   unsigned char cmd_len;
     81  unsigned short cmd_len;
    6182  enum dma_data_direction sc_data_direction;
    6283
    6384  /* These elements define the operation we are about to perform */
    64 #define MAX_COMMAND_SIZE  16
    65   unsigned char cmnd[MAX_COMMAND_SIZE];
    66   unsigned request_bufflen; /* Actual request size */
     85  unsigned char *cmnd;
    6786
    6887  struct timer_list eh_timeout; /* Used to time out the command. */
    69   void *request_buffer;   /* Actual requested buffer */
    7088
    7189  /* These elements define the operation we ultimately want to perform */
    72   unsigned short use_sg;  /* Number of pieces of scatter-gather */
    73   unsigned short sglist_len;  /* size of malloc'd scatter-gather list */
    74 
     90  struct scsi_data_buffer sdb;
    7591  unsigned underflow; /* Return error if less than
    7692           this amount is transferred */
    7793
     
    8197           reconnects.   Probably == sector
    8298           size */
    8399
    84   int resid;    /* Number of bytes requested to be
    85            transferred less actual number
    86            transferred (0 if not supported) */
    87 
    88100  struct request *request;  /* The command we are
    89101               working on */
    90102
    91103#define SCSI_SENSE_BUFFERSIZE   96
    92   unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE];
     104  unsigned char *sense_buffer;
    93105        /* obtained by REQUEST SENSE when
    94106         * CHECK CONDITION is received on original
    95107         * command (auto-sense) */
     
    115127  int result;   /* Status code from lower level driver */
    116128
    117129  unsigned char tag;  /* SCSI-II queued command tag */
    118   unsigned long pid;  /* Process ID, starts at 0. Unique per host. */
    119130};
    120131
    121 /*
    122  * These are the values that scsi_cmd->state can take.
    123  */
    124 #define SCSI_STATE_TIMEOUT         0x1000
    125 #define SCSI_STATE_FINISHED        0x1001
    126 #define SCSI_STATE_FAILED          0x1002
    127 #define SCSI_STATE_QUEUED          0x1003
    128 #define SCSI_STATE_UNUSED          0x1006
    129 #define SCSI_STATE_DISCONNECTING   0x1008
    130 #define SCSI_STATE_INITIALIZING    0x1009
    131 #define SCSI_STATE_BHQUEUE         0x100a
    132 #define SCSI_STATE_MLQUEUE         0x100b
    133 
    134 
    135132extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t);
     133extern struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *, gfp_t);
    136134extern void scsi_put_command(struct scsi_cmnd *);
    137 extern void scsi_io_completion(struct scsi_cmnd *, unsigned int);
     135extern void __scsi_put_command(struct Scsi_Host *, struct scsi_cmnd *,
     136             struct device *);
    138137extern void scsi_finish_command(struct scsi_cmnd *cmd);
    139138extern void scsi_req_abort_cmd(struct scsi_cmnd *cmd);
    140139
     
    142141         size_t *offset, size_t *len);
    143142extern void scsi_kunmap_atomic_sg(void *virt);
    144143
     144extern int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask);
     145extern void scsi_release_buffers(struct scsi_cmnd *cmd);
     146
     147extern int scsi_dma_map(struct scsi_cmnd *cmd);
     148extern void scsi_dma_unmap(struct scsi_cmnd *cmd);
     149
     150struct scsi_cmnd *scsi_allocate_command(gfp_t gfp_mask);
     151void scsi_free_command(gfp_t gfp_mask, struct scsi_cmnd *cmd);
     152
     153static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd)
     154{
     155  return cmd->sdb.table.nents;
     156}
     157
     158static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd)
     159{
     160  return cmd->sdb.table.sgl;
     161}
     162
     163static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd)
     164{
     165  return cmd->sdb.length;
     166}
     167
     168static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid)
     169{
     170  cmd->sdb.resid = resid;
     171}
     172
     173static inline int scsi_get_resid(struct scsi_cmnd *cmd)
     174{
     175  return cmd->sdb.resid;
     176}
     177
     178#define scsi_for_each_sg(cmd, sg, nseg, __i)      \
     179  for_each_sg(scsi_sglist(cmd), sg, nseg, __i)
     180
     181static inline int scsi_bidi_cmnd(struct scsi_cmnd *cmd)
     182{
     183  return blk_bidi_rq(cmd->request) &&
     184    (cmd->request->next_rq->special != NULL);
     185}
     186
     187static inline struct scsi_data_buffer *scsi_in(struct scsi_cmnd *cmd)
     188{
     189  return scsi_bidi_cmnd(cmd) ?
     190    cmd->request->next_rq->special : &cmd->sdb;
     191}
     192
     193static inline struct scsi_data_buffer *scsi_out(struct scsi_cmnd *cmd)
     194{
     195  return &cmd->sdb;
     196}
     197
     198static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd,
     199             void *buf, int buflen)
     200{
     201  return sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
     202           buf, buflen);
     203}
     204
     205static inline int scsi_sg_copy_to_buffer(struct scsi_cmnd *cmd,
     206           void *buf, int buflen)
     207{
     208  return sg_copy_to_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
     209         buf, buflen);
     210}
     211
    145212#endif /* _SCSI_SCSI_CMND_H */