Lines Matching +full:se +full:- +full:pos

1 // SPDX-License-Identifier: GPL-2.0
3 * SE/HMC Drive (Read) Cache Functions
23 * struct hmcdrv_cache_entry - file cache (only used on read/dir)
25 * @content: kernel-space buffer, 4k aligned
27 * @ofs: start of content within file (-1 if no cached content)
50 .ofs = -1,
56 * hmcdrv_cache_get() - looks for file data/content in read cache
64 loff_t pos; /* position in cache (signed) */ in hmcdrv_cache_get() local
67 if ((ftp->id != hmcdrv_cache_file.id) || in hmcdrv_cache_get()
68 strcmp(hmcdrv_cache_file.fname, ftp->fname)) in hmcdrv_cache_get()
69 return -1; in hmcdrv_cache_get()
71 if (ftp->ofs >= hmcdrv_cache_file.fsize) /* EOF ? */ in hmcdrv_cache_get()
76 return -1; in hmcdrv_cache_get()
78 /* there seems to be cached content - calculate the maximum number in hmcdrv_cache_get()
81 len = hmcdrv_cache_file.fsize - ftp->ofs; in hmcdrv_cache_get()
83 if (len > ftp->len) in hmcdrv_cache_get()
84 len = ftp->len; in hmcdrv_cache_get()
89 pos = ftp->ofs - hmcdrv_cache_file.ofs; in hmcdrv_cache_get()
91 if ((pos >= 0) && in hmcdrv_cache_get()
92 ((pos + len) <= hmcdrv_cache_file.len)) { in hmcdrv_cache_get()
94 memcpy(ftp->buf, in hmcdrv_cache_get()
95 hmcdrv_cache_file.content + pos, in hmcdrv_cache_get()
104 return -1; in hmcdrv_cache_get()
108 * hmcdrv_cache_do() - do a HMC drive CD/DVD transfer with cache update
121 * request (hmcdrv_cache_file.len >= ftp->len) and there is a need in hmcdrv_cache_do()
122 * to do so (ftp->len > 0) in hmcdrv_cache_do()
124 if ((ftp->len > 0) && (hmcdrv_cache_file.len >= ftp->len)) { in hmcdrv_cache_do()
126 /* because the cache is not located at ftp->buf, we have to in hmcdrv_cache_do()
138 len, ftp->fname); in hmcdrv_cache_do()
140 if (len > ftp->len) in hmcdrv_cache_do()
141 len = ftp->len; in hmcdrv_cache_do()
143 hmcdrv_cache_file.ofs = ftp->ofs; in hmcdrv_cache_do()
146 memcpy(ftp->buf, hmcdrv_cache_file.content, len); in hmcdrv_cache_do()
150 hmcdrv_cache_file.ofs = -1; /* invalidate content */ in hmcdrv_cache_do()
157 strscpy(hmcdrv_cache_file.fname, ftp->fname, in hmcdrv_cache_do()
159 hmcdrv_cache_file.id = ftp->id; in hmcdrv_cache_do()
161 ftp->id, hmcdrv_cache_file.fsize, ftp->fname); in hmcdrv_cache_do()
168 * hmcdrv_cache_cmd() - perform a cached HMC drive CD/DVD transfer
172 * Attention: Notice that this function is not reentrant - so the caller
182 if ((ftp->id == HMCDRV_FTP_DIR) || /* read cache */ in hmcdrv_cache_cmd()
183 (ftp->id == HMCDRV_FTP_NLIST) || in hmcdrv_cache_cmd()
184 (ftp->id == HMCDRV_FTP_GET)) { in hmcdrv_cache_cmd()
205 hmcdrv_cache_file.ofs = -1; in hmcdrv_cache_cmd()
211 * hmcdrv_cache_startup() - startup of HMC drive cache
227 return -ENOMEM; in hmcdrv_cache_startup()
239 * hmcdrv_cache_shutdown() - shutdown of HMC drive cache
251 hmcdrv_cache_file.ofs = -1; in hmcdrv_cache_shutdown()