FreeBSD/Linux Kernel Cross Reference
sys/sys/dvdio.h
1 /* $NetBSD: dvdio.h,v 1.8 2005/12/26 18:41:36 perry Exp $ */
2
3 #ifndef _SYS_DVDIO_H_
4 #define _SYS_DVDIO_H_
5
6 #include <sys/types.h>
7 #include <sys/ioccom.h>
8
9 /* DVD-ROM Specific ioctls */
10 #define DVD_READ_STRUCT _IOWR('d', 0, dvd_struct)
11 #define DVD_WRITE_STRUCT _IOWR('d', 1, dvd_struct)
12 #define DVD_AUTH _IOWR('d', 2, dvd_authinfo)
13
14 #define GPCMD_READ_DVD_STRUCTURE 0xad
15 #define GPCMD_SEND_DVD_STRUCTURE 0xad
16 #define GPCMD_REPORT_KEY 0xa4
17 #define GPCMD_SEND_KEY 0xa3
18
19 /* DVD struct types */
20 #define DVD_STRUCT_PHYSICAL 0x00
21 #define DVD_STRUCT_COPYRIGHT 0x01
22 #define DVD_STRUCT_DISCKEY 0x02
23 #define DVD_STRUCT_BCA 0x03
24 #define DVD_STRUCT_MANUFACT 0x04
25
26 struct dvd_layer {
27 uint8_t book_version : 4;
28 uint8_t book_type : 4;
29 uint8_t min_rate : 4;
30 uint8_t disc_size : 4;
31 uint8_t layer_type : 4;
32 uint8_t track_path : 1;
33 uint8_t nlayers : 2;
34 uint8_t track_density : 4;
35 uint8_t linear_density : 4;
36 uint8_t bca : 1;
37 uint32_t start_sector;
38 uint32_t end_sector;
39 uint32_t end_sector_l0;
40 };
41
42 struct dvd_physical {
43 uint8_t type;
44 uint8_t layer_num;
45 struct dvd_layer layer[4];
46 };
47
48 struct dvd_copyright {
49 uint8_t type;
50
51 uint8_t layer_num;
52 uint8_t cpst;
53 uint8_t rmi;
54 };
55
56 struct dvd_disckey {
57 uint8_t type;
58
59 unsigned agid : 2;
60 uint8_t value[2048];
61 };
62
63 struct dvd_bca {
64 uint8_t type;
65
66 int len;
67 uint8_t value[188];
68 };
69
70 struct dvd_manufact {
71 uint8_t type;
72
73 uint8_t layer_num;
74 int len;
75 uint8_t value[2048];
76 };
77
78 typedef union {
79 uint8_t type;
80
81 struct dvd_physical physical;
82 struct dvd_copyright copyright;
83 struct dvd_disckey disckey;
84 struct dvd_bca bca;
85 struct dvd_manufact manufact;
86 } dvd_struct;
87
88 /*
89 * DVD authentication ioctl
90 */
91
92 /* Authentication states */
93 #define DVD_LU_SEND_AGID 0
94 #define DVD_HOST_SEND_CHALLENGE 1
95 #define DVD_LU_SEND_KEY1 2
96 #define DVD_LU_SEND_CHALLENGE 3
97 #define DVD_HOST_SEND_KEY2 4
98
99 /* Termination states */
100 #define DVD_AUTH_ESTABLISHED 5
101 #define DVD_AUTH_FAILURE 6
102
103 /* Other functions */
104 #define DVD_LU_SEND_TITLE_KEY 7
105 #define DVD_LU_SEND_ASF 8
106 #define DVD_INVALIDATE_AGID 9
107 #define DVD_LU_SEND_RPC_STATE 10
108 #define DVD_HOST_SEND_RPC_STATE 11
109
110 /* State data */
111 typedef uint8_t dvd_key[5]; /* 40-bit value, MSB is first elem. */
112 typedef uint8_t dvd_challenge[10]; /* 80-bit value, MSB is first elem. */
113
114 struct dvd_lu_send_agid {
115 uint8_t type;
116 unsigned agid : 2;
117 };
118
119 struct dvd_host_send_challenge {
120 uint8_t type;
121 unsigned agid : 2;
122
123 dvd_challenge chal;
124 };
125
126 struct dvd_send_key {
127 uint8_t type;
128 unsigned agid : 2;
129
130 dvd_key key;
131 };
132
133 struct dvd_lu_send_challenge {
134 uint8_t type;
135 unsigned agid : 2;
136
137 dvd_challenge chal;
138 };
139
140 #define DVD_CPM_NO_COPYRIGHT 0
141 #define DVD_CPM_COPYRIGHTED 1
142
143 #define DVD_CP_SEC_NONE 0
144 #define DVD_CP_SEC_EXIST 1
145
146 #define DVD_CGMS_UNRESTRICTED 0
147 #define DVD_CGMS_SINGLE 2
148 #define DVD_CGMS_RESTRICTED 3
149
150 struct dvd_lu_send_title_key {
151 uint8_t type;
152 unsigned agid : 2;
153
154 dvd_key title_key;
155 int lba;
156 unsigned cpm : 1;
157 unsigned cp_sec : 1;
158 unsigned cgms : 2;
159 };
160
161 struct dvd_lu_send_asf {
162 uint8_t type;
163 unsigned agid : 2;
164
165 unsigned asf : 1;
166 };
167
168 struct dvd_host_send_rpcstate {
169 uint8_t type;
170 uint8_t pdrc;
171 };
172
173 struct dvd_lu_send_rpcstate {
174 uint8_t type : 2;
175 uint8_t vra : 3;
176 uint8_t ucca : 3;
177 uint8_t region_mask;
178 uint8_t rpc_scheme;
179 };
180
181 typedef union {
182 uint8_t type;
183
184 struct dvd_lu_send_agid lsa;
185 struct dvd_host_send_challenge hsc;
186 struct dvd_send_key lsk;
187 struct dvd_lu_send_challenge lsc;
188 struct dvd_send_key hsk;
189 struct dvd_lu_send_title_key lstk;
190 struct dvd_lu_send_asf lsasf;
191 struct dvd_host_send_rpcstate hrpcs;
192 struct dvd_lu_send_rpcstate lrpcs;
193 } dvd_authinfo;
194
195 typedef struct {
196 uint16_t report_key_length;
197 uint8_t reserved1[2];
198 uint8_t ucca : 3;
199 uint8_t vra : 3;
200 uint8_t type_code : 2;
201 uint8_t region_mask;
202 uint8_t rpc_scheme;
203 uint8_t reserved2;
204 } dvd_rpc_state_t;
205
206 #endif /* _SYS_DVDIO_H_ */
Cache object: 999d643b49dd96487fb6d8588f98cf50
|