Moved and renamed some ReactOS specific macros
[reactos.git] / reactos / drivers / net / afd / afd / afd.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver
4 * FILE: afd/afd.c
5 * PURPOSE: MSAFD kernel mode module
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * REVISIONS:
8 * CSH 01/09-2000 Created
9 */
10 #include <afd.h>
11 #include <rosrtl/string.h>
12
13 #ifdef DBG
14
15 /* See debug.h for debug/trace constants */
16 DWORD DebugTraceLevel = MID_TRACE;
17 //DWORD DebugTraceLevel = DEBUG_ULTRA;
18
19 #endif /* DBG */
20
21
22 NPAGED_LOOKASIDE_LIST BufferLookasideList;
23 NPAGED_LOOKASIDE_LIST ReadRequestLookasideList;
24
25
26 NTSTATUS
27 STDCALL
28 AfdFileSystemControl(
29 PDEVICE_OBJECT DeviceObject,
30 PIRP Irp)
31 {
32 UNIMPLEMENTED
33
34 Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
35 Irp->IoStatus.Information = 0;
36 return STATUS_UNSUCCESSFUL;
37 }
38
39
40 NTSTATUS
41 STDCALL
42 AfdDispatch(
43 PDEVICE_OBJECT DeviceObject,
44 PIRP Irp)
45 /*
46 * FUNCTION: IOCTL dispatch routine
47 * ARGUMENTS:
48 * DeviceObject = Pointer to a device object for this driver
49 * Irp = Pointer to a I/O request packet
50 * RETURNS:
51 * Status of the operation
52 */
53 {
54 NTSTATUS Status;
55 PIO_STACK_LOCATION IrpSp;
56
57 IrpSp = IoGetCurrentIrpStackLocation(Irp);
58
59 AFD_DbgPrint(MAX_TRACE, ("Called. DeviceObject is at (0x%X), IRP is at (0x%X), IrpSp->FileObject (0x%X).\n",
60 DeviceObject, Irp, IrpSp->FileObject));
61
62 Irp->IoStatus.Information = 0;
63
64 switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) {
65 case IOCTL_AFD_BIND:
66 Status = AfdDispBind(Irp, IrpSp);
67 break;
68
69 case IOCTL_AFD_LISTEN:
70 Status = AfdDispListen(Irp, IrpSp);
71 break;
72
73 case IOCTL_AFD_SENDTO:
74 Status = AfdDispSendTo(Irp, IrpSp);
75 break;
76
77 case IOCTL_AFD_RECVFROM:
78 Status = AfdDispRecvFrom(Irp, IrpSp);
79 break;
80
81 case IOCTL_AFD_SELECT:
82 Status = AfdDispSelect(Irp, IrpSp);
83 break;
84
85 case IOCTL_AFD_EVENTSELECT:
86 Status = AfdDispEventSelect(Irp, IrpSp);
87 break;
88
89 case IOCTL_AFD_ENUMNETWORKEVENTS:
90 Status = AfdDispEnumNetworkEvents(Irp, IrpSp);
91 break;
92
93 case IOCTL_AFD_RECV:
94 Status = AfdDispRecv(Irp, IrpSp);
95 break;
96
97 case IOCTL_AFD_SEND:
98 Status = AfdDispSend(Irp, IrpSp);
99 break;
100
101 case IOCTL_AFD_CONNECT:
102 Status = AfdDispConnect(Irp, IrpSp);
103 break;
104
105 default:
106 AFD_DbgPrint(MIN_TRACE, ("Unknown IOCTL (0x%X).\n",
107 IrpSp->Parameters.DeviceIoControl.IoControlCode));
108 Status = STATUS_NOT_IMPLEMENTED;
109 break;
110 }
111
112 if (Status != STATUS_PENDING) {
113 Irp->IoStatus.Status = Status;
114 IoCompleteRequest(Irp, IO_NETWORK_INCREMENT);
115 }
116
117 AFD_DbgPrint(MAX_TRACE, ("Leaving. Status (0x%X).\n", Status));
118
119 return Status;
120 }
121
122
123 VOID AfdUnload(
124 PDRIVER_OBJECT DriverObject)
125 /*
126 * FUNCTION: Unloads the driver
127 * ARGUMENTS:
128 * DriverObject = Pointer to driver object created by the system
129 */
130 {
131 }
132
133
134 NTSTATUS
135 STDCALL
136 DriverEntry(
137 PDRIVER_OBJECT DriverObject,
138 PUNICODE_STRING RegistryPath)
139 /*
140 * FUNCTION: Called by the system to initialize the driver
141 * ARGUMENTS:
142 * DriverObject = object describing this driver
143 * RegistryPath = path to our configuration entries
144 * RETURNS:
145 * Status of operation
146 */
147 {
148 PDEVICE_EXTENSION DeviceExt;
149 PDEVICE_OBJECT DeviceObject;
150 UNICODE_STRING DeviceName = ROS_STRING_INITIALIZER(L"\\Device\\Afd");
151 NTSTATUS Status;
152
153 Status = IoCreateDevice(DriverObject,
154 sizeof(DEVICE_EXTENSION),
155 &DeviceName,
156 FILE_DEVICE_NAMED_PIPE,
157 0,
158 FALSE,
159 &DeviceObject);
160 if (!NT_SUCCESS(Status)) {
161 AFD_DbgPrint(MIN_TRACE, ("Could not create device (0x%X).\n", Status));
162 return Status;
163 }
164
165 DeviceObject->Flags |= DO_DIRECT_IO;
166
167 DeviceExt = DeviceObject->DeviceExtension;
168 KeInitializeSpinLock(&DeviceExt->FCBListLock);
169 InitializeListHead(&DeviceExt->FCBListHead);
170
171 DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)AfdCreate;
172 DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)AfdClose;
173 DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH)AfdRead;
174 DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH)AfdWrite;
175 DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = (PDRIVER_DISPATCH)AfdFileSystemControl;
176 DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)AfdDispatch;
177 DriverObject->MajorFunction[IRP_MJ_CLEANUP] = (PDRIVER_DISPATCH)AfdClose;
178
179 DriverObject->DriverUnload = (PDRIVER_UNLOAD)AfdUnload;
180
181 /* ExInitializeNPagedLookasideList(
182 &BufferLookasideList,
183 NULL,
184 NULL,
185 0,
186 sizeof(AFD_BUFFER),
187 TAG('A', 'F', 'D', 'B'),
188 0);*/
189
190 /* ExInitializeNPagedLookasideList(
191 &ReadRequestLookasideList,
192 NULL,
193 NULL,
194 0,
195 sizeof(AFD_READ_REQUEST),
196 TAG('A', 'F', 'D', 'R'),
197 0);*/
198
199
200 return STATUS_SUCCESS;
201 }
202
203 /* EOF */