Logo Search packages:      
Sourcecode: cdrkit version File versions  Download package

scsimmc.h

/*
 * This file has been modified for the cdrkit suite.
 *
 * The behaviour and appearence of the program code below can differ to a major
 * extent from the version distributed by the original author(s).
 *
 * For details, see Changelog file distributed with the cdrkit package. If you
 * received this file from another source then ask the distributing person for
 * a log of modifications.
 *
 */

/* @(#)scsimmc.h  1.11 04/03/01 Copyright 1997-2004 J. Schilling */
/*
 *    Definitions for SCSI/mmc compliant drives
 *
 *    Copyright (c) 1997-2004 J. Schilling
 */
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; see the file COPYING.  If not, write to the Free Software
 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef     _SCSIMMC_H
#define     _SCSIMMC_H

#include <utypes.h>
#include <btorder.h>

typedef struct opc {
      Uchar opc_speed[2];
      Uchar opc_val[6];
} opc_t;

#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct disk_info {
      Uchar data_len[2];            /* Data len without this info */
      Ucbit disk_status : 2;  /* Status of the disk         */
      Ucbit sess_status : 2;  /* Status of last session     */
      Ucbit erasable    : 1;  /* Disk is erasable           */
      Ucbit res2        : 3;  /* Reserved             */
      Uchar first_track;            /* # of first track on disk   */
      Uchar numsess;          /* # of sessions        */
      Uchar first_track_ls;         /* First track in last sessaion     */
      Uchar last_track_ls;          /* Last track in last sessaion      */
      Ucbit bg_format_stat    : 2;  /* Background format status   */
      Ucbit dbit        : 1;  /* Dirty Bit of defect table  */
      Ucbit res7_34           : 2;  /* Reserved             */
      Ucbit uru         : 1;  /* This is an unrestricted disk     */
      Ucbit dbc_v       : 1;  /* Disk bar code valid        */
      Ucbit did_v       : 1;  /* Disk id valid        */
      Uchar disk_type;        /* Disk type                  */
      Uchar res9[3];          /* Reserved             */
      Uchar disk_id[4];       /* Disk identification        */
      Uchar last_lead_in[4];  /* Last session lead in time  */
      Uchar last_lead_out[4]; /* Last session lead out time */
      Uchar disk_barcode[8];  /* Disk bar code        */
      Uchar res32;                  /* Reserved             */
      Uchar num_opc_entries;  /* # of OPC table entries     */
      opc_t opc_table[1];           /* OPC table                  */
};

#else                   /* Motorola bitorder */

struct disk_info {
      Uchar data_len[2];            /* Data len without this info */
      Ucbit res2        : 3;  /* Reserved             */
      Ucbit erasable    : 1;  /* Disk is erasable           */
      Ucbit sess_status : 2;  /* Status of last session     */
      Ucbit disk_status : 2;  /* Status of the disk         */
      Uchar first_track;            /* # of first track on disk   */
      Uchar numsess;          /* # of sessions        */
      Uchar first_track_ls;         /* First track in last sessaion     */
      Uchar last_track_ls;          /* Last track in last sessaion      */
      Ucbit did_v       : 1;  /* Disk id valid        */
      Ucbit dbc_v       : 1;  /* Disk bar code valid        */
      Ucbit uru         : 1;  /* This is an unrestricted disk     */
      Ucbit res7_34           : 2;  /* Reserved             */
      Ucbit dbit        : 1;  /* Dirty Bit of defect table  */
      Ucbit bg_format_stat    : 2;  /* Background format status   */
      Uchar disk_type;        /* Disk type                  */
      Uchar res9[3];          /* Reserved             */
      Uchar disk_id[4];       /* Disk identification        */
      Uchar last_lead_in[4];  /* Last session lead in time  */
      Uchar last_lead_out[4]; /* Last session lead out time */
      Uchar disk_barcode[8];  /* Disk bar code        */
      Uchar res32;                  /* Reserved             */
      Uchar num_opc_entries;  /* # of OPC table entries     */
      opc_t opc_table[1];           /* OPC table                  */
};

#endif

struct cd_mode_data {
      struct scsi_mode_header header;
      union cd_pagex    {
            struct cd_mode_page_05  page05;
            struct cd_mode_page_2A  page2A;
      } pagex;
};

