📄 osst.h
字号:
#if defined(__BIG_ENDIAN_BITFIELD) unsigned one :1; unsigned reserved2_6 :1; unsigned record32_5 :1; unsigned record32 :1; unsigned reserved2_23 :2; unsigned play32_5 :1; unsigned play32 :1;#elif defined(__LITTLE_ENDIAN_BITFIELD) unsigned play32 :1; unsigned play32_5 :1; unsigned reserved2_23 :2; unsigned record32 :1; unsigned record32_5 :1; unsigned reserved2_6 :1; unsigned one :1;#else#error "Please fix <asm/byteorder.h>"#endif} osst_block_size_page_t;/* * Tape Parameters Page */typedef struct {#if defined(__BIG_ENDIAN_BITFIELD) unsigned ps :1; unsigned reserved1_6 :1; unsigned page_code :6; /* Page code - Should be 0x2b */#elif defined(__LITTLE_ENDIAN_BITFIELD) unsigned page_code :6; /* Page code - Should be 0x2b */ unsigned reserved1_6 :1; unsigned ps :1;#else#error "Please fix <asm/byteorder.h>"#endif u8 reserved2; u8 density; u8 reserved3,reserved4; u16 segtrk; u16 trks; u8 reserved5,reserved6,reserved7,reserved8,reserved9,reserved10;} osst_tape_paramtr_page_t;/* OnStream definitions */#define OS_CONFIG_PARTITION (0xff)#define OS_DATA_PARTITION (0)#define OS_PARTITION_VERSION (1)/* * partition */typedef struct os_partition_s { __u8 partition_num; __u8 par_desc_ver; __u16 wrt_pass_cntr; __u32 first_frame_ppos; __u32 last_frame_ppos; __u32 eod_frame_ppos;} os_partition_t;/* * DAT entry */typedef struct os_dat_entry_s { __u32 blk_sz; __u16 blk_cnt; __u8 flags; __u8 reserved;} os_dat_entry_t;/* * DAT */#define OS_DAT_FLAGS_DATA (0xc)#define OS_DAT_FLAGS_MARK (0x1)typedef struct os_dat_s { __u8 dat_sz; __u8 reserved1; __u8 entry_cnt; __u8 reserved3; os_dat_entry_t dat_list[16];} os_dat_t;/* * Frame types */#define OS_FRAME_TYPE_FILL (0)#define OS_FRAME_TYPE_EOD (1 << 0)#define OS_FRAME_TYPE_MARKER (1 << 1)#define OS_FRAME_TYPE_HEADER (1 << 3)#define OS_FRAME_TYPE_DATA (1 << 7)/* * AUX */typedef struct os_aux_s { __u32 format_id; /* hardware compability AUX is based on */ char application_sig[4]; /* driver used to write this media */ __u32 hdwr; /* reserved */ __u32 update_frame_cntr; /* for configuration frame */ __u8 frame_type; __u8 frame_type_reserved; __u8 reserved_18_19[2]; os_partition_t partition; __u8 reserved_36_43[8]; __u32 frame_seq_num; __u32 logical_blk_num_high; __u32 logical_blk_num; os_dat_t dat; __u8 reserved188_191[4]; __u32 filemark_cnt; __u32 phys_fm; __u32 last_mark_ppos; __u8 reserved204_223[20]; /* * __u8 app_specific[32]; * * Linux specific fields: */ __u32 next_mark_ppos; /* when known, points to next marker */ __u8 linux_specific[28]; __u8 reserved_256_511[256];} os_aux_t;#define OS_FM_TAB_MAX 1024typedef struct os_fm_tab_s { __u8 fm_part_num; __u8 reserved_1; __u8 fm_tab_ent_sz; __u8 reserved_3; __u16 fm_tab_ent_cnt; __u8 reserved6_15[10]; __u32 fm_tab_ent[OS_FM_TAB_MAX];} os_fm_tab_t;typedef struct os_ext_trk_ey_s { __u8 et_part_num; __u8 fmt; __u16 fm_tab_off; __u8 reserved4_7[4]; __u32 last_hlb_hi; __u32 last_hlb; __u32 last_pp; __u8 reserved20_31[12];} os_ext_trk_ey_t;typedef struct os_ext_trk_tb_s { __u8 nr_stream_part; __u8 reserved_1; __u8 et_ent_sz; __u8 reserved3_15[13]; os_ext_trk_ey_t dat_ext_trk_ey; os_ext_trk_ey_t qfa_ext_trk_ey;} os_ext_trk_tb_t;typedef struct os_header_s { char ident_str[8]; __u8 major_rev; __u8 minor_rev; __u16 ext_trk_tb_off; __u8 reserved12_15[4]; __u8 pt_par_num; __u8 pt_reserved1_3[3]; os_partition_t partition[16]; __u32 cfg_col_width; __u32 dat_col_width; __u32 qfa_col_width; __u8 cartridge[16]; __u8 reserved304_511[208]; __u32 old_filemark_list[16680/4]; /* in ADR 1.4 __u8 track_table[16680] */ os_ext_trk_tb_t ext_track_tb; __u8 reserved17272_17735[464]; os_fm_tab_t dat_fm_tab; os_fm_tab_t qfa_fm_tab; __u8 reserved25960_32767[6808];} os_header_t;/* * OnStream ADRL frame */#define OS_FRAME_SIZE (32 * 1024 + 512)#define OS_DATA_SIZE (32 * 1024)#define OS_AUX_SIZE (512)//#define OSST_MAX_SG 2/* The tape buffer descriptor. */typedef struct { unsigned char in_use; unsigned char dma; /* DMA-able buffer */ int buffer_size; int buffer_blocks; int buffer_bytes; int read_pointer; int writing; int midlevel_result; int syscall_result; Scsi_Request *last_SRpnt; unsigned char *b_data; os_aux_t *aux; /* onstream AUX structure at end of each block */ unsigned short use_sg; /* zero or number of segments for this adapter */ unsigned short sg_segs; /* total number of allocated segments */ unsigned short orig_sg_segs; /* number of segments allocated at first try */ struct scatterlist sg[1]; /* MUST BE last item */} OSST_buffer;/* The tape drive descriptor */typedef struct { kdev_t devt; unsigned capacity; Scsi_Device* device; struct semaphore lock; /* for serialization */ struct semaphore sem; /* for SCSI commands */ OSST_buffer * buffer; /* Drive characteristics */ unsigned char omit_blklims; unsigned char do_auto_lock; unsigned char can_bsr; unsigned char can_partitions; unsigned char two_fm; unsigned char fast_mteom; unsigned char restr_dma; unsigned char scsi2_logical; unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */ int write_threshold; int timeout; /* timeout for normal commands */ int long_timeout; /* timeout for commands known to take long time*/ /* Mode characteristics */ ST_mode modes[ST_NBR_MODES]; int current_mode;#ifdef CONFIG_DEVFS_FS devfs_handle_t de_r[ST_NBR_MODES]; /* Rewind entries */ devfs_handle_t de_n[ST_NBR_MODES]; /* No-rewind entries */#endif /* Status variables */ int partition; int new_partition; int nbr_partitions; /* zero until partition support enabled */ ST_partstat ps[ST_NBR_PARTITIONS]; unsigned char dirty; unsigned char ready; unsigned char write_prot; unsigned char drv_write_prot; unsigned char in_use; unsigned char blksize_changed; unsigned char density_changed; unsigned char compression_changed; unsigned char drv_buffer; unsigned char density; unsigned char door_locked; unsigned char rew_at_close; unsigned char inited; int block_size; int min_block; int max_block; int recover_count; /* from tape opening */ int recover_erreg; /* from last status call */ /* * OnStream specific data */ int os_fw_rev; /* the firmware revision * 10000 */ unsigned char raw; /* flag OnStream raw access (32.5KB block size) */ unsigned char poll; /* flag that this drive needs polling (IDE|firmware) */ unsigned char logical_blk_in_buffer; /* flag that the block as per logical_blk_num * has been read into STp->buffer and is valid */ int logical_blk_num; /* logical block number */ unsigned first_frame_position; /* physical frame to be transfered to/from host */ unsigned last_frame_position; /* physical frame to be transferd to/from tape */ int cur_frames; /* current number of frames in internal buffer */ int max_frames; /* max number of frames in internal buffer */ char application_sig[5]; /* application signature */ unsigned char fast_open; /* flag that reminds us we didn't check headers at open */ unsigned short wrt_pass_cntr; /* write pass counter */ int update_frame_cntr; /* update frame counter */ int onstream_write_error; /* write error recovery active */ int header_ok; /* header frame verified ok */ int linux_media; /* reading linux-specifc media */ int linux_media_version; os_header_t * header_cache; /* cache is kept for filemark positions */ int filemark_cnt; int first_mark_ppos; int last_mark_ppos; int first_data_ppos; int eod_frame_ppos; int eod_frame_lfa; int write_type; /* used in write error recovery */ int read_error_frame; /* used in read error recovery */ unsigned long cmd_start_time; unsigned long max_cmd_time;#if DEBUG unsigned char write_pending; int nbr_finished; int nbr_waits; unsigned char last_cmnd[6]; unsigned char last_sense[16];#endif} OS_Scsi_Tape;/* Values of write_type */#define OS_WRITE_DATA 0#define OS_WRITE_EOD 1#define OS_WRITE_NEW_MARK 2#define OS_WRITE_LAST_MARK 3#define OS_WRITE_HEADER 4#define OS_WRITE_FILLER 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -