3
* Copyright (c) 2009, Microsoft Corporation.
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
* You should have received a copy of the GNU General Public License along with
15
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16
* Place - Suite 330, Boston, MA 02111-1307 USA.
19
* Haiyang Zhang <haiyangz@microsoft.com>
20
* Hank Janssen <hjanssen@microsoft.com>
25
#ifndef _STORVSC_API_H_
26
#define _STORVSC_API_H_
28
#include "vmbus_api.h"
31
#define STORVSC_RING_BUFFER_SIZE (20*PAGE_SIZE)
32
#define BLKVSC_RING_BUFFER_SIZE (20*PAGE_SIZE)
34
#define STORVSC_MAX_IO_REQUESTS 128
37
* In Hyper-V, each port/path/target maps to 1 scsi host adapter. In
38
* reality, the path/target is not used (ie always set to 0) so our
39
* scsi host adapter essentially has 1 bus with 1 target that contains
42
#define STORVSC_MAX_LUNS_PER_TARGET 64
43
#define STORVSC_MAX_TARGETS 1
44
#define STORVSC_MAX_CHANNELS 1
46
struct hv_storvsc_request;
48
/* Matches Windows-end */
49
enum storvsc_request_type{
55
struct hv_storvsc_request {
56
enum storvsc_request_type type;
66
unsigned char *sense_buffer;
67
u32 sense_buffer_size;
71
void (*on_io_completion)(struct hv_storvsc_request *request);
73
/* This points to the memory after DataBuffer */
76
struct hv_multipage_buffer data_buffer;
79
/* Represents the block vsc driver */
80
struct storvsc_driver_object {
81
/* Must be the first field */
82
/* Which is a bug FIXME! */
83
struct hv_driver base;
85
/* Set by caller (in bytes) */
88
/* Allocate this much private extension for each I/O request */
91
/* Maximum # of requests in flight per channel/device */
92
u32 max_outstanding_req_per_channel;
94
/* Specific to this driver */
95
int (*on_io_request)(struct hv_device *device,
96
struct hv_storvsc_request *request);
99
struct storvsc_device_info {
100
unsigned int port_number;
101
unsigned char path_id;
102
unsigned char target_id;
106
int stor_vsc_initialize(struct hv_driver *driver);
107
int stor_vsc_on_host_reset(struct hv_device *device);
108
int blk_vsc_initialize(struct hv_driver *driver);
110
#endif /* _STORVSC_API_H_ */