tc6807af.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:7k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.   **********************************************************************
  3.   *
  4.   *     Copyright 1999, 2000 Creative Labs, Inc.
  5.   *
  6.   **********************************************************************
  7.   *
  8.   *     Date                 Author               Summary of changes
  9.   *     ----                 ------               ------------------
  10.   *     October 20, 1999     Andrew de Quincey    Rewrote and extended
  11.   *                          Lucien Murray-Pitts  original incomplete 
  12.   *                                               driver.
  13.   *
  14.   *     April 18, 1999       Andrew Veliath       Original Driver
  15.   *                                               implementation
  16.   *
  17.   **********************************************************************
  18.   *
  19.   *     This program is free software; you can redistribute it and/or
  20.   *     modify it under the terms of the GNU General Public License as
  21.   *     published by the Free Software Foundation; either version 2 of
  22.   *     the License, or (at your option) any later version.
  23.   *
  24.   *     This program is distributed in the hope that it will be useful,
  25.   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.   *     GNU General Public License for more details.
  28.   *
  29.   *     You should have received a copy of the GNU General Public
  30.   *     License along with this program; if not, write to the Free
  31.   *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  32.   *     USA.
  33.   *
  34.   **********************************************************************
  35.   */
  36. /**
  37.  *
  38.  * Driver for the Toshiba TC6807AF CSS decode chip
  39.  *
  40.  */
  41. #ifndef __TC6807AF_H__
  42. #define __TC6807AF_H__
  43. // *******************************************************************
  44. // useful defines
  45. // Full name of the chip
  46. #define TC6807AF_FULLNAME "Toshiba TC6807AF CSS decoder"
  47. // Log name of the driver
  48. #define TC6807AF_LOGNAME "TC6807AF"
  49. // *******************************************************************
  50. // defines
  51. // register definitions
  52. #define TC6807AF_REGADDRESS 0
  53. #define TC6807AF_REGDATA 1
  54. // location definitions
  55. #define TC6807AF_LOC0 0x0
  56. #define TC6807AF_LOC1 0x1
  57. #define TC6807AF_LOC2 0x2
  58. #define TC6807AF_LOC4 0x4
  59. #define TC6807AF_LOC5 0x5
  60. #define TC6807AF_LOCTITLEKEY 0x10
  61. #define TC6807AF_LOCCHALLENGEKEY 0x30
  62. #define TC6807AF_LOCRESPONSEKEY 0x40
  63. // CSS modes
  64. #define TC6807AF_CSSDECRMODE_OFF  0
  65. #define TC6807AF_CSSDECRMODE_ON   1
  66. // *******************************************************************
  67. // Structures
  68. typedef struct _tc6807af_t tc6807af_t;
  69. typedef struct _tc6807af_ops_t tc6807af_ops_t;
  70. // generic driver structure
  71. struct _tc6807af_t{
  72.   tc6807af_ops_t* ops;
  73.   void* data;
  74. };
  75. // lowlevel access operations
  76. struct _tc6807af_ops_t {
  77. char name[32];
  78. int (*get_reg) (tc6807af_t* instance, int reg);
  79. int (*set_reg) (tc6807af_t* instance, int reg, int val);
  80. };
  81. // *******************************************************************
  82. // function declarations
  83. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  84. // Driver maintenance functions
  85. /**
  86.  *
  87.  * Create new tc6807af driver instance
  88.  *
  89.  * @param ops Lowlevel operations to talk to chip
  90.  * @param data Any extra data for the chip
  91.  *
  92.  */
  93. extern tc6807af_t* tc6807af_new(tc6807af_ops_t* ops, void *data);
  94. /**
  95.  *
  96.  * Destroy a Tc6807af driver instance
  97.  *
  98.  * @param instance The instance to destroy
  99.  *
  100.  */
  101. extern void tc6807af_free(tc6807af_t* instance);
  102. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  103. // High level convenience functions
  104. /**
  105.  *
  106.  * Initialise the TC6807AF
  107.  *
  108.  * @param instance The instance of TC6807AF to use
  109.  *
  110.  * @return 0 on success, <0 on failure
  111.  *
  112.  */
  113. extern int tc6807af_init(tc6807af_t* instance);
  114. /**
  115.  *
  116.  * Set tc6807af decryption mode
  117.  *
  118.  * @param instance The instance of TC6807AF to use
  119.  * @param mode CSS mode (one of TC6807AF_CSSDECMODEX)
  120.  *
  121.  * @return 0 on success, <0 on failure
  122.  *
  123.  */
  124. extern int tc6807af_set_decryption_mode(tc6807af_t* instance, int mode);
  125. /**
  126.  *
  127.  * Send challenge key to TC6807AF
  128.  *
  129.  * @param instance The instance of TC6807AF to use
  130.  * @param key 10 byte char array containing the key
  131.  *
  132.  * @return 0 on success, <0 on failure
  133.  *
  134.  */
  135. extern int tc6807af_send_challenge_key(tc6807af_t* instance, char* key);
  136. /**
  137.  *
  138.  * Get challenge key from tc6807af
  139.  *
  140.  * @param instance The instance of TC6807AF to use
  141.  * @param key 10 byte char array to recieve the key
  142.  *
  143.  * @return 0 on success, <0 on failure
  144.  *
  145.  */
  146. extern int tc6807af_get_challenge_key(tc6807af_t* instance, char* key);
  147. /**
  148.  *
  149.  * Send the response key to the TC6807AF
  150.  *
  151.  * @param instance Instance of the TC6807AF to use
  152.  * @param key 5 byte char array containing the key to send
  153.  *
  154.  * @return 0 on success, <0 on failure
  155.  *
  156.  */
  157. extern int tc6807af_send_response_key(tc6807af_t* instance, char* key);
  158. /**
  159.  *
  160.  * Get the response key from the TC6807AF
  161.  *
  162.  * @param instance Instance of the TC6807AF to use
  163.  * @param key 5 byte char array to receive the key
  164.  *
  165.  * @return 0 on success, <0 on failure
  166.  *
  167.  */
  168. extern int tc6807af_get_response_key(tc6807af_t* instance, char* key);
  169. /**
  170.  *
  171.  * Part1 of The TC6807AF specific part of the send disc key protocol. 
  172.  * Since the disc key os 0x800 bytes, you usually DMA it to the chip somehow...
  173.  *
  174.  * @param instance Instance of the TC6807AF to use
  175.  *
  176.  * @return 0 on success, <0 on failure
  177.  *
  178.  */
  179. extern int tc6807af_send_disc_key_part1(tc6807af_t* instance);
  180. /**
  181.  *
  182.  * Part2 of The TC6807AF specific part of the send disc key protocol. 
  183.  * This bit waits until (I assume) the TC6807AF has finished processing the key
  184.  *
  185.  * @param instance Instance of the TC6807AF to use
  186.  *
  187.  * @return 0 on success, <0 on failure
  188.  *
  189.  */
  190. extern int tc6807af_send_disc_key_part2(tc6807af_t* instance);
  191. /**
  192.  *
  193.  * Send the disc title key
  194.  *
  195.  * @param instance Instance of the TC6807AF to use
  196.  * @param key 5 byte char array containing the key to send
  197.  *
  198.  * @return 0 on success, <0 on failure
  199.  *
  200.  */
  201. extern int tc6807af_send_title_key(tc6807af_t* instance, char* key);
  202. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  203. // Register get/set functions
  204. /**
  205.  *
  206.  * Get location from the TC6807AF
  207.  *
  208.  * @param instance Instance of the TC6807AF to use
  209.  * @param reg Location to retrieve
  210.  * @return The location's value (or negative on error)
  211.  *
  212.  */
  213. extern int tc6807af_get_loc(tc6807af_t* instance, int loc);
  214. /**
  215.  *
  216.  * Set location on the TC6807AF
  217.  *
  218.  * @param instance Instance of the TC6807AF to use
  219.  * @param reg Location to set
  220.  * @param val Value to set
  221.  *
  222.  */
  223. extern int tc6807af_set_loc(tc6807af_t* instance, int loc, int val);
  224. #endif