root/sys/cdio.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: cdio.h,v 1.16 2006/12/23 17:35:35 krw Exp $   */
    2 /*      $NetBSD: cdio.h,v 1.11 1996/02/19 18:29:04 scottr Exp $ */
    3 
    4 #ifndef _SYS_CDIO_H_
    5 #define _SYS_CDIO_H_
    6 
    7 #include <sys/types.h>
    8 #include <sys/ioccom.h>
    9 
   10 /* Shared between kernel & process */
   11 
   12 union msf_lba {
   13         struct {
   14                 u_char unused;
   15                 u_char minute;
   16                 u_char second;
   17                 u_char frame;
   18         } msf;
   19         u_int32_t       lba;
   20         u_char          addr[4];
   21 };
   22 
   23 struct cd_toc_entry {
   24         u_char  nothing1;
   25 #if _BYTE_ORDER == _LITTLE_ENDIAN
   26         u_int   control:4;
   27         u_int   addr_type:4;
   28 #endif
   29 #if _BYTE_ORDER == _BIG_ENDIAN
   30         u_int   addr_type:4;
   31         u_int   control:4;
   32 #endif
   33         u_char  track;
   34         u_char  nothing2;
   35         union msf_lba addr;
   36 };
   37 
   38 struct cd_sub_channel_header {
   39         u_char  nothing1;
   40         u_char  audio_status;
   41 #define CD_AS_AUDIO_INVALID     0x00
   42 #define CD_AS_PLAY_IN_PROGRESS  0x11
   43 #define CD_AS_PLAY_PAUSED       0x12
   44 #define CD_AS_PLAY_COMPLETED    0x13
   45 #define CD_AS_PLAY_ERROR        0x14
   46 #define CD_AS_NO_STATUS         0x15
   47         u_char  data_len[2];
   48 };
   49 
   50 struct cd_sub_channel_q_data {
   51         u_char  data_format;
   52 #if _BYTE_ORDER == _LITTLE_ENDIAN
   53         u_int   control:4;
   54         u_int   addr_type:4;
   55 #endif
   56 #if _BYTE_ORDER == _BIG_ENDIAN
   57         u_int   addr_type:4;
   58         u_int   control:4;
   59 #endif
   60         u_char  track_number;
   61         u_char  index_number;
   62         u_char  absaddr[4];
   63         u_char  reladdr[4];
   64 #if _BYTE_ORDER == _LITTLE_ENDIAN
   65         u_int   :7;
   66         u_int   mc_valid:1;
   67 #endif
   68 #if _BYTE_ORDER == _BIG_ENDIAN
   69         u_int   mc_valid:1;
   70         u_int   :7;
   71 #endif
   72         u_char  mc_number[15]; 
   73 #if _BYTE_ORDER == _LITTLE_ENDIAN
   74         u_int   :7;
   75         u_int   ti_valid:1;   
   76 #endif
   77 #if _BYTE_ORDER == _BIG_ENDIAN
   78         u_int   ti_valid:1;   
   79         u_int   :7;
   80 #endif
   81         u_char  ti_number[15]; 
   82 };
   83 
   84 struct cd_sub_channel_position_data {
   85         u_char  data_format;
   86 #if _BYTE_ORDER == _LITTLE_ENDIAN
   87         u_int   control:4;
   88         u_int   addr_type:4;
   89 #endif
   90 #if _BYTE_ORDER == _BIG_ENDIAN
   91         u_int   addr_type:4;
   92         u_int   control:4;
   93 #endif
   94         u_char  track_number;
   95         u_char  index_number;
   96         union msf_lba absaddr;
   97         union msf_lba reladdr;
   98 };
   99 
  100 struct cd_sub_channel_media_catalog {
  101         u_char  data_format;
  102         u_char  nothing1;
  103         u_char  nothing2;
  104         u_char  nothing3;
  105 #if _BYTE_ORDER == _LITTLE_ENDIAN
  106         u_int   :7;
  107         u_int   mc_valid:1;
  108 #endif
  109 #if _BYTE_ORDER == _BIG_ENDIAN
  110         u_int   mc_valid:1;
  111         u_int   :7;
  112 #endif
  113         u_char  mc_number[15];
  114 };
  115 
  116 struct cd_sub_channel_track_info {
  117         u_char  data_format;
  118         u_char  nothing1;
  119         u_char  track_number;
  120         u_char  nothing2;
  121 #if _BYTE_ORDER == _LITTLE_ENDIAN
  122         u_int   :7;
  123         u_int   ti_valid:1;
  124 #endif
  125 #if _BYTE_ORDER == _BIG_ENDIAN
  126         u_int   ti_valid:1;
  127         u_int   :7;
  128 #endif
  129         u_char  ti_number[15];
  130 };
  131 
  132 struct cd_sub_channel_info {
  133         struct cd_sub_channel_header header;
  134         union {
  135                 struct cd_sub_channel_q_data q_data;
  136                 struct cd_sub_channel_position_data position;
  137                 struct cd_sub_channel_media_catalog media_catalog;
  138                 struct cd_sub_channel_track_info track_info;
  139         } what;
  140 };
  141 
  142 /*
  143  * Ioctls for the CD drive
  144  */
  145 struct ioc_play_track {
  146         u_char  start_track;
  147         u_char  start_index;
  148         u_char  end_track;
  149         u_char  end_index;
  150 };
  151 
  152 #define CDIOCPLAYTRACKS _IOW('c', 1, struct ioc_play_track)
  153 struct ioc_play_blocks {
  154         int     blk;
  155         int     len;
  156 };
  157 #define CDIOCPLAYBLOCKS _IOW('c', 2, struct ioc_play_blocks)
  158 
  159 struct ioc_read_subchannel {
  160         u_char  address_format;
  161 #define CD_LBA_FORMAT           1
  162 #define CD_MSF_FORMAT           2
  163         u_char  data_format;
  164 #define CD_SUBQ_DATA            0
  165 #define CD_CURRENT_POSITION     1
  166 #define CD_MEDIA_CATALOG        2
  167 #define CD_TRACK_INFO           3
  168         u_char  track;
  169         int     data_len;
  170         struct  cd_sub_channel_info *data;
  171 };
  172 #define CDIOCREADSUBCHANNEL _IOWR('c', 3, struct ioc_read_subchannel)
  173 
  174 struct ioc_toc_header {
  175         u_short len;
  176         u_char  starting_track;
  177         u_char  ending_track;
  178 };
  179 
  180 #define CDIOREADTOCHEADER _IOR('c', 4, struct ioc_toc_header)
  181 
  182 struct ioc_read_toc_entry {
  183         u_char  address_format;
  184         u_char  starting_track;
  185 #define CD_TRACK_LEADOUT        0xaa
  186         u_short data_len;
  187         struct  cd_toc_entry *data;
  188 };
  189 #define CDIOREADTOCENTRIES _IOWR('c', 5, struct ioc_read_toc_entry)
  190 #define CDIOREADTOCENTRYS CDIOREADTOCENTRIES
  191 
  192 /* read LBA start of a given session; 0=last, others not yet supported */
  193 #define CDIOREADMSADDR _IOWR('c', 6, int)
  194 
  195 struct  ioc_patch {
  196         u_char  patch[4];       /* one for each channel */
  197 };
  198 #define CDIOCSETPATCH   _IOW('c', 9, struct ioc_patch)
  199 
  200 struct  ioc_vol {
  201         u_char  vol[4]; /* one for each channel */
  202 };
  203 #define CDIOCGETVOL     _IOR('c', 10, struct ioc_vol)
  204 #define CDIOCSETVOL     _IOW('c', 11, struct ioc_vol)
  205 #define CDIOCSETMONO    _IO('c', 12)
  206 #define CDIOCSETSTEREO  _IO('c', 13)
  207 #define CDIOCSETMUTE    _IO('c', 14)
  208 #define CDIOCSETLEFT    _IO('c', 15)
  209 #define CDIOCSETRIGHT   _IO('c', 16)
  210 #define CDIOCSETDEBUG   _IO('c', 17)
  211 #define CDIOCCLRDEBUG   _IO('c', 18)
  212 #define CDIOCPAUSE      _IO('c', 19)
  213 #define CDIOCRESUME     _IO('c', 20)
  214 #define CDIOCRESET      _IO('c', 21)
  215 #define CDIOCSTART      _IO('c', 22)
  216 #define CDIOCSTOP       _IO('c', 23)
  217 #define CDIOCEJECT      _IO('c', 24)
  218 #define CDIOCALLOW      _IO('c', 25)
  219 #define CDIOCPREVENT    _IO('c', 26)
  220 #define CDIOCCLOSE      _IO('c', 27)
  221 #define CDIOCSETCDDA    _IOW('c', 28, int)      /* (re)set CDDA reading mode */
  222 
  223 struct ioc_play_msf {
  224         u_char  start_m;
  225         u_char  start_s;
  226         u_char  start_f;
  227         u_char  end_m;
  228         u_char  end_s;
  229         u_char  end_f;
  230 };
  231 #define CDIOCPLAYMSF    _IOW('c', 25, struct ioc_play_msf)
  232 
  233 struct ioc_load_unload {
  234         u_char options;
  235 #define CD_LU_ABORT     0x1     /* NOTE: These are the same as the ATAPI */
  236 #define CD_LU_UNLOAD    0x2     /* op values for the LOAD_UNLOAD command */
  237 #define CD_LU_LOAD      0x3
  238         u_char slot;
  239 };
  240 #define         CDIOCLOADUNLOAD _IOW('c', 26, struct ioc_load_unload)
  241 
  242 /* DVD definitions */
  243 
  244 /* DVD-ROM Specific ioctls */
  245 #define DVD_READ_STRUCT         _IOWR('d', 0, union dvd_struct)
  246 #define DVD_WRITE_STRUCT        _IOWR('d', 1, union dvd_struct)
  247 #define DVD_AUTH                _IOWR('d', 2, union dvd_authinfo)
  248 
  249 #define GPCMD_READ_DVD_STRUCTURE        0xad
  250 #define GPCMD_SEND_DVD_STRUCTURE        0xad
  251 #define GPCMD_REPORT_KEY                0xa4
  252 #define GPCMD_SEND_KEY                  0xa3
  253 
  254 /* DVD struct types */
  255 #define DVD_STRUCT_PHYSICAL             0x00
  256 #define DVD_STRUCT_COPYRIGHT            0x01
  257 #define DVD_STRUCT_DISCKEY              0x02
  258 #define DVD_STRUCT_BCA                  0x03
  259 #define DVD_STRUCT_MANUFACT             0x04
  260 
  261 struct dvd_layer {
  262         u_int8_t book_version;
  263         u_int8_t book_type;
  264         u_int8_t min_rate;
  265         u_int8_t disc_size;
  266         u_int8_t layer_type;
  267         u_int8_t track_path;
  268         u_int8_t nlayers;
  269         u_int8_t track_density;
  270         u_int8_t linear_density;
  271         u_int8_t bca;
  272         u_int32_t start_sector;
  273         u_int32_t end_sector;
  274         u_int32_t end_sector_l0;
  275 };
  276  
  277 struct dvd_physical {
  278         u_int8_t type;
  279 
  280         u_int8_t layer_num;
  281         struct dvd_layer layer[4];
  282 };
  283 
  284 struct dvd_copyright {
  285         u_int8_t type;
  286 
  287         u_int8_t layer_num;
  288         u_int8_t cpst;
  289         u_int8_t rmi;
  290 };
  291 
  292 struct dvd_disckey {
  293         u_int8_t type;
  294 
  295         u_int8_t agid;
  296         u_int8_t value[2048];
  297 };
  298 
  299 struct dvd_bca {
  300         u_int8_t type;
  301 
  302         int len;
  303         u_int8_t value[188];
  304 };
  305 
  306 struct dvd_manufact {
  307         u_int8_t type;
  308 
  309         u_int8_t layer_num;
  310         int len;
  311         u_int8_t value[2048];
  312 };
  313 
  314 union dvd_struct {
  315         u_int8_t type;
  316 
  317         struct dvd_physical     physical;
  318         struct dvd_copyright    copyright;
  319         struct dvd_disckey      disckey;
  320         struct dvd_bca          bca;
  321         struct dvd_manufact     manufact;
  322 };
  323 
  324 /*
  325  * DVD authentication ioctl
  326  */
  327 
  328 /* Authentication states */
  329 #define DVD_LU_SEND_AGID        0
  330 #define DVD_HOST_SEND_CHALLENGE 1
  331 #define DVD_LU_SEND_KEY1        2
  332 #define DVD_LU_SEND_CHALLENGE   3
  333 #define DVD_HOST_SEND_KEY2      4
  334 
  335 /* Termination states */
  336 #define DVD_AUTH_ESTABLISHED    5
  337 #define DVD_AUTH_FAILURE        6
  338 
  339 /* Other functions */
  340 #define DVD_LU_SEND_TITLE_KEY   7
  341 #define DVD_LU_SEND_ASF         8
  342 #define DVD_INVALIDATE_AGID     9
  343 #define DVD_LU_SEND_RPC_STATE   10
  344 #define DVD_HOST_SEND_RPC_STATE 11
  345 
  346 #if 0
  347 /* State data */
  348 typedef u_int8_t dvd_key[5];            /* 40-bit value, MSB is first elem. */
  349 typedef u_int8_t dvd_challenge[10];     /* 80-bit value, MSB is first elem. */
  350 #endif
  351 
  352 #define DVD_KEY_SIZE            5
  353 #define DVD_CHALLENGE_SIZE      10
  354 
  355 struct dvd_lu_send_agid {
  356         u_int8_t type;
  357 
  358         u_int8_t agid;
  359 };
  360 
  361 struct dvd_host_send_challenge {
  362         u_int8_t type;
  363 
  364         u_int8_t agid;
  365         u_int8_t chal[DVD_CHALLENGE_SIZE];
  366 };
  367 
  368 struct dvd_send_key {
  369         u_int8_t type;
  370 
  371         u_int8_t agid;
  372         u_int8_t key[DVD_KEY_SIZE];
  373 };
  374 
  375 struct dvd_lu_send_challenge {
  376         u_int8_t type;
  377 
  378         u_int8_t agid;
  379         u_int8_t chal[DVD_CHALLENGE_SIZE];
  380 };
  381 
  382 #define DVD_CPM_NO_COPYRIGHT    0
  383 #define DVD_CPM_COPYRIGHTED     1
  384 
  385 #define DVD_CP_SEC_NONE         0
  386 #define DVD_CP_SEC_EXIST        1
  387 
  388 #define DVD_CGMS_UNRESTRICTED   0
  389 #define DVD_CGMS_SINGLE         2
  390 #define DVD_CGMS_RESTRICTED     3
  391 
  392 struct dvd_lu_send_title_key {
  393         u_int8_t type;
  394 
  395         u_int8_t agid;
  396         u_int8_t title_key[DVD_KEY_SIZE];
  397         int lba;
  398         u_int8_t cpm;
  399         u_int8_t cp_sec;
  400         u_int8_t cgms;
  401 };
  402 
  403 struct dvd_lu_send_asf {
  404         u_int8_t type;
  405 
  406         u_int8_t agid;
  407         u_int8_t asf;
  408 };
  409 
  410 struct dvd_host_send_rpcstate {
  411         u_int8_t type;
  412         u_int8_t pdrc;
  413 };
  414 
  415 struct dvd_lu_send_rpcstate {
  416         u_int8_t type;
  417         u_int8_t vra;
  418         u_int8_t ucca;
  419         u_int8_t region_mask;
  420         u_int8_t rpc_scheme;
  421       };
  422 
  423 union dvd_authinfo {
  424         u_int8_t type;
  425 
  426         struct dvd_lu_send_agid         lsa;
  427         struct dvd_host_send_challenge  hsc;
  428         struct dvd_send_key             lsk;
  429         struct dvd_lu_send_challenge    lsc;
  430         struct dvd_send_key             hsk;
  431         struct dvd_lu_send_title_key    lstk;
  432         struct dvd_lu_send_asf          lsasf;
  433         struct dvd_host_send_rpcstate   hrpcs;
  434         struct dvd_lu_send_rpcstate     lrpcs;
  435 };
  436 #endif /* !_SYS_CDIO_H_ */

/* [<][>][^][v][top][bottom][index][help] */