Whamcloud - gitweb
97c098766fb003837ef987597e102a2cb4f46ee0
[fs/lustre-release.git] / lnet / include / lnet / winnt / lnet.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see [sun.com URL with a
20  * copy of GPLv2].
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  */
36
37 #ifndef __LNET_LINUX_LNET_H__
38 #define __LNET_LINUX_LNET_H__
39
40 #ifndef __LNET_H__
41 #error Do not #include this file directly. #include <lnet/lnet.h> instead
42 #endif
43
44 #ifdef __KERNEL__
45
46 #include <libcfs/libcfs.h>
47 #include <lnet/lib-lnet.h>
48
49 /*
50  * tdilnd routines
51  */
52
53
54 PUCHAR
55 KsNtStatusToString (IN NTSTATUS Status);
56
57
58 VOID
59 KsPrintf(
60     IN LONG  DebugPrintLevel,
61     IN PCHAR DebugMessage,
62     IN ...
63     );
64
65
66 ksock_mdl_t *
67 ks_lock_iovs(
68     IN struct iovec  *iov,
69     IN int            niov,
70     IN int            recv,
71     IN int *          len
72     );
73
74 ksock_mdl_t *
75 ks_lock_kiovs(
76     IN lnet_kiov_t *   kiov,
77     IN int            nkiov,
78     IN int            recv,
79     IN int *          len
80     );
81
82 int
83 ks_send_mdl(
84     ksock_tconn_t * tconn,
85     void *          tx,
86     ksock_mdl_t *   mdl,
87     int             len,
88     int             flags
89     );
90
91 int
92 ks_query_data(
93     ksock_tconn_t * tconn,
94     size_t *        size,
95     int             bIsExpedited);
96
97 int
98 ks_recv_mdl(
99     ksock_tconn_t * tconn,
100     ksock_mdl_t *   mdl,
101     int             size,
102     int             flags
103     );
104
105 int
106 ks_get_tcp_option (
107     ksock_tconn_t *     tconn,
108     ULONG               ID,
109     PVOID               OptionValue,
110     PULONG              Length
111     );
112
113 NTSTATUS
114 ks_set_tcp_option (
115     ksock_tconn_t * tconn,
116     ULONG           ID,
117     PVOID           OptionValue,
118     ULONG           Length
119     );
120
121 int
122 ks_bind_tconn (
123     ksock_tconn_t * tconn,
124     ksock_tconn_t * parent,
125     ulong_ptr   addr,
126     unsigned short  port
127     );
128
129 int
130 ks_build_tconn(
131     ksock_tconn_t *                 tconn,
132     ulong_ptr                   addr,
133     unsigned short                  port
134     );
135
136 int
137 ks_disconnect_tconn(
138     ksock_tconn_t *     tconn,
139     ulong_ptr       flags
140     );
141
142 void
143 ks_abort_tconn(
144     ksock_tconn_t *     tconn
145     );
146
147 int
148 ks_query_local_ipaddr(
149     ksock_tconn_t *     tconn
150     );
151
152 int
153 ks_tconn_write (ksock_tconn_t *tconn, void *buffer, int nob);
154
155 int
156 ks_tconn_read (ksock_tconn_t * tconn, void *buffer, int nob);
157
158 NTSTATUS
159 KsTcpCompletionRoutine(
160     IN PDEVICE_OBJECT   DeviceObject,
161     IN PIRP             Irp,
162     IN PVOID            Context
163     );
164
165 NTSTATUS
166 KsDisconectCompletionRoutine (
167     IN PDEVICE_OBJECT   DeviceObject,
168     IN PIRP             Irp,
169     IN PVOID            Context
170     );
171
172 NTSTATUS
173 KsTcpReceiveCompletionRoutine(
174     IN PIRP                         Irp,
175     IN PKS_TCP_COMPLETION_CONTEXT   Context
176     );
177
178 NTSTATUS
179 KsTcpSendCompletionRoutine(
180     IN PIRP                         Irp,
181     IN PKS_TCP_COMPLETION_CONTEXT   Context
182     );
183
184 NTSTATUS
185 KsAcceptCompletionRoutine(
186     IN PDEVICE_OBJECT   DeviceObject,
187     IN PIRP             Irp,
188     IN PVOID            Context
189     );
190
191
192 NTSTATUS
193 KsConnectEventHandler(
194     IN PVOID                    TdiEventContext,
195     IN LONG                     RemoteAddressLength,
196     IN PVOID                    RemoteAddress,
197     IN LONG                     UserDataLength,
198     IN PVOID                    UserData,
199     IN LONG                     OptionsLength,
200     IN PVOID                    Options,
201     OUT CONNECTION_CONTEXT *    ConnectionContext,
202     OUT PIRP *                  AcceptIrp
203     );
204
205 NTSTATUS 
206 KsDisconnectEventHandler(
207     IN PVOID                TdiEventContext,
208     IN CONNECTION_CONTEXT   ConnectionContext,
209     IN LONG                 DisconnectDataLength,
210     IN PVOID                DisconnectData,
211     IN LONG                 DisconnectInformationLength,
212     IN PVOID                DisconnectInformation,
213     IN ULONG                DisconnectFlags
214     );
215
216 NTSTATUS
217 KsTcpReceiveEventHandler(
218     IN PVOID                TdiEventContext, 
219     IN CONNECTION_CONTEXT   ConnectionContext,
220     IN ULONG                ReceiveFlags,
221     IN ULONG                BytesIndicated,
222     IN ULONG                BytesAvailable,
223     OUT ULONG *             BytesTaken,
224     IN PVOID                Tsdu,
225     OUT PIRP *              IoRequestPacket
226    );
227
228 NTSTATUS
229 KsTcpReceiveExpeditedEventHandler(
230     IN PVOID                TdiEventContext, 
231     IN CONNECTION_CONTEXT   ConnectionContext,
232     IN ULONG                ReceiveFlags,
233     IN ULONG                BytesIndicated,
234     IN ULONG                BytesAvailable,
235     OUT ULONG *             BytesTaken,
236     IN PVOID                Tsdu,
237     OUT PIRP *              IoRequestPacket
238     );
239
240 NTSTATUS
241 KsTcpChainedReceiveEventHandler (
242     IN PVOID TdiEventContext,       // the event context
243     IN CONNECTION_CONTEXT ConnectionContext,
244     IN ULONG ReceiveFlags, 
245     IN ULONG ReceiveLength,
246     IN ULONG StartingOffset,        // offset of start of client data in TSDU
247     IN PMDL  Tsdu,                  // TSDU data chain
248     IN PVOID TsduDescriptor         // for call to TdiReturnChainedReceives
249     );
250
251 NTSTATUS
252 KsTcpChainedReceiveExpeditedEventHandler (
253     IN PVOID                TdiEventContext,       // the event context
254     IN CONNECTION_CONTEXT   ConnectionContext,
255     IN ULONG                ReceiveFlags, 
256     IN ULONG                ReceiveLength,
257     IN ULONG                StartingOffset,        // offset of start of client data in TSDU
258     IN PMDL                 Tsdu,                  // TSDU data chain
259     IN PVOID                TsduDescriptor         // for call to TdiReturnChainedReceives
260     );
261
262
263
264 VOID
265 KsDisconnectHelper(PKS_DISCONNECT_WORKITEM WorkItem);
266
267
268 ULONG
269 ks_tdi_send_flags(ULONG SockFlags);
270
271 PIRP
272 KsBuildTdiIrp(
273     IN PDEVICE_OBJECT    DeviceObject
274     );
275
276 NTSTATUS
277 KsSubmitTdiIrp(
278     IN PDEVICE_OBJECT   DeviceObject,
279     IN PIRP             Irp,
280     IN BOOLEAN          bSynchronous,
281     OUT PULONG          Information
282     );
283
284 NTSTATUS
285 KsOpenControl(
286     IN PUNICODE_STRING      DeviceName,
287     OUT HANDLE *            Handle,
288     OUT PFILE_OBJECT *      FileObject
289    );
290
291 NTSTATUS
292 KsCloseControl(
293     IN HANDLE             Handle,
294     IN PFILE_OBJECT       FileObject
295    );
296
297 NTSTATUS
298 KsOpenAddress(
299     IN PUNICODE_STRING      DeviceName,
300     IN PTRANSPORT_ADDRESS   pAddress,
301     IN ULONG                AddressLength,
302     OUT HANDLE *            Handle,
303     OUT PFILE_OBJECT *      FileObject
304    );
305
306 NTSTATUS
307 KsCloseAddress(
308     IN HANDLE             Handle,
309     IN PFILE_OBJECT       FileObject
310     );
311
312 NTSTATUS
313 KsOpenConnection(
314     IN PUNICODE_STRING      DeviceName,
315     IN CONNECTION_CONTEXT   ConnectionContext,
316     OUT HANDLE *            Handle,
317     OUT PFILE_OBJECT *      FileObject
318    );
319
320 NTSTATUS
321 KsCloseConnection(
322     IN HANDLE             Handle,
323     IN PFILE_OBJECT       FileObject
324     );
325
326 NTSTATUS
327 KsAssociateAddress(
328     IN HANDLE           AddressHandle,
329     IN PFILE_OBJECT     ConnectionObject
330     );
331
332
333 NTSTATUS
334 KsDisassociateAddress(
335     IN PFILE_OBJECT     ConnectionObject
336     );
337
338
339 NTSTATUS
340 KsSetEventHandlers(
341     IN PFILE_OBJECT         AddressObject,
342     IN PVOID                EventContext,
343     IN PKS_EVENT_HANDLERS   Handlers
344    );
345
346
347 NTSTATUS
348 KsQueryProviderInfo(
349     PWSTR               TdiDeviceName,
350     PTDI_PROVIDER_INFO  ProviderInfo
351    );
352
353 NTSTATUS
354 KsQueryAddressInfo(
355     IN PFILE_OBJECT         FileObject,
356     OUT PTDI_ADDRESS_INFO   AddressInfo,
357     OUT PULONG              AddressSize
358    );
359
360 NTSTATUS
361 KsQueryConnectionInfo(
362     IN PFILE_OBJECT            ConnectionObject,
363     OUT PTDI_CONNECTION_INFO   ConnectionInfo,
364     OUT PULONG                 ConnectionSize
365    );
366
367 ULONG
368 KsInitializeTdiAddress(
369     IN OUT PTA_IP_ADDRESS   pTransportAddress,
370     IN ULONG                IpAddress,
371     IN USHORT               IpPort
372     );
373
374 ULONG
375 KsQueryMdlsSize (IN PMDL Mdl);
376
377
378 ULONG
379 KsQueryTdiAddressLength(
380     OUT PTRANSPORT_ADDRESS   pTransportAddress
381     );
382
383 NTSTATUS
384 KsQueryIpAddress(
385     IN PFILE_OBJECT     FileObject,
386     OUT PVOID           TdiAddress,
387     OUT ULONG*          AddressLength
388     );
389
390
391 NTSTATUS
392 KsErrorEventHandler(
393     IN PVOID            TdiEventContext,
394     IN NTSTATUS         Status
395    );
396
397 int
398 ks_set_handlers(
399     ksock_tconn_t *     tconn
400     );
401
402
403 VOID
404 KsPrintProviderInfo(
405    PWSTR DeviceName,
406    PTDI_PROVIDER_INFO ProviderInfo
407    );
408
409 ksock_tconn_t *
410 ks_create_tconn();
411
412 void
413 ks_free_tconn(
414     ksock_tconn_t * tconn
415     );
416
417 void
418 ks_init_listener(
419     ksock_tconn_t * tconn
420     );
421
422 void
423 ks_init_sender(
424     ksock_tconn_t * tconn
425     );
426
427 void
428 ks_init_child(
429     ksock_tconn_t * tconn
430     );
431
432 void
433 ks_get_tconn(
434     ksock_tconn_t * tconn
435     );
436
437 void
438 ks_put_tconn(
439     ksock_tconn_t * tconn
440     );
441
442 int
443 ks_reset_handlers(
444     ksock_tconn_t *     tconn
445     );
446
447 void
448 ks_destroy_tconn(
449     ksock_tconn_t *     tconn
450     );
451
452
453 PKS_TSDU
454 KsAllocateKsTsdu();
455
456 VOID
457 KsPutKsTsdu(
458     PKS_TSDU  KsTsdu
459     );
460
461 VOID
462 KsFreeKsTsdu(
463     PKS_TSDU  KsTsdu
464     );
465
466 VOID
467 KsInitializeKsTsdu(
468     PKS_TSDU    KsTsdu,
469     ULONG       Length
470     );
471
472
473 VOID
474 KsInitializeKsTsduMgr(
475     PKS_TSDUMGR     TsduMgr
476     );
477
478 VOID
479 KsInitializeKsChain(
480     PKS_CHAIN       KsChain
481     );
482
483 NTSTATUS
484 KsCleanupTsduMgr(
485     PKS_TSDUMGR     KsTsduMgr
486     );
487
488 NTSTATUS
489 KsCleanupKsChain(
490     PKS_CHAIN   KsChain
491     );
492
493 NTSTATUS
494 KsCleanupTsdu(
495     ksock_tconn_t * tconn
496     );
497
498 NTSTATUS
499 KsCopyMdlChainToMdlChain(
500     IN PMDL     SourceMdlChain,
501     IN ULONG    SourceOffset,
502     IN PMDL     DestinationMdlChain,
503     IN ULONG    DestinationOffset,
504     IN ULONG    BytesTobecopied,
505     OUT PULONG  BytesCopied
506     );
507
508 ULONG
509 KsQueryMdlsSize (PMDL Mdl);
510
511 NTSTATUS
512 KsLockUserBuffer (
513     IN PVOID            UserBuffer,
514     IN BOOLEAN          bPaged,
515     IN ULONG            Length,
516     IN LOCK_OPERATION   Operation,
517     OUT PMDL *          pMdl
518     );
519
520 PVOID
521 KsMapMdlBuffer (PMDL    Mdl);
522
523 VOID
524 KsReleaseMdl ( IN PMDL   Mdl,
525                IN int    Paged );
526
527 int
528 ks_lock_buffer (
529     void *            buffer,
530     int               paged,
531     int               length,
532     LOCK_OPERATION    access,
533     ksock_mdl_t **    kmdl
534     );
535
536 void *
537 ks_map_mdl (ksock_mdl_t * mdl);
538
539 void
540 ks_release_mdl (ksock_mdl_t *mdl, int paged);
541
542 #endif /* __KERNEL__ */
543
544 #endif