struct tocheader {
      Uchar len[2];
      Uchar first;
      Uchar last;
};

/*
 * Full TOC entry
 */
struct ftrackdesc {
      Uchar sess_number;

#if defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
      Ucbit control           : 4;
      Ucbit adr         : 4;
#else                         /* Motorola byteorder */
      Ucbit adr         : 4;
      Ucbit control           : 4;
#endif

      Uchar track;
      Uchar point;
      Uchar amin;
      Uchar asec;
      Uchar aframe;
      Uchar res7;
      Uchar pmin;
      Uchar psec;
      Uchar pframe;
};

struct fdiskinfo {
      struct tocheader  hd;
      struct ftrackdesc desc[1];
};



#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct atipdesc {
      Ucbit ref_speed   : 3;  /* Reference speed            */
      Ucbit res4_3            : 1;  /* Reserved             */
      Ucbit ind_wr_power      : 3;  /* Indicative tgt writing power     */
      Ucbit res4_7            : 1;  /* Reserved (must be "1")     */
      Ucbit res5_05           : 6;  /* Reserved             */
      Ucbit uru         : 1;  /* Disk is for unrestricted use     */
      Ucbit res5_7            : 1;  /* Reserved (must be "0")     */
      Ucbit a3_v        : 1;  /* A 3 Values valid           */
      Ucbit a2_v        : 1;  /* A 2 Values valid           */
      Ucbit a1_v        : 1;  /* A 1 Values valid           */
      Ucbit sub_type    : 3;  /* Disc sub type        */
      Ucbit erasable    : 1;  /* Disk is erasable           */
      Ucbit res6_7            : 1;  /* Reserved (must be "1")     */
      Uchar lead_in[4];       /* Lead in time               */
      Uchar lead_out[4];            /* Lead out time        */
      Uchar res15;                  /* Reserved             */
      Ucbit clv_high    : 4;  /* Highes usable CLV recording speed */
      Ucbit clv_low           : 3;  /* Lowest usable CLV recording speed */
      Ucbit res16_7           : 1;  /* Reserved (must be "0")     */
      Ucbit res17_0           : 1;  /* Reserved             */
      Ucbit tgt_y_pow   : 3;  /* Tgt y val of the power mod fun */
      Ucbit power_mult  : 3;  /* Power multiplication factor      */
      Ucbit res17_7           : 1;  /* Reserved (must be "0")     */
      Ucbit res_18_30   : 4;  /* Reserved             */
      Ucbit rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
      Ucbit res18_7           : 1;  /* Reserved (must be "1")     */
      Uchar res19;                  /* Reserved             */
      Uchar a2[3];                  /* A 2 Values                 */
      Uchar res23;                  /* Reserved             */
      Uchar a3[3];                  /* A 3 Vaules                 */
      Uchar res27;                  /* Reserved             */
};

#else                   /* Motorola bitorder */

struct atipdesc {
      Ucbit res4_7            : 1;  /* Reserved (must be "1")     */
      Ucbit ind_wr_power      : 3;  /* Indicative tgt writing power     */
      Ucbit res4_3            : 1;  /* Reserved             */
      Ucbit ref_speed   : 3;  /* Reference speed            */
      Ucbit res5_7            : 1;  /* Reserved (must be "0")     */
      Ucbit uru         : 1;  /* Disk is for unrestricted use     */
      Ucbit res5_05           : 6;  /* Reserved             */
      Ucbit res6_7            : 1;  /* Reserved (must be "1")     */
      Ucbit erasable    : 1;  /* Disk is erasable           */
      Ucbit sub_type    : 3;  /* Disc sub type        */
      Ucbit a1_v        : 1;  /* A 1 Values valid           */
      Ucbit a2_v        : 1;  /* A 2 Values valid           */
      Ucbit a3_v        : 1;  /* A 3 Values valid           */
      Uchar lead_in[4];       /* Lead in time               */
      Uchar lead_out[4];            /* Lead out time        */
      Uchar res15;                  /* Reserved             */
      Ucbit res16_7           : 1;  /* Reserved (must be "0")     */
      Ucbit clv_low           : 3;  /* Lowest usable CLV recording speed */
      Ucbit clv_high    : 4;  /* Highes usable CLV recording speed */
      Ucbit res17_7           : 1;  /* Reserved (must be "0")     */
      Ucbit power_mult  : 3;  /* Power multiplication factor      */
      Ucbit tgt_y_pow   : 3;  /* Tgt y val of the power mod fun */
      Ucbit res17_0           : 1;  /* Reserved             */
      Ucbit res18_7           : 1;  /* Reserved (must be "1")     */
      Ucbit rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
      Ucbit res_18_30   : 4;  /* Reserved             */
      Uchar res19;                  /* Reserved             */
      Uchar a2[3];                  /* A 2 Values                 */
      Uchar res23;                  /* Reserved             */
      Uchar a3[3];                  /* A 3 Vaules                 */
      Uchar res27;                  /* Reserved             */
};

