2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS VT100 emulator
4 * FILE: drivers/dd/green/pnp.c
5 * PURPOSE: IRP_MJ_PNP operations
7 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
17 IN PDRIVER_OBJECT DriverObject
,
18 IN PDEVICE_OBJECT Pdo
)
20 PDEVICE_OBJECT Fdo
= NULL
;
21 PGREEN_DEVICE_EXTENSION DeviceExtension
;
22 UNICODE_STRING serialPortName
;
25 DPRINT("Green: AddDevice(DriverObject %p, Pdo %p)\n", DriverObject
, Pdo
);
27 /* Create green FDO */
28 Status
= IoCreateDevice(DriverObject
,
29 sizeof(GREEN_DEVICE_EXTENSION
),
32 FILE_DEVICE_SECURE_OPEN
,
36 if (!NT_SUCCESS(Status
))
38 DPRINT1("Status = %08lx\n", Status
);
42 DeviceExtension
= (PGREEN_DEVICE_EXTENSION
)Fdo
->DeviceExtension
;
43 RtlZeroMemory(DeviceExtension
, sizeof(GREEN_DEVICE_EXTENSION
));
44 DeviceExtension
->Common
.Type
= Green
;
46 Status
= KeyboardInitialize(DriverObject
, &DeviceExtension
->Keyboard
);
47 if (!NT_SUCCESS(Status
))
50 DPRINT1("Status = %08lx\n", Status
);
53 ((PKEYBOARD_DEVICE_EXTENSION
)DeviceExtension
->Keyboard
->DeviceExtension
)->Green
= Fdo
;
55 Status
= ScreenInitialize(DriverObject
, &DeviceExtension
->Screen
);
56 if (!NT_SUCCESS(Status
))
58 IoDeleteDevice(DeviceExtension
->Keyboard
);
60 DPRINT1("Status = %08lx\n", Status
);
63 ((PSCREEN_DEVICE_EXTENSION
)DeviceExtension
->Screen
->DeviceExtension
)->Green
= Fdo
;
65 /* initialize green Fdo */
66 DeviceExtension
->LowerDevice
= IoAttachDeviceToDeviceStack(Fdo
, Pdo
);
67 DeviceExtension
->LineControl
.WordLength
= 8;
68 DeviceExtension
->LineControl
.Parity
= NO_PARITY
;
69 DeviceExtension
->LineControl
.StopBits
= STOP_BIT_1
;
70 DeviceExtension
->BaudRate
= SERIAL_BAUD_38400
;
71 DeviceExtension
->Timeouts
.ReadTotalTimeoutConstant
= 1; /* not null */
72 DeviceExtension
->Timeouts
.ReadIntervalTimeout
= INFINITE
;
73 DeviceExtension
->Timeouts
.ReadTotalTimeoutMultiplier
= INFINITE
;
74 DeviceExtension
->Timeouts
.WriteTotalTimeoutMultiplier
= 0; /* FIXME */
75 DeviceExtension
->Timeouts
.WriteTotalTimeoutConstant
= 0; /* FIXME */
77 /* open associated serial port */
78 RtlInitUnicodeString(&serialPortName
, L
"\\Device\\Serial1"); /* FIXME: don't hardcode string */
79 Status
= ObReferenceObjectByName(
81 OBJ_EXCLUSIVE
| OBJ_KERNEL_HANDLE
,
87 (PVOID
*)&DeviceExtension
->Serial
);
88 /* FIXME: we never ObDereferenceObject */
90 Fdo
->Flags
|= DO_POWER_PAGABLE
| DO_BUFFERED_IO
;
91 Fdo
->Flags
&= ~DO_DEVICE_INITIALIZING
;
93 DPRINT("Status = %08lx\n", Status
);