xref: /plan9/sys/src/cmd/cdfs/dat.h (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
1 
2 enum {
3 	Maxtrack		= 200,
4 	Ntrack		= Maxtrack+1,
5 	BScdrom		= 2048,
6 	BScdda		= 2352,
7 	BScdxa		= 2336,
8 	BSmax		= 2352,
9 	Nalloc		= 12*BScdda,
10 	DictBlock	= 1,
11 
12 	TypeDA		= 0,		/* Direct Access */
13 	TypeSA		= 1,		/* Sequential Access */
14 	TypeWO		= 4,		/* Worm */
15 	TypeCD		= 5,		/* CD-ROM */
16 	TypeMO		= 7,		/* rewriteable Magneto-Optical */
17 	TypeMC		= 8,		/* Medium Changer */
18 
19 	TypeNone	= 0,
20 	TypeAudio,
21 	TypeAwritable,
22 	TypeData,
23 	TypeDwritable,
24 	TypeDisk,
25 	TypeBlank,
26 
27 	Cwrite = 1<<0,
28 	Ccdda = 1<<1,
29 
30 	Nblock = 12,
31 };
32 
33 typedef struct Buf Buf;
34 typedef struct Drive Drive;
35 typedef struct Track Track;
36 typedef struct Otrack Otrack;
37 typedef struct Dev Dev;
38 typedef struct Msf Msf;	/* minute, second, frame */
39 
40 struct Msf {
41 	int m;
42 	int s;
43 	int f;
44 };
45 
46 struct Track
47 {
48 	/* initialized while obtaining the toc (gettoc) */
49 	vlong	size;		/* total size in bytes */
50 	long	bs;		/* block size in bytes */
51 	ulong	beg;		/* beginning block number */
52 	ulong	end;		/* ending block number */
53 	int	type;
54 	Msf	mbeg;
55 	Msf	mend;
56 
57 
58 	/* initialized by fs */
59 	char	name[32];
60 	int	mode;
61 	int	mtime;
62 };
63 
64 struct DTrack
65 {
66 	uchar	name[32];
67 	uchar	beg[4];
68 	uchar	end[4];
69 	uchar	size[8];
70 	uchar	magic[4];
71 };
72 
73 struct Otrack
74 {
75 	Track *track;
76 	Drive *drive;
77 	int nchange;
78 	int omode;
79 	Buf *buf;
80 
81 	int nref;	/* kept by file server */
82 };
83 
84 struct Dev
85 {
86 	Otrack* (*openrd)(Drive *d, int trackno);
87 	Otrack* (*create)(Drive *d, int bs);
88 	long (*read)(Otrack *t, void *v, long n, long off);
89 	long (*write)(Otrack *t, void *v, long n);
90 	void (*close)(Otrack *t);
91 	int (*gettoc)(Drive*);
92 	int (*fixate)(Drive *d);
93 	char* (*ctl)(Drive *d, int argc, char **argv);
94 	char* (*setspeed)(Drive *d, int r, int w);
95 };
96 
97 struct Drive
98 {
99 	QLock;
100 	Scsi;
101 
102 	int	type;
103 	int	nopen;
104 	int	firsttrack;
105 	int	ntrack;
106 	int	nchange;
107 	int	changetime;
108 	int	nameok;
109 	int	writeok;
110 	Track	track[Ntrack];
111 	ulong	cap;
112 	uchar	blkbuf[BScdda];
113 	int	maxreadspeed;
114 	int	maxwritespeed;
115 	int	readspeed;
116 	int	writespeed;
117 	Dev;
118 
119 	void *aux;	/* kept by driver */
120 };
121 
122 struct Buf
123 {
124 	uchar *data;	/* buffer */
125 	long off;		/* data[0] at offset off in file */
126 	int bs;		/* block size */
127 	long ndata;	/* no. valid bytes in data */
128 	int nblock;	/* total buffer size in blocks */
129 	int	omode;	/* OREAD, OWRITE */
130 	long	(*fn)(Buf*, void*, long, long);	/* read, write */
131 
132 	/* used only by client */
133 	Otrack *otrack;
134 };
135 
136 extern int	vflag;
137