xref: /illumos-gate/usr/src/cmd/hal/utils/cdutils.h (revision 2a8bcb4e)
1*18c2aff7Sartem /***************************************************************************
2*18c2aff7Sartem  *
3*18c2aff7Sartem  * cdutils.h : definitions for CD/DVD utilities
4*18c2aff7Sartem  *
5*18c2aff7Sartem  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
6*18c2aff7Sartem  * Use is subject to license terms.
7*18c2aff7Sartem  *
8*18c2aff7Sartem  * Licensed under the Academic Free License version 2.1
9*18c2aff7Sartem  *
10*18c2aff7Sartem  **************************************************************************/
11*18c2aff7Sartem 
12*18c2aff7Sartem #ifndef CDUTILS_H
13*18c2aff7Sartem #define CDUTILS_H
14*18c2aff7Sartem 
15*18c2aff7Sartem #include <sys/types.h>
16*18c2aff7Sartem #include <sys/dkio.h>
17*18c2aff7Sartem #include <sys/cdio.h>
18*18c2aff7Sartem #include <sys/scsi/impl/uscsi.h>
19*18c2aff7Sartem 
20*18c2aff7Sartem enum {
21*18c2aff7Sartem 	CDUTIL_WALK_CONTINUE,
22*18c2aff7Sartem 	CDUTIL_WALK_STOP
23*18c2aff7Sartem };
24*18c2aff7Sartem 
25*18c2aff7Sartem typedef struct intlist {
26*18c2aff7Sartem 	int	val;
27*18c2aff7Sartem 	struct intlist *next;
28*18c2aff7Sartem } intlist_t;
29*18c2aff7Sartem 
30*18c2aff7Sartem typedef struct disc_info {
31*18c2aff7Sartem 	int	disc_status;
32*18c2aff7Sartem 	int	erasable;
33*18c2aff7Sartem 	uint_t	capacity;
34*18c2aff7Sartem } disc_info_t;
35*18c2aff7Sartem 
36*18c2aff7Sartem #define	min(a, b)	((a) < (b) ? (a) : (b))
37*18c2aff7Sartem #define	max(a, b)	((a) > (b) ? (a) : (b))
38*18c2aff7Sartem 
39*18c2aff7Sartem void		uscsi_cmd_init(struct uscsi_cmd *scmd, char *cdb, int cdblen);
40*18c2aff7Sartem int		uscsi(int fd, struct uscsi_cmd *scmd);
41*18c2aff7Sartem int		mode_sense(int fd, uchar_t pc, int dbd, int page_len,
42*18c2aff7Sartem 		uchar_t *buffer);
43*18c2aff7Sartem int		get_mode_page(int fd, int page_no, int pc, int buf_len,
44*18c2aff7Sartem 		uchar_t *buffer, int *plen);
45*18c2aff7Sartem int		get_configuration(int fd, uint16_t feature, int bufsize,
46*18c2aff7Sartem 		uchar_t *buf);
47*18c2aff7Sartem boolean_t	get_current_profile(int fd, int *profile);
48*18c2aff7Sartem void		walk_profiles(int fd, int (*f)(void *, int, boolean_t), void *);
49*18c2aff7Sartem void		get_read_write_speeds(int fd, int *read_speed, int *write_speed,
50*18c2aff7Sartem 		intlist_t **wspeeds, int *n_wspeeds, intlist_t **wspeeds_mem);
51*18c2aff7Sartem boolean_t	get_disc_info(int fd, disc_info_t *);
52*18c2aff7Sartem boolean_t	read_format_capacity(int fd, uint64_t *capacity);
53*18c2aff7Sartem boolean_t	get_media_info(int fd, struct dk_minfo *minfop);
54*18c2aff7Sartem boolean_t	get_disc_capacity_for_profile(int fd, int profile,
55*18c2aff7Sartem 		uint64_t *capacity);
56*18c2aff7Sartem boolean_t	read_toc(int fd, int format, int trackno, int buflen,
57*18c2aff7Sartem 		uchar_t *buf);
58*18c2aff7Sartem 
59*18c2aff7Sartem #endif /* CDUTILS_H */
60