#endif

struct atipinfo {
      struct tocheader  hd;
      struct atipdesc         desc;
};

/*
 * XXX Check how we may merge Track_info & Rzone_info
 */
#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct track_info {
      Uchar data_len[2];            /* Data len without this info */
      Uchar track_number;           /* Track number for this info */
      Uchar session_number;         /* Session number for this info     */
      Uchar res4;             /* Reserved             */
      Ucbit track_mode  : 4;  /* Track mode (Q-sub control) */
      Ucbit copy        : 1;  /* This track is a higher copy      */
      Ucbit damage            : 1;  /* if 1 & nwa_valid 0: inc track*/
      Ucbit res5_67           : 2;  /* Reserved             */
      Ucbit data_mode   : 4;  /* Data mode of this track    */
      Ucbit fp          : 1;  /* This is a fixed packet track     */
      Ucbit packet            : 1;  /* This track is in packet mode     */
      Ucbit blank       : 1;  /* This is an invisible track */
      Ucbit rt          : 1;  /* This is a reserved track   */
      Ucbit nwa_valid   : 1;  /* Next writable addr valid   */
      Ucbit res7_17           : 7;  /* Reserved             */
      Uchar track_start[4];         /* Track start address        */
      Uchar next_writable_addr[4];  /* Next writable address      */
      Uchar free_blocks[4];         /* Free usr blocks in this track*/
      Uchar packet_size[4];         /* Packet size if in fixed mode     */
      Uchar track_size[4];          /* # of user data blocks in trk     */
};

#else                   /* Motorola bitorder */

struct track_info {
      Uchar data_len[2];            /* Data len without this info */
      Uchar track_number;           /* Track number for this info */
      Uchar session_number;         /* Session number for this info     */
      Uchar res4;             /* Reserved             */
      Ucbit res5_67           : 2;  /* Reserved             */
      Ucbit damage            : 1;  /* if 1 & nwa_valid 0: inc track*/
      Ucbit copy        : 1;  /* This track is a higher copy      */
      Ucbit track_mode  : 4;  /* Track mode (Q-sub control) */
      Ucbit rt          : 1;  /* This is a reserved track   */
      Ucbit blank       : 1;  /* This is an invisible track */
      Ucbit packet            : 1;  /* This track is in packet mode     */
      Ucbit fp          : 1;  /* This is a fixed packet track     */
      Ucbit data_mode   : 4;  /* Data mode of this track    */
      Ucbit res7_17           : 7;  /* Reserved             */
      Ucbit nwa_valid   : 1;  /* Next writable addr valid   */
      Uchar track_start[4];         /* Track start address        */
      Uchar next_writable_addr[4];  /* Next writable address      */
      Uchar free_blocks[4];         /* Free usr blocks in this track*/
      Uchar packet_size[4];         /* Packet size if in fixed mode     */
      Uchar track_size[4];          /* # of user data blocks in trk     */
};

#endif

/*
 * XXX Check how we may merge Track_info & Rzone_info
 */
