media.h revision 1.2.4.2 1 1.2.4.2 tls /*
2 1.2.4.2 tls * media.h -
3 1.2.4.2 tls *
4 1.2.4.2 tls * Written by Eryk Vershen
5 1.2.4.2 tls */
6 1.2.4.2 tls
7 1.2.4.2 tls /*
8 1.2.4.2 tls * Copyright 1997,1998 by Apple Computer, Inc.
9 1.2.4.2 tls * All Rights Reserved
10 1.2.4.2 tls *
11 1.2.4.2 tls * Permission to use, copy, modify, and distribute this software and
12 1.2.4.2 tls * its documentation for any purpose and without fee is hereby granted,
13 1.2.4.2 tls * provided that the above copyright notice appears in all copies and
14 1.2.4.2 tls * that both the copyright notice and this permission notice appear in
15 1.2.4.2 tls * supporting documentation.
16 1.2.4.2 tls *
17 1.2.4.2 tls * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
18 1.2.4.2 tls * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 1.2.4.2 tls * FOR A PARTICULAR PURPOSE.
20 1.2.4.2 tls *
21 1.2.4.2 tls * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
22 1.2.4.2 tls * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
23 1.2.4.2 tls * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
24 1.2.4.2 tls * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
25 1.2.4.2 tls * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
26 1.2.4.2 tls */
27 1.2.4.2 tls
28 1.2.4.2 tls #ifndef __media__
29 1.2.4.2 tls #define __media__
30 1.2.4.2 tls
31 1.2.4.2 tls
32 1.2.4.2 tls /*
33 1.2.4.2 tls * Media is an abstraction of a disk device.
34 1.2.4.2 tls *
35 1.2.4.2 tls * A media object has the following visible attributes:
36 1.2.4.2 tls *
37 1.2.4.2 tls * a granularity (e.g. 512, 1024, 1, etc.)
38 1.2.4.2 tls * a total size in bytes
39 1.2.4.2 tls *
40 1.2.4.2 tls * And the following operations are available:
41 1.2.4.2 tls *
42 1.2.4.2 tls * open
43 1.2.4.2 tls * read @ byte offset for size in bytes
44 1.2.4.2 tls * write @ byte offset for size in bytes
45 1.2.4.2 tls * close
46 1.2.4.2 tls *
47 1.2.4.2 tls * XXX Should really split public media interface from "protected" interface.
48 1.2.4.2 tls */
49 1.2.4.2 tls
50 1.2.4.2 tls
51 1.2.4.2 tls /*
52 1.2.4.2 tls * Defines
53 1.2.4.2 tls */
54 1.2.4.2 tls
55 1.2.4.2 tls
56 1.2.4.2 tls /*
57 1.2.4.2 tls * Types
58 1.2.4.2 tls */
59 1.2.4.2 tls /* those whose use media objects need just the pointer type */
60 1.2.4.2 tls typedef struct media *MEDIA;
61 1.2.4.2 tls
62 1.2.4.2 tls /* those who define media objects need the struct and internal routine types */
63 1.2.4.2 tls typedef long (*media_read)(MEDIA m, long long offset, uint32_t count, void *address);
64 1.2.4.2 tls typedef long (*media_write)(MEDIA m, long long offset, uint32_t count, void *address);
65 1.2.4.2 tls typedef long (*media_close)(MEDIA m);
66 1.2.4.2 tls typedef long (*media_os_reload)(MEDIA m);
67 1.2.4.2 tls
68 1.2.4.2 tls struct media {
69 1.2.4.2 tls long kind; /* kind of media - SCSI, IDE, etc. */
70 1.2.4.2 tls uint32_t grain; /* granularity (offset & size) */
71 1.2.4.2 tls long long size_in_bytes; /* offset granularity */
72 1.2.4.2 tls media_read do_read; /* device specific routines */
73 1.2.4.2 tls media_write do_write;
74 1.2.4.2 tls media_close do_close;
75 1.2.4.2 tls media_os_reload do_os_reload;
76 1.2.4.2 tls /* specific media kinds will add extra info */
77 1.2.4.2 tls };
78 1.2.4.2 tls
79 1.2.4.2 tls /* those whose use media object iterators need just the pointer type */
80 1.2.4.2 tls typedef struct media_iterator *MEDIA_ITERATOR;
81 1.2.4.2 tls
82 1.2.4.2 tls /* those who define media object iterators need the struct and internal routine types */
83 1.2.4.2 tls typedef void (*media_iterator_reset)(MEDIA_ITERATOR m);
84 1.2.4.2 tls typedef char* (*media_iterator_step)(MEDIA_ITERATOR m);
85 1.2.4.2 tls typedef void (*media_iterator_delete)(MEDIA_ITERATOR m);
86 1.2.4.2 tls
87 1.2.4.2 tls typedef enum {
88 1.2.4.2 tls kInit,
89 1.2.4.2 tls kReset,
90 1.2.4.2 tls kIterating,
91 1.2.4.2 tls kEnd
92 1.2.4.2 tls } media_iterator_state;
93 1.2.4.2 tls
94 1.2.4.2 tls struct media_iterator {
95 1.2.4.2 tls long kind; /* kind of media - SCSI, IDE, etc. */
96 1.2.4.2 tls media_iterator_state state; /* init, reset, iterating, at_end */
97 1.2.4.2 tls media_iterator_reset do_reset; /* device specific routines */
98 1.2.4.2 tls media_iterator_step do_step;
99 1.2.4.2 tls media_iterator_delete do_delete;
100 1.2.4.2 tls /* specific media kinds will add extra info */
101 1.2.4.2 tls };
102 1.2.4.2 tls
103 1.2.4.2 tls
104 1.2.4.2 tls /*
105 1.2.4.2 tls * Global Constants
106 1.2.4.2 tls */
107 1.2.4.2 tls
108 1.2.4.2 tls
109 1.2.4.2 tls /*
110 1.2.4.2 tls * Global Variables
111 1.2.4.2 tls */
112 1.2.4.2 tls
113 1.2.4.2 tls
114 1.2.4.2 tls /*
115 1.2.4.2 tls * Forward declarations
116 1.2.4.2 tls */
117 1.2.4.2 tls /* those whose use media objects need these routines */
118 1.2.4.2 tls uint32_t media_granularity(MEDIA m);
119 1.2.4.2 tls long long media_total_size(MEDIA m);
120 1.2.4.2 tls long read_media(MEDIA m, long long offset, uint32_t count, void *address);
121 1.2.4.2 tls long write_media(MEDIA m, long long offset, uint32_t count, void *address);
122 1.2.4.2 tls void close_media(MEDIA m);
123 1.2.4.2 tls void os_reload_media(MEDIA m);
124 1.2.4.2 tls
125 1.2.4.2 tls /* those who define media objects need these routines also */
126 1.2.4.2 tls long allocate_media_kind(void);
127 1.2.4.2 tls MEDIA new_media(long size);
128 1.2.4.2 tls void delete_media(MEDIA m);
129 1.2.4.2 tls
130 1.2.4.2 tls /* those whose use media object iterators need these routines */
131 1.2.4.2 tls void reset_media_iterator(MEDIA_ITERATOR m);
132 1.2.4.2 tls char *step_media_iterator(MEDIA_ITERATOR m);
133 1.2.4.2 tls void delete_media_iterator(MEDIA_ITERATOR m);
134 1.2.4.2 tls
135 1.2.4.2 tls /* those who define media object iterators need these routines also */
136 1.2.4.2 tls MEDIA_ITERATOR new_media_iterator(long size);
137 1.2.4.2 tls void private_delete_media_iterator(MEDIA_ITERATOR m);
138 1.2.4.2 tls
139 1.2.4.2 tls #endif /* __media__ */
140