scsimmc.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:16k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)scsimmc.h 1.4 99/03/28 Copyright 1997 J. Schilling */
  2. /*
  3.  * Definitions for SCSI/mmc compliant drives
  4.  *
  5.  * Copyright (c) 1997 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef _SCSIMMC_H
  23. #define _SCSIMMC_H
  24. #include <utypes.h>
  25. #include <btorder.h>
  26. typedef struct opc {
  27. Uchar opc_speed[2];
  28. Uchar opc_val[6];
  29. } opc_t;
  30. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  31. struct disk_info {
  32. Uchar data_len[2]; /* Data len without this info */
  33. Ucbit disk_status : 2; /* Status of the disk */
  34. Ucbit sess_status : 2; /* Status of last session */
  35. Ucbit erasable : 1; /* Disk is erasable */
  36. Ucbit res2 : 3; /* Reserved */
  37. Uchar first_track; /* # of first track on disk */
  38. Uchar numsess; /* # of sessions */
  39. Uchar first_track_ls; /* First track in last sessaion */
  40. Uchar last_track_ls; /* Last track in last sessaion */
  41. Ucbit res7_04 : 5; /* Reserved */
  42. Ucbit uru : 1; /* This is an unrestricted disk */
  43. Ucbit dbc_v : 1; /* Disk bar code valid */
  44. Ucbit did_v : 1; /* Disk id valid */
  45. Uchar disk_type; /* Disk type */
  46. Uchar res9[3]; /* Reserved */
  47. Uchar disk_id[4]; /* Disk identification */
  48. Uchar last_lead_in[4]; /* Last session lead in time */
  49. Uchar last_lead_out[4]; /* Last session lead out time */
  50. Uchar disk_barcode[8]; /* Disk bar code */
  51. Uchar res32; /* Reserved */
  52. Uchar num_opc_entries; /* # of OPC table entries */
  53. opc_t opc_table[1]; /* OPC table  */
  54. };
  55. #else /* Motorola bitorder */
  56. struct disk_info {
  57. Uchar data_len[2]; /* Data len without this info */
  58. Ucbit res2 : 3; /* Reserved */
  59. Ucbit erasable : 1; /* Disk is erasable */
  60. Ucbit sess_status : 2; /* Status of last session */
  61. Ucbit disk_status : 2; /* Status of the disk */
  62. Uchar first_track; /* # of first track on disk */
  63. Uchar numsess; /* # of sessions */
  64. Uchar first_track_ls; /* First track in last sessaion */
  65. Uchar last_track_ls; /* Last track in last sessaion */
  66. Ucbit did_v : 1; /* Disk id valid */
  67. Ucbit dbc_v : 1; /* Disk bar code valid */
  68. Ucbit uru : 1; /* This is an unrestricted disk */
  69. Ucbit res7_04 : 5; /* Reserved */
  70. Uchar disk_type; /* Disk type */
  71. Uchar res9[3]; /* Reserved */
  72. Uchar disk_id[4]; /* Disk identification */
  73. Uchar last_lead_in[4]; /* Last session lead in time */
  74. Uchar last_lead_out[4]; /* Last session lead out time */
  75. Uchar disk_barcode[8]; /* Disk bar code */
  76. Uchar res32; /* Reserved */
  77. Uchar num_opc_entries; /* # of OPC table entries */
  78. opc_t opc_table[1]; /* OPC table  */
  79. };
  80. #endif
  81. struct cd_mode_data {
  82. struct scsi_mode_header header;
  83. union cd_pagex {
  84. struct cd_mode_page_05 page05;
  85. struct cd_mode_page_2A page2A;
  86. } pagex;
  87. };
  88. struct tocheader {
  89. char len[2];
  90. char first;
  91. char last;
  92. };
  93. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  94. struct atipdesc {
  95. Ucbit ref_speed : 3; /* Reference speed */
  96. Ucbit res4_3 : 1; /* Reserved */
  97. Ucbit ind_wr_power : 3; /* Indicative tgt writing power */
  98. Ucbit res4_7 : 1; /* Reserved (must be "1") */
  99. Ucbit res5_05 : 6; /* Reserved */
  100. Ucbit uru : 1; /* Disk is for unrestricted use */
  101. Ucbit res5_7 : 1; /* Reserved (must be "0") */
  102. Ucbit a3_v : 1; /* A 3 Values valid */
  103. Ucbit a2_v : 1; /* A 2 Values valid */
  104. Ucbit a1_v : 1; /* A 1 Values valid */
  105. Ucbit sub_type : 3; /* Disc sub type */
  106. Ucbit erasable : 1; /* Disk is erasable */
  107. Ucbit res6_7 : 1; /* Reserved (must be "1") */
  108. Uchar lead_in[4]; /* Lead in time */
  109. Uchar lead_out[4]; /* Lead out time */
  110. Uchar res15; /* Reserved */
  111. Ucbit clv_high : 4; /* Highes usable CLV recording speed */
  112. Ucbit clv_low : 3; /* Lowest usable CLV recording speed */
  113. Ucbit res16_7 : 1; /* Reserved (must be "0") */
  114. Ucbit res17_0 : 1; /* Reserved */
  115. Ucbit tgt_y_pow : 3; /* Tgt y val of the power mod fun */
  116. Ucbit power_mult : 3; /* Power multiplication factor */
  117. Ucbit res17_7 : 1; /* Reserved (must be "0") */
  118. Ucbit res_18_30 : 4; /* Reserved */
  119. Ucbit rerase_pwr_ratio: 3; /* Recommended erase/write power*/
  120. Ucbit res18_7 : 1; /* Reserved (must be "1") */
  121. Uchar res19; /* Reserved */
  122. Uchar a2[3]; /* A 2 Values */
  123. Uchar res23; /* Reserved */
  124. Uchar a3[3]; /* A 3 Vaules */
  125. Uchar res27; /* Reserved */
  126. };
  127. #else /* Motorola bitorder */
  128. struct atipdesc {
  129. Ucbit res4_7 : 1; /* Reserved (must be "1") */
  130. Ucbit ind_wr_power : 3; /* Indicative tgt writing power */
  131. Ucbit res4_3 : 1; /* Reserved */
  132. Ucbit ref_speed : 3; /* Reference speed */
  133. Ucbit res5_7 : 1; /* Reserved (must be "0") */
  134. Ucbit uru : 1; /* Disk is for unrestricted use */
  135. Ucbit res5_05 : 6; /* Reserved */
  136. Ucbit res6_7 : 1; /* Reserved (must be "1") */
  137. Ucbit erasable : 1; /* Disk is erasable */
  138. Ucbit sub_type : 3; /* Disc sub type */
  139. Ucbit a1_v : 1; /* A 1 Values valid */
  140. Ucbit a2_v : 1; /* A 2 Values valid */
  141. Ucbit a3_v : 1; /* A 3 Values valid */
  142. Uchar lead_in[4]; /* Lead in time */
  143. Uchar lead_out[4]; /* Lead out time */
  144. Uchar res15; /* Reserved */
  145. Ucbit res16_7 : 1; /* Reserved (must be "0") */
  146. Ucbit clv_low : 3; /* Lowest usable CLV recording speed */
  147. Ucbit clv_high : 4; /* Highes usable CLV recording speed */
  148. Ucbit res17_7 : 1; /* Reserved (must be "0") */
  149. Ucbit power_mult : 3; /* Power multiplication factor */
  150. Ucbit tgt_y_pow : 3; /* Tgt y val of the power mod fun */
  151. Ucbit res17_0 : 1; /* Reserved */
  152. Ucbit res18_7 : 1; /* Reserved (must be "1") */
  153. Ucbit rerase_pwr_ratio: 3; /* Recommended erase/write power*/
  154. Ucbit res_18_30 : 4; /* Reserved */
  155. Uchar res19; /* Reserved */
  156. Uchar a2[3]; /* A 2 Values */
  157. Uchar res23; /* Reserved */
  158. Uchar a3[3]; /* A 3 Vaules */
  159. Uchar res27; /* Reserved */
  160. };
  161. #endif
  162. struct atipinfo {
  163. struct tocheader hd;
  164. struct atipdesc desc;
  165. };
  166. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  167. struct track_info {
  168. Uchar data_len[2]; /* Data len without this info */
  169. Uchar track_number; /* Track number for this info */
  170. Uchar session_number; /* Session number for this info */
  171. Uchar res4; /* Reserved */
  172. Ucbit track_mode : 4; /* Track mode (Q-sub control) */
  173. Ucbit copy : 1; /* This track is a higher copy */
  174. Ucbit damage : 1; /* if 1 & nwa_valid 0: inc track*/
  175. Ucbit res5_67 : 2; /* Reserved */
  176. Ucbit data_mode : 4; /* Data mode of this track */
  177. Ucbit fp : 1; /* This is a fixed packet track */
  178. Ucbit packet : 1; /* This track is in packet mode */
  179. Ucbit blank : 1; /* This is an invisible track */
  180. Ucbit rt : 1; /* This is a reserved track */
  181. Ucbit nwa_valid : 1; /* Next writable addr valid */
  182. Ucbit res7_17 : 7; /* Reserved */
  183. Uchar track_start[4]; /* Track start address */
  184. Uchar next_writable_addr[4]; /* Next writable address */
  185. Uchar free_blocks[4]; /* Free usr blocks in this track*/
  186. Uchar packet_size[4]; /* Packet size if in fixed mode */
  187. Uchar track_size[4]; /* # of user data blocks in trk */
  188. };
  189. #else /* Motorola bitorder */
  190. struct track_info {
  191. Uchar data_len[2]; /* Data len without this info */
  192. Uchar track_number; /* Track number for this info */
  193. Uchar session_number; /* Session number for this info */
  194. Uchar res4; /* Reserved */
  195. Ucbit res5_67 : 2; /* Reserved */
  196. Ucbit damage : 1; /* if 1 & nwa_valid 0: inc track*/
  197. Ucbit copy : 1; /* This track is a higher copy */
  198. Ucbit track_mode : 4; /* Track mode (Q-sub control) */
  199. Ucbit rt : 1; /* This is a reserved track */
  200. Ucbit blank : 1; /* This is an invisible track */
  201. Ucbit packet : 1; /* This track is in packet mode */
  202. Ucbit fp : 1; /* This is a fixed packet track */
  203. Ucbit data_mode : 4; /* Data mode of this track */
  204. Ucbit res7_17 : 7; /* Reserved */
  205. Ucbit nwa_valid : 1; /* Next writable addr valid */
  206. Uchar track_start[4]; /* Track start address */
  207. Uchar next_writable_addr[4]; /* Next writable address */
  208. Uchar free_blocks[4]; /* Free usr blocks in this track*/
  209. Uchar packet_size[4]; /* Packet size if in fixed mode */
  210. Uchar track_size[4]; /* # of user data blocks in trk */
  211. };
  212. #endif
  213. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  214. struct rzone_info {
  215. Uchar data_len[2]; /* Data len without this info */
  216. Uchar rzone_num_lsb; /* RZone number LSB */
  217. Uchar border_num_lsb; /* Border number LSB */
  218. Uchar res_4; /* Reserved */
  219. Ucbit res5_04 : 5; /* Reserved */
  220. Ucbit damage : 1; /* Damaged RZone */
  221. Ucbit res5_67 : 2; /* Reserved */
  222. Ucbit res6_04 : 5; /* Reserved */
  223. Ucbit incremental : 1; /* RZone is to be written incremental */
  224. Ucbit blank : 1; /* RZone is blank */
  225. Ucbit rt : 1; /* RZone is reserved */
  226. Ucbit nwa_v : 1; /* Next WR address is valid */
  227. Ucbit res7_17 : 7; /* Reserved */
  228. Uchar rzone_start[4]; /* RZone start address */
  229. Uchar next_recordable_addr[4];/* Next recordable address */
  230. Uchar free_blocks[4]; /* Free blocks in RZone */
  231. Uchar block_factor[4]; /* # of sectors of disc acc unit */
  232. Uchar rzone_size[4]; /* RZone size */
  233. Uchar last_recorded_addr[4]; /* Last Recorded addr in RZone */
  234. Uchar rzone_num_msb; /* RZone number MSB */
  235. Uchar border_num_msb; /* Border number MSB */
  236. Uchar res_34_35[2]; /* Reserved */
  237. };
  238. #else /* Motorola bitorder */
  239. struct rzone_info {
  240. Uchar data_len[2]; /* Data len without this info */
  241. Uchar rzone_num_lsb; /* RZone number LSB */
  242. Uchar border_num_lsb; /* Border number LSB */
  243. Uchar res_4; /* Reserved */
  244. Ucbit res5_67 : 2; /* Reserved */
  245. Ucbit damage : 1; /* Damaged RZone */
  246. Ucbit res5_04 : 5; /* Reserved */
  247. Ucbit rt : 1; /* RZone is reserved */
  248. Ucbit blank : 1; /* RZone is blank */
  249. Ucbit incremental : 1; /* RZone is to be written incremental */
  250. Ucbit res6_04 : 5; /* Reserved */
  251. Ucbit res7_17 : 7; /* Reserved */
  252. Ucbit nwa_v : 1; /* Next WR address is valid */
  253. Uchar rzone_start[4]; /* RZone start address */
  254. Uchar next_recordable_addr[4];/* Next recordable address */
  255. Uchar free_blocks[4]; /* Free blocks in RZone */
  256. Uchar block_factor[4]; /* # of sectors of disc acc unit */
  257. Uchar rzone_size[4]; /* RZone size */
  258. Uchar last_recorded_addr[4]; /* Last Recorded addr in RZone */
  259. Uchar rzone_num_msb; /* RZone number MSB */
  260. Uchar border_num_msb; /* Border number MSB */
  261. Uchar res_34_35[2]; /* Reserved */
  262. };
  263. #endif
  264. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  265. struct dvd_structure_00 {
  266. Uchar data_len[2]; /* Data len without this info */
  267. Uchar res23[2]; /* Reserved */
  268. Ucbit book_version : 4; /* DVD Book version */
  269. Ucbit book_type : 4; /* DVD Book type */
  270. Ucbit minimum_rate : 4; /* Minimum data rate (coded) */
  271. Ucbit disc_size : 4; /* Disc size (coded) */
  272. Ucbit layer_type : 4; /* Layer type */
  273. Ucbit track_path : 1; /* 0 = parallel, 1 = opposit dir*/
  274. Ucbit numlayers : 2; /* Number of Layers (0 == 1) */
  275. Ucbit res2_7 : 1; /* Reserved */
  276. Ucbit track_density : 4; /* Track density (coded) */
  277. Ucbit linear_density : 4; /* Linear data density (coded) */
  278. Uchar res8; /* Reserved */
  279. Uchar phys_start[3]; /* Starting Physical sector # */
  280. Uchar res12; /* Reserved */
  281. Uchar phys_end[3]; /* End physical data sector # */
  282. Uchar res16; /* Reserved */
  283. Uchar end_layer0[3]; /* End sector # in layer */
  284. Ucbit res20 : 7; /* Reserved */
  285. Ucbit bca : 1; /* BCA flag bit */
  286. };
  287. #else /* Motorola bitorder */
  288. struct dvd_structure_00 {
  289. Uchar data_len[2]; /* Data len without this info */
  290. Uchar res23[2]; /* Reserved */
  291. Ucbit book_type : 4; /* DVD Book type */
  292. Ucbit book_version : 4; /* DVD Book version */
  293. Ucbit disc_size : 4; /* Disc size (coded) */
  294. Ucbit minimum_rate : 4; /* Minimum data rate (coded) */
  295. Ucbit res2_7 : 1; /* Reserved */
  296. Ucbit numlayers : 2; /* Number of Layers (0 == 1) */
  297. Ucbit track_path : 1; /* 0 = parallel, 1 = opposit dir*/
  298. Ucbit layer_type : 4; /* Layer type */
  299. Ucbit linear_density : 4; /* Linear data density (coded) */
  300. Ucbit track_density : 4; /* Track density (coded) */
  301. Uchar res8; /* Reserved */
  302. Uchar phys_start[3]; /* Starting Physical sector # */
  303. Uchar res12; /* Reserved */
  304. Uchar phys_end[3]; /* End physical data sector # */
  305. Uchar res16; /* Reserved */
  306. Uchar end_layer0[3]; /* End sector # in layer */
  307. Ucbit bca : 1; /* BCA flag bit */
  308. Ucbit res20 : 7; /* Reserved */
  309. };
  310. #endif
  311. struct dvd_structure_01 {
  312. Uchar data_len[2]; /* Data len without this info */
  313. Uchar res23[2]; /* Reserved */
  314. Uchar copyr_prot_type; /* Copyright prot system type */
  315. Uchar region_mgt_info; /* Region management info */
  316. Uchar res67[2]; /* Reserved */
  317. };
  318. struct dvd_structure_02 {
  319. Uchar data_len[2]; /* Data len without this info */
  320. Uchar res23[2]; /* Reserved */
  321. Uchar key_data[2048]; /* Disc Key data */
  322. };
  323. struct dvd_structure_03 {
  324. Uchar data_len[2]; /* Data len without this info */
  325. Uchar res23[2]; /* Reserved */
  326. Uchar bca_info[1]; /* BCA information (12-188 bytes)*/
  327. };
  328. struct dvd_structure_04 {
  329. Uchar data_len[2]; /* Data len without this info */
  330. Uchar res23[2]; /* Reserved */
  331. Uchar man_info[2048]; /* Disc manufacturing info */
  332. };
  333. #if defined(_BIT_FIELDS_LTOH) /* Intel bitorder */
  334. struct dvd_structure_05 {
  335. Uchar data_len[2]; /* Data len without this info */
  336. Uchar res23[2]; /* Reserved */
  337. Ucbit res4_03 : 4; /* Reserved */
  338. Ucbit cgms : 2; /* CGMS (see below) */
  339. Ucbit res4_6 : 1; /* Reserved */
  340. Ucbit cpm : 1; /* This is copyrighted material */
  341. Uchar res57[3]; /* Reserved */
  342. };
  343. #else /* Motorola bitorder */
  344. struct dvd_structure_05 {
  345. Uchar data_len[2]; /* Data len without this info */
  346. Uchar res23[2]; /* Reserved */
  347. Ucbit cpm : 1; /* This is copyrighted material */
  348. Ucbit res4_6 : 1; /* Reserved */
  349. Ucbit cgms : 2; /* CGMS (see below) */
  350. Ucbit res4_03 : 4; /* Reserved */
  351. Uchar res57[3]; /* Reserved */
  352. };
  353. #endif
  354. #define CGMS_PERMITTED 0 /* Unlimited copy permitted */
  355. #define CGMS_RES 1 /* Reserved */
  356. #define CGMS_ONE_COPY 2 /* One copy permitted */
  357. #define CGMS_NO_COPY 3 /* No copy permitted */
  358. struct dvd_structure_0D {
  359. Uchar data_len[2]; /* Data len without this info */
  360. Uchar res23[2]; /* Reserved */
  361. Uchar last_rma_sector[2]; /* Last recorded RMA sector # */
  362. Uchar rmd_bytes[1]; /* Content of Record man area */
  363. };
  364. struct dvd_structure_0E {
  365. Uchar data_len[2]; /* Data len without this info */
  366. Uchar res23[2]; /* Reserved */
  367. Uchar field_id; /* Field ID (1) */
  368. Uchar application_code; /* Disc Application code */
  369. Uchar phys_data; /* Disc Phisical Data */
  370. Uchar last_recordable_addr[3];/* Last addr of recordable area */
  371. Uchar res_a[2]; /* Reserved */
  372. Uchar field_id_2; /* Field ID (2) */
  373. Uchar ind_wr_power; /* Recommended writing power */
  374. Uchar ind_wavelength; /* Wavelength for ind_wr_power */
  375. Uchar opt_wr_strategy; /* Optimum write Strategy */
  376. Uchar res_b[4]; /* Reserved */
  377. Uchar field_id_3; /* Field ID (3) */
  378. Uchar man_id[6]; /* Manufacturer ID */
  379. Uchar res; /* Reserved */
  380. };
  381. struct dvd_structure_0F {
  382. Uchar data_len[2]; /* Data len without this info */
  383. Uchar res23[2]; /* Reserved */
  384. Uchar res45[2]; /* Reserved */
  385. Uchar random[2]; /* Random number */
  386. Uchar year[4]; /* Year (ascii) */
  387. Uchar month[2]; /* Month (ascii) */
  388. Uchar day[2]; /* Day (ascii) */
  389. Uchar hour[2]; /* Hour (ascii) */
  390. Uchar minute[2]; /* Minute (ascii) */
  391. Uchar second[2]; /* Second (ascii) */
  392. };
  393. struct dvd_structure_0F_w {
  394. Uchar data_len[2]; /* Data len without this info */
  395. Uchar res23[2]; /* Reserved */
  396. Uchar res45[2]; /* Reserved */
  397. Uchar year[4]; /* Year (ascii) */
  398. Uchar month[2]; /* Month (ascii) */
  399. Uchar day[2]; /* Day (ascii) */
  400. Uchar hour[2]; /* Hour (ascii) */
  401. Uchar minute[2]; /* Minute (ascii) */
  402. Uchar second[2]; /* Second (ascii) */
  403. };
  404. struct mmc_cue {
  405. Uchar cs_ctladr; /* CTL/ADR for this track */
  406. Uchar cs_tno; /* This track number */
  407. Uchar cs_index; /* Index within this track */
  408. Uchar cs_dataform; /* Data form  */
  409. Uchar cs_scms; /* Serial copy management */
  410. Uchar cs_min; /* Absolute time minutes */
  411. Uchar cs_sec; /* Absolute time seconds */
  412. Uchar cs_frame; /* Absolute time frames */
  413. };
  414. #endif /* _SCSIMMC_H */