reactos/drivers/usb/nt4compat/usbdriver/events.h
Amine Khaldi c424146e2c Create a branch for cmake bringup.
svn path=/branches/cmake-bringup/; revision=48236
2010-07-24 18:52:44 +00:00

149 lines
2.8 KiB
C

#ifndef __EVENTS_H
#define __EVENTS_H
//event definitions
#define MAX_EVENTS 128
#define MAX_TIMER_SVCS 24
#define USB_EVENT_FLAG_ACTIVE 0x80000000
#define USB_EVENT_FLAG_QUE_TYPE 0x000000FF
#define USB_EVENT_FLAG_QUE_RESET 0x01
#define USB_EVENT_FLAG_NOQUE 0x00
#define USB_EVENT_DEFAULT 0x00 //as a placeholder
#define USB_EVENT_INIT_DEV_MGR 0x01
#define USB_EVENT_HUB_POLL 0x02
#define USB_EVENT_WAIT_RESET_PORT 0x03
#define USB_EVENT_CLEAR_TT_BUFFER 0x04
typedef VOID ( *PROCESS_QUEUE )(
PLIST_HEAD event_list,
struct _USB_EVENT_POOL *event_pool,
struct _USB_EVENT *usb_event,
struct _USB_EVENT *out_event
);
typedef VOID ( *PROCESS_EVENT )(
PUSB_DEV dev,
ULONG event,
ULONG context,
ULONG param
);
typedef struct _USB_EVENT
{
LIST_ENTRY event_link;
ULONG flags;
ULONG event;
PUSB_DEV pdev;
ULONG context;
ULONG param;
struct _USB_EVENT *pnext; //vertical queue for serialized operation
PROCESS_EVENT process_event;
PROCESS_QUEUE process_queue;
} USB_EVENT, *PUSB_EVENT;
typedef struct _USB_EVENT_POOL
{
PUSB_EVENT event_array;
LIST_HEAD free_que;
LONG free_count;
LONG total_count;
KSPIN_LOCK pool_lock;
} USB_EVENT_POOL, *PUSB_EVENT_POOL;
BOOLEAN
init_event_pool(
PUSB_EVENT_POOL pool
);
BOOLEAN
free_event(
PUSB_EVENT_POOL pool,
PUSB_EVENT pevent
); //add qhs till pnext == NULL
PUSB_EVENT
alloc_event(
PUSB_EVENT_POOL pool,
LONG count
); //null if failed
BOOLEAN
destroy_event_pool(
PUSB_EVENT_POOL pool
);
VOID
lock_event_pool(
PUSB_EVENT_POOL pool
);
VOID
unlock_event_pool(
PUSB_EVENT_POOL pool
);
#define DEV_MGR_TIMER_INTERVAL_NS ( 10 * 1000 * 10 ) //unit 100 ns
#define DEV_MGR_TIMER_INTERVAL_MS 10
typedef VOID ( *TIMER_SVC_HANDLER )(PUSB_DEV dev, PVOID context);
typedef struct _TIMER_SVC
{
LIST_ENTRY timer_svc_link;
ULONG counter;
ULONG threshold;
ULONG context;
PUSB_DEV pdev;
TIMER_SVC_HANDLER func;
} TIMER_SVC, *PTIMER_SVC;
typedef struct _TIMER_SVC_POOL
{
PTIMER_SVC timer_svc_array;
LIST_HEAD free_que;
LONG free_count;
LONG total_count;
KSPIN_LOCK pool_lock;
} TIMER_SVC_POOL, *PTIMER_SVC_POOL;
BOOLEAN
init_timer_svc_pool(
PTIMER_SVC_POOL pool
);
BOOLEAN
free_timer_svc(
PTIMER_SVC_POOL pool,
PTIMER_SVC ptimer
);
PTIMER_SVC
alloc_timer_svc(
PTIMER_SVC_POOL pool,
LONG count
); //null if failed
BOOLEAN
destroy_timer_svc_pool(
PTIMER_SVC_POOL pool
);
VOID
lock_timer_svc_pool(
PTIMER_SVC_POOL pool
);
VOID
unlock_timer_svc_pool(
PTIMER_SVC_POOL pool
);
#endif