#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct rzone_info {
      Uchar data_len[2];            /* Data len without this info */
      Uchar rzone_num_lsb;          /* RZone number LSB           */
      Uchar border_num_lsb;         /* Border number LSB          */
      Uchar res_4;                  /* Reserved             */
      Ucbit res5_04           : 5;  /* Reserved             */
      Ucbit damage            : 1;  /* Damaged RZone        */
      Ucbit res5_67           : 2;  /* Reserved             */
      Ucbit res6_04           : 5;  /* Reserved             */
      Ucbit incremental : 1;  /* RZone is to be written incremental */
      Ucbit blank       : 1;  /* RZone is blank       */
      Ucbit rt          : 1;  /* RZone is reserved          */
      Ucbit nwa_v       : 1;  /* Next WR address is valid   */
      Ucbit lra_v       : 1;  /* Last rec address is valid  */
      Ucbit res7_27           : 6;  /* Reserved             */
      Uchar rzone_start[4];         /* RZone start address        */
      Uchar next_recordable_addr[4]; /* Next recordable address   */
      Uchar free_blocks[4];         /* Free blocks in RZone       */
      Uchar block_factor[4];  /* # of sectors of disc acc unit */
      Uchar rzone_size[4];          /* RZone size                 */
      Uchar last_recorded_addr[4];  /* Last Recorded addr in RZone      */
      Uchar rzone_num_msb;          /* RZone number MSB           */
      Uchar border_num_msb;         /* Border number MSB          */
      Uchar res_34_35[2];           /* Reserved             */
};

#else                   /* Motorola bitorder */

struct rzone_info {
      Uchar data_len[2];            /* Data len without this info */
      Uchar rzone_num_lsb;          /* RZone number LSB           */
      Uchar border_num_lsb;         /* Border number LSB          */
      Uchar res_4;                  /* Reserved             */
      Ucbit res5_67           : 2;  /* Reserved             */
      Ucbit damage            : 1;  /* Damaged RZone        */
      Ucbit res5_04           : 5;  /* Reserved             */
      Ucbit rt          : 1;  /* RZone is reserved          */
      Ucbit blank       : 1;  /* RZone is blank       */
      Ucbit incremental : 1;  /* RZone is to be written incremental */
      Ucbit res6_04           : 5;  /* Reserved             */
      Ucbit res7_27           : 6;  /* Reserved             */
      Ucbit lra_v       : 1;  /* Last rec address is valid  */
      Ucbit nwa_v       : 1;  /* Next WR address is valid   */
      Uchar rzone_start[4];         /* RZone start address        */
      Uchar next_recordable_addr[4]; /* Next recordable address   */
      Uchar free_blocks[4];         /* Free blocks in RZone       */
      Uchar block_factor[4];  /* # of sectors of disc acc unit */
      Uchar rzone_size[4];          /* RZone size                 */
      Uchar last_recorded_addr[4];  /* Last Recorded addr in RZone      */
      Uchar rzone_num_msb;          /* RZone number MSB           */
      Uchar border_num_msb;         /* Border number MSB          */
      Uchar res_34_35[2];           /* Reserved             */
};

#endif

#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct dvd_structure_00 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Ucbit book_version      : 4;  /* DVD Book version           */
      Ucbit book_type   : 4;  /* DVD Book type        */
      Ucbit minimum_rate      : 4;  /* Minimum data rate (coded)  */
      Ucbit disc_size   : 4;  /* Disc size (coded)          */
      Ucbit layer_type  : 4;  /* Layer type                 */
      Ucbit track_path  : 1;  /* 0 = parallel, 1 = opposit dir*/
      Ucbit numlayers   : 2;  /* Number of Layers (0 == 1)  */
      Ucbit res2_7            : 1;  /* Reserved             */
      Ucbit track_density     : 4;  /* Track density (coded)      */
      Ucbit linear_density    : 4;  /* Linear data density (coded)      */
      Uchar res8;             /* Reserved             */
      Uchar phys_start[3];          /* Starting Physical sector # */
      Uchar res12;                  /* Reserved             */
      Uchar phys_end[3];            /* End physical data sector # */
      Uchar res16;                  /* Reserved             */
      Uchar end_layer0[3];          /* End sector # in layer      */
      Ucbit res20       : 7;  /* Reserved             */
      Ucbit bca         : 1;  /* BCA flag bit               */
};

#else                   /* Motorola bitorder */

