]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/staging/hv/ChannelInterface.c
Staging: hv: osd.h: remove GUID typedef
[mirror_ubuntu-bionic-kernel.git] / drivers / staging / hv / ChannelInterface.c
CommitLineData
3e7ee490
HJ
1/*
2 *
3 * Copyright (c) 2009, Microsoft Corporation.
4 *
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.
8 *
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
12 * more details.
13 *
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.
17 *
18 * Authors:
19 * Haiyang Zhang <haiyangz@microsoft.com>
20 * Hank Janssen <hjanssen@microsoft.com>
21 *
22 */
23
a0086dc5
GKH
24#include <linux/kernel.h>
25#include <linux/mm.h>
4983b39a 26#include "osd.h"
3e7ee490
HJ
27#include "VmbusPrivate.h"
28
2be1301b 29static int
3e7ee490 30IVmbusChannelOpen(
3d3b5518 31 struct hv_device *Device,
4d643114
GKH
32 u32 SendBufferSize,
33 u32 RecvRingBufferSize,
8282c400 34 void * UserData,
4d643114 35 u32 UserDataLen,
3e7ee490 36 VMBUS_CHANNEL_CALLBACK ChannelCallback,
8282c400 37 void * Context
3e7ee490
HJ
38 )
39{
aded7165 40 return VmbusChannelOpen((struct vmbus_channel *)Device->context,
3e7ee490
HJ
41 SendBufferSize,
42 RecvRingBufferSize,
43 UserData,
44 UserDataLen,
45 ChannelCallback,
46 Context);
47}
48
49
2be1301b 50static void
3e7ee490 51IVmbusChannelClose(
3d3b5518 52 struct hv_device *Device
3e7ee490
HJ
53 )
54{
aded7165 55 VmbusChannelClose((struct vmbus_channel *)Device->context);
3e7ee490
HJ
56}
57
58
2be1301b 59static int
3e7ee490 60IVmbusChannelSendPacket(
3d3b5518 61 struct hv_device *Device,
8282c400 62 const void * Buffer,
4d643114 63 u32 BufferLen,
59471438 64 u64 RequestId,
4d643114
GKH
65 u32 Type,
66 u32 Flags
3e7ee490
HJ
67 )
68{
aded7165 69 return VmbusChannelSendPacket((struct vmbus_channel *)Device->context,
3e7ee490
HJ
70 Buffer,
71 BufferLen,
72 RequestId,
73 Type,
74 Flags);
75}
76
2be1301b 77static int
3e7ee490 78IVmbusChannelSendPacketPageBuffer(
3d3b5518 79 struct hv_device *Device,
3e7ee490 80 PAGE_BUFFER PageBuffers[],
4d643114 81 u32 PageCount,
8282c400 82 void * Buffer,
4d643114 83 u32 BufferLen,
59471438 84 u64 RequestId
3e7ee490
HJ
85 )
86{
aded7165 87 return VmbusChannelSendPacketPageBuffer((struct vmbus_channel *)Device->context,
3e7ee490
HJ
88 PageBuffers,
89 PageCount,
90 Buffer,
91 BufferLen,
92 RequestId);
93}
94
2be1301b 95static int
3e7ee490 96IVmbusChannelSendPacketMultiPageBuffer(
3d3b5518 97 struct hv_device *Device,
3e7ee490 98 MULTIPAGE_BUFFER *MultiPageBuffer,
8282c400 99 void * Buffer,
4d643114 100 u32 BufferLen,
59471438 101 u64 RequestId
3e7ee490
HJ
102 )
103{
aded7165 104 return VmbusChannelSendPacketMultiPageBuffer((struct vmbus_channel *)Device->context,
3e7ee490
HJ
105 MultiPageBuffer,
106 Buffer,
107 BufferLen,
108 RequestId);
109}
110
2be1301b 111static int
3e7ee490 112IVmbusChannelRecvPacket (
3d3b5518 113 struct hv_device *Device,
8282c400 114 void * Buffer,
4d643114
GKH
115 u32 BufferLen,
116 u32* BufferActualLen,
59471438 117 u64* RequestId
3e7ee490
HJ
118 )
119{
aded7165 120 return VmbusChannelRecvPacket((struct vmbus_channel *)Device->context,
3e7ee490
HJ
121 Buffer,
122 BufferLen,
123 BufferActualLen,
124 RequestId);
125}
126
2be1301b 127static int
3e7ee490 128IVmbusChannelRecvPacketRaw(
3d3b5518 129 struct hv_device *Device,
8282c400 130 void * Buffer,
4d643114
GKH
131 u32 BufferLen,
132 u32* BufferActualLen,
59471438 133 u64* RequestId
3e7ee490
HJ
134 )
135{
aded7165 136 return VmbusChannelRecvPacketRaw((struct vmbus_channel *)Device->context,
3e7ee490
HJ
137 Buffer,
138 BufferLen,
139 BufferActualLen,
140 RequestId);
141}
142
2be1301b 143static int
3e7ee490 144IVmbusChannelEstablishGpadl(
3d3b5518 145 struct hv_device *Device,
8282c400 146 void * Buffer,
4d643114
GKH
147 u32 BufferLen,
148 u32* GpadlHandle
3e7ee490
HJ
149 )
150{
aded7165 151 return VmbusChannelEstablishGpadl((struct vmbus_channel *)Device->context,
3e7ee490
HJ
152 Buffer,
153 BufferLen,
154 GpadlHandle);
155}
156
2be1301b 157static int
3e7ee490 158IVmbusChannelTeardownGpadl(
3d3b5518 159 struct hv_device *Device,
4d643114 160 u32 GpadlHandle
3e7ee490
HJ
161 )
162{
aded7165 163 return VmbusChannelTeardownGpadl((struct vmbus_channel *)Device->context,
3e7ee490
HJ
164 GpadlHandle);
165
166}
167
e89ce628 168void GetChannelInterface(VMBUS_CHANNEL_INTERFACE *ChannelInterface)
3e7ee490
HJ
169{
170 ChannelInterface->Open = IVmbusChannelOpen;
171 ChannelInterface->Close = IVmbusChannelClose;
172 ChannelInterface->SendPacket = IVmbusChannelSendPacket;
173 ChannelInterface->SendPacketPageBuffer = IVmbusChannelSendPacketPageBuffer;
174 ChannelInterface->SendPacketMultiPageBuffer = IVmbusChannelSendPacketMultiPageBuffer;
175 ChannelInterface->RecvPacket = IVmbusChannelRecvPacket;
176 ChannelInterface->RecvPacketRaw = IVmbusChannelRecvPacketRaw;
177 ChannelInterface->EstablishGpadl = IVmbusChannelEstablishGpadl;
178 ChannelInterface->TeardownGpadl = IVmbusChannelTeardownGpadl;
179 ChannelInterface->GetInfo = GetChannelInfo;
180}
181
182
e89ce628 183void GetChannelInfo(struct hv_device *Device, DEVICE_INFO *DeviceInfo)
3e7ee490 184{
aded7165 185 struct vmbus_channel_debug_info debugInfo;
3e7ee490
HJ
186
187 if (Device->context)
188 {
aded7165 189 VmbusChannelGetDebugInfo((struct vmbus_channel *)Device->context, &debugInfo);
3e7ee490
HJ
190
191 DeviceInfo->ChannelId = debugInfo.RelId;
192 DeviceInfo->ChannelState = debugInfo.State;
caf26a31
GKH
193 memcpy(&DeviceInfo->ChannelType, &debugInfo.InterfaceType, sizeof(struct hv_guid));
194 memcpy(&DeviceInfo->ChannelInstance, &debugInfo.InterfaceInstance, sizeof(struct hv_guid));
3e7ee490
HJ
195
196 DeviceInfo->MonitorId = debugInfo.MonitorId;
197
198 DeviceInfo->ServerMonitorPending = debugInfo.ServerMonitorPending;
199 DeviceInfo->ServerMonitorLatency = debugInfo.ServerMonitorLatency;
200 DeviceInfo->ServerMonitorConnectionId = debugInfo.ServerMonitorConnectionId;
201
202 DeviceInfo->ClientMonitorPending = debugInfo.ClientMonitorPending;
203 DeviceInfo->ClientMonitorLatency = debugInfo.ClientMonitorLatency;
204 DeviceInfo->ClientMonitorConnectionId = debugInfo.ClientMonitorConnectionId;
205
206 DeviceInfo->Inbound.InterruptMask = debugInfo.Inbound.CurrentInterruptMask;
207 DeviceInfo->Inbound.ReadIndex = debugInfo.Inbound.CurrentReadIndex;
208 DeviceInfo->Inbound.WriteIndex = debugInfo.Inbound.CurrentWriteIndex;
209 DeviceInfo->Inbound.BytesAvailToRead = debugInfo.Inbound.BytesAvailToRead;
210 DeviceInfo->Inbound.BytesAvailToWrite = debugInfo.Inbound.BytesAvailToWrite;
211
212 DeviceInfo->Outbound.InterruptMask = debugInfo.Outbound.CurrentInterruptMask;
213 DeviceInfo->Outbound.ReadIndex = debugInfo.Outbound.CurrentReadIndex;
214 DeviceInfo->Outbound.WriteIndex = debugInfo.Outbound.CurrentWriteIndex;
215 DeviceInfo->Outbound.BytesAvailToRead = debugInfo.Outbound.BytesAvailToRead;
216 DeviceInfo->Outbound.BytesAvailToWrite = debugInfo.Outbound.BytesAvailToWrite;
217 }
218}