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 20struct 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. */ 31static inline struct scatterlist *sg_next(struct scatterlist *sg) 32{ 33 return sg + 1; 34} 35 36static inline int scatterwalk_samebuf(struct scatter_walk *walk_in, 37 struct scatter_walk *walk_out, 38 void *src_p, void *dst_p) 39{ 40 return walk_in->page == walk_out->page && 41 walk_in->offset == walk_out->offset && 42 walk_in->data == src_p && walk_out->data == dst_p; 43} 44 45void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch); 46void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg); 47int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out); 48void scatterwalk_map(struct scatter_walk *walk, int out); 49void scatterwalk_done(struct scatter_walk *walk, int out, int more); 50 51#endif /* _CRYPTO_SCATTERWALK_H */ 52