struct dvd_structure_00 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Ucbit book_type   : 4;  /* DVD Book type        */
      Ucbit book_version      : 4;  /* DVD Book version           */
      Ucbit disc_size   : 4;  /* Disc size (coded)          */
      Ucbit minimum_rate      : 4;  /* Minimum data rate (coded)  */
      Ucbit res2_7            : 1;  /* Reserved             */
      Ucbit numlayers   : 2;  /* Number of Layers (0 == 1)  */
      Ucbit track_path  : 1;  /* 0 = parallel, 1 = opposit dir*/
      Ucbit layer_type  : 4;  /* Layer type                 */
      Ucbit linear_density    : 4;  /* Linear data density (coded)      */
      Ucbit track_density     : 4;  /* Track density (coded)      */
      Uchar res8;             /* Reserved             */
      Uchar phys_start[3];          /* Starting Physical sector # */
      Uchar res12;                  /* Reserved             */
      Uchar phys_end[3];            /* End physical data sector # */
      Uchar res16;                  /* Reserved             */
      Uchar end_layer0[3];          /* End sector # in layer      */
      Ucbit bca         : 1;  /* BCA flag bit               */
      Ucbit res20       : 7;  /* Reserved             */
};

#endif

struct dvd_structure_01 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar copyr_prot_type;  /* Copyright prot system type */
      Uchar region_mgt_info;  /* Region management info     */
      Uchar res67[2];         /* Reserved             */
};

struct dvd_structure_02 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar key_data[2048];         /* Disc Key data        */
};

struct dvd_structure_03 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar bca_info[1];            /* BCA information (12-188 bytes)*/
};

struct dvd_structure_04 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar man_info[2048];         /* Disc manufacturing info    */
};

#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */

struct dvd_structure_05 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Ucbit res4_03           : 4;  /* Reserved             */
      Ucbit cgms        : 2;  /* CGMS (see below)           */
      Ucbit res4_6            : 1;  /* Reserved             */
      Ucbit cpm         : 1;  /* This is copyrighted material     */
      Uchar res57[3];         /* Reserved             */
};

#else                   /* Motorola bitorder */

struct dvd_structure_05 {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Ucbit cpm         : 1;  /* This is copyrighted material     */
      Ucbit res4_6            : 1;  /* Reserved             */
      Ucbit cgms        : 2;  /* CGMS (see below)           */
      Ucbit res4_03           : 4;  /* Reserved             */
      Uchar res57[3];         /* Reserved             */
};

#endif

#define     CGMS_PERMITTED          0     /* Unlimited copy permitted   */
#define     CGMS_RES          1     /* Reserved             */
#define     CGMS_ONE_COPY           2     /* One copy permitted         */
#define     CGMS_NO_COPY            3     /* No copy permitted          */

struct dvd_structure_0D {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar last_rma_sector[2];     /* Last recorded RMA sector # */
      Uchar rmd_bytes[1];           /* Content of Record man area */
};

struct dvd_structure_0E {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar field_id;         /* Field ID (1)               */
      Uchar application_code; /* Disc Application code      */
      Uchar phys_data;        /* Disc Phisical Data         */
      Uchar last_recordable_addr[3]; /* Last addr of recordable area */
      Uchar res_a[2];         /* Reserved             */
      Uchar field_id_2;       /* Field ID (2)               */
      Uchar ind_wr_power;           /* Recommended writing power  */
      Uchar ind_wavelength;         /* Wavelength for ind_wr_power      */
      Uchar opt_wr_strategy[4];     /* Optimum write Strategy     */
      Uchar res_b[1];         /* Reserved             */
      Uchar field_id_3;       /* Field ID (3)               */
      Uchar man_id[6];        /* Manufacturer ID            */
      Uchar res_m1;                 /* Reserved             */
      Uchar field_id_4;       /* Field ID (4)               */
      Uchar man_id2[6];       /* Manufacturer ID            */
      Uchar res_m2;                 /* Reserved             */
};

struct dvd_structure_0F {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar res45[2];         /* Reserved             */
      Uchar random[2];        /* Random number        */
      Uchar year[4];          /* Year (ascii)               */
      Uchar month[2];         /* Month (ascii)        */
      Uchar day[2];                 /* Day (ascii)                */
      Uchar hour[2];          /* Hour (ascii)               */
      Uchar minute[2];        /* Minute (ascii)       */
      Uchar second[2];        /* Second (ascii)       */
};

struct dvd_structure_0F_w {
      Uchar data_len[2];            /* Data len without this info */
      Uchar res23[2];         /* Reserved             */
      Uchar res45[2];         /* Reserved             */
      Uchar year[4];          /* Year (ascii)               */
      Uchar month[2];         /* Month (ascii)        */
      Uchar day[2];                 /* Day (ascii)                */
      Uchar hour[2];          /* Hour (ascii)               */
      Uchar minute[2];        /* Minute (ascii)       */
      Uchar second[2];        /* Second (ascii)       */
};

struct mmc_cue {
      Uchar cs_ctladr;        /* CTL/ADR for this track     */
      Uchar cs_tno;                 /* This track number          */
      Uchar cs_index;         /* Index within this track    */
      Uchar cs_dataform;            /* Data form                  */
      Uchar cs_scms;          /* Serial copy management     */
      Uchar cs_min;                 /* Absolute time minutes      */
      Uchar cs_sec;                 /* Absolute time seconds      */
      Uchar cs_frame;         /* Absolute time frames       */
};

struct mmc_performance_header {
      Uchar p_datalen[4];           /* Performance Data length    */
#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
      Ucbit p_exept           :1;   /* Nominal vs. Exept. conditions*/
      Ucbit p_write           :1;   /* Write vs. Read performance */
      Ucbit p_res_4           :6;   /* Reserved bits...           */
#else                   /* Motorola bitorder */
      Ucbit p_res_4           :6;   /* Reserved bits...           */
      Ucbit p_write           :1;   /* Write vs. Read performance */
      Ucbit p_exept           :1;   /* Nominal vs. Exept. conditions*/
#endif
      Uchar p_res[3];         /* Reserved bytes       */
};


struct mmc_performance {            /* Type == 00 (nominal)       */
      Uchar start_lba[4];           /* Starting LBA               */
      Uchar start_perf[4];          /* Start Performance          */
      Uchar end_lba[4];       /* Ending LBA                 */
      Uchar end_perf[4];            /* Ending Performance         */
};

struct mmc_exceptions {             /* Type == 00 (execptions)    */
      Uchar lba[4];                 /* LBA                        */
      Uchar time[2];          /* Time                       */
};

struct mmc_write_speed {            /* Type == 00 (write speed)   */
#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
      Ucbit p_mrw       :1;   /* Suitable for mixed read/write*/
      Ucbit p_exact           :1;   /* Speed count for whole media      */
      Ucbit p_rdd       :1;   /* Media rotational control   */
      Ucbit p_wrc       :2;   /* Write rotational control   */
      Ucbit p_res       :3;   /* Reserved bits...           */
#else                   /* Motorola bitorder */
      Ucbit p_res       :3;   /* Reserved bits...           */
      Ucbit p_wrc       :2;   /* Write rotational control   */
      Ucbit p_rdd       :1;   /* Media rotational control   */
      Ucbit p_exact           :1;   /* Speed count for whole media      */
      Ucbit p_mrw       :1;   /* Suitable for mixed read/write*/
#endif
      Uchar res[3];                 /* Reserved Bytes       */
      Uchar end_lba[4];       /* Ending LBA                 */
      Uchar read_speed[4];          /* Read Speed                 */
      Uchar write_speed[4];         /* Write Speed                */
};

#define     WRC_DEF_RC  0           /* Media default rotational control */
#define     WRC_CAV           1           /* CAV                            */


struct mmc_streaming {              /* Performance for set streaming*/
#if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
      Ucbit p_ra        :1;   /* Random Acess               */
      Ucbit p_exact           :1;   /* Set values exactly         */
      Ucbit p_rdd       :1;   /* Restore unit defaults      */
      Ucbit p_wrc       :2;   /* Write rotational control   */
      Ucbit p_res       :3;   /* Reserved bits...           */
#else                   /* Motorola bitorder */
      Ucbit p_res       :3;   /* Reserved bits...           */
      Ucbit p_wrc       :2;   /* Write rotational control   */
      Ucbit p_rdd       :1;   /* Restore unit defaults      */
      Ucbit p_exact           :1;   /* Set values exactly         */
      Ucbit p_ra        :1;   /* Random Acess               */
#endif
      Uchar res[3];                 /* Reserved Bytes       */
      Uchar start_lba[4];           /* Starting LBA               */
      Uchar end_lba[4];       /* Ending LBA                 */
      Uchar read_size[4];           /* Read Size                  */
      Uchar read_time[4];           /* Read Time                  */
      Uchar write_size[4];          /* Write Size                 */
      Uchar write_time[4];          /* Write Time                 */
};

#endif      /* _SCSIMMC_H */

Generated by  Doxygen 1.6.0   Back to index