3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS VT100 emulator
5 * FILE: drivers/dd/green/pnp.c
6 * PURPOSE: IRP_MJ_PNP operations
8 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.com)
16 IN PDRIVER_OBJECT DriverObject
,
17 IN PDEVICE_OBJECT Pdo
)
19 PDEVICE_OBJECT Fdo
= NULL
;
20 PGREEN_DEVICE_EXTENSION DeviceExtension
;
21 UNICODE_STRING serialPortName
;
24 DPRINT("Green: AddDevice(DriverObject %p, Pdo %p)\n", DriverObject
, Pdo
);
26 /* Create green FDO */
27 Status
= IoCreateDevice(DriverObject
,
28 sizeof(GREEN_DEVICE_EXTENSION
),
31 FILE_DEVICE_SECURE_OPEN
,
34 if (!NT_SUCCESS(Status
))
37 DeviceExtension
= (PGREEN_DEVICE_EXTENSION
)Fdo
->DeviceExtension
;
38 RtlZeroMemory(DeviceExtension
, sizeof(GREEN_DEVICE_EXTENSION
));
39 DeviceExtension
->Common
.Type
= Green
;
41 Status
= KeyboardInitialize(DriverObject
, &DeviceExtension
->Keyboard
);
42 if (!NT_SUCCESS(Status
))
47 ((PKEYBOARD_DEVICE_EXTENSION
)DeviceExtension
->Keyboard
->DeviceExtension
)->Green
= Fdo
;
49 Status
= ScreenInitialize(DriverObject
, &DeviceExtension
->Screen
);
50 if (!NT_SUCCESS(Status
))
52 IoDeleteDevice(DeviceExtension
->Keyboard
);
56 ((PSCREEN_DEVICE_EXTENSION
)DeviceExtension
->Screen
->DeviceExtension
)->Green
= Fdo
;
58 /* initialize green Fdo */
59 DeviceExtension
->LowerDevice
= IoAttachDeviceToDeviceStack(Fdo
, Pdo
);
60 DeviceExtension
->LineControl
.WordLength
= 8;
61 DeviceExtension
->LineControl
.Parity
= NO_PARITY
;
62 DeviceExtension
->LineControl
.StopBits
= STOP_BIT_1
;
63 DeviceExtension
->BaudRate
= SERIAL_BAUD_38400
;
64 DeviceExtension
->Timeouts
.ReadTotalTimeoutConstant
= 1; /* not null */
65 DeviceExtension
->Timeouts
.ReadIntervalTimeout
= INFINITE
;
66 DeviceExtension
->Timeouts
.ReadTotalTimeoutMultiplier
= INFINITE
;
67 DeviceExtension
->Timeouts
.WriteTotalTimeoutMultiplier
= 0; /* FIXME */
68 DeviceExtension
->Timeouts
.WriteTotalTimeoutConstant
= 0; /* FIXME */
70 /* open associated serial port */
71 RtlInitUnicodeString(&serialPortName
, L
"\\Device\\Serial1"); /* FIXME: don't hardcode string */
72 Status
= ObReferenceObjectByName(
74 OBJ_EXCLUSIVE
| OBJ_KERNEL_HANDLE
,
80 (PVOID
*)&DeviceExtension
->Serial
);
81 /* FIXME: we never ObDereferenceObject */
83 Fdo
->Flags
|= DO_POWER_PAGABLE
| DO_BUFFERED_IO
;
84 Fdo
->Flags
&= ~DO_DEVICE_INITIALIZING
;