11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * $Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $ 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/byteorder.h> 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/completion.h> 74390e60163979621f59e3a25a260289986eacb85Matthias Kaehlcke#include <linux/mutex.h> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* FIXME - rename and use the following two types or delete them! 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and the types really should go to st.h anyway... 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * INQUIRY packet command - Data Format (From Table 6-8 of QIC-157C) 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned device_type :5; /* Peripheral Device Type */ 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */ 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6t0 :7; /* Reserved */ 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned rmb :1; /* Removable Medium Bit */ 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ansi_version :3; /* ANSI Version */ 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ecma_version :3; /* ECMA Version */ 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned iso_version :2; /* ISO Version */ 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned response_format :4; /* Response Data Format */ 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved3_45 :2; /* Reserved */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved3_6 :1; /* TrmIOP - Reserved */ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved3_7 :1; /* AENC - Reserved */ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 additional_length; /* Additional Length (total_length-4) */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 rsv5, rsv6, rsv7; /* Reserved */ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 vendor_id[8]; /* Vendor Identification */ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 product_id[16]; /* Product Identification */ 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 revision_level[4]; /* Revision Level */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 vendor_specific[20]; /* Vendor Specific - Optional */ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved56t95[40]; /* Reserved - Optional */ 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Additional information may be returned */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} idetape_inquiry_result_t; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * READ POSITION packet command - Data Format (From Table 6-57) 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved0_10 :2; /* Reserved */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned bpu :1; /* Block Position Unknown */ 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved0_543 :3; /* Reserved */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned eop :1; /* End Of Partition */ 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned bop :1; /* Beginning Of Partition */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 partition; /* Partition Number */ 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved2, reserved3; /* Reserved */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 first_block; /* First Block Location */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 last_block; /* Last Block Location (Optional) */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved12; /* Reserved */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 blocks_in_buffer[3]; /* Blocks In Buffer - (Optional) */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 bytes_in_buffer; /* Bytes In Buffer (Optional) */ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} idetape_read_position_result_t; 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Follows structures which are related to the SELECT SENSE / MODE SENSE 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * packet commands. 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPRESSION_PAGE 0x0f 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPRESSION_PAGE_LENGTH 16 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CAPABILITIES_PAGE 0x2a 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CAPABILITIES_PAGE_LENGTH 20 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TAPE_PARAMTR_PAGE 0x2b 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TAPE_PARAMTR_PAGE_LENGTH 16 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NUMBER_RETRIES_PAGE 0x2f 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NUMBER_RETRIES_PAGE_LENGTH 4 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BLOCK_SIZE_PAGE 0x30 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BLOCK_SIZE_PAGE_LENGTH 4 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUFFER_FILLING_PAGE 0x33 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUFFER_FILLING_PAGE_LENGTH 4 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VENDOR_IDENT_PAGE 0x36 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VENDOR_IDENT_PAGE_LENGTH 8 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LOCATE_STATUS_PAGE 0x37 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LOCATE_STATUS_PAGE_LENGTH 0 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MODE_HEADER_LENGTH 4 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * REQUEST SENSE packet command result - Data Format. 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned error_code :7; /* Current of deferred errors */ 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned valid :1; /* The information field conforms to QIC-157C */ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved1 :8; /* Segment Number - Reserved */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sense_key :4; /* Sense Key */ 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2_4 :1; /* Reserved */ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ili :1; /* Incorrect Length Indicator */ 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned eom :1; /* End Of Medium */ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned filemark :1; /* Filemark */ 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 information __attribute__ ((packed)); 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 asl; /* Additional sense length (n-7) */ 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 command_specific; /* Additional command specific information */ 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 asc; /* Additional Sense Code */ 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 ascq; /* Additional Sense Code Qualifier */ 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 replaceable_unit_code; /* Field Replaceable Unit Code */ 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sk_specific1 :7; /* Sense Key Specific */ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sksv :1; /* Sense Key Specific information is valid */ 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 sk_specific2; /* Sense Key Specific */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 sk_specific3; /* Sense Key Specific */ 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad[2]; /* Padding to 20 bytes */ 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} idetape_request_sense_result_t; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Mode Parameter Header for the MODE SENSE packet command 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mode_data_length; /* Length of the following data transfer */ 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 medium_type; /* Medium Type */ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 dsp; /* Device Specific Parameter */ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 bdl; /* Block Descriptor Length */ 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_mode_parameter_header_t; 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Mode Parameter Block Descriptor the MODE SENSE packet command 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Support for block descriptors is optional. 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 density_code; /* Medium density code */ 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 blocks[3]; /* Number of blocks */ 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved4; /* Reserved */ 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 length[3]; /* Block Length */ 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_parameter_block_descriptor_t; 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The Data Compression Page, as returned by the MODE SENSE packet command. 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved0 :1; /* Reserved */ 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page Code - Should be 0xf */ 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page Code - Should be 0xf */ 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved0 :1; /* Reserved */ 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 page_length; /* Page Length - Should be 14 */ 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dce :1; /* Data Compression Enable */ 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dcc :1; /* Data Compression Capable */ 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2 :6; /* Reserved */ 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2 :6; /* Reserved */ 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dcc :1; /* Data Compression Capable */ 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dce :1; /* Data Compression Enable */ 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dde :1; /* Data Decompression Enable */ 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned red :2; /* Report Exception on Decompression */ 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved3 :5; /* Reserved */ 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved3 :5; /* Reserved */ 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned red :2; /* Report Exception on Decompression */ 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned dde :1; /* Data Decompression Enable */ 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ca; /* Compression Algorithm */ 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 da; /* Decompression Algorithm */ 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved[4]; /* Reserved */ 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_data_compression_page_t; 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The Medium Partition Page, as returned by the MODE SENSE packet command. 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; /* Reserved */ 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page Code - Should be 0x11 */ 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page Code - Should be 0x11 */ 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; /* Reserved */ 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 page_length; /* Page Length - Should be 6 */ 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 map; /* Maximum Additional Partitions - Should be 0 */ 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 apd; /* Additional Partitions Defined - Should be 0 */ 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned fdp :1; /* Fixed Data Partitions */ 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sdp :1; /* Should be 0 */ 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned idp :1; /* Should be 0 */ 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned psum :2; /* Should be 0 */ 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_012 :3; /* Reserved */ 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_012 :3; /* Reserved */ 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned psum :2; /* Should be 0 */ 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned idp :1; /* Should be 0 */ 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sdp :1; /* Should be 0 */ 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned fdp :1; /* Fixed Data Partitions */ 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mfr; /* Medium Format Recognition */ 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved[2]; /* Reserved */ 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_medium_partition_page_t; 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Capabilities and Mechanical Status Page 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_67 :2; 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x2a */ 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x2a */ 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_67 :2; 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 page_length; /* Page Length - Should be 0x12 */ 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved2, reserved3; 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_67 :2; 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sprev :1; /* Supports SPACE in the reverse direction */ 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_1234 :4; 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ro :1; /* Read Only Mode */ 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ro :1; /* Read Only Mode */ 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_1234 :4; 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned sprev :1; /* Supports SPACE in the reverse direction */ 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved4_67 :2; 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_67 :2; 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned qfa :1; /* Supports the QFA two partition formats */ 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_4 :1; 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned efmt :1; /* Supports ERASE command initiated formatting */ 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_012 :3; 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_012 :3; 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned efmt :1; /* Supports ERASE command initiated formatting */ 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_4 :1; 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned qfa :1; /* Supports the QFA two partition formats */ 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved5_67 :2; 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned cmprs :1; /* Supports data compression */ 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ecc :1; /* Supports error correction */ 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved6_45 :2; /* Reserved */ 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned eject :1; /* The device can eject the volume */ 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned prevent :1; /* The device defaults in the prevent state after power up */ 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned locked :1; /* The volume is locked */ 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned lock :1; /* Supports locking the volume */ 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned lock :1; /* Supports locking the volume */ 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned locked :1; /* The volume is locked */ 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned prevent :1; /* The device defaults in the prevent state after power up */ 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned eject :1; /* The device can eject the volume */ 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved6_45 :2; /* Reserved */ 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ecc :1; /* Supports error correction */ 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned cmprs :1; /* Supports data compression */ 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */ 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* transfers for slow buffer memory ??? */ 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Also 32768 block size in some cases */ 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved7_3_6 :4; 2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk1024 :1; /* Supports 1024 bytes block size */ 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk512 :1; /* Supports 512 bytes block size */ 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved7_0 :1; 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved7_0 :1; 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk512 :1; /* Supports 512 bytes block size */ 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk1024 :1; /* Supports 1024 bytes block size */ 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved7_3_6 :4; 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */ 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* transfers for slow buffer memory ??? */ 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Also 32768 block size in some cases */ 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 29295389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 max_speed; /* Maximum speed supported in KBps */ 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved10, reserved11; 29495389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 ctl; /* Continuous Transfer Limit in blocks */ 29595389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 speed; /* Current Speed, in KBps */ 29695389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 buffer_size; /* Buffer Size, in 512 bytes */ 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved18, reserved19; 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_capabilities_page_t; 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Block Size Page 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; 3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x30 */ 3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x30 */ 3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; 3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 page_length; /* Page Length - Should be 2 */ 3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved2; 3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned one :1; 3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2_6 :1; 3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned record32_5 :1; 3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned record32 :1; 3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2_23 :2; 3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned play32_5 :1; 3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned play32 :1; 3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned play32 :1; 3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned play32_5 :1; 3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2_23 :2; 3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned record32 :1; 3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned record32_5 :1; 3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved2_6 :1; 3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned one :1; 3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_block_size_page_t; 3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Tape Parameters Page 3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(__BIG_ENDIAN_BITFIELD) 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x2b */ 3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(__LITTLE_ENDIAN_BITFIELD) 3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned page_code :6; /* Page code - Should be 0x2b */ 3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned reserved1_6 :1; 3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned ps :1; 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "Please fix <asm/byteorder.h>" 3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved2; 3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 density; 3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved3,reserved4; 35695389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 segtrk; 35795389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 trks; 3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved5,reserved6,reserved7,reserved8,reserved9,reserved10; 3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} osst_tape_paramtr_page_t; 3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* OnStream definitions */ 3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_CONFIG_PARTITION (0xff) 3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_DATA_PARTITION (0) 3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_PARTITION_VERSION (1) 3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * partition 3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_partition_s { 3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 partition_num; 3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 par_desc_ver; 37395389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 wrt_pass_cntr; 37495389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 first_frame_ppos; 37595389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_frame_ppos; 37695389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 eod_frame_ppos; 3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_partition_t; 3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAT entry 3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_dat_entry_s { 38395389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 blk_sz; 38495389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 blk_cnt; 3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 flags; 3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved; 3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_dat_entry_t; 3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAT 3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_DAT_FLAGS_DATA (0xc) 3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_DAT_FLAGS_MARK (0x1) 3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_dat_s { 3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 dat_sz; 3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved1; 3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 entry_cnt; 3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved3; 4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_dat_entry_t dat_list[16]; 4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_dat_t; 4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Frame types 4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_TYPE_FILL (0) 4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_TYPE_EOD (1 << 0) 4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_TYPE_MARKER (1 << 1) 4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_TYPE_HEADER (1 << 3) 4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_TYPE_DATA (1 << 7) 4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * AUX 4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_aux_s { 41625985edcedea6396277003854657b5f3cb31a628Lucas De Marchi __be32 format_id; /* hardware compatibility AUX is based on */ 4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char application_sig[4]; /* driver used to write this media */ 41895389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 hdwr; /* reserved */ 41995389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 update_frame_cntr; /* for configuration frame */ 4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 frame_type; 4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 frame_type_reserved; 4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_18_19[2]; 4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_partition_t partition; 4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_36_43[8]; 42595389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 frame_seq_num; 42695389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 logical_blk_num_high; 42795389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 logical_blk_num; 4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_dat_t dat; 4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved188_191[4]; 43095389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 filemark_cnt; 43195389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 phys_fm; 43295389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_mark_ppos; 4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved204_223[20]; 4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * __u8 app_specific[32]; 4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux specific fields: 4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 44095389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 next_mark_ppos; /* when known, points to next marker */ 44195389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */ 4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 linux_specific[24]; 4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_256_511[256]; 4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_aux_t; 4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FM_TAB_MAX 1024 4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_fm_tab_s { 4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 fm_part_num; 4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_1; 4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 fm_tab_ent_sz; 4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_3; 45495389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 fm_tab_ent_cnt; 4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved6_15[10]; 45695389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 fm_tab_ent[OS_FM_TAB_MAX]; 4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_fm_tab_t; 4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_ext_trk_ey_s { 4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 et_part_num; 4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 fmt; 46295389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 fm_tab_off; 4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved4_7[4]; 46495389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_hlb_hi; 46595389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_hlb; 46695389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 last_pp; 4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved20_31[12]; 4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_ext_trk_ey_t; 4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_ext_trk_tb_s { 4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 nr_stream_part; 4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved_1; 4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 et_ent_sz; 4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved3_15[13]; 4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_ext_trk_ey_t dat_ext_trk_ey; 4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_ext_trk_ey_t qfa_ext_trk_ey; 4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_ext_trk_tb_t; 4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct os_header_s { 4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char ident_str[8]; 4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 major_rev; 4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 minor_rev; 48395389b86fd07660970a3e6498405d53037c035e9Al Viro __be16 ext_trk_tb_off; 4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved12_15[4]; 4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 pt_par_num; 4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 pt_reserved1_3[3]; 4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_partition_t partition[16]; 48895389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 cfg_col_width; 48995389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 dat_col_width; 49095389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 qfa_col_width; 4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 cartridge[16]; 4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved304_511[208]; 49395389b86fd07660970a3e6498405d53037c035e9Al Viro __be32 old_filemark_list[16680/4]; /* in ADR 1.4 __u8 track_table[16680] */ 4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_ext_trk_tb_t ext_track_tb; 4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved17272_17735[464]; 4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_fm_tab_t dat_fm_tab; 4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_fm_tab_t qfa_fm_tab; 4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u8 reserved25960_32767[6808]; 4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} os_header_t; 5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OnStream ADRL frame 5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_FRAME_SIZE (32 * 1024 + 512) 5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_DATA_SIZE (32 * 1024) 5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_AUX_SIZE (512) 5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//#define OSST_MAX_SG 2 5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The OnStream tape buffer descriptor. */ 5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct osst_buffer { 5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char in_use; 5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char dma; /* DMA-able buffer */ 5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_size; 5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_blocks; 5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_bytes; 5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int read_pointer; 5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int writing; 5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int midlevel_result; 5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int syscall_result; 5215e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede struct osst_request *last_SRpnt; 5225e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede struct st_cmdstatus cmdstat; 52326243043f207b3faa00594a33e10b2103205f27bFUJITA Tomonori struct rq_map_data map_data; 5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char *b_data; 5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_aux_t *aux; /* onstream AUX structure at end of each block */ 5261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short use_sg; /* zero or number of s/g segments for this adapter */ 5271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short sg_segs; /* number of segments in s/g list */ 5281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short orig_sg_segs; /* number of segments allocated at first try */ 5291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scatterlist sg[1]; /* MUST BE last item */ 5301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} ; 5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The OnStream tape drive descriptor */ 5331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct osst_tape { 5341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scsi_driver *driver; 5351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned capacity; 5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scsi_device *device; 5374390e60163979621f59e3a25a260289986eacb85Matthias Kaehlcke struct mutex lock; /* for serialization */ 5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct completion wait; /* for SCSI commands */ 5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct osst_buffer * buffer; 5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Drive characteristics */ 5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char omit_blklims; 5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_auto_lock; 5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char can_bsr; 5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char can_partitions; 5461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char two_fm; 5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char fast_mteom; 5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char restr_dma; 5491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char scsi2_logical; 5501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */ 5511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char pos_unknown; /* after reset position unknown */ 5521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int write_threshold; 5531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int timeout; /* timeout for normal commands */ 5541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int long_timeout; /* timeout for commands known to take long time*/ 5551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Mode characteristics */ 5571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_modedef modes[ST_NBR_MODES]; 5581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int current_mode; 5591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Status variables */ 5611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int partition; 5621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int new_partition; 5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_partitions; /* zero until partition support enabled */ 5641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_partstat ps[ST_NBR_PARTITIONS]; 5651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char dirty; 5661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char ready; 5671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char write_prot; 5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char drv_write_prot; 5691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char in_use; 5701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char blksize_changed; 5711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char density_changed; 5721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char compression_changed; 5731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char drv_buffer; 5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char density; 5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char door_locked; 5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char rew_at_close; 5771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char inited; 5781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int block_size; 5791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int min_block; 5801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int max_block; 5811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int recover_count; /* from tape opening */ 5821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int abort_count; 5831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int write_count; 5841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int read_count; 5851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int recover_erreg; /* from last status call */ 5861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 5871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OnStream specific data 5881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 5891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int os_fw_rev; /* the firmware revision * 10000 */ 5901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char raw; /* flag OnStream raw access (32.5KB block size) */ 5911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char poll; /* flag that this drive needs polling (IDE|firmware) */ 5921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char frame_in_buffer; /* flag that the frame as per frame_seq_number 5931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * has been read into STp->buffer and is valid */ 5941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int frame_seq_number; /* logical frame number */ 5951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int logical_blk_num; /* logical block number */ 5961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned first_frame_position; /* physical frame to be transferred to/from host */ 5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned last_frame_position; /* physical frame to be transferd to/from tape */ 5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int cur_frames; /* current number of frames in internal buffer */ 5991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int max_frames; /* max number of frames in internal buffer */ 6001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char application_sig[5]; /* application signature */ 6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char fast_open; /* flag that reminds us we didn't check headers at open */ 6021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short wrt_pass_cntr; /* write pass counter */ 6031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int update_frame_cntr; /* update frame counter */ 6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int onstream_write_error; /* write error recovery active */ 6051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int header_ok; /* header frame verified ok */ 6061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int linux_media; /* reading linux-specifc media */ 6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int linux_media_version; 6081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds os_header_t * header_cache; /* cache is kept for filemark positions */ 6091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int filemark_cnt; 6101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int first_mark_ppos; 6111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int last_mark_ppos; 6121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */ 6131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int first_data_ppos; 6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int eod_frame_ppos; 6151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int eod_frame_lfa; 6161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int write_type; /* used in write error recovery */ 6171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int read_error_frame; /* used in read error recovery */ 6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long cmd_start_time; 6191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long max_cmd_time; 6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if DEBUG 6221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char write_pending; 6231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_finished; 6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_waits; 6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char last_cmnd[6]; 6261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char last_sense[16]; 6271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 6281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct gendisk *drive; 6291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} ; 6301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6315e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede/* scsi tape command */ 6325e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riedestruct osst_request { 6335e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede unsigned char cmd[MAX_COMMAND_SIZE]; 6345e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede unsigned char sense[SCSI_SENSE_BUFFERSIZE]; 6355e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede int result; 6365e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede struct osst_tape *stp; 6375e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede struct completion *waiting; 63826243043f207b3faa00594a33e10b2103205f27bFUJITA Tomonori struct bio *bio; 6395e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede}; 6405e6575c051f3313feb9fe1aad61263b3560df5ccWillem Riede 6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values of write_type */ 6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_DATA 0 6431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_EOD 1 6441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_NEW_MARK 2 6451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_LAST_MARK 3 6461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_HEADER 4 6471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITE_FILLER 5 6481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Additional rw state */ 6501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OS_WRITING_COMPLETE 3 651