[BACK]Return to cdio.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/cdio.h, Revision 1.1.1.1

1.1       nbrk        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_ */

CVSweb