Sync with trunk head
[reactos.git] / drivers / usb / nt4compat / usbdriver / gendrv.h
1 #ifndef __GENDRV_H__
2 #define __GENDRV_H__
3
4 #define GENDRV_MAX_EXT_DRVR 2
5 #define GENDRV_DRVR_FLAG_IF_DRVR 0x01
6
7 #define GENDRV_MSG_ADDDEVICE 0x01
8 #define GENDRV_MSG_STOPDEVICE 0x02
9 #define GENDRV_MSG_DISCDEVICE 0x03
10
11 typedef struct _GENDRV_EXT_DRVR_ENTRY
12 {
13 LIST_ENTRY drvr_link; // used for dynamic load/unload driver
14 ULONG drvr_key; // used to find the driver loaded, the key
15 // is ( vendor_id << 16 )|( product_id ) or
16 // ( class_id << 16 ) | ( sub_class_id << 8 ) | ( protocol_id ))
17 PDRIVER_OBJECT pext_drvr; // the external driver count
18 ULONG ref_count; // number of devices attached
19 LIST_HEAD dev_list; // link the devices by deviceExtension->dev_obj_link
20
21 } GENDRV_EXT_DRVR_ENTRY, *PGENDRV_EXT_DRVR_ENTRY;
22
23 typedef struct _GENDRV_DRVR_EXTENSION
24 {
25 FAST_MUTEX drvr_ext_mutex;
26 ULONG ext_drvr_count; // loaded driver count
27 LIST_HEAD ext_drvr_list;
28 GENDRV_EXT_DRVR_ENTRY ext_drvr_array[ GENDRV_MAX_EXT_DRVR ];
29
30 }GENDRV_DRVR_EXTENSION, *PGENDRV_DRVR_EXTENSION;
31
32 typedef struct _GENDRV_IF_CTX
33 {
34 UCHAR if_idx; // valid for if device
35 PUSB_INTERFACE_DESC pif_desc;
36
37 } GENDRV_IF_CTX, *PGENDRV_IF_IDX;
38
39 typedef struct _GENDRV_DEVICE_EXTENSION
40 {
41 //this structure is the device extension for dev_obj
42 //created for the device.
43 DEVEXT_HEADER dev_ext_hdr;
44 ULONG flags;
45 LIST_ENTRY dev_obj_link; // this link is used by the driver object to track the existing dev_objs
46 PGENDRV_EXT_DRVR_ENTRY ext_drvr_entry;
47
48 PDEVICE_OBJECT pdo; // Our device object
49 DEV_HANDLE dev_handle; // handle to the usb_dev under
50 PUCHAR desc_buf;
51 UCHAR dev_id; // used to build symbolic link
52 GENDRV_IF_CTX if_ctx;
53
54 KEVENT sync_event;
55 KSPIN_LOCK dev_lock;
56
57 PUSB_DRIVER pdriver;
58 PUSB_DEV_MANAGER dev_mgr;
59
60 } GENDRV_DEVICE_EXTENSION, *PGENDRV_DEVICE_EXTENSION;
61
62 #endif