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

DVD

开发平台:

C/C++

  1. #ifndef __DVDIOCTL_H_
  2. #define __DVDIOCTL_H_
  3. #include "types.h"
  4. /* DVD struct types */
  5. #define DVD_STRUCT_PHYSICAL     0x00
  6. #define DVD_STRUCT_COPYRIGHT 0x01
  7. #define DVD_STRUCT_DISCKEY 0x02
  8. #define DVD_STRUCT_BCA 0x03
  9. #define DVD_STRUCT_MANUFACT     0x04
  10. #define DVD_STRUCT_MEDIA_ID     0x06
  11. #define DVD_STRUCT_MKB          0x07  //we don't do it tmp.,because need more memory size
  12. /*
  13. struct dvd_media_id {
  14. UINT16 data_length;
  15. UINT8 reserved1[2];
  16. UINT8 ID_media[8];
  17. UINT8 MAC_ID_media[10];
  18. UINT8 reserved2[2];
  19. };
  20. struct dvd_layer {
  21. UINT8 book_version : 4;
  22. UINT8 book_type : 4;
  23. UINT8 min_rate : 4;
  24. UINT8 disc_size : 4;
  25. UINT8 layer_type : 4;
  26. UINT8 track_path : 1;
  27. UINT8 nlayers : 2;
  28. UINT8 track_density : 4;
  29. UINT8 linear_density : 4;
  30. UINT8 bca : 1;
  31. UINT32 start_sector;
  32. UINT32 end_sector;
  33. UINT32 end_sector_l0;
  34. };
  35. struct dvd_physical {
  36. UINT8 type;
  37. UINT8 layer_num;
  38. struct dvd_layer layer[4];
  39. };
  40. struct dvd_copyright {
  41. UINT8 type;
  42. UINT8 layer_num;
  43. UINT8 cpst;
  44. UINT8 rmi;
  45. };*/
  46. struct dvd_disckey {
  47. UINT8 type;
  48. unsigned agid : 2;
  49. UINT8 *value;
  50. };
  51. /*
  52. struct dvd_bca {
  53. UINT8 type;
  54. int len;
  55. UINT8 value[188];
  56. };
  57. struct dvd_manufact {
  58. UINT8 type;
  59. UINT8 layer_num;
  60. int len;
  61. UINT8 value[2048];
  62. };*/
  63. typedef union {
  64. UINT8 type;
  65. /* struct dvd_physical physical;
  66. struct dvd_copyright copyright;*/
  67. struct dvd_disckey disckey;
  68. /* struct dvd_bca bca;
  69. struct dvd_manufact manufact;
  70. struct dvd_media_id media_id;*/
  71. } dvd_struct;
  72. /*
  73. * DVD authentication ioctl
  74. */
  75. /* Authentication states */
  76. #define DVD_LU_SEND_AGID 0
  77. #define DVD_HOST_SEND_CHALLENGE 1
  78. #define DVD_LU_SEND_KEY1 2
  79. #define DVD_LU_SEND_CHALLENGE 3
  80. #define DVD_HOST_SEND_KEY2 4
  81. /* Termination states */
  82. #define DVD_AUTH_ESTABLISHED 5
  83. #define DVD_AUTH_FAILURE 6
  84. /* Other functions */
  85. #define DVD_LU_SEND_TITLE_KEY 7
  86. #define DVD_LU_SEND_ASF 8
  87. #define DVD_INVALIDATE_AGID 9
  88. /* State data */
  89. typedef UINT8 dvd_key[5]; /* 40-bit value, MSB is first elem. */
  90. typedef UINT8 dvd_challenge[10]; /* 80-bit value, MSB is first elem. */
  91. struct dvd_lu_send_agid {
  92. UINT8 type;
  93. unsigned agid : 2;
  94. };
  95. struct dvd_host_send_challenge {
  96. UINT8 type;
  97. unsigned agid : 2;
  98. dvd_challenge chal;
  99. };
  100. struct dvd_send_key {
  101. UINT8 type;
  102. unsigned agid : 2;
  103. dvd_key key;
  104. };
  105. struct dvd_lu_send_challenge {
  106. UINT8 type;
  107. unsigned agid : 2;
  108. dvd_challenge chal;
  109. };
  110. #define DVD_CPM_NO_COPYRIGHT 0
  111. #define DVD_CPM_COPYRIGHTED 1
  112. #define DVD_CP_SEC_NONE 0
  113. #define DVD_CP_SEC_EXIST 1
  114. #define DVD_CGMS_UNRESTRICTED 0
  115. #define DVD_CGMS_SINGLE 2
  116. #define DVD_CGMS_RESTRICTED 3
  117. struct dvd_lu_send_title_key {
  118. UINT8 type;
  119. unsigned agid : 2;
  120. dvd_key title_key;
  121. int lba;
  122. unsigned cpm : 1;
  123. unsigned cp_sec : 1;
  124. unsigned cgms : 2;
  125. };
  126. struct dvd_lu_send_asf {
  127. UINT8 type;
  128. unsigned agid : 2;
  129. unsigned asf : 1;
  130. };
  131. typedef union {
  132. UINT8 type;
  133. struct dvd_lu_send_agid lsa;
  134. struct dvd_host_send_challenge hsc;
  135. struct dvd_send_key lsk;
  136. struct dvd_lu_send_challenge lsc;
  137. struct dvd_send_key hsk;
  138. struct dvd_lu_send_title_key lstk;
  139. struct dvd_lu_send_asf lsasf;
  140. } dvd_authinfo;
  141. int dvd_read_struct(dvd_struct *);
  142. int dvd_do_auth(dvd_authinfo *);
  143. #endif /* DVDIOCTL */