| [2] | 1 | /*************************************************************************** |
|---|
| 2 | * Copyright (c) 2007-2010, Broadcom Corporation |
|---|
| 3 | * All Rights Reserved |
|---|
| 4 | * Confidential Property of Broadcom Corporation |
|---|
| 5 | * |
|---|
| 6 | * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE |
|---|
| 7 | * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR |
|---|
| 8 | * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. |
|---|
| 9 | * |
|---|
| 10 | * $brcm_Workfile: bfile_cache.h $ |
|---|
| 11 | * $brcm_Revision: 9 $ |
|---|
| 12 | * $brcm_Date: 6/25/10 12:00p $ |
|---|
| 13 | * |
|---|
| 14 | * Module Description: |
|---|
| 15 | * |
|---|
| 16 | * Linear file cache |
|---|
| 17 | * |
|---|
| 18 | * Revision History: |
|---|
| 19 | * |
|---|
| 20 | * $brcm_Log: /BSEAV/lib/bfile/bfile_cache.h $ |
|---|
| 21 | * |
|---|
| 22 | * 9 6/25/10 12:00p vsilyaev |
|---|
| 23 | * SW3548-2995: Separate requested reserve size and minimal size for |
|---|
| 24 | * succesive parsing |
|---|
| 25 | * |
|---|
| 26 | * 8 4/8/10 6:53p vsilyaev |
|---|
| 27 | * SW7405-3773: Use 64-bit integer for segment size |
|---|
| 28 | * |
|---|
| 29 | * 7 1/13/10 5:06p vsilyaev |
|---|
| 30 | * SW3556-913: Remeber file I/O related errors and propagate them |
|---|
| 31 | * |
|---|
| 32 | * 6 1/12/10 7:57p vsilyaev |
|---|
| 33 | * SW3556-913: Separate data and index reads, allow incomplete data reads |
|---|
| 34 | * |
|---|
| 35 | * 5 1/11/10 7:35p vsilyaev |
|---|
| 36 | * SW3556-913: Added function to differentiate between end of cached data |
|---|
| 37 | * and file error |
|---|
| 38 | * |
|---|
| 39 | * 4 11/23/09 4:11p vsilyaev |
|---|
| 40 | * SW7405-3368: Added parsing of MKV attachments |
|---|
| 41 | * |
|---|
| 42 | * 3 8/18/08 12:41p gmohile |
|---|
| 43 | * PR 42817 : Add support for AVI2.0 |
|---|
| 44 | * |
|---|
| 45 | * 2 3/3/08 12:22p vsilyaev |
|---|
| 46 | * PR 39818: Increased segment size |
|---|
| 47 | * |
|---|
| 48 | * 1 4/29/07 12:55a vsilyaev |
|---|
| 49 | * PR 28631: File cache utilities |
|---|
| 50 | * |
|---|
| 51 | * |
|---|
| 52 | *******************************************************************************/ |
|---|
| 53 | #ifndef _BFILE_CACHE_H__ |
|---|
| 54 | #define _BFILE_CACHE_H__ |
|---|
| 55 | |
|---|
| 56 | #include "bfile_io.h" |
|---|
| 57 | #include "bfile_buffer.h" |
|---|
| 58 | |
|---|
| 59 | #ifdef __cplusplus |
|---|
| 60 | extern "C" |
|---|
| 61 | { |
|---|
| 62 | #endif |
|---|
| 63 | |
|---|
| 64 | typedef struct bfile_segment { |
|---|
| 65 | off_t start; |
|---|
| 66 | uint64_t len; |
|---|
| 67 | } bfile_segment; |
|---|
| 68 | |
|---|
| 69 | void bfile_segment_clear(bfile_segment *segment); |
|---|
| 70 | void bfile_segment_set(bfile_segment *segment, off_t start, uint64_t len); |
|---|
| 71 | bool bfile_segment_test(const bfile_segment *segment); |
|---|
| 72 | |
|---|
| 73 | typedef struct bfile_cache *bfile_cache_t; |
|---|
| 74 | |
|---|
| 75 | bfile_cache_t bfile_cache_create(bfile_io_read_t fd, const bfile_segment *segment, size_t buf_size, size_t atom_size); |
|---|
| 76 | void bfile_cache_destroy(bfile_cache_t cache); |
|---|
| 77 | int bfile_cache_seek(bfile_cache_t cache, size_t off); |
|---|
| 78 | const uint8_t *bfile_cache_next(bfile_cache_t cache); |
|---|
| 79 | void bfile_cache_clear( bfile_cache_t cache); |
|---|
| 80 | bool bfile_cache_is_file_error(bfile_cache_t cache); |
|---|
| 81 | void bfile_segment_reset( bfile_cache_t cache, bfile_segment *segment); |
|---|
| 82 | |
|---|
| 83 | typedef enum bfile_segment_async_result { |
|---|
| 84 | bfile_segment_async_result_success, |
|---|
| 85 | bfile_segment_async_result_async, |
|---|
| 86 | bfile_segment_async_result_eof, |
|---|
| 87 | bfile_segment_async_result_no_data, |
|---|
| 88 | bfile_segment_async_result_error |
|---|
| 89 | } bfile_segment_async_result; |
|---|
| 90 | |
|---|
| 91 | typedef struct bfile_cached_segment { |
|---|
| 92 | batom_cursor cursor; /* cursor that points to current parsing point in the accumulator */ |
|---|
| 93 | uint64_t accum_offset; |
|---|
| 94 | batom_accum_t accum; |
|---|
| 95 | size_t min_read_size; |
|---|
| 96 | bfile_buffer_t buffer; |
|---|
| 97 | bfile_segment segment; |
|---|
| 98 | bfile_buffer_result last_read_result; |
|---|
| 99 | struct { |
|---|
| 100 | size_t accum_size; |
|---|
| 101 | size_t load_size; |
|---|
| 102 | void *cntx; |
|---|
| 103 | void (*read_complete)(void *, bfile_segment_async_result result); |
|---|
| 104 | } async; |
|---|
| 105 | } bfile_cached_segment; |
|---|
| 106 | |
|---|
| 107 | |
|---|
| 108 | int bfile_cached_segment_init(bfile_cached_segment *segment, bfile_buffer_t buffer, batom_factory_t factory, size_t min_read_size); |
|---|
| 109 | void bfile_cached_segment_shutdown(bfile_cached_segment *segment); |
|---|
| 110 | void bfile_cached_segment_seek(bfile_cached_segment *segment, uint64_t offset); |
|---|
| 111 | uint64_t bfile_cached_segment_tell(bfile_cached_segment *segment); |
|---|
| 112 | void bfile_cached_segment_set(bfile_cached_segment *segment, off_t start, uint64_t len); |
|---|
| 113 | void bfile_cached_segment_async_read_complete(void *cntx, batom_t atom, bfile_buffer_result result); |
|---|
| 114 | bfile_segment_async_result bfile_cached_segment_async_reserve(bfile_cached_segment *segment, size_t reserve_size, void (*read_complete)(void *, bfile_segment_async_result ), void *cntx); |
|---|
| 115 | bool bfile_cached_segment_reserve(bfile_cached_segment *segment, size_t reserve_size); |
|---|
| 116 | bool bfile_cached_segment_reserve_custom_buffer(bfile_cached_segment *segment, size_t reserve_size, bfile_buffer_t buffer); |
|---|
| 117 | bool bfile_cached_segment_reserve_min(bfile_cached_segment *segment, size_t reserve_size, size_t min_size); |
|---|
| 118 | bool bfile_cached_segment_reserve_custom_buffer_min(bfile_cached_segment *segment, size_t reserve_size, size_t min_size, bfile_buffer_t buffer); |
|---|
| 119 | |
|---|
| 120 | |
|---|
| 121 | |
|---|
| 122 | #ifdef __cplusplus |
|---|
| 123 | } |
|---|
| 124 | #endif |
|---|
| 125 | |
|---|
| 126 | |
|---|
| 127 | #endif /* _BFILE_CACHE_H__ */ |
|---|
| 128 | |
|---|
| 129 | |
|---|