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
148 lines
2.8 KiB
C
148 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
|