Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.18-rc6 647 lines 25 kB view raw
1/* 2 * $Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $ 3 */ 4 5#include <asm/byteorder.h> 6#include <linux/completion.h> 7 8/* FIXME - rename and use the following two types or delete them! 9 * and the types really should go to st.h anyway... 10 * INQUIRY packet command - Data Format (From Table 6-8 of QIC-157C) 11 */ 12typedef struct { 13 unsigned device_type :5; /* Peripheral Device Type */ 14 unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */ 15 unsigned reserved1_6t0 :7; /* Reserved */ 16 unsigned rmb :1; /* Removable Medium Bit */ 17 unsigned ansi_version :3; /* ANSI Version */ 18 unsigned ecma_version :3; /* ECMA Version */ 19 unsigned iso_version :2; /* ISO Version */ 20 unsigned response_format :4; /* Response Data Format */ 21 unsigned reserved3_45 :2; /* Reserved */ 22 unsigned reserved3_6 :1; /* TrmIOP - Reserved */ 23 unsigned reserved3_7 :1; /* AENC - Reserved */ 24 u8 additional_length; /* Additional Length (total_length-4) */ 25 u8 rsv5, rsv6, rsv7; /* Reserved */ 26 u8 vendor_id[8]; /* Vendor Identification */ 27 u8 product_id[16]; /* Product Identification */ 28 u8 revision_level[4]; /* Revision Level */ 29 u8 vendor_specific[20]; /* Vendor Specific - Optional */ 30 u8 reserved56t95[40]; /* Reserved - Optional */ 31 /* Additional information may be returned */ 32} idetape_inquiry_result_t; 33 34/* 35 * READ POSITION packet command - Data Format (From Table 6-57) 36 */ 37typedef struct { 38 unsigned reserved0_10 :2; /* Reserved */ 39 unsigned bpu :1; /* Block Position Unknown */ 40 unsigned reserved0_543 :3; /* Reserved */ 41 unsigned eop :1; /* End Of Partition */ 42 unsigned bop :1; /* Beginning Of Partition */ 43 u8 partition; /* Partition Number */ 44 u8 reserved2, reserved3; /* Reserved */ 45 u32 first_block; /* First Block Location */ 46 u32 last_block; /* Last Block Location (Optional) */ 47 u8 reserved12; /* Reserved */ 48 u8 blocks_in_buffer[3]; /* Blocks In Buffer - (Optional) */ 49 u32 bytes_in_buffer; /* Bytes In Buffer (Optional) */ 50} idetape_read_position_result_t; 51 52/* 53 * Follows structures which are related to the SELECT SENSE / MODE SENSE 54 * packet commands. 55 */ 56#define COMPRESSION_PAGE 0x0f 57#define COMPRESSION_PAGE_LENGTH 16 58 59#define CAPABILITIES_PAGE 0x2a 60#define CAPABILITIES_PAGE_LENGTH 20 61 62#define TAPE_PARAMTR_PAGE 0x2b 63#define TAPE_PARAMTR_PAGE_LENGTH 16 64 65#define NUMBER_RETRIES_PAGE 0x2f 66#define NUMBER_RETRIES_PAGE_LENGTH 4 67 68#define BLOCK_SIZE_PAGE 0x30 69#define BLOCK_SIZE_PAGE_LENGTH 4 70 71#define BUFFER_FILLING_PAGE 0x33 72#define BUFFER_FILLING_PAGE_LENGTH 4 73 74#define VENDOR_IDENT_PAGE 0x36 75#define VENDOR_IDENT_PAGE_LENGTH 8 76 77#define LOCATE_STATUS_PAGE 0x37 78#define LOCATE_STATUS_PAGE_LENGTH 0 79 80#define MODE_HEADER_LENGTH 4 81 82 83/* 84 * REQUEST SENSE packet command result - Data Format. 85 */ 86typedef struct { 87 unsigned error_code :7; /* Current of deferred errors */ 88 unsigned valid :1; /* The information field conforms to QIC-157C */ 89 u8 reserved1 :8; /* Segment Number - Reserved */ 90 unsigned sense_key :4; /* Sense Key */ 91 unsigned reserved2_4 :1; /* Reserved */ 92 unsigned ili :1; /* Incorrect Length Indicator */ 93 unsigned eom :1; /* End Of Medium */ 94 unsigned filemark :1; /* Filemark */ 95 u32 information __attribute__ ((packed)); 96 u8 asl; /* Additional sense length (n-7) */ 97 u32 command_specific; /* Additional command specific information */ 98 u8 asc; /* Additional Sense Code */ 99 u8 ascq; /* Additional Sense Code Qualifier */ 100 u8 replaceable_unit_code; /* Field Replaceable Unit Code */ 101 unsigned sk_specific1 :7; /* Sense Key Specific */ 102 unsigned sksv :1; /* Sense Key Specific information is valid */ 103 u8 sk_specific2; /* Sense Key Specific */ 104 u8 sk_specific3; /* Sense Key Specific */ 105 u8 pad[2]; /* Padding to 20 bytes */ 106} idetape_request_sense_result_t; 107 108/* 109 * Mode Parameter Header for the MODE SENSE packet command 110 */ 111typedef struct { 112 u8 mode_data_length; /* Length of the following data transfer */ 113 u8 medium_type; /* Medium Type */ 114 u8 dsp; /* Device Specific Parameter */ 115 u8 bdl; /* Block Descriptor Length */ 116} osst_mode_parameter_header_t; 117 118/* 119 * Mode Parameter Block Descriptor the MODE SENSE packet command 120 * 121 * Support for block descriptors is optional. 122 */ 123typedef struct { 124 u8 density_code; /* Medium density code */ 125 u8 blocks[3]; /* Number of blocks */ 126 u8 reserved4; /* Reserved */ 127 u8 length[3]; /* Block Length */ 128} osst_parameter_block_descriptor_t; 129 130/* 131 * The Data Compression Page, as returned by the MODE SENSE packet command. 132 */ 133typedef struct { 134#if defined(__BIG_ENDIAN_BITFIELD) 135 unsigned ps :1; 136 unsigned reserved0 :1; /* Reserved */ 137 unsigned page_code :6; /* Page Code - Should be 0xf */ 138#elif defined(__LITTLE_ENDIAN_BITFIELD) 139 unsigned page_code :6; /* Page Code - Should be 0xf */ 140 unsigned reserved0 :1; /* Reserved */ 141 unsigned ps :1; 142#else 143#error "Please fix <asm/byteorder.h>" 144#endif 145 u8 page_length; /* Page Length - Should be 14 */ 146#if defined(__BIG_ENDIAN_BITFIELD) 147 unsigned dce :1; /* Data Compression Enable */ 148 unsigned dcc :1; /* Data Compression Capable */ 149 unsigned reserved2 :6; /* Reserved */ 150#elif defined(__LITTLE_ENDIAN_BITFIELD) 151 unsigned reserved2 :6; /* Reserved */ 152 unsigned dcc :1; /* Data Compression Capable */ 153 unsigned dce :1; /* Data Compression Enable */ 154#else 155#error "Please fix <asm/byteorder.h>" 156#endif 157#if defined(__BIG_ENDIAN_BITFIELD) 158 unsigned dde :1; /* Data Decompression Enable */ 159 unsigned red :2; /* Report Exception on Decompression */ 160 unsigned reserved3 :5; /* Reserved */ 161#elif defined(__LITTLE_ENDIAN_BITFIELD) 162 unsigned reserved3 :5; /* Reserved */ 163 unsigned red :2; /* Report Exception on Decompression */ 164 unsigned dde :1; /* Data Decompression Enable */ 165#else 166#error "Please fix <asm/byteorder.h>" 167#endif 168 u32 ca; /* Compression Algorithm */ 169 u32 da; /* Decompression Algorithm */ 170 u8 reserved[4]; /* Reserved */ 171} osst_data_compression_page_t; 172 173/* 174 * The Medium Partition Page, as returned by the MODE SENSE packet command. 175 */ 176typedef struct { 177#if defined(__BIG_ENDIAN_BITFIELD) 178 unsigned ps :1; 179 unsigned reserved1_6 :1; /* Reserved */ 180 unsigned page_code :6; /* Page Code - Should be 0x11 */ 181#elif defined(__LITTLE_ENDIAN_BITFIELD) 182 unsigned page_code :6; /* Page Code - Should be 0x11 */ 183 unsigned reserved1_6 :1; /* Reserved */ 184 unsigned ps :1; 185#else 186#error "Please fix <asm/byteorder.h>" 187#endif 188 u8 page_length; /* Page Length - Should be 6 */ 189 u8 map; /* Maximum Additional Partitions - Should be 0 */ 190 u8 apd; /* Additional Partitions Defined - Should be 0 */ 191#if defined(__BIG_ENDIAN_BITFIELD) 192 unsigned fdp :1; /* Fixed Data Partitions */ 193 unsigned sdp :1; /* Should be 0 */ 194 unsigned idp :1; /* Should be 0 */ 195 unsigned psum :2; /* Should be 0 */ 196 unsigned reserved4_012 :3; /* Reserved */ 197#elif defined(__LITTLE_ENDIAN_BITFIELD) 198 unsigned reserved4_012 :3; /* Reserved */ 199 unsigned psum :2; /* Should be 0 */ 200 unsigned idp :1; /* Should be 0 */ 201 unsigned sdp :1; /* Should be 0 */ 202 unsigned fdp :1; /* Fixed Data Partitions */ 203#else 204#error "Please fix <asm/byteorder.h>" 205#endif 206 u8 mfr; /* Medium Format Recognition */ 207 u8 reserved[2]; /* Reserved */ 208} osst_medium_partition_page_t; 209 210/* 211 * Capabilities and Mechanical Status Page 212 */ 213typedef struct { 214#if defined(__BIG_ENDIAN_BITFIELD) 215 unsigned reserved1_67 :2; 216 unsigned page_code :6; /* Page code - Should be 0x2a */ 217#elif defined(__LITTLE_ENDIAN_BITFIELD) 218 unsigned page_code :6; /* Page code - Should be 0x2a */ 219 unsigned reserved1_67 :2; 220#else 221#error "Please fix <asm/byteorder.h>" 222#endif 223 u8 page_length; /* Page Length - Should be 0x12 */ 224 u8 reserved2, reserved3; 225#if defined(__BIG_ENDIAN_BITFIELD) 226 unsigned reserved4_67 :2; 227 unsigned sprev :1; /* Supports SPACE in the reverse direction */ 228 unsigned reserved4_1234 :4; 229 unsigned ro :1; /* Read Only Mode */ 230#elif defined(__LITTLE_ENDIAN_BITFIELD) 231 unsigned ro :1; /* Read Only Mode */ 232 unsigned reserved4_1234 :4; 233 unsigned sprev :1; /* Supports SPACE in the reverse direction */ 234 unsigned reserved4_67 :2; 235#else 236#error "Please fix <asm/byteorder.h>" 237#endif 238#if defined(__BIG_ENDIAN_BITFIELD) 239 unsigned reserved5_67 :2; 240 unsigned qfa :1; /* Supports the QFA two partition formats */ 241 unsigned reserved5_4 :1; 242 unsigned efmt :1; /* Supports ERASE command initiated formatting */ 243 unsigned reserved5_012 :3; 244#elif defined(__LITTLE_ENDIAN_BITFIELD) 245 unsigned reserved5_012 :3; 246 unsigned efmt :1; /* Supports ERASE command initiated formatting */ 247 unsigned reserved5_4 :1; 248 unsigned qfa :1; /* Supports the QFA two partition formats */ 249 unsigned reserved5_67 :2; 250#else 251#error "Please fix <asm/byteorder.h>" 252#endif 253#if defined(__BIG_ENDIAN_BITFIELD) 254 unsigned cmprs :1; /* Supports data compression */ 255 unsigned ecc :1; /* Supports error correction */ 256 unsigned reserved6_45 :2; /* Reserved */ 257 unsigned eject :1; /* The device can eject the volume */ 258 unsigned prevent :1; /* The device defaults in the prevent state after power up */ 259 unsigned locked :1; /* The volume is locked */ 260 unsigned lock :1; /* Supports locking the volume */ 261#elif defined(__LITTLE_ENDIAN_BITFIELD) 262 unsigned lock :1; /* Supports locking the volume */ 263 unsigned locked :1; /* The volume is locked */ 264 unsigned prevent :1; /* The device defaults in the prevent state after power up */ 265 unsigned eject :1; /* The device can eject the volume */ 266 unsigned reserved6_45 :2; /* Reserved */ 267 unsigned ecc :1; /* Supports error correction */ 268 unsigned cmprs :1; /* Supports data compression */ 269#else 270#error "Please fix <asm/byteorder.h>" 271#endif 272#if defined(__BIG_ENDIAN_BITFIELD) 273 unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */ 274 /* transfers for slow buffer memory ??? */ 275 /* Also 32768 block size in some cases */ 276 unsigned reserved7_3_6 :4; 277 unsigned blk1024 :1; /* Supports 1024 bytes block size */ 278 unsigned blk512 :1; /* Supports 512 bytes block size */ 279 unsigned reserved7_0 :1; 280#elif defined(__LITTLE_ENDIAN_BITFIELD) 281 unsigned reserved7_0 :1; 282 unsigned blk512 :1; /* Supports 512 bytes block size */ 283 unsigned blk1024 :1; /* Supports 1024 bytes block size */ 284 unsigned reserved7_3_6 :4; 285 unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */ 286 /* transfers for slow buffer memory ??? */ 287 /* Also 32768 block size in some cases */ 288#else 289#error "Please fix <asm/byteorder.h>" 290#endif 291 u16 max_speed; /* Maximum speed supported in KBps */ 292 u8 reserved10, reserved11; 293 u16 ctl; /* Continuous Transfer Limit in blocks */ 294 u16 speed; /* Current Speed, in KBps */ 295 u16 buffer_size; /* Buffer Size, in 512 bytes */ 296 u8 reserved18, reserved19; 297} osst_capabilities_page_t; 298 299/* 300 * Block Size Page 301 */ 302typedef struct { 303#if defined(__BIG_ENDIAN_BITFIELD) 304 unsigned ps :1; 305 unsigned reserved1_6 :1; 306 unsigned page_code :6; /* Page code - Should be 0x30 */ 307#elif defined(__LITTLE_ENDIAN_BITFIELD) 308 unsigned page_code :6; /* Page code - Should be 0x30 */ 309 unsigned reserved1_6 :1; 310 unsigned ps :1; 311#else 312#error "Please fix <asm/byteorder.h>" 313#endif 314 u8 page_length; /* Page Length - Should be 2 */ 315 u8 reserved2; 316#if defined(__BIG_ENDIAN_BITFIELD) 317 unsigned one :1; 318 unsigned reserved2_6 :1; 319 unsigned record32_5 :1; 320 unsigned record32 :1; 321 unsigned reserved2_23 :2; 322 unsigned play32_5 :1; 323 unsigned play32 :1; 324#elif defined(__LITTLE_ENDIAN_BITFIELD) 325 unsigned play32 :1; 326 unsigned play32_5 :1; 327 unsigned reserved2_23 :2; 328 unsigned record32 :1; 329 unsigned record32_5 :1; 330 unsigned reserved2_6 :1; 331 unsigned one :1; 332#else 333#error "Please fix <asm/byteorder.h>" 334#endif 335} osst_block_size_page_t; 336 337/* 338 * Tape Parameters Page 339 */ 340typedef struct { 341#if defined(__BIG_ENDIAN_BITFIELD) 342 unsigned ps :1; 343 unsigned reserved1_6 :1; 344 unsigned page_code :6; /* Page code - Should be 0x2b */ 345#elif defined(__LITTLE_ENDIAN_BITFIELD) 346 unsigned page_code :6; /* Page code - Should be 0x2b */ 347 unsigned reserved1_6 :1; 348 unsigned ps :1; 349#else 350#error "Please fix <asm/byteorder.h>" 351#endif 352 u8 reserved2; 353 u8 density; 354 u8 reserved3,reserved4; 355 u16 segtrk; 356 u16 trks; 357 u8 reserved5,reserved6,reserved7,reserved8,reserved9,reserved10; 358} osst_tape_paramtr_page_t; 359 360/* OnStream definitions */ 361 362#define OS_CONFIG_PARTITION (0xff) 363#define OS_DATA_PARTITION (0) 364#define OS_PARTITION_VERSION (1) 365 366/* 367 * partition 368 */ 369typedef struct os_partition_s { 370 __u8 partition_num; 371 __u8 par_desc_ver; 372 __u16 wrt_pass_cntr; 373 __u32 first_frame_ppos; 374 __u32 last_frame_ppos; 375 __u32 eod_frame_ppos; 376} os_partition_t; 377 378/* 379 * DAT entry 380 */ 381typedef struct os_dat_entry_s { 382 __u32 blk_sz; 383 __u16 blk_cnt; 384 __u8 flags; 385 __u8 reserved; 386} os_dat_entry_t; 387 388/* 389 * DAT 390 */ 391#define OS_DAT_FLAGS_DATA (0xc) 392#define OS_DAT_FLAGS_MARK (0x1) 393 394typedef struct os_dat_s { 395 __u8 dat_sz; 396 __u8 reserved1; 397 __u8 entry_cnt; 398 __u8 reserved3; 399 os_dat_entry_t dat_list[16]; 400} os_dat_t; 401 402/* 403 * Frame types 404 */ 405#define OS_FRAME_TYPE_FILL (0) 406#define OS_FRAME_TYPE_EOD (1 << 0) 407#define OS_FRAME_TYPE_MARKER (1 << 1) 408#define OS_FRAME_TYPE_HEADER (1 << 3) 409#define OS_FRAME_TYPE_DATA (1 << 7) 410 411/* 412 * AUX 413 */ 414typedef struct os_aux_s { 415 __u32 format_id; /* hardware compability AUX is based on */ 416 char application_sig[4]; /* driver used to write this media */ 417 __u32 hdwr; /* reserved */ 418 __u32 update_frame_cntr; /* for configuration frame */ 419 __u8 frame_type; 420 __u8 frame_type_reserved; 421 __u8 reserved_18_19[2]; 422 os_partition_t partition; 423 __u8 reserved_36_43[8]; 424 __u32 frame_seq_num; 425 __u32 logical_blk_num_high; 426 __u32 logical_blk_num; 427 os_dat_t dat; 428 __u8 reserved188_191[4]; 429 __u32 filemark_cnt; 430 __u32 phys_fm; 431 __u32 last_mark_ppos; 432 __u8 reserved204_223[20]; 433 434 /* 435 * __u8 app_specific[32]; 436 * 437 * Linux specific fields: 438 */ 439 __u32 next_mark_ppos; /* when known, points to next marker */ 440 __u32 last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */ 441 __u8 linux_specific[24]; 442 443 __u8 reserved_256_511[256]; 444} os_aux_t; 445 446#define OS_FM_TAB_MAX 1024 447 448typedef struct os_fm_tab_s { 449 __u8 fm_part_num; 450 __u8 reserved_1; 451 __u8 fm_tab_ent_sz; 452 __u8 reserved_3; 453 __u16 fm_tab_ent_cnt; 454 __u8 reserved6_15[10]; 455 __u32 fm_tab_ent[OS_FM_TAB_MAX]; 456} os_fm_tab_t; 457 458typedef struct os_ext_trk_ey_s { 459 __u8 et_part_num; 460 __u8 fmt; 461 __u16 fm_tab_off; 462 __u8 reserved4_7[4]; 463 __u32 last_hlb_hi; 464 __u32 last_hlb; 465 __u32 last_pp; 466 __u8 reserved20_31[12]; 467} os_ext_trk_ey_t; 468 469typedef struct os_ext_trk_tb_s { 470 __u8 nr_stream_part; 471 __u8 reserved_1; 472 __u8 et_ent_sz; 473 __u8 reserved3_15[13]; 474 os_ext_trk_ey_t dat_ext_trk_ey; 475 os_ext_trk_ey_t qfa_ext_trk_ey; 476} os_ext_trk_tb_t; 477 478typedef struct os_header_s { 479 char ident_str[8]; 480 __u8 major_rev; 481 __u8 minor_rev; 482 __u16 ext_trk_tb_off; 483 __u8 reserved12_15[4]; 484 __u8 pt_par_num; 485 __u8 pt_reserved1_3[3]; 486 os_partition_t partition[16]; 487 __u32 cfg_col_width; 488 __u32 dat_col_width; 489 __u32 qfa_col_width; 490 __u8 cartridge[16]; 491 __u8 reserved304_511[208]; 492 __u32 old_filemark_list[16680/4]; /* in ADR 1.4 __u8 track_table[16680] */ 493 os_ext_trk_tb_t ext_track_tb; 494 __u8 reserved17272_17735[464]; 495 os_fm_tab_t dat_fm_tab; 496 os_fm_tab_t qfa_fm_tab; 497 __u8 reserved25960_32767[6808]; 498} os_header_t; 499 500 501/* 502 * OnStream ADRL frame 503 */ 504#define OS_FRAME_SIZE (32 * 1024 + 512) 505#define OS_DATA_SIZE (32 * 1024) 506#define OS_AUX_SIZE (512) 507//#define OSST_MAX_SG 2 508 509/* The OnStream tape buffer descriptor. */ 510struct osst_buffer { 511 unsigned char in_use; 512 unsigned char dma; /* DMA-able buffer */ 513 int buffer_size; 514 int buffer_blocks; 515 int buffer_bytes; 516 int read_pointer; 517 int writing; 518 int midlevel_result; 519 int syscall_result; 520 struct osst_request *last_SRpnt; 521 struct st_cmdstatus cmdstat; 522 unsigned char *b_data; 523 os_aux_t *aux; /* onstream AUX structure at end of each block */ 524 unsigned short use_sg; /* zero or number of s/g segments for this adapter */ 525 unsigned short sg_segs; /* number of segments in s/g list */ 526 unsigned short orig_sg_segs; /* number of segments allocated at first try */ 527 struct scatterlist sg[1]; /* MUST BE last item */ 528} ; 529 530/* The OnStream tape drive descriptor */ 531struct osst_tape { 532 struct scsi_driver *driver; 533 unsigned capacity; 534 struct scsi_device *device; 535 struct semaphore lock; /* for serialization */ 536 struct completion wait; /* for SCSI commands */ 537 struct osst_buffer * buffer; 538 539 /* Drive characteristics */ 540 unsigned char omit_blklims; 541 unsigned char do_auto_lock; 542 unsigned char can_bsr; 543 unsigned char can_partitions; 544 unsigned char two_fm; 545 unsigned char fast_mteom; 546 unsigned char restr_dma; 547 unsigned char scsi2_logical; 548 unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */ 549 unsigned char pos_unknown; /* after reset position unknown */ 550 int write_threshold; 551 int timeout; /* timeout for normal commands */ 552 int long_timeout; /* timeout for commands known to take long time*/ 553 554 /* Mode characteristics */ 555 struct st_modedef modes[ST_NBR_MODES]; 556 int current_mode; 557 558 /* Status variables */ 559 int partition; 560 int new_partition; 561 int nbr_partitions; /* zero until partition support enabled */ 562 struct st_partstat ps[ST_NBR_PARTITIONS]; 563 unsigned char dirty; 564 unsigned char ready; 565 unsigned char write_prot; 566 unsigned char drv_write_prot; 567 unsigned char in_use; 568 unsigned char blksize_changed; 569 unsigned char density_changed; 570 unsigned char compression_changed; 571 unsigned char drv_buffer; 572 unsigned char density; 573 unsigned char door_locked; 574 unsigned char rew_at_close; 575 unsigned char inited; 576 int block_size; 577 int min_block; 578 int max_block; 579 int recover_count; /* from tape opening */ 580 int abort_count; 581 int write_count; 582 int read_count; 583 int recover_erreg; /* from last status call */ 584 /* 585 * OnStream specific data 586 */ 587 int os_fw_rev; /* the firmware revision * 10000 */ 588 unsigned char raw; /* flag OnStream raw access (32.5KB block size) */ 589 unsigned char poll; /* flag that this drive needs polling (IDE|firmware) */ 590 unsigned char frame_in_buffer; /* flag that the frame as per frame_seq_number 591 * has been read into STp->buffer and is valid */ 592 int frame_seq_number; /* logical frame number */ 593 int logical_blk_num; /* logical block number */ 594 unsigned first_frame_position; /* physical frame to be transferred to/from host */ 595 unsigned last_frame_position; /* physical frame to be transferd to/from tape */ 596 int cur_frames; /* current number of frames in internal buffer */ 597 int max_frames; /* max number of frames in internal buffer */ 598 char application_sig[5]; /* application signature */ 599 unsigned char fast_open; /* flag that reminds us we didn't check headers at open */ 600 unsigned short wrt_pass_cntr; /* write pass counter */ 601 int update_frame_cntr; /* update frame counter */ 602 int onstream_write_error; /* write error recovery active */ 603 int header_ok; /* header frame verified ok */ 604 int linux_media; /* reading linux-specifc media */ 605 int linux_media_version; 606 os_header_t * header_cache; /* cache is kept for filemark positions */ 607 int filemark_cnt; 608 int first_mark_ppos; 609 int last_mark_ppos; 610 int last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */ 611 int first_data_ppos; 612 int eod_frame_ppos; 613 int eod_frame_lfa; 614 int write_type; /* used in write error recovery */ 615 int read_error_frame; /* used in read error recovery */ 616 unsigned long cmd_start_time; 617 unsigned long max_cmd_time; 618 619#if DEBUG 620 unsigned char write_pending; 621 int nbr_finished; 622 int nbr_waits; 623 unsigned char last_cmnd[6]; 624 unsigned char last_sense[16]; 625#endif 626 struct gendisk *drive; 627} ; 628 629/* scsi tape command */ 630struct osst_request { 631 unsigned char cmd[MAX_COMMAND_SIZE]; 632 unsigned char sense[SCSI_SENSE_BUFFERSIZE]; 633 int result; 634 struct osst_tape *stp; 635 struct completion *waiting; 636}; 637 638/* Values of write_type */ 639#define OS_WRITE_DATA 0 640#define OS_WRITE_EOD 1 641#define OS_WRITE_NEW_MARK 2 642#define OS_WRITE_LAST_MARK 3 643#define OS_WRITE_HEADER 4 644#define OS_WRITE_FILLER 5 645 646/* Additional rw state */ 647#define OS_WRITING_COMPLETE 3