• Home
  • Raw
  • Download

Lines Matching refs:walk

38 			       struct blkcipher_walk *walk);
40 struct blkcipher_walk *walk);
42 static inline void blkcipher_map_src(struct blkcipher_walk *walk) in blkcipher_map_src() argument
44 walk->src.virt.addr = scatterwalk_map(&walk->in, 0); in blkcipher_map_src()
47 static inline void blkcipher_map_dst(struct blkcipher_walk *walk) in blkcipher_map_dst() argument
49 walk->dst.virt.addr = scatterwalk_map(&walk->out, 1); in blkcipher_map_dst()
52 static inline void blkcipher_unmap_src(struct blkcipher_walk *walk) in blkcipher_unmap_src() argument
54 scatterwalk_unmap(walk->src.virt.addr, 0); in blkcipher_unmap_src()
57 static inline void blkcipher_unmap_dst(struct blkcipher_walk *walk) in blkcipher_unmap_dst() argument
59 scatterwalk_unmap(walk->dst.virt.addr, 1); in blkcipher_unmap_dst()
72 struct blkcipher_walk *walk, in blkcipher_done_slow() argument
78 addr = (u8 *)ALIGN((unsigned long)walk->buffer, alignmask + 1); in blkcipher_done_slow()
80 scatterwalk_copychunks(addr, &walk->out, bsize, 1); in blkcipher_done_slow()
84 static inline unsigned int blkcipher_done_fast(struct blkcipher_walk *walk, in blkcipher_done_fast() argument
87 if (walk->flags & BLKCIPHER_WALK_COPY) { in blkcipher_done_fast()
88 blkcipher_map_dst(walk); in blkcipher_done_fast()
89 memcpy(walk->dst.virt.addr, walk->page, n); in blkcipher_done_fast()
90 blkcipher_unmap_dst(walk); in blkcipher_done_fast()
91 } else if (!(walk->flags & BLKCIPHER_WALK_PHYS)) { in blkcipher_done_fast()
92 blkcipher_unmap_src(walk); in blkcipher_done_fast()
93 if (walk->flags & BLKCIPHER_WALK_DIFF) in blkcipher_done_fast()
94 blkcipher_unmap_dst(walk); in blkcipher_done_fast()
97 scatterwalk_advance(&walk->in, n); in blkcipher_done_fast()
98 scatterwalk_advance(&walk->out, n); in blkcipher_done_fast()
104 struct blkcipher_walk *walk, int err) in blkcipher_walk_done() argument
110 unsigned int n = walk->nbytes - err; in blkcipher_walk_done()
112 if (likely(!(walk->flags & BLKCIPHER_WALK_SLOW))) in blkcipher_walk_done()
113 n = blkcipher_done_fast(walk, n); in blkcipher_walk_done()
118 n = blkcipher_done_slow(tfm, walk, n); in blkcipher_walk_done()
120 nbytes = walk->total - n; in blkcipher_walk_done()
124 scatterwalk_done(&walk->in, 0, nbytes); in blkcipher_walk_done()
125 scatterwalk_done(&walk->out, 1, nbytes); in blkcipher_walk_done()
128 walk->total = nbytes; in blkcipher_walk_done()
129 walk->nbytes = nbytes; in blkcipher_walk_done()
133 return blkcipher_walk_next(desc, walk); in blkcipher_walk_done()
136 if (walk->iv != desc->info) in blkcipher_walk_done()
137 memcpy(desc->info, walk->iv, crypto_blkcipher_ivsize(tfm)); in blkcipher_walk_done()
138 if (walk->buffer != walk->page) in blkcipher_walk_done()
139 kfree(walk->buffer); in blkcipher_walk_done()
140 if (walk->page) in blkcipher_walk_done()
141 free_page((unsigned long)walk->page); in blkcipher_walk_done()
148 struct blkcipher_walk *walk, in blkcipher_next_slow() argument
155 if (walk->buffer) in blkcipher_next_slow()
158 walk->buffer = walk->page; in blkcipher_next_slow()
159 if (walk->buffer) in blkcipher_next_slow()
164 walk->buffer = kmalloc(n, GFP_ATOMIC); in blkcipher_next_slow()
165 if (!walk->buffer) in blkcipher_next_slow()
166 return blkcipher_walk_done(desc, walk, -ENOMEM); in blkcipher_next_slow()
169 walk->dst.virt.addr = (u8 *)ALIGN((unsigned long)walk->buffer, in blkcipher_next_slow()
171 walk->dst.virt.addr = blkcipher_get_spot(walk->dst.virt.addr, bsize); in blkcipher_next_slow()
172 walk->src.virt.addr = blkcipher_get_spot(walk->dst.virt.addr + in blkcipher_next_slow()
175 scatterwalk_copychunks(walk->src.virt.addr, &walk->in, bsize, 0); in blkcipher_next_slow()
177 walk->nbytes = bsize; in blkcipher_next_slow()
178 walk->flags |= BLKCIPHER_WALK_SLOW; in blkcipher_next_slow()
183 static inline int blkcipher_next_copy(struct blkcipher_walk *walk) in blkcipher_next_copy() argument
185 u8 *tmp = walk->page; in blkcipher_next_copy()
187 blkcipher_map_src(walk); in blkcipher_next_copy()
188 memcpy(tmp, walk->src.virt.addr, walk->nbytes); in blkcipher_next_copy()
189 blkcipher_unmap_src(walk); in blkcipher_next_copy()
191 walk->src.virt.addr = tmp; in blkcipher_next_copy()
192 walk->dst.virt.addr = tmp; in blkcipher_next_copy()
198 struct blkcipher_walk *walk) in blkcipher_next_fast() argument
202 walk->src.phys.page = scatterwalk_page(&walk->in); in blkcipher_next_fast()
203 walk->src.phys.offset = offset_in_page(walk->in.offset); in blkcipher_next_fast()
204 walk->dst.phys.page = scatterwalk_page(&walk->out); in blkcipher_next_fast()
205 walk->dst.phys.offset = offset_in_page(walk->out.offset); in blkcipher_next_fast()
207 if (walk->flags & BLKCIPHER_WALK_PHYS) in blkcipher_next_fast()
210 diff = walk->src.phys.offset - walk->dst.phys.offset; in blkcipher_next_fast()
211 diff |= walk->src.virt.page - walk->dst.virt.page; in blkcipher_next_fast()
213 blkcipher_map_src(walk); in blkcipher_next_fast()
214 walk->dst.virt.addr = walk->src.virt.addr; in blkcipher_next_fast()
217 walk->flags |= BLKCIPHER_WALK_DIFF; in blkcipher_next_fast()
218 blkcipher_map_dst(walk); in blkcipher_next_fast()
225 struct blkcipher_walk *walk) in blkcipher_walk_next() argument
233 n = walk->total; in blkcipher_walk_next()
236 return blkcipher_walk_done(desc, walk, -EINVAL); in blkcipher_walk_next()
239 walk->flags &= ~(BLKCIPHER_WALK_SLOW | BLKCIPHER_WALK_COPY | in blkcipher_walk_next()
241 if (!scatterwalk_aligned(&walk->in, alignmask) || in blkcipher_walk_next()
242 !scatterwalk_aligned(&walk->out, alignmask)) { in blkcipher_walk_next()
243 walk->flags |= BLKCIPHER_WALK_COPY; in blkcipher_walk_next()
244 if (!walk->page) { in blkcipher_walk_next()
245 walk->page = (void *)__get_free_page(GFP_ATOMIC); in blkcipher_walk_next()
246 if (!walk->page) in blkcipher_walk_next()
251 bsize = min(walk->blocksize, n); in blkcipher_walk_next()
252 n = scatterwalk_clamp(&walk->in, n); in blkcipher_walk_next()
253 n = scatterwalk_clamp(&walk->out, n); in blkcipher_walk_next()
256 err = blkcipher_next_slow(desc, walk, bsize, alignmask); in blkcipher_walk_next()
260 walk->nbytes = n; in blkcipher_walk_next()
261 if (walk->flags & BLKCIPHER_WALK_COPY) { in blkcipher_walk_next()
262 err = blkcipher_next_copy(walk); in blkcipher_walk_next()
266 return blkcipher_next_fast(desc, walk); in blkcipher_walk_next()
269 if (walk->flags & BLKCIPHER_WALK_PHYS) { in blkcipher_walk_next()
270 walk->src.phys.page = virt_to_page(walk->src.virt.addr); in blkcipher_walk_next()
271 walk->dst.phys.page = virt_to_page(walk->dst.virt.addr); in blkcipher_walk_next()
272 walk->src.phys.offset &= PAGE_SIZE - 1; in blkcipher_walk_next()
273 walk->dst.phys.offset &= PAGE_SIZE - 1; in blkcipher_walk_next()
278 static inline int blkcipher_copy_iv(struct blkcipher_walk *walk, in blkcipher_copy_iv() argument
282 unsigned bs = walk->blocksize; in blkcipher_copy_iv()
290 walk->buffer = kmalloc(size, GFP_ATOMIC); in blkcipher_copy_iv()
291 if (!walk->buffer) in blkcipher_copy_iv()
294 iv = (u8 *)ALIGN((unsigned long)walk->buffer, alignmask + 1); in blkcipher_copy_iv()
299 walk->iv = memcpy(iv, walk->iv, ivsize); in blkcipher_copy_iv()
304 struct blkcipher_walk *walk) in blkcipher_walk_virt() argument
306 walk->flags &= ~BLKCIPHER_WALK_PHYS; in blkcipher_walk_virt()
307 walk->blocksize = crypto_blkcipher_blocksize(desc->tfm); in blkcipher_walk_virt()
308 return blkcipher_walk_first(desc, walk); in blkcipher_walk_virt()
313 struct blkcipher_walk *walk) in blkcipher_walk_phys() argument
315 walk->flags |= BLKCIPHER_WALK_PHYS; in blkcipher_walk_phys()
316 walk->blocksize = crypto_blkcipher_blocksize(desc->tfm); in blkcipher_walk_phys()
317 return blkcipher_walk_first(desc, walk); in blkcipher_walk_phys()
322 struct blkcipher_walk *walk) in blkcipher_walk_first() argument
330 walk->nbytes = walk->total; in blkcipher_walk_first()
331 if (unlikely(!walk->total)) in blkcipher_walk_first()
334 walk->buffer = NULL; in blkcipher_walk_first()
335 walk->iv = desc->info; in blkcipher_walk_first()
336 if (unlikely(((unsigned long)walk->iv & alignmask))) { in blkcipher_walk_first()
337 int err = blkcipher_copy_iv(walk, tfm, alignmask); in blkcipher_walk_first()
342 scatterwalk_start(&walk->in, walk->in.sg); in blkcipher_walk_first()
343 scatterwalk_start(&walk->out, walk->out.sg); in blkcipher_walk_first()
344 walk->page = NULL; in blkcipher_walk_first()
346 return blkcipher_walk_next(desc, walk); in blkcipher_walk_first()
350 struct blkcipher_walk *walk, in blkcipher_walk_virt_block() argument
353 walk->flags &= ~BLKCIPHER_WALK_PHYS; in blkcipher_walk_virt_block()
354 walk->blocksize = blocksize; in blkcipher_walk_virt_block()
355 return blkcipher_walk_first(desc, walk); in blkcipher_walk_virt_block()