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
13
  #include <asm/io.h>
  #include <linux/list.h>
286295eb9   Arjan van de Ven   Input: gameport -...
14
  #include <linux/mutex.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
15
  #include <linux/device.h>
4e57b6817   Tim Schmielau   [PATCH] fix missi...
16
  #include <linux/timer.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
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
  
  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 -...
44
  	struct mutex drv_mutex;		/* protects serio->drv so attributes can pin driver */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  
  	struct device dev;
  	unsigned int registered;	/* port has been fully registered with driver core */
  
  	struct list_head node;
  };
  #define to_gameport_port(d)	container_of(d, struct gameport, dev)
  
  struct gameport_driver {
  
  	void *private;
  	char *description;
  
  	int (*connect)(struct gameport *, struct gameport_driver *drv);
  	int (*reconnect)(struct gameport *);
  	void (*disconnect)(struct gameport *);
  
  	struct device_driver driver;
  
  	unsigned int ignore;
  };
  #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
70

668d1e609   Adrian Bunk   Input:
71
  #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
73
74
75
76
77
78
  void __gameport_register_port(struct gameport *gameport, struct module *owner);
  static inline void gameport_register_port(struct gameport *gameport)
  {
  	__gameport_register_port(gameport, THIS_MODULE);
  }
  
  void gameport_unregister_port(struct gameport *gameport);
668d1e609   Adrian Bunk   Input:
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)
  	__attribute__ ((format (printf, 2, 3)));
  
  #else
  
  static inline void gameport_register_port(struct gameport *gameport)
  {
  	return;
  }
  
  static inline void gameport_unregister_port(struct gameport *gameport)
  {
  	return;
  }
  
  static inline void gameport_set_phys(struct gameport *gameport,
  				     const char *fmt, ...)
  {
  	return;
  }
  
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
102
  static inline struct gameport *gameport_allocate_port(void)
  {
cd8612808   Robert P. J. Day   [PATCH] Fix numer...
103
  	struct gameport *gameport = kzalloc(sizeof(struct gameport), GFP_KERNEL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
110
111
112
113
114
115
116
  
  	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
117
  /*
0b28002fd   Akinobu Mita   [PATCH] more s/fu...
118
   * Use the following functions to manipulate gameport's per-port
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
123
124
125
126
127
128
129
130
131
   * 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...
132
   * Use the following functions to pin gameport's driver in process context
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
134
135
   */
  static inline int gameport_pin_driver(struct gameport *gameport)
  {
286295eb9   Arjan van de Ven   Input: gameport -...
136
  	return mutex_lock_interruptible(&gameport->drv_mutex);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
139
140
  }
  
  static inline void gameport_unpin_driver(struct gameport *gameport)
  {
286295eb9   Arjan van de Ven   Input: gameport -...
141
  	mutex_unlock(&gameport->drv_mutex);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  }
6902c0bea   Dmitry Torokhov   Input: gameport -...
143
144
  int __gameport_register_driver(struct gameport_driver *drv,
  				struct module *owner, const char *mod_name);
8c4b3c293   Dmitry Torokhov   Input: gameport -...
145
  static inline int __must_check gameport_register_driver(struct gameport_driver *drv)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
  {
6902c0bea   Dmitry Torokhov   Input: gameport -...
147
  	return __gameport_register_driver(drv, THIS_MODULE, KBUILD_MODNAME);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
149
150
  }
  
  void gameport_unregister_driver(struct gameport_driver *drv);
25478bb26   David Woodhouse   Use __KERNEL__ to...
151
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
153
154
155
156
157
158
159
160
161
162
163
164
165
  #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...
166
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
212
213
214
215
  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...
216
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217
  #endif