atapi_if.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:5k
源码类别:

DVD

开发平台:

C/C++

  1. #ifndef __ATAPI_IF_H
  2. #define __ATAPI_IF_H
  3. #include "types.h"
  4. #include "user_init.h"
  5. // 2004/07/16 yltseng
  6. void wb_tag_init(void);
  7. // Register Read/Write
  8. UINT16 atapi_reg_read(UINT8);
  9. void atapi_reg_write(UINT8, UINT16);
  10. int atapi_authenticate(int title, int lba);
  11. // ATAPI Procedure
  12. // return 1: ERR, 0: OK
  13. void atapi_hard_rst(void);
  14. UINT8 atapi_soft_rst(void);
  15. UINT8 atapi_device_sel(void);
  16. UINT8 atapi_write_block(UINT8 *);
  17. UINT8 atapi_send_data(UINT8 *, int);
  18. UINT8 atapi_receive_data(UINT8 *, int);
  19. UINT8 atapi_is_error(void);
  20. int atapi_read_error(void);
  21. // ATA command
  22. UINT8 atapi_do_packet(UINT8 *);
  23. UINT8 atapi_do_set_features(void);
  24. UINT8 atapi_do_identify_packet_device(UINT8 *);
  25. // Packet command
  26. UINT8 atapi_p_request_sense(UINT8 *);
  27. UINT8 atapi_p_test_unit_ready(void);
  28. UINT8 atapi_p_start_stop_unit(UINT8);
  29. UINT8 atapi_p_read_12(UINT32, UINT32);
  30. UINT8 atapi_p_mechanism_status(void);
  31. UINT8 atapi_p_read_capacity(UINT32 *, UINT32 *);
  32. UINT8 atapi_p_get_disc_info(void);
  33. #define ATAPI_DOOR_OPEN    (0)
  34. #define ATAPI_DOOR_CLOSE_ERR   (3)
  35. #define ATAPI_DOOR_CLOSE   (2)
  36. // high level command
  37. // need error handle
  38. void atapi_init(void);
  39. UINT8 atapi_block_read(UINT32, UINT32);
  40. void atapi_menu(void);
  41. #define ATAPI_OK (0)
  42. #define ATAPI_ERROR (1)
  43. #define ATAPI_ILLEGAL (2)
  44. #define START_STOP_DO_STOP (0)
  45. #define START_STOP_DO_START (1)
  46. #define START_STOP_DO_EJECT (2)
  47. #define START_STOP_DO_LOAD (3)
  48. #define START_STOP_DO_STANDBY (4)//terry,2003/8/22 05:47PM
  49. #define START_STOP_DO_LOAD_POWER_OFF (7) //robert, 2003/12/16
  50. // generic packet command
  51. #define CDROM_PACKET_SIZE 12
  52. /*********define dev_status_flag*****/
  53. #define READ_PRESENT_DATA 0x01//bit 1 data type, 1:present 0:nav or cmd
  54. //#define NAV_RETRY_DATA   0x02
  55. #define ATAPI_WAIT_TIME_OUT 0x04
  56. #define ATAPI_RETRY_READY 0x08
  57. #define DEV_DETECT_CSS      0x10
  58. /*****define atapi_chk_time_out state****/
  59. #define WAIT_ALT_NO_BUSY 0x01
  60. #define WAIT_DRQ_OK 0x02
  61. #define WAIT_STATUS_NO_BSY 0x03
  62. #define WAIT_DRQ_BSY_ZERO 0x04
  63. #define WAIT_DRQ_HIGH 0x05
  64. #define WAIT_IRQ            0x06
  65. /*******Define request sense flag************/
  66. #define ATAPI_NOT_READY 0x01
  67. #define ATAPI_NO_MEDIA 0x02
  68. #define ATAPI_MEDIA_UPSIDE_DOWN 0x04
  69. #define ATAPI_UNKNOWN_MEDIA 0x08
  70. #define ATAPI_ILLEGAL_MODE 0x10
  71. /* for CDROM_PACKET_COMMAND ioctl */
  72. struct cdrom_generic_command
  73. {
  74. UINT8  cmd[CDROM_PACKET_SIZE];
  75. UINT8  *buffer;
  76. unsigned int  buflen;
  77. int stat;
  78. void *reserved[4];
  79. };
  80. #define GPCMD_REPORT_KEY (0xa4)
  81. #define GPCMD_SEND_KEY (0xa3)
  82. #define GPCMD_READ_DVD_STRUCTURE (0xad)
  83. void init_cdrom_command(struct cdrom_generic_command *, void *, int);
  84. int generic_packet(struct cdrom_generic_command *);
  85. void auth_test(void);
  86. #ifndef DVDRELEASE
  87. void print_block(UINT8 *, int);
  88. #endif
  89. UINT8 do_read(UINT32 lba, UINT32 len, UINT8 *buf);
  90. typedef struct
  91. {
  92.    UINT8 m, s, f;
  93. } t_cdrom_msf0;
  94. typedef struct
  95. {
  96.    UINT8 m0, s0, f0;    // start
  97.    UINT8 m1, s1, f1;    // end
  98. } t_cdrom_msf;
  99. #define MAX_TRACKS 99
  100. struct atapi_msf {
  101. UINT8 reserved;
  102. UINT8 minute;
  103. UINT8 second;
  104. UINT8 frame;
  105. };
  106. struct atapi_toc_header {
  107. UINT16 toc_length;
  108. UINT8 first_track;
  109. UINT8 last_track;
  110. };
  111. struct atapi_toc_entry {
  112. UINT8 reserved1;
  113.    UINT8 adr_control;
  114. UINT8 track;
  115. UINT8 reserved2;
  116. union {
  117. UINT32 lba;
  118. struct atapi_msf msf;
  119. } addr;
  120. };
  121. #define DSP_HOST_RESET  (0x01<<0)
  122. #define ATA_SW_RESET    (0x01<<1)
  123. #define ATA_HW_RESET (0x01<<2)
  124. #define ATA_WAIT_RDY (0x01<<3)
  125. //define loader vendor type
  126. #define VENDOR_UNKNOW          0x00
  127. #define VENDOR_ALI_TD_505_SK   0x01
  128. UINT8 atapi_read_cd(UINT32 lba, UINT32 len);
  129. UINT8 atapi_read_cd_msf(t_cdrom_msf *pmsf);
  130. void atapi_close_init(void);
  131. UINT8 atapi_p_unlock(void);
  132. BYTE atapi_chk_time_out(BYTE cmd_state,int w_time);
  133. BYTE atapi_2_mem_read_cd(UINT32 lba,UINT32 len,BYTE user_only);
  134. //BYTE atapi_2_mem_read_12(UINT32 lba,UINT32 len);
  135. UINT8 atapi_rst(UINT8 mode);
  136. //void atapi_identify(void);
  137. UINT8 atapi_do_inquiry(void);
  138. #ifdef DVD_SERVO_REAL_TURN_OFF//nono rename 4-12-30 11:18//NO_DVD_SERVO //ycwen 2004/08/10
  139. extern void servo_turn_off(void);
  140. #endif
  141. //ycwen 2004/08/10
  142. #if defined(DVD_SERVO_REAL_TURN_OFF)//def NO_DVD_SERVO
  143.     #ifdef ReadServoReg
  144.         #undef ReadServoReg
  145.     #endif
  146.     #define ReadServoReg(name,value)                            
  147.         {                                                       
  148.             regs0->rf_regif_addr = name;                        
  149.             while ((regs0->rf_regif_rdata & 0x8000) != 0x8000); 
  150.             value = regs0->rf_regif_rdata;                      
  151.         }
  152.          
  153.     #ifdef WriteServoReg
  154.         #undef WriteServoReg
  155.     #endif
  156.     #define WriteServoReg(name,value)                           
  157.         {                                                       
  158.             regs0->rf_regif_addr = name;                        
  159.             regs0->rf_regif_wdata = value;                      
  160.             while ((regs0->rf_regif_rdata & 0x8000) != 0x8000); 
  161.         }
  162. #endif //DVD_SERVO_REAL_TURN_OFF//NO_DVD_SERVO
  163. #endif /*__ATAPI_IF_H*/