mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
![Tim Schmielau](/assets/img/avatar_default.png)
I recently picked up my older work to remove unnecessary #includes of sched.h, starting from a patch by Dave Jones to not include sched.h from module.h. This reduces the number of indirect includes of sched.h by ~300. Another ~400 pointless direct includes can be removed after this disentangling (patch to follow later). However, quite a few indirect includes need to be fixed up for this. In order to feed the patches through -mm with as little disturbance as possible, I've split out the fixes I accumulated up to now (complete for i386 and x86_64, more archs to follow later) and post them before the real patch. This way this large part of the patch is kept simple with only adding #includes, and all hunks are independent of each other. So if any hunk rejects or gets in the way of other patches, just drop it. My scripts will pick it up again in the next round. Signed-off-by: Tim Schmielau <tim@physik3.uni-rostock.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
221 lines
5.5 KiB
C
221 lines
5.5 KiB
C
#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.
|
|
*/
|
|
|
|
#include <asm/io.h>
|
|
#include <linux/list.h>
|
|
#include <linux/device.h>
|
|
#include <linux/timer.h>
|
|
|
|
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;
|
|
struct semaphore drv_sem; /* protects serio->drv so attributes can pin driver */
|
|
|
|
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);
|
|
void gameport_rescan(struct gameport *gameport);
|
|
|
|
#if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
|
|
|
|
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);
|
|
|
|
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
|
|
|
|
static inline struct gameport *gameport_allocate_port(void)
|
|
{
|
|
struct gameport *gameport = kcalloc(1, sizeof(struct gameport), GFP_KERNEL);
|
|
|
|
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));
|
|
}
|
|
|
|
/*
|
|
* Use the following fucntions to manipulate gameport's per-port
|
|
* 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);
|
|
}
|
|
|
|
/*
|
|
* Use the following fucntions to pin gameport's driver in process context
|
|
*/
|
|
static inline int gameport_pin_driver(struct gameport *gameport)
|
|
{
|
|
return down_interruptible(&gameport->drv_sem);
|
|
}
|
|
|
|
static inline void gameport_unpin_driver(struct gameport *gameport)
|
|
{
|
|
up(&gameport->drv_sem);
|
|
}
|
|
|
|
void __gameport_register_driver(struct gameport_driver *drv, struct module *owner);
|
|
static inline void gameport_register_driver(struct gameport_driver *drv)
|
|
{
|
|
__gameport_register_driver(drv, THIS_MODULE);
|
|
}
|
|
|
|
void gameport_unregister_driver(struct gameport_driver *drv);
|
|
|
|
#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
|
|
|
|
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);
|
|
|
|
#endif
|