1aa387cc895672b00f807ad7c734a2defaf677712Mike Christie/* 2aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * BSG helper library 3aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 4aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * Copyright (C) 2008 James Smart, Emulex Corporation 5aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * Copyright (C) 2011 Red Hat, Inc. All rights reserved. 6aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * Copyright (C) 2011 Mike Christie 7aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 8aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * This program is free software; you can redistribute it and/or modify 9aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * it under the terms of the GNU General Public License as published by 10aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * the Free Software Foundation; either version 2 of the License, or 11aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * (at your option) any later version. 12aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 13aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * This program is distributed in the hope that it will be useful, 14aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * but WITHOUT ANY WARRANTY; without even the implied warranty of 15aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * GNU General Public License for more details. 17aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 18aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * You should have received a copy of the GNU General Public License 19aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * along with this program; if not, write to the Free Software 20aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 22aa387cc895672b00f807ad7c734a2defaf677712Mike Christie */ 23aa387cc895672b00f807ad7c734a2defaf677712Mike Christie#ifndef _BLK_BSG_ 24aa387cc895672b00f807ad7c734a2defaf677712Mike Christie#define _BLK_BSG_ 25aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 26aa387cc895672b00f807ad7c734a2defaf677712Mike Christie#include <linux/blkdev.h> 27aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 28aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct request; 29aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct device; 30aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct scatterlist; 31aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct request_queue; 32aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 33aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct bsg_buffer { 34aa387cc895672b00f807ad7c734a2defaf677712Mike Christie unsigned int payload_len; 35aa387cc895672b00f807ad7c734a2defaf677712Mike Christie int sg_cnt; 36aa387cc895672b00f807ad7c734a2defaf677712Mike Christie struct scatterlist *sg_list; 37aa387cc895672b00f807ad7c734a2defaf677712Mike Christie}; 38aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 39aa387cc895672b00f807ad7c734a2defaf677712Mike Christiestruct bsg_job { 40aa387cc895672b00f807ad7c734a2defaf677712Mike Christie struct device *dev; 41aa387cc895672b00f807ad7c734a2defaf677712Mike Christie struct request *req; 42aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 43aa387cc895672b00f807ad7c734a2defaf677712Mike Christie /* Transport/driver specific request/reply structs */ 44aa387cc895672b00f807ad7c734a2defaf677712Mike Christie void *request; 45aa387cc895672b00f807ad7c734a2defaf677712Mike Christie void *reply; 46aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 47aa387cc895672b00f807ad7c734a2defaf677712Mike Christie unsigned int request_len; 48aa387cc895672b00f807ad7c734a2defaf677712Mike Christie unsigned int reply_len; 49aa387cc895672b00f807ad7c734a2defaf677712Mike Christie /* 50aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * On entry : reply_len indicates the buffer size allocated for 51aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * the reply. 52aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * 53aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * Upon completion : the message handler must set reply_len 54aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * to indicates the size of the reply to be returned to the 55aa387cc895672b00f807ad7c734a2defaf677712Mike Christie * caller. 56aa387cc895672b00f807ad7c734a2defaf677712Mike Christie */ 57aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 58aa387cc895672b00f807ad7c734a2defaf677712Mike Christie /* DMA payloads for the request/response */ 59aa387cc895672b00f807ad7c734a2defaf677712Mike Christie struct bsg_buffer request_payload; 60aa387cc895672b00f807ad7c734a2defaf677712Mike Christie struct bsg_buffer reply_payload; 61aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 62aa387cc895672b00f807ad7c734a2defaf677712Mike Christie void *dd_data; /* Used for driver-specific storage */ 63aa387cc895672b00f807ad7c734a2defaf677712Mike Christie}; 64aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 65aa387cc895672b00f807ad7c734a2defaf677712Mike Christievoid bsg_job_done(struct bsg_job *job, int result, 66aa387cc895672b00f807ad7c734a2defaf677712Mike Christie unsigned int reply_payload_rcv_len); 67aa387cc895672b00f807ad7c734a2defaf677712Mike Christieint bsg_setup_queue(struct device *dev, struct request_queue *q, char *name, 68aa387cc895672b00f807ad7c734a2defaf677712Mike Christie bsg_job_fn *job_fn, int dd_job_size); 69aa387cc895672b00f807ad7c734a2defaf677712Mike Christievoid bsg_request_fn(struct request_queue *q); 70aa387cc895672b00f807ad7c734a2defaf677712Mike Christie 71aa387cc895672b00f807ad7c734a2defaf677712Mike Christie#endif 72