Contents of /alx-src/tags/kernel26-2.6.12-alx-r9/crypto/scatterwalk.h
Parent Directory | Revision Log
Revision 630 -
(show annotations)
(download)
Wed Mar 4 11:03:09 2009 UTC (15 years, 6 months ago) by niro
File MIME type: text/plain
File size: 1848 byte(s)
Wed Mar 4 11:03:09 2009 UTC (15 years, 6 months ago) by niro
File MIME type: text/plain
File size: 1848 byte(s)
Tag kernel26-2.6.12-alx-r9
1 | /* |
2 | * Cryptographic API. |
3 | * |
4 | * Copyright (c) 2002 James Morris <jmorris@intercode.com.au> |
5 | * Copyright (c) 2002 Adam J. Richter <adam@yggdrasil.com> |
6 | * Copyright (c) 2004 Jean-Luc Cooke <jlcooke@certainkey.com> |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify it |
9 | * under the terms of the GNU General Public License as published by the Free |
10 | * Software Foundation; either version 2 of the License, or (at your option) |
11 | * any later version. |
12 | * |
13 | */ |
14 | |
15 | #ifndef _CRYPTO_SCATTERWALK_H |
16 | #define _CRYPTO_SCATTERWALK_H |
17 | #include <linux/mm.h> |
18 | #include <asm/scatterlist.h> |
19 | |
20 | struct scatter_walk { |
21 | struct scatterlist *sg; |
22 | struct page *page; |
23 | void *data; |
24 | unsigned int len_this_page; |
25 | unsigned int len_this_segment; |
26 | unsigned int offset; |
27 | }; |
28 | |
29 | /* Define sg_next is an inline routine now in case we want to change |
30 | scatterlist to a linked list later. */ |
31 | static inline struct scatterlist *sg_next(struct scatterlist *sg) |
32 | { |
33 | return sg + 1; |
34 | } |
35 | |
36 | static inline int scatterwalk_samebuf(struct scatter_walk *walk_in, |
37 | struct scatter_walk *walk_out) |
38 | { |
39 | return walk_in->page == walk_out->page && |
40 | walk_in->offset == walk_out->offset; |
41 | } |
42 | |
43 | static inline int scatterwalk_across_pages(struct scatter_walk *walk, |
44 | unsigned int nbytes) |
45 | { |
46 | return nbytes > walk->len_this_page; |
47 | } |
48 | |
49 | static inline void scatterwalk_advance(struct scatter_walk *walk, |
50 | unsigned int nbytes) |
51 | { |
52 | walk->data += nbytes; |
53 | walk->offset += nbytes; |
54 | walk->len_this_page -= nbytes; |
55 | walk->len_this_segment -= nbytes; |
56 | } |
57 | |
58 | void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg); |
59 | int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out); |
60 | void scatterwalk_map(struct scatter_walk *walk, int out); |
61 | void scatterwalk_done(struct scatter_walk *walk, int out, int more); |
62 | |
63 | #endif /* _CRYPTO_SCATTERWALK_H */ |