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