18c2aff776a775d34a4c9893a4c72e0434d68e36artem/***************************************************************************
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * cdutils.h : definitions for CD/DVD utilities
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Use is subject to license terms.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Licensed under the Academic Free License version 2.1
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem **************************************************************************/
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
92f381329ebf1c2209df9608670666b32b291e05artem#pragma ident "%Z%%M% %I% %E% SMI"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#ifndef CDUTILS_H
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define CDUTILS_H
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <sys/types.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <sys/dkio.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <sys/cdio.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <sys/scsi/impl/uscsi.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemenum {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem CDUTIL_WALK_CONTINUE,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem CDUTIL_WALK_STOP
18c2aff776a775d34a4c9893a4c72e0434d68e36artem};
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef struct intlist {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int val;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem struct intlist *next;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem} intlist_t;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef struct disc_info {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int disc_status;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int erasable;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uint_t capacity;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem} disc_info_t;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define min(a, b) ((a) < (b) ? (a) : (b))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define max(a, b) ((a) > (b) ? (a) : (b))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid uscsi_cmd_init(struct uscsi_cmd *scmd, char *cdb, int cdblen);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint uscsi(int fd, struct uscsi_cmd *scmd);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint mode_sense(int fd, uchar_t pc, int dbd, int page_len,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uchar_t *buffer);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint get_mode_page(int fd, int page_no, int pc, int buf_len,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uchar_t *buffer, int *plen);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint get_configuration(int fd, uint16_t feature, int bufsize,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uchar_t *buf);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t get_current_profile(int fd, int *profile);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid walk_profiles(int fd, int (*f)(void *, int, boolean_t), void *);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid get_read_write_speeds(int fd, int *read_speed, int *write_speed,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem intlist_t **wspeeds, int *n_wspeeds, intlist_t **wspeeds_mem);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t get_disc_info(int fd, disc_info_t *);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t read_format_capacity(int fd, uint64_t *capacity);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t get_media_info(int fd, struct dk_minfo *minfop);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t get_disc_capacity_for_profile(int fd, int profile,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uint64_t *capacity);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean_t read_toc(int fd, int format, int trackno, int buflen,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem uchar_t *buf);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#endif /* CDUTILS_H */