18fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang/* 28fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Cryptographic API. 38fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * 48fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Copyright (c) 2002 James Morris <jmorris@intercode.com.au> 58fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Copyright (c) 2002 Adam J. Richter <adam@yggdrasil.com> 68fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Copyright (c) 2004 Jean-Luc Cooke <jlcooke@certainkey.com> 78fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * 88fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * This program is free software; you can redistribute it and/or modify it 98fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * under the terms of the GNU General Public License as published by the Free 108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Software Foundation; either version 2 of the License, or (at your option) 118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * any later version. 128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * 138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang */ 148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifndef _CRYPTO_SCATTERWALK_H 168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define _CRYPTO_SCATTERWALK_H 178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <linux/mm.h> 188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <asm/scatterlist.h> 198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstruct scatter_walk { 218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang struct scatterlist *sg; 228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang struct page *page; 238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang void *data; 248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang unsigned int len_this_page; 258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang unsigned int len_this_segment; 268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang unsigned int offset; 278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}; 288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang/* Define sg_next is an inline routine now in case we want to change 308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang scatterlist to a linked list later. */ 318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline struct scatterlist *sg_next(struct scatterlist *sg) 328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{ 338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang return sg + 1; 348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang} 358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline int scatterwalk_samebuf(struct scatter_walk *walk_in, 378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang struct scatter_walk *walk_out, 388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang void *src_p, void *dst_p) 398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{ 408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang return walk_in->page == walk_out->page && 418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang walk_in->offset == walk_out->offset && 428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang walk_in->data == src_p && walk_out->data == dst_p; 438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang} 448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch); 468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg); 478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out); 488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid scatterwalk_map(struct scatter_walk *walk, int out); 498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid scatterwalk_done(struct scatter_walk *walk, int out, int more); 508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang 518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif /* _CRYPTO_SCATTERWALK_H */ 52