root/drivers/block/ide-tape.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * linux/drivers/block/ide-tape.h       Version 1.1 - ALPHA     Dec  14, 1995
   3  *
   4  * Copyright (C) 1995 Gadi Oxman <tgud@tochnapc2.technion.ac.il>
   5  */
   6 
   7 /*
   8  * Include file for the IDE ATAPI streaming tape driver.
   9  *
  10  * This file contains various ide-tape related structures and function
  11  * prototypes which are already used in ide.h.
  12  *
  13  * The various compile time options are described below.
  14  */
  15 
  16 #ifndef IDETAPE_H
  17 #define IDETAPE_H 
  18 
  19 /**************************** Tunable parameters *****************************/
  20 
  21 /*
  22  *      This is probably the most important configuration option.
  23  *
  24  *      Pipelined operation mode has the potential to maximize the
  25  *      performance of the driver and thus to saturate the throughput
  26  *      to the maximum value supported by the tape. Currently, pipelined
  27  *      mode is supported only on writes.
  28  *
  29  *      In pipelined mode we are servicing requests without blocking the
  30  *      user backup program. For example, on a write request, we will add it
  31  *      to the pipeline and return without waiting for it to complete. The
  32  *      user program will then have enough time to prepare the next blocks
  33  *      while the tape is still busy working on the previous requests.
  34  *
  35  *      Pipelined (write) operation mode is enabled by default, but since
  36  *      it has a few downfalls as well (Use of additional memory and deferred
  37  *      error code to the application), you may wish to disable it.
  38  *      Further explanation of pipelined mode is available in ide-tape.c .
  39  */
  40 
  41 #define IDETAPE_PIPELINE        1
  42 
  43 /*
  44  *      Pipelined mode parameters.
  45  *
  46  *      We try to use the minimum number of stages which is enough to
  47  *      keep the tape constantly streaming. To accomplish that, we implement
  48  *      a feedback loop around the maximum number of stages:
  49  *
  50  *      We start from MIN maximum stages (we will not even use MIN stages
  51  *      if we don't need them), increment it by RATE*(MAX-MIN)
  52  *      whenever we sense that the pipeline is empty, until we reach
  53  *      the optimum value or until we reach MAX.
  54  */
  55  
  56 #define IDETAPE_MIN_PIPELINE_STAGES             100
  57 #define IDETAPE_MAX_PIPELINE_STAGES             200
  58 #define IDETAPE_INCREASE_STAGES_RATE            0.2
  59 
  60 /*
  61  *      It seems that dynamically allocating buffers of about 32KB
  62  *      each is doomed to fail, unless we are in or very near the
  63  *      initialization stage. Take care when changing this value, as it
  64  *      is now optimized with the design of kmalloc, so that we will not
  65  *      allocate parts of a page. Setting the size to 512 bytes, for example,
  66  *      would cause kmalloc to allocate for us 1024 bytes, and to
  67  *      unnecessarily waste double amount of memory.
  68  */
  69 
  70 #if PAGE_SIZE == 4096
  71         #define IDETAPE_ALLOCATION_BLOCK                500
  72 #elif PAGE_SIZE == 8192
  73         #define IDETAPE_ALLOCATION_BLOCK                496
  74 #else /* ??? Not defined by linux/mm/kmalloc.c */
  75         #define IDETAPE_ALLOCATION_BLOCK                512
  76 #endif
  77 
  78 /*
  79  *      Setting IDETAPE_DEBUG to 1 will:
  80  *
  81  *              1.      Generally log all driver actions.
  82  *              2.      Enable self-sanity checks in some places.
  83  *
  84  *      Use IDETAPE_DEBUG when encountering a problem with the driver.
  85  *
  86  *      Setting IDETAPE_DEBUG to 0 will restore normal operation mode:
  87  *
  88  *              1.      Disable logging normal successful operations.
  89  *              2.      Disable self-sanity checks.
  90  *              3.      Errors will still be logged, of course.
  91  */
  92  
  93 #define IDETAPE_DEBUG           0
  94 
  95 /*
  96  *      After each failed packet command we issue a request sense command
  97  *      and retry the packet command IDETAPE_MAX_PC_RETRIES times.
  98  *
  99  *      Setting IDETAPE_MAX_PC_RETRIES to 0 will disable retries.
 100  */
 101 
 102 #define IDETAPE_MAX_PC_RETRIES  2
 103 
 104 /*
 105  *      With each packet command, we allocate a buffer of
 106  *      IDETAPE_TEMP_BUFFER_SIZE bytes. This is used for several packet
 107  *      commands (Not for READ/WRITE commands).
 108  *
 109  *      The default below is too high - We should be using around 100 bytes
 110  *      typically, but I didn't check all the cases, so I rather be on the
 111  *      safe size.
 112  */
 113  
 114 #define IDETAPE_TEMP_BUFFER_SIZE 256
 115 
 116 /*
 117  *      In various places in the driver, we need to allocate storage
 118  *      for packet commands and requests, which will remain valid while
 119  *      we leave the driver to wait for an interrupt or a timeout event.
 120  *
 121  *      In the corresponding ide_drive_t structure, we pre-allocate storage
 122  *      for IDETAPE_PC_STACK packet commands and requests. This storage is
 123  *      used as a circular array - Each time we reach the last entry, we
 124  *      warp around to the first.
 125  *
 126  *      It is crucial that we have enough entries for the maximum number
 127  *      of packet commands / sub-requests which we need to allocate during
 128  *      the handling of a specific request.
 129  *
 130  *      Follows a worse case calculation of the required storage, with a
 131  *      large safety margin.
 132  */
 133 
 134 #define IDETAPE_PC_STACK        20+IDETAPE_MAX_PC_RETRIES
 135 
 136 /*
 137  *      DSC polling parameters.
 138  *
 139  *      Polling for DSC (a single bit in the status register) is a very
 140  *      important function in ide-tape. There are two cases in which we
 141  *      poll for DSC:
 142  *
 143  *      1.      Before a read/write packet command, to ensure that we
 144  *              can transfer data from/to the tape's data buffers, without
 145  *              causing an actual media access. In case the tape is not
 146  *              ready yet, we take out our request from the device
 147  *              request queue, so that ide.c will service requests from
 148  *              the other device on the same interface meanwhile.
 149  *
 150  *              The polling frequency is 1/IDETAPE_DSC_READ_WRITE_FREQUENCY,
 151  *              and it should be relatively fast. The default is a period
 152  *              of 50 msec.
 153  *
 154  *      2.      After the successful initialization of a "media access
 155  *              packet command", which is a command which can take a long
 156  *              time to complete (it can be several seconds or even an hour).
 157  *
 158  *              Again, we postpone our request in the middle to free the bus
 159  *              for the other device. The polling frequency here should be
 160  *              lower than the read/write frequency since those media access
 161  *              commands are slow. We start from a "fast" frequency -
 162  *              IDETAPE_DSC_FAST_MEDIA_ACCESS_FREQUENCY (one second), and
 163  *              if we don't receive DSC after IDETAPE_FAST_SLOW_THRESHOLD
 164  *              (5 minutes), we switch it to a lower frequency -
 165  *              IDETAPE_DSC_SLOW_MEDIA_ACCESS_FREQUENCY (1 minute).
 166  *              
 167  *      We also set a timeout for the timer, in case something goes wrong.
 168  *      The timeout should be longer then the maximum execution time of a
 169  *      tape operation. I still have to measure exactly how much time does
 170  *      it take to space over a far filemark, etc. It seemed that 15 minutes
 171  *      was way too low, so I am meanwhile setting it to a rather large
 172  *      timeout - 2 Hours ...
 173  *
 174  */
 175 
 176 #define IDETAPE_DSC_READ_WRITE_FREQUENCY        5*HZ/100        /* 50 msec */
 177 #define IDETAPE_DSC_FAST_MEDIA_ACCESS_FREQUENCY 1*HZ            /* 1 second */
 178 #define IDETAPE_FAST_SLOW_THRESHOLD             5*60*HZ         /* 5 minutes */
 179 #define IDETAPE_DSC_SLOW_MEDIA_ACCESS_FREQUENCY 60*HZ           /* 1 minute */
 180 #define IDETAPE_DSC_TIMEOUT                     2*60*60*HZ      /* 2 hours */
 181 
 182 /*************************** End of tunable parameters ***********************/
 183 
 184 /*
 185  *      Definitions which are already needed in ide.h
 186  */
 187  
 188 /*
 189  *      The following is currently not used.
 190  */
 191 
 192 typedef enum {no_excess_data,excess_data_read,excess_data_write} excess_data_status_t;
 193 
 194  
 195 struct ide_drive_s;                             /* Forward declaration - Will be defined later in ide.h */
 196 typedef void (idetape_pc_completed_t)(struct ide_drive_s *);
 197 
 198 /*
 199  *      Our view of a packet command.
 200  */
 201 
 202 typedef struct idetape_packet_command_s {
 203         byte c [12];                            /* Actual packet bytes */
 204         
 205         byte retries;                           /* On each retry, we increment retries */
 206         byte error;                             /* Set when an error occured */
 207         byte active;                            /* Set when a packet command is in progress */
 208         byte wait_for_dsc;                      /* 1 When polling for DSC */
 209         byte dsc_count;         
 210         unsigned long request_transfer;         /* Bytes to transfer */
 211         unsigned long actually_transferred;     /* Bytes actually transferred */
 212         unsigned long buffer_size;              /* Size of our data buffer */
 213         byte *buffer;                           /* Data buffer */
 214         byte *current_position;                 /* Pointer into the above buffer */
 215         byte writing;                           /* Data direction */            
 216         idetape_pc_completed_t *callback;       /* Called when this packet command is completed */
 217         byte temp_buffer [IDETAPE_TEMP_BUFFER_SIZE];    /* Temporary buffer */
 218 } idetape_packet_command_t;
 219 
 220 /*
 221  *      Capabilities and Mechanical Status Page
 222  */
 223 
 224 typedef struct {
 225         unsigned page_code      :6;     /* Page code - Should be 0x2a */
 226         unsigned reserved1_67   :2;
 227         byte page_length;               /* Page Length - Should be 0x12 */
 228         byte reserved2; 
 229         byte reserved3; 
 230         unsigned ro             :1;     /* Read Only Mode */
 231         unsigned reserved4_1234 :4;
 232         unsigned sprev          :1;     /* Supports SPACE in the reverse direction */
 233         unsigned reserved4_67   :2;
 234         unsigned reserved5_012  :3;
 235         unsigned efmt           :1;     /* Supports ERASE command initiated formatting */
 236         unsigned reserved5_4    :1;
 237         unsigned qfa            :1;     /* Supports the QFA two partition formats */
 238         unsigned reserved5_67   :2;
 239         unsigned lock           :1;     /* Supports locking the volume */
 240         unsigned locked         :1;     /* The volume is locked */
 241         unsigned prevent        :1;     /* The device defaults in the prevent state after power up */   
 242         unsigned eject          :1;     /* The device can eject the volume */
 243         unsigned reserved6_45   :2;     /* Reserved */  
 244         unsigned ecc            :1;     /* Supports error correction */
 245         unsigned cmprs          :1;     /* Supports data compression */
 246         unsigned reserved7_0    :1;
 247         unsigned blk512         :1;     /* Supports 512 bytes block size */
 248         unsigned blk1024        :1;     /* Supports 1024 bytes block size */
 249         unsigned reserved7_3_6  :4;
 250         unsigned slowb          :1;     /* The device restricts the byte count for PIO */
 251                                         /* transfers for slow buffer memory ??? */
 252         unsigned short max_speed;       /* Maximum speed supported in KBps */
 253         byte reserved10;
 254         byte reserved11;
 255         unsigned short ctl;             /* Continuous Transfer Limit in blocks */
 256         unsigned short speed;           /* Current Speed, in KBps */
 257         unsigned short buffer_size;     /* Buffer Size, in 512 bytes */
 258         byte reserved18;
 259         byte reserved19;
 260 } idetape_capabilities_page_t;
 261 
 262 /*
 263  *      A pipeline stage contains several small buffers of type
 264  *      idetape_buffer_head_t. This is necessary since dynamical allocation
 265  *      of large (32 KB or so) continuous memory blocks will usually fail.
 266  */
 267  
 268 typedef struct idetape_buffer_head_s {
 269         char *data;                                     /* Pointer to data (512 bytes by default) */
 270         struct idetape_buffer_head_s *next;
 271 } idetape_buffer_head_t;
 272 
 273 /*
 274  *      A pipeline stage.
 275  *
 276  *      In a pipeline stage we have a request, pointer to a list of small
 277  *      buffers, and pointers to the near stages.
 278  */
 279 
 280 typedef struct idetape_pipeline_stage_s {
 281         struct request rq;                              /* The correspoding request */
 282         idetape_buffer_head_t *bh;                      /* The data buffers */
 283         struct idetape_pipeline_stage_s *next,*prev;    /* Pointers to the next and previous stages */
 284 } idetape_pipeline_stage_t;
 285 
 286 /*
 287  *      Most of our global data which we need to save even as we leave the
 288  *      driver due to an interrupt or a timer event is stored in a variable
 289  *      of type tape_info, defined below.
 290  *
 291  *      Additional global variables which provide the link between the
 292  *      character device interface to this structure are defined in
 293  *      ide-tape.c
 294  */
 295  
 296 typedef struct {        
 297 
 298         /*
 299          *      Since a typical character device operation requires more
 300          *      than one packet command, we provide here enough memory
 301          *      for the maximum of interconnected packet commands.
 302          *      The packet commands are stored in the circular array pc_stack.
 303          *      pc_stack_index points to the last used entry, and warps around
 304          *      to the start when we get to the last array entry.
 305          *
 306          *      pc points to the current processed packet command.
 307          *
 308          *      failed_pc points to the last failed packet command, or contains
 309          *      NULL if we do not need to retry any packet command. This is
 310          *      required since an additional packet command is needed before the
 311          *      retry, to get detailed information on what went wrong.
 312          */
 313 
 314         idetape_packet_command_t *pc;           /* Current packet command */
 315         idetape_packet_command_t *failed_pc;    /* Last failed packet command */
 316         idetape_packet_command_t pc_stack [IDETAPE_PC_STACK]; /* Packet command stack */
 317         byte pc_stack_index;                    /* Next free packet command storage space */
 318 
 319         /* 
 320          *      The Linux ide driver basically traverses the request lists
 321          *      of the ide block devices, finds the next request, completes
 322          *      it, and passes to the next one. This is done in ide_do_request.
 323          *
 324          *      In this regard, ide-tape.c is fully compatible with the rest of
 325          *      the ide driver - From the point of view of ide.c, we are just
 326          *      another ide block device which receives requests and completes
 327          *      them.
 328          *
 329          *      However, our requests don't originate in the buffer cache but
 330          *      rather in ide-tape.c itself. Here we provide safe storage for
 331          *      such requests.
 332          */
 333 
 334         struct request rq_stack [IDETAPE_PC_STACK];
 335         byte rq_stack_index;                    /* We implement a circular array */
 336 
 337         /*
 338          *      While polling for DSC we use postponed_rq to postpone the
 339          *      current request so that ide.c will be able to service
 340          *      pending requests on the other device. Note that at most
 341          *      we will have only one DSC (usually data transfer) request
 342          *      in the device request queue. Additional request can be
 343          *      queued in our internal pipeline, but they will be visible
 344          *      to ide.c only one at a time.
 345          */
 346 
 347         struct request *postponed_rq;
 348         
 349         /*
 350          *      DSC polling variables.
 351          */
 352          
 353         byte dsc_count;                         /* We received DSC dsc_count times in a row */
 354         unsigned long dsc_polling_start;        /* The time in which we started polling for DSC */
 355         struct timer_list dsc_timer;            /* Timer used to poll for dsc */
 356         unsigned long dsc_polling_frequency;    /* The current polling frequency */
 357         unsigned long dsc_timeout;              /* Maximum waiting time */
 358         byte dsc_received;                      /* Set when we receive DSC */
 359 
 360         byte request_status;
 361         byte request_dsc_callback;
 362         byte last_status;                       /* Contents of the tape status register */
 363                                                 /* before the current request (saved for us */
 364                                                 /* by ide.c) */
 365         /* Position information */
 366         
 367         byte partition_num;                     /* Currently not used */
 368         unsigned long block_address;            /* Current block */
 369         byte block_address_valid;               /* 0 When the tape position is unknown */
 370                                                 /* (To the tape or to us) */
 371         /* Last error information */
 372         
 373         byte sense_key,asc,ascq;
 374 
 375         /* Character device operation */
 376 
 377         unsigned char last_dt_was_write;        /* Last character device data transfer was a write */
 378         byte busy;                              /* Device already opened */
 379 
 380         /* Device information */
 381         
 382         unsigned short tape_block_size;                 /* Usually 512 or 1024 bytes */
 383         idetape_capabilities_page_t capabilities;       /* Copy of the tape's Capabilities and Mechanical Page */
 384 
 385         /*
 386          *      Active data transfer request parameters.
 387          *
 388          *      At most, there is only one ide-tape originated data transfer
 389          *      request in the device request queue. This allows ide.c to
 390          *      easily service requests from the other device when we
 391          *      postpone our active request. In the pipelined operation
 392          *      mode, we use our internal pipeline structure to hold
 393          *      more data requests.
 394          *
 395          *      The data buffer size is chosen based on the tape's
 396          *      recommendation.
 397          */
 398         
 399         struct request *active_data_request;    /* Pointer to the request which is waiting in the device request queue */
 400         char *data_buffer;                      /* The correspoding data buffer (for read/write requests) */
 401         int data_buffer_size;                   /* Data buffer size (chosen based on the tape's recommendation */
 402         char *temp_data_buffer;                 /* Temporary buffer for user <-> kernel space data transfer */
 403 
 404         /*
 405          *      Pipeline parameters.
 406          *
 407          *      To accomplish non-pipelined mode, we simply set the following
 408          *      variables to zero (or NULL, where appropriate).
 409          */
 410                 
 411         int current_number_of_stages;           /* Number of currently used stages */
 412         int max_number_of_stages;               /* We will not allocate more than this number of stages */
 413         idetape_pipeline_stage_t *first_stage;  /* Will be serviced after the currently active request */
 414         idetape_pipeline_stage_t *last_stage;   /* New write requests will be added to the pipeline here */
 415         int pipeline_was_full_once;             /* Set at the first time we fill the pipeline since the tape was opened */
 416         int error_in_pipeline_stage;            /* Set when an error was detected in one of the pipeline stages */      
 417         int pipeline_locked;                    /* Against race conditions ... */
 418         
 419 } idetape_tape_t;
 420 
 421 #define POLL_HWIF_TAPE_DRIVE                                                    \
 422         if (hwif->tape_drive != NULL) {                                         \
 423                 if (hwif->tape_drive->tape.request_status) {                    \
 424                         OUT_BYTE(hwif->tape_drive->select.all,IDE_SELECT_REG);  \
 425                         hwif->tape_drive->tape.last_status=GET_STAT();          \
 426                         hwif->tape_drive->tape.request_status=0;                \
 427                 }                                                               \
 428                 if (hwif->tape_drive->tape.request_dsc_callback) {              \
 429                         hwif->tape_drive->tape.request_dsc_callback=0;          \
 430                         idetape_put_back_postponed_request(hwif->tape_drive);   \
 431                 }                                                               \
 432         }
 433 
 434 #endif /* IDETAPE_H */

/* [previous][next][first][last][top][bottom][index][help] */