1#include "IOHIDWorkLoop.h"
2
3// system
4#include <IOKit/IOWorkLoop.h>
5#include <IOKit/IOLocksPrivate.h>
6
7#define super IOWorkLoop
8OSDefineMetaClassAndStructors( IOHIDWorkLoop, IOWorkLoop )
9
10static SInt32 gCount = 0;
11
12IOHIDWorkLoop * IOHIDWorkLoop::workLoop()
13{
14    IOHIDWorkLoop *loop;
15
16    loop = new IOHIDWorkLoop;
17    if(!loop)
18        return loop;
19    if(!loop->init()) {
20        loop->release();
21        loop = NULL;
22    }
23    return loop;
24}
25
26bool
27IOHIDWorkLoop::init ( void )
28{
29
30	SInt32	count = OSIncrementAtomic ( &gCount );
31	char	name[64];
32
33	snprintf ( name, 64, "HID %d", ( int ) count );
34	fLockGroup = lck_grp_alloc_init ( name, LCK_GRP_ATTR_NULL );
35	if ( fLockGroup )
36	{
37		gateLock = IORecursiveLockAllocWithLockGroup ( fLockGroup );
38	}
39
40	return super::init ( );
41
42}
43
44void IOHIDWorkLoop::free ( void )
45{
46
47	if ( fLockGroup )
48	{
49		lck_grp_free ( fLockGroup );
50		fLockGroup = NULL;
51	}
52
53	super::free ( );
54
55}
56