cdu31a.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:14k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Definitions for a Sony interface CDROM drive.
  3.  *
  4.  * Corey Minyard (minyard@wf-rch.cirr.com)
  5.  *
  6.  *  Copyright (C) 1993  Corey Minyard
  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 of the License, or
  11.  *  (at your option) 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; if not, write to the Free Software
  20.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  *
  22.  */
  23. /*
  24.  * General defines.
  25.  */
  26. #define SONY_XA_DISK_TYPE 0x20
  27. /*
  28.  * Offsets (from the base address) and bits for the various write registers
  29.  * of the drive.
  30.  */
  31. #define SONY_CMD_REG_OFFSET     0
  32. #define SONY_PARAM_REG_OFFSET   1
  33. #define SONY_WRITE_REG_OFFSET   2
  34. #define SONY_CONTROL_REG_OFFSET 3
  35. #       define SONY_ATTN_CLR_BIT        0x01
  36. #       define SONY_RES_RDY_CLR_BIT     0x02
  37. #       define SONY_DATA_RDY_CLR_BIT    0x04
  38. #       define SONY_ATTN_INT_EN_BIT     0x08
  39. #       define SONY_RES_RDY_INT_EN_BIT  0x10
  40. #       define SONY_DATA_RDY_INT_EN_BIT 0x20
  41. #       define SONY_PARAM_CLR_BIT       0x40
  42. #       define SONY_DRIVE_RESET_BIT     0x80
  43. /*
  44.  * Offsets (from the base address) and bits for the various read registers
  45.  * of the drive.
  46.  */
  47. #define SONY_STATUS_REG_OFFSET  0
  48. #       define SONY_ATTN_BIT            0x01
  49. #       define SONY_RES_RDY_BIT         0x02
  50. #       define SONY_DATA_RDY_BIT        0x04
  51. #       define SONY_ATTN_INT_ST_BIT     0x08
  52. #       define SONY_RES_RDY_INT_ST_BIT  0x10
  53. #       define SONY_DATA_RDY_INT_ST_BIT 0x20
  54. #       define SONY_DATA_REQUEST_BIT    0x40
  55. #       define SONY_BUSY_BIT            0x80
  56. #define SONY_RESULT_REG_OFFSET  1
  57. #define SONY_READ_REG_OFFSET    2
  58. #define SONY_FIFOST_REG_OFFSET  3
  59. #       define SONY_PARAM_WRITE_RDY_BIT 0x01
  60. #       define SONY_PARAM_REG_EMPTY_BIT 0x02
  61. #       define SONY_RES_REG_NOT_EMP_BIT 0x04
  62. #       define SONY_RES_REG_FULL_BIT    0x08
  63. #define LOG_START_OFFSET        150     /* Offset of first logical sector */
  64. #define SONY_DETECT_TIMEOUT (8*HZ/10) /* Maximum amount of time
  65.                                            that drive detection code
  66.                                            will wait for response
  67.                                            from drive (in 1/100th's
  68.                                            of seconds). */
  69.  
  70. #define SONY_JIFFIES_TIMEOUT    1000 /* Maximum number of times the
  71.                                            drive will wait/try for an
  72.                                            operation */
  73. #define SONY_RESET_TIMEOUT      100 /* Maximum number of times the
  74.                                            drive will wait/try a reset
  75.                                            operation */
  76. #define SONY_READY_RETRIES      20000   /* How many times to retry a
  77.                                            spin waiting for a register
  78.                                            to come ready */
  79. #define MAX_CDU31A_RETRIES      3       /* How many times to retry an
  80.                                            operation */
  81. /* Commands to request or set drive control parameters and disc information */
  82. #define SONY_REQ_DRIVE_CONFIG_CMD       0x00    /* Returns s_sony_drive_config */
  83. #define SONY_REQ_DRIVE_MODE_CMD         0x01
  84. #define SONY_REQ_DRIVE_PARAM_CMD        0x02
  85. #define SONY_REQ_MECH_STATUS_CMD        0x03
  86. #define SONY_REQ_AUDIO_STATUS_CMD       0x04
  87. #define SONY_SET_DRIVE_PARAM_CMD        0x10
  88. #define SONY_REQ_TOC_DATA_CMD           0x20    /* Returns s_sony_toc */
  89. #define SONY_REQ_SUBCODE_ADDRESS_CMD    0x21    /* Returns s_sony_subcode */
  90. #define SONY_REQ_UPC_EAN_CMD            0x22
  91. #define SONY_REQ_ISRC_CMD               0x23
  92. #define SONY_REQ_TOC_DATA_SPEC_CMD      0x24    /* Returns s_sony_session_toc */
  93. /* Commands to request information from the drive */
  94. #define SONY_READ_TOC_CMD               0x30    /* let the drive firmware grab the TOC */
  95. #define SONY_SEEK_CMD                   0x31
  96. #define SONY_READ_CMD                   0x32
  97. #define SONY_READ_BLKERR_STAT_CMD       0x34
  98. #define SONY_ABORT_CMD                  0x35
  99. #define SONY_READ_TOC_SPEC_CMD          0x36
  100. /* Commands to control audio */
  101. #define SONY_AUDIO_PLAYBACK_CMD         0x40
  102. #define SONY_AUDIO_STOP_CMD             0x41
  103. #define SONY_AUDIO_SCAN_CMD             0x42
  104. /* Miscellaneous control commands */
  105. #define SONY_EJECT_CMD                  0x50
  106. #define SONY_SPIN_UP_CMD                0x51
  107. #define SONY_SPIN_DOWN_CMD              0x52
  108. /* Diagnostic commands */
  109. #define SONY_WRITE_BUFFER_CMD           0x60
  110. #define SONY_READ_BUFFER_CMD            0x61
  111. #define SONY_DIAGNOSTICS_CMD            0x62
  112. /*
  113.  * The following are command parameters for the set drive parameter command
  114.  */
  115. #define SONY_SD_DECODE_PARAM            0x00
  116. #define SONY_SD_INTERFACE_PARAM         0x01
  117. #define SONY_SD_BUFFERING_PARAM         0x02
  118. #define SONY_SD_AUDIO_PARAM             0x03
  119. #define SONY_SD_AUDIO_VOLUME            0x04
  120. #define SONY_SD_MECH_CONTROL            0x05
  121. #define SONY_SD_AUTO_SPIN_DOWN_TIME     0x06
  122. /*
  123.  * The following are parameter bits for the mechanical control command
  124.  */
  125. #define SONY_AUTO_SPIN_UP_BIT           0x01
  126. #define SONY_AUTO_EJECT_BIT             0x02
  127. #define SONY_DOUBLE_SPEED_BIT           0x04
  128. /*
  129.  * The following extract information from the drive configuration about
  130.  * the drive itself.
  131.  */
  132. #define SONY_HWC_GET_LOAD_MECH(c)       (c.hw_config[0] & 0x03)
  133. #define SONY_HWC_EJECT(c)               (c.hw_config[0] & 0x04)
  134. #define SONY_HWC_LED_SUPPORT(c)         (c.hw_config[0] & 0x08)
  135. #define SONY_HWC_DOUBLE_SPEED(c)        (c.hw_config[0] & 0x10)
  136. #define SONY_HWC_GET_BUF_MEM_SIZE(c)    ((c.hw_config[0] & 0xc0) >> 6)
  137. #define SONY_HWC_AUDIO_PLAYBACK(c)      (c.hw_config[1] & 0x01)
  138. #define SONY_HWC_ELECTRIC_VOLUME(c)     (c.hw_config[1] & 0x02)
  139. #define SONY_HWC_ELECTRIC_VOLUME_CTL(c) (c.hw_config[1] & 0x04)
  140. #define SONY_HWC_CADDY_LOAD_MECH        0x00
  141. #define SONY_HWC_TRAY_LOAD_MECH         0x01
  142. #define SONY_HWC_POPUP_LOAD_MECH        0x02
  143. #define SONY_HWC_UNKWN_LOAD_MECH        0x03
  144. #define SONY_HWC_8KB_BUFFER             0x00
  145. #define SONY_HWC_32KB_BUFFER            0x01
  146. #define SONY_HWC_64KB_BUFFER            0x02
  147. #define SONY_HWC_UNKWN_BUFFER           0x03
  148. /*
  149.  * This is the complete status returned from the drive configuration request
  150.  * command.
  151.  */
  152. struct s_sony_drive_config
  153. {
  154.    unsigned char exec_status[2];
  155.    char vendor_id[8];
  156.    char product_id[16];
  157.    char product_rev_level[8];
  158.    unsigned char hw_config[2];
  159. };
  160. /* The following is returned from the request subcode address command */
  161. struct s_sony_subcode
  162. {
  163.    unsigned char exec_status[2];
  164.    unsigned char address        :4;
  165.    unsigned char control        :4;
  166.    unsigned char track_num;
  167.    unsigned char index_num;
  168.    unsigned char rel_msf[3];
  169.    unsigned char reserved1;
  170.    unsigned char abs_msf[3];
  171. };
  172. #define MAX_TRACKS 100 /* The maximum tracks a disk may have. */
  173. /*
  174.  * The following is returned from the request TOC (Table Of Contents) command.
  175.  * (last_track_num-first_track_num+1) values are valid in tracks.
  176.  */
  177. struct s_sony_toc
  178. {
  179.    unsigned char exec_status[2];
  180.    unsigned char address0       :4;
  181.    unsigned char control0       :4;
  182.    unsigned char point0;
  183.    unsigned char first_track_num;
  184.    unsigned char disk_type;
  185.    unsigned char dummy0;
  186.    unsigned char address1       :4;
  187.    unsigned char control1       :4;
  188.    unsigned char point1;
  189.    unsigned char last_track_num;
  190.    unsigned char dummy1;
  191.    unsigned char dummy2;
  192.    unsigned char address2       :4;
  193.    unsigned char control2       :4;
  194.    unsigned char point2;
  195.    unsigned char lead_out_start_msf[3];
  196.    struct
  197.    {
  198.       unsigned char address     :4;
  199.       unsigned char control     :4;
  200.       unsigned char track;
  201.       unsigned char track_start_msf[3];
  202.    } tracks[MAX_TRACKS];
  203.    unsigned int lead_out_start_lba;
  204. };
  205. struct s_sony_session_toc
  206. {
  207.    unsigned char exec_status[2];
  208.    unsigned char session_number;
  209.    unsigned char address0       :4;
  210.    unsigned char control0       :4;
  211.    unsigned char point0;
  212.    unsigned char first_track_num;
  213.    unsigned char disk_type;
  214.    unsigned char dummy0;
  215.    unsigned char address1       :4;
  216.    unsigned char control1       :4;
  217.    unsigned char point1;
  218.    unsigned char last_track_num;
  219.    unsigned char dummy1;
  220.    unsigned char dummy2;
  221.    unsigned char address2       :4;
  222.    unsigned char control2       :4;
  223.    unsigned char point2;
  224.    unsigned char lead_out_start_msf[3];
  225.    unsigned char addressb0      :4;
  226.    unsigned char controlb0      :4;
  227.    unsigned char pointb0;
  228.    unsigned char next_poss_prog_area_msf[3];
  229.    unsigned char num_mode_5_pointers;
  230.    unsigned char max_start_outer_leadout_msf[3];
  231.    unsigned char addressb1      :4;
  232.    unsigned char controlb1      :4;
  233.    unsigned char pointb1;
  234.    unsigned char dummyb0_1[4];
  235.    unsigned char num_skip_interval_pointers;
  236.    unsigned char num_skip_track_assignments;
  237.    unsigned char dummyb0_2;
  238.    unsigned char addressb2      :4;
  239.    unsigned char controlb2      :4;
  240.    unsigned char pointb2;
  241.    unsigned char tracksb2[7];
  242.    unsigned char addressb3      :4;
  243.    unsigned char controlb3      :4;
  244.    unsigned char pointb3;
  245.    unsigned char tracksb3[7];
  246.    unsigned char addressb4      :4;
  247.    unsigned char controlb4      :4;
  248.    unsigned char pointb4;
  249.    unsigned char tracksb4[7];
  250.    unsigned char addressc0      :4;
  251.    unsigned char controlc0      :4;
  252.    unsigned char pointc0;
  253.    unsigned char dummyc0[7];
  254.    struct
  255.    {
  256.       unsigned char address     :4;
  257.       unsigned char control     :4;
  258.       unsigned char track;
  259.       unsigned char track_start_msf[3];
  260.    } tracks[MAX_TRACKS];
  261.    unsigned int start_track_lba;
  262.    unsigned int lead_out_start_lba;
  263.    unsigned int mint;
  264.    unsigned int maxt;
  265. };
  266. struct s_all_sessions_toc
  267. {
  268.    unsigned char sessions;
  269.    unsigned int track_entries;
  270.    unsigned char first_track_num;
  271.    unsigned char last_track_num;
  272.    unsigned char disk_type;
  273.    unsigned char lead_out_start_msf[3];
  274.    struct
  275.    {
  276.       unsigned char address     :4;
  277.       unsigned char control     :4;
  278.       unsigned char track;
  279.       unsigned char track_start_msf[3];
  280.    } tracks[MAX_TRACKS];
  281.    unsigned int start_track_lba;
  282.    unsigned int lead_out_start_lba;
  283. };
  284. /*
  285.  * The following are errors returned from the drive.
  286.  */
  287. /* Command error group */
  288. #define SONY_ILL_CMD_ERR                0x10
  289. #define SONY_ILL_PARAM_ERR              0x11
  290. /* Mechanism group */
  291. #define SONY_NOT_LOAD_ERR               0x20
  292. #define SONY_NO_DISK_ERR                0x21
  293. #define SONY_NOT_SPIN_ERR               0x22
  294. #define SONY_SPIN_ERR                   0x23
  295. #define SONY_SPINDLE_SERVO_ERR          0x25
  296. #define SONY_FOCUS_SERVO_ERR            0x26
  297. #define SONY_EJECT_MECH_ERR             0x29
  298. #define SONY_AUDIO_PLAYING_ERR          0x2a
  299. #define SONY_EMERGENCY_EJECT_ERR        0x2c
  300. /* Seek error group */
  301. #define SONY_FOCUS_ERR                  0x30
  302. #define SONY_FRAME_SYNC_ERR             0x31
  303. #define SONY_SUBCODE_ADDR_ERR           0x32
  304. #define SONY_BLOCK_SYNC_ERR             0x33
  305. #define SONY_HEADER_ADDR_ERR            0x34
  306. /* Read error group */
  307. #define SONY_ILL_TRACK_R_ERR            0x40
  308. #define SONY_MODE_0_R_ERR               0x41
  309. #define SONY_ILL_MODE_R_ERR             0x42
  310. #define SONY_ILL_BLOCK_SIZE_R_ERR       0x43
  311. #define SONY_MODE_R_ERR                 0x44
  312. #define SONY_FORM_R_ERR                 0x45
  313. #define SONY_LEAD_OUT_R_ERR             0x46
  314. #define SONY_BUFFER_OVERRUN_R_ERR       0x47
  315. /* Data error group */
  316. #define SONY_UNREC_CIRC_ERR             0x53
  317. #define SONY_UNREC_LECC_ERR             0x57
  318. /* Subcode error group */
  319. #define SONY_NO_TOC_ERR                 0x60
  320. #define SONY_SUBCODE_DATA_NVAL_ERR      0x61
  321. #define SONY_FOCUS_ON_TOC_READ_ERR      0x63
  322. #define SONY_FRAME_SYNC_ON_TOC_READ_ERR 0x64
  323. #define SONY_TOC_DATA_ERR               0x65
  324. /* Hardware failure group */
  325. #define SONY_HW_FAILURE_ERR             0x70
  326. #define SONY_LEAD_IN_A_ERR              0x91
  327. #define SONY_LEAD_OUT_A_ERR             0x92
  328. #define SONY_DATA_TRACK_A_ERR           0x93
  329. /*
  330.  * The following are returned from the Read With Block Error Status command.
  331.  * They are not errors but information (Errors from the 0x5x group above may
  332.  * also be returned
  333.  */
  334. #define SONY_NO_CIRC_ERR_BLK_STAT       0x50
  335. #define SONY_NO_LECC_ERR_BLK_STAT       0x54
  336. #define SONY_RECOV_LECC_ERR_BLK_STAT    0x55
  337. #define SONY_NO_ERR_DETECTION_STAT      0x59
  338. /* 
  339.  * The following is not an error returned by the drive, but by the code
  340.  * that talks to the drive.  It is returned because of a timeout.
  341.  */
  342. #define SONY_TIMEOUT_OP_ERR             0x01
  343. #define SONY_SIGNAL_OP_ERR              0x02
  344. #define SONY_BAD_DATA_ERR               0x03
  345. /*
  346.  * The following are attention code for asynchronous events from the drive.
  347.  */
  348. /* Standard attention group */
  349. #define SONY_EMER_EJECT_ATTN            0x2c
  350. #define SONY_HW_FAILURE_ATTN            0x70
  351. #define SONY_MECH_LOADED_ATTN           0x80
  352. #define SONY_EJECT_PUSHED_ATTN          0x81
  353. /* Audio attention group */
  354. #define SONY_AUDIO_PLAY_DONE_ATTN       0x90
  355. #define SONY_LEAD_IN_ERR_ATTN           0x91
  356. #define SONY_LEAD_OUT_ERR_ATTN          0x92
  357. #define SONY_DATA_TRACK_ERR_ATTN        0x93
  358. #define SONY_AUDIO_PLAYBACK_ERR_ATTN    0x94
  359. /* Auto spin up group */
  360. #define SONY_SPIN_UP_COMPLETE_ATTN      0x24
  361. #define SONY_SPINDLE_SERVO_ERR_ATTN     0x25
  362. #define SONY_FOCUS_SERVO_ERR_ATTN       0x26
  363. #define SONY_TOC_READ_DONE_ATTN         0x62
  364. #define SONY_FOCUS_ON_TOC_READ_ERR_ATTN 0x63
  365. #define SONY_SYNC_ON_TOC_READ_ERR_ATTN  0x65
  366. /* Auto eject group */
  367. #define SONY_SPIN_DOWN_COMPLETE_ATTN    0x27
  368. #define SONY_EJECT_COMPLETE_ATTN        0x28
  369. #define SONY_EJECT_MECH_ERR_ATTN        0x29