summaryrefslogtreecommitdiff
path: root/wodim/scsimmc.h
diff options
context:
space:
mode:
Diffstat (limited to 'wodim/scsimmc.h')
-rw-r--r--wodim/scsimmc.h593
1 files changed, 593 insertions, 0 deletions
diff --git a/wodim/scsimmc.h b/wodim/scsimmc.h
new file mode 100644
index 0000000..a0092fc
--- /dev/null
+++ b/wodim/scsimmc.h
@@ -0,0 +1,593 @@
+/*
+ * 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 */