mirror of
https://github.com/reactos/reactos.git
synced 2025-01-11 16:51:06 +00:00
c424146e2c
svn path=/branches/cmake-bringup/; revision=48236
281 lines
6 KiB
C
281 lines
6 KiB
C
#ifndef __DEVMGR_H__
|
|
#define __DEVMGR_H__
|
|
|
|
typedef struct _DEV_CONNECT_DATA
|
|
{
|
|
DEV_HANDLE dev_handle;
|
|
struct _USB_DRIVER *pdriver;
|
|
struct _USB_DEV_MANAGER *dev_mgr;
|
|
PUSB_INTERFACE_DESC if_desc;
|
|
|
|
} DEV_CONNECT_DATA, *PDEV_CONNECT_DATA;
|
|
|
|
typedef BOOLEAN ( *PDEV_CONNECT_EX )( PDEV_CONNECT_DATA init_param, DEV_HANDLE dev_handle );
|
|
typedef BOOLEAN ( *PDEV_CONNECT )( struct _USB_DEV_MANAGER *dev_mgr, DEV_HANDLE dev_handle );
|
|
typedef BOOLEAN ( *PDRVR_INIT )( struct _USB_DEV_MANAGER *dev_mgr, struct _USB_DRIVER *pdriver );
|
|
|
|
typedef struct _PNP_DISPATCH
|
|
{
|
|
ULONG version;
|
|
PDEV_CONNECT_EX dev_connect;
|
|
PDEV_CONNECT dev_reserved; //currently we do not use this entry
|
|
PDEV_CONNECT dev_stop;
|
|
PDEV_CONNECT dev_disconnect;
|
|
|
|
}PNP_DISPATCH, *PPNP_DISPATCH;
|
|
|
|
#define USB_DRIVER_FLAG_IF_CAPABLE 0x80000000
|
|
#define USB_DRIVER_FLAG_DEV_CAPABLE 0x40000000
|
|
|
|
typedef struct _USB_DRIVER_DESCRIPTION
|
|
{
|
|
// Device Info
|
|
DWORD flags;
|
|
WORD vendor_id; // USB Vendor ID
|
|
WORD product_id; // USB Product ID.
|
|
WORD release_num; // Release Number of Device
|
|
|
|
// Interface Info
|
|
BYTE config_val; // Configuration Value
|
|
BYTE if_num; // Interface Number
|
|
BYTE if_class; // Interface Class
|
|
BYTE if_sub_class; // Interface SubClass
|
|
BYTE if_protocol; // Interface Protocol
|
|
|
|
// Driver Info
|
|
const char *driver_name; // Driver name for Name Registry
|
|
BYTE dev_class; // Device Class (from SampleStorageDeviceID.h)
|
|
BYTE dev_sub_class; // Device Subclass
|
|
BYTE dev_protocol; // Protocol Info.
|
|
|
|
} USB_DRIVER_DESCRIPTION,*PUSB_DRIVER_DESCRIPTION;
|
|
|
|
#define RH_DRIVER_IDX 0
|
|
#define HUB_DRIVER_IDX 1
|
|
#define UMSS_DRIVER_IDX 2
|
|
#define COMP_DRIVER_IDX 3
|
|
#define GEN_DRIVER_IDX 4
|
|
#define GEN_IF_DRIVER_IDX 5
|
|
#define MOUSE_DRIVER_IDX 6
|
|
#define KEYBOARD_DRIVER_IDX 7
|
|
#define DEVMGR_MAX_DRIVERS 8
|
|
|
|
typedef struct _USB_DRIVER
|
|
{
|
|
USB_DRIVER_DESCRIPTION driver_desc;
|
|
PNP_DISPATCH disp_tbl;
|
|
|
|
PBYTE driver_ext;
|
|
LONG driver_ext_size;
|
|
|
|
PDRVR_INIT driver_init;
|
|
PDRVR_INIT driver_destroy;
|
|
|
|
} USB_DRIVER, *PUSB_DRIVER;
|
|
|
|
extern USB_DRIVER g_driver_list[ DEVMGR_MAX_DRIVERS ];
|
|
|
|
#define MAX_HCDS 8
|
|
#define dev_mgr_from_hcd( hCD ) ( ( hCD )->hcd_get_dev_mgr( hCD ) )
|
|
#define dev_mgr_from_dev( pdEV ) ( dev_mgr_from_hcd( pdEV->hcd ) )
|
|
|
|
typedef struct _USB_DEV_MANAGER
|
|
{
|
|
//BYTE dev_addr_map[ MAX_DEVS / 8 ]; //one bit per dev
|
|
struct _HCD *hcd_array[ MAX_HCDS ];
|
|
unsigned char hcd_count;
|
|
|
|
KSPIN_LOCK dev_list_lock;
|
|
LIST_HEAD dev_list;
|
|
|
|
//PDEVICE_EXTENSION pdev_ext;
|
|
|
|
PVOID pthread;
|
|
BOOLEAN term_flag;
|
|
KEVENT wake_up_event;
|
|
|
|
KSPIN_LOCK event_list_lock;
|
|
LIST_HEAD event_list;
|
|
USB_EVENT_POOL event_pool;
|
|
|
|
KEVENT drivers_inited;
|
|
KTIMER dev_mgr_timer;
|
|
KDPC dev_mgr_timer_dpc;
|
|
KSPIN_LOCK timer_svc_list_lock;
|
|
LIST_HEAD timer_svc_list;
|
|
TIMER_SVC_POOL timer_svc_pool;
|
|
LONG timer_click;
|
|
IRP_LIST irp_list;
|
|
|
|
PUSB_DRIVER driver_list;
|
|
LONG hub_count;
|
|
LIST_HEAD hub_list; //for reference only
|
|
|
|
//statistics
|
|
LONG conn_count; //will also be used to assign device id
|
|
PDRIVER_OBJECT usb_driver_obj; //this driver object
|
|
LONG open_count; //increment when IRP_MJ_CREATE arrives
|
|
//and decrement when IRP_MJ_CLOSE arrives
|
|
|
|
} USB_DEV_MANAGER, *PUSB_DEV_MANAGER;
|
|
|
|
BOOLEAN
|
|
dev_mgr_post_event(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PUSB_EVENT event
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_init(
|
|
PUSB_DEV dev, //always null. we do not use this param
|
|
ULONG event,
|
|
ULONG dev_mgr
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_destroy(
|
|
PUSB_DEV_MANAGER dev_mgr
|
|
);
|
|
|
|
VOID NTAPI
|
|
dev_mgr_thread(
|
|
PVOID dev_mgr
|
|
);
|
|
|
|
VOID NTAPI
|
|
dev_mgr_timer_dpc_callback(
|
|
PKDPC Dpc,
|
|
PVOID DeferredContext,
|
|
PVOID SystemArgument1,
|
|
PVOID SystemArgument2
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_request_timer_svc(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PUSB_DEV pdev,
|
|
ULONG context,
|
|
ULONG due_time,
|
|
TIMER_SVC_HANDLER handler
|
|
);
|
|
|
|
BYTE
|
|
dev_mgr_alloc_addr(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PHCD hcd
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_free_addr(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PUSB_DEV pdev,
|
|
BYTE addr
|
|
);
|
|
|
|
PUSB_DEV
|
|
dev_mgr_alloc_device(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PHCD hcd
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_free_device(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PUSB_DEV pdev
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_disconnect_dev(
|
|
PUSB_DEV pdev
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_strobe(
|
|
PUSB_DEV_MANAGER dev_mgr
|
|
);
|
|
|
|
NTSTATUS
|
|
dev_mgr_build_usb_config(
|
|
PUSB_DEV pdev,
|
|
PBYTE pbuf,
|
|
ULONG config_val,
|
|
LONG config_count
|
|
);
|
|
|
|
UCHAR
|
|
dev_mgr_register_hcd(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PHCD hcd
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_deregister_hcd(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
UCHAR hcd_id
|
|
);
|
|
|
|
NTSTATUS
|
|
dev_mgr_dispatch(
|
|
IN PUSB_DEV_MANAGER dev_mgr,
|
|
IN PIRP irp
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_register_irp(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PIRP pirp,
|
|
PURB purb
|
|
);
|
|
|
|
PURB
|
|
dev_mgr_remove_irp(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PIRP pirp
|
|
);
|
|
|
|
LONG
|
|
dev_mgr_score_driver_for_if(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
PUSB_DRIVER pdriver,
|
|
PUSB_INTERFACE_DESC pif_desc
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_set_driver(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
DEV_HANDLE dev_handle,
|
|
PUSB_DRIVER pdriver,
|
|
PUSB_DEV pdev //if pdev != NULL, we use pdev instead if_handle
|
|
);
|
|
|
|
BOOLEAN
|
|
dev_mgr_set_if_driver(
|
|
PUSB_DEV_MANAGER dev_mgr,
|
|
DEV_HANDLE if_handle,
|
|
PUSB_DRIVER pdriver,
|
|
PUSB_DEV pdev //if pdev != NULL, we use pdev instead if_handle
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_release_hcd(
|
|
PUSB_DEV_MANAGER dev_mgr
|
|
);
|
|
|
|
VOID
|
|
dev_mgr_start_hcd(
|
|
PUSB_DEV_MANAGER dev_mgr
|
|
);
|
|
|
|
BOOLEAN dev_mgr_start_config_dev(PUSB_DEV pdev);
|
|
BOOLEAN dev_mgr_event_init(PUSB_DEV dev, //always null. we do not use this param
|
|
ULONG event,
|
|
ULONG context,
|
|
ULONG param);
|
|
VOID dev_mgr_get_desc_completion(PURB purb, PVOID context);
|
|
VOID dev_mgr_event_select_driver(PUSB_DEV pdev, ULONG event, ULONG context, ULONG param);
|
|
LONG dev_mgr_score_driver_for_dev(PUSB_DEV_MANAGER dev_mgr, PUSB_DRIVER pdriver, PUSB_DEVICE_DESC pdev_desc);
|
|
NTSTATUS dev_mgr_destroy_usb_config(PUSB_CONFIGURATION pcfg);
|
|
BOOLEAN dev_mgr_start_select_driver(PUSB_DEV pdev);
|
|
VOID dev_mgr_cancel_irp(PDEVICE_OBJECT pdev_obj, PIRP pirp);
|
|
|
|
#endif
|