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