OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [scsi/] [osst.h] - Blame information for rev 1780

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.