Blame view

include/linux/gameport.h 5.62 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
  #ifndef _GAMEPORT_H
  #define _GAMEPORT_H
  
  /*
   *  Copyright (c) 1999-2002 Vojtech Pavlik
   *
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 as published by
   * the Free Software Foundation.
   */
25478bb26   David Woodhouse   Use __KERNEL__ to...
11
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
  #include <asm/io.h>
7e044e056   Dmitry Torokhov   Input: serio - do...
13
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
  #include <linux/list.h>
286295eb9   Arjan van de Ven   Input: gameport -...
15
  #include <linux/mutex.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
  #include <linux/device.h>
4e57b6817   Tim Schmielau   [PATCH] fix missi...
17
  #include <linux/timer.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
18
  #include <linux/slab.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  
  struct gameport {
  
  	void *port_data;	/* Private pointer for gameport drivers */
  	char name[32];
  	char phys[32];
  
  	int io;
  	int speed;
  	int fuzz;
  
  	void (*trigger)(struct gameport *);
  	unsigned char (*read)(struct gameport *);
  	int (*cooked_read)(struct gameport *, int *, int *);
  	int (*calibrate)(struct gameport *, int *, int *);
  	int (*open)(struct gameport *, int);
  	void (*close)(struct gameport *);
  
  	struct timer_list poll_timer;
  	unsigned int poll_interval;	/* in msecs */
  	spinlock_t timer_lock;
  	unsigned int poll_cnt;
  	void (*poll_handler)(struct gameport *);
  
  	struct gameport *parent, *child;
  
  	struct gameport_driver *drv;
286295eb9   Arjan van de Ven   Input: gameport -...
46
  	struct mutex drv_mutex;		/* protects serio->drv so attributes can pin driver */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
48
  
  	struct device dev;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
53
54
  
  	struct list_head node;
  };
  #define to_gameport_port(d)	container_of(d, struct gameport, dev)
  
  struct gameport_driver {
37b0bb112   Dmitry Torokhov   Input: gameport_d...
55
  	const char *description;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
58
59
60
61
  
  	int (*connect)(struct gameport *, struct gameport_driver *drv);
  	int (*reconnect)(struct gameport *);
  	void (*disconnect)(struct gameport *);
  
  	struct device_driver driver;
7e044e056   Dmitry Torokhov   Input: serio - do...
62
  	bool ignore;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
65
66
67
  };
  #define to_gameport_driver(d)	container_of(d, struct gameport_driver, driver)
  
  int gameport_open(struct gameport *gameport, struct gameport_driver *drv, int mode);
  void gameport_close(struct gameport *gameport);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68

668d1e609   Adrian Bunk   Input:
69
  #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70
  void __gameport_register_port(struct gameport *gameport, struct module *owner);
eb5589a8f   Paul Gortmaker   include: convert ...
71
72
73
  /* use a define to avoid include chaining to get THIS_MODULE */
  #define gameport_register_port(gameport) \
  	__gameport_register_port(gameport, THIS_MODULE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
75
  
  void gameport_unregister_port(struct gameport *gameport);
b9075fa96   Joe Perches   treewide: use __p...
76
77
  __printf(2, 3)
  void gameport_set_phys(struct gameport *gameport, const char *fmt, ...);
668d1e609   Adrian Bunk   Input:
78
79
80
81
82
83
84
85
86
87
88
89
  
  #else
  
  static inline void gameport_register_port(struct gameport *gameport)
  {
  	return;
  }
  
  static inline void gameport_unregister_port(struct gameport *gameport)
  {
  	return;
  }
b9075fa96   Joe Perches   treewide: use __p...
90
91
  static inline __printf(2, 3)
  void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)
668d1e609   Adrian Bunk   Input:
92
93
94
95
96
  {
  	return;
  }
  
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
  static inline struct gameport *gameport_allocate_port(void)
  {
cd8612808   Robert P. J. Day   [PATCH] Fix numer...
99
  	struct gameport *gameport = kzalloc(sizeof(struct gameport), GFP_KERNEL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
101
102
103
104
105
106
107
108
109
110
111
112
  
  	return gameport;
  }
  
  static inline void gameport_free_port(struct gameport *gameport)
  {
  	kfree(gameport);
  }
  
  static inline void gameport_set_name(struct gameport *gameport, const char *name)
  {
  	strlcpy(gameport->name, name, sizeof(gameport->name));
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
  /*
0b28002fd   Akinobu Mita   [PATCH] more s/fu...
114
   * Use the following functions to manipulate gameport's per-port
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
115
116
117
118
119
120
121
122
123
124
125
126
127
   * driver-specific data.
   */
  static inline void *gameport_get_drvdata(struct gameport *gameport)
  {
  	return dev_get_drvdata(&gameport->dev);
  }
  
  static inline void gameport_set_drvdata(struct gameport *gameport, void *data)
  {
  	dev_set_drvdata(&gameport->dev, data);
  }
  
  /*
0b28002fd   Akinobu Mita   [PATCH] more s/fu...
128
   * Use the following functions to pin gameport's driver in process context
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
129
130
131
   */
  static inline int gameport_pin_driver(struct gameport *gameport)
  {
286295eb9   Arjan van de Ven   Input: gameport -...
132
  	return mutex_lock_interruptible(&gameport->drv_mutex);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
134
135
136
  }
  
  static inline void gameport_unpin_driver(struct gameport *gameport)
  {
286295eb9   Arjan van de Ven   Input: gameport -...
137
  	mutex_unlock(&gameport->drv_mutex);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
  }
eb5589a8f   Paul Gortmaker   include: convert ...
139
  int __must_check __gameport_register_driver(struct gameport_driver *drv,
6902c0bea   Dmitry Torokhov   Input: gameport -...
140
  				struct module *owner, const char *mod_name);
eb5589a8f   Paul Gortmaker   include: convert ...
141
142
143
144
  
  /* use a define to avoid include chaining to get THIS_MODULE & friends */
  #define gameport_register_driver(drv) \
  	__gameport_register_driver(drv, THIS_MODULE, KBUILD_MODNAME)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
  
  void gameport_unregister_driver(struct gameport_driver *drv);
25478bb26   David Woodhouse   Use __KERNEL__ to...
147
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
149
150
151
152
153
154
155
156
157
158
159
160
161
  #define GAMEPORT_MODE_DISABLED		0
  #define GAMEPORT_MODE_RAW		1
  #define GAMEPORT_MODE_COOKED		2
  
  #define GAMEPORT_ID_VENDOR_ANALOG	0x0001
  #define GAMEPORT_ID_VENDOR_MADCATZ	0x0002
  #define GAMEPORT_ID_VENDOR_LOGITECH	0x0003
  #define GAMEPORT_ID_VENDOR_CREATIVE	0x0004
  #define GAMEPORT_ID_VENDOR_GENIUS	0x0005
  #define GAMEPORT_ID_VENDOR_INTERACT	0x0006
  #define GAMEPORT_ID_VENDOR_MICROSOFT	0x0007
  #define GAMEPORT_ID_VENDOR_THRUSTMASTER	0x0008
  #define GAMEPORT_ID_VENDOR_GRAVIS	0x0009
  #define GAMEPORT_ID_VENDOR_GUILLEMOT	0x000a
25478bb26   David Woodhouse   Use __KERNEL__ to...
162
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
  static inline void gameport_trigger(struct gameport *gameport)
  {
  	if (gameport->trigger)
  		gameport->trigger(gameport);
  	else
  		outb(0xff, gameport->io);
  }
  
  static inline unsigned char gameport_read(struct gameport *gameport)
  {
  	if (gameport->read)
  		return gameport->read(gameport);
  	else
  		return inb(gameport->io);
  }
  
  static inline int gameport_cooked_read(struct gameport *gameport, int *axes, int *buttons)
  {
  	if (gameport->cooked_read)
  		return gameport->cooked_read(gameport, axes, buttons);
  	else
  		return -1;
  }
  
  static inline int gameport_calibrate(struct gameport *gameport, int *axes, int *max)
  {
  	if (gameport->calibrate)
  		return gameport->calibrate(gameport, axes, max);
  	else
  		return -1;
  }
  
  static inline int gameport_time(struct gameport *gameport, int time)
  {
  	return (time * gameport->speed) / 1000;
  }
  
  static inline void gameport_set_poll_handler(struct gameport *gameport, void (*handler)(struct gameport *))
  {
  	gameport->poll_handler = handler;
  }
  
  static inline void gameport_set_poll_interval(struct gameport *gameport, unsigned int msecs)
  {
  	gameport->poll_interval = msecs;
  }
  
  void gameport_start_polling(struct gameport *gameport);
  void gameport_stop_polling(struct gameport *gameport);
25478bb26   David Woodhouse   Use __KERNEL__ to...
212
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
  #endif