diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2001-03-24 00:14:39 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2001-03-24 00:14:39 +0000 |
commit | ffb72f990c9933280de104024acf91acee02c1a5 (patch) | |
tree | 8312fd465c763b17886e6e1795ab48bde45c2381 /sbin/pdisk/media.h | |
parent | fa5275b22eb94a7d990e643d54768420845d618c (diff) |
Import of pdisk from apple, BSD licensed code. Archive dated Feb 18 1998
This is a HFS partition editing tool.
Diffstat (limited to 'sbin/pdisk/media.h')
-rw-r--r-- | sbin/pdisk/media.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/sbin/pdisk/media.h b/sbin/pdisk/media.h new file mode 100644 index 00000000000..f631e157a52 --- /dev/null +++ b/sbin/pdisk/media.h @@ -0,0 +1,139 @@ +/* + * media.h - + * + * Written by Eryk Vershen (eryk@apple.com) + */ + +/* + * Copyright 1997,1998 by Apple Computer, Inc. + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appears in all copies and + * that both the copyright notice and this permission notice appear in + * supporting documentation. + * + * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, + * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef __media__ +#define __media__ + + +/* + * Media is an abstraction of a disk device. + * + * A media object has the following visible attributes: + * + * a granularity (e.g. 512, 1024, 1, etc.) + * a total size in bytes + * + * And the following operations are available: + * + * open + * read @ byte offset for size in bytes + * write @ byte offset for size in bytes + * close + * + * XXX Should really split public media interface from "protected" interface. + */ + + +/* + * Defines + */ + + +/* + * Types + */ +/* those whose use media objects need just the pointer type */ +typedef struct media *MEDIA; + +/* those who define media objects need the struct and internal routine types */ +typedef long (*media_read)(MEDIA m, long long offset, unsigned long count, void *address); +typedef long (*media_write)(MEDIA m, long long offset, unsigned long count, void *address); +typedef long (*media_close)(MEDIA m); +typedef long (*media_os_reload)(MEDIA m); + +struct media { + long kind; /* kind of media - SCSI, IDE, etc. */ + unsigned long grain; /* granularity (offset & size) */ + long long size_in_bytes; /* offset granularity */ + media_read do_read; /* device specific routines */ + media_write do_write; + media_close do_close; + media_os_reload do_os_reload; + /* specific media kinds will add extra info */ +}; + +/* those whose use media object iterators need just the pointer type */ +typedef struct media_iterator *MEDIA_ITERATOR; + +/* those who define media object iterators need the struct and internal routine types */ +typedef void (*media_iterator_reset)(MEDIA_ITERATOR m); +typedef char* (*media_iterator_step)(MEDIA_ITERATOR m); +typedef void (*media_iterator_delete)(MEDIA_ITERATOR m); + +typedef enum { + kInit, + kReset, + kIterating, + kEnd +} media_iterator_state; + +struct media_iterator { + long kind; /* kind of media - SCSI, IDE, etc. */ + media_iterator_state state; /* init, reset, iterating, at_end */ + media_iterator_reset do_reset; /* device specific routines */ + media_iterator_step do_step; + media_iterator_delete do_delete; + /* specific media kinds will add extra info */ +}; + + +/* + * Global Constants + */ + + +/* + * Global Variables + */ + + +/* + * Forward declarations + */ +/* those whose use media objects need these routines */ +unsigned long media_granularity(MEDIA m); +long long media_total_size(MEDIA m); +long read_media(MEDIA m, long long offset, unsigned long count, void *address); +long write_media(MEDIA m, long long offset, unsigned long count, void *address); +void close_media(MEDIA m); +void os_reload_media(MEDIA m); + +/* those who define media objects need these routines also */ +long allocate_media_kind(void); +MEDIA new_media(long size); +void delete_media(MEDIA m); + +/* those whose use media object iterators need these routines */ +void reset_media_iterator(MEDIA_ITERATOR m); +char *step_media_iterator(MEDIA_ITERATOR m); +void delete_media_iterator(MEDIA_ITERATOR m); + +/* those who define media object iterators need these routines also */ +MEDIA_ITERATOR new_media_iterator(long size); +void private_delete_media_iterator(MEDIA_ITERATOR m); + +#endif /* __media__ */ |