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