git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git]
/
drivers
/
char
/
ip2
/
ip2main.c
diff --git
a/drivers/char/ip2/ip2main.c
b/drivers/char/ip2/ip2main.c
index
7907ae8
..
03db1cb
100644
(file)
--- a/
drivers/char/ip2/ip2main.c
+++ b/
drivers/char/ip2/ip2main.c
@@
-82,6
+82,7
@@
/************/
/* Includes */
/************/
/************/
/* Includes */
/************/
+#include <linux/config.h>
#include <linux/ctype.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/string.h>
@@
-90,6
+91,7
@@
#include <linux/module.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/module.h>
#include <linux/signal.h>
#include <linux/sched.h>
+#include <linux/devfs_fs_kernel.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
@@
-233,7
+235,7
@@
static void *DevTableMem[IP2_MAX_BOARDS];
/* This is the driver descriptor for the ip2ipl device, which is used to
* download the loadware to the boards.
*/
/* This is the driver descriptor for the ip2ipl device, which is used to
* download the loadware to the boards.
*/
-static
const
struct file_operations ip2_ipl = {
+static struct file_operations ip2_ipl = {
.owner = THIS_MODULE,
.read = ip2_ipl_read,
.write = ip2_ipl_write,
.owner = THIS_MODULE,
.read = ip2_ipl_read,
.write = ip2_ipl_write,
@@
-303,7
+305,7
@@
static struct class *ip2_class;
// Some functions to keep track of what irq's we have
// Some functions to keep track of what irq's we have
-static int
+static int
__init
is_valid_irq(int irq)
{
int *i = Valid_Irqs;
is_valid_irq(int irq)
{
int *i = Valid_Irqs;
@@
-314,14
+316,14
@@
is_valid_irq(int irq)
return (*i);
}
return (*i);
}
-static void
+static void
__init
mark_requested_irq( char irq )
{
rirqs[iindx++] = irq;
}
#ifdef MODULE
mark_requested_irq( char irq )
{
rirqs[iindx++] = irq;
}
#ifdef MODULE
-static int
+static int
__init
clear_requested_irq( char irq )
{
int i;
clear_requested_irq( char irq )
{
int i;
@@
-335,7
+337,7
@@
clear_requested_irq( char irq )
}
#endif
}
#endif
-static int
+static int
__init
have_requested_irq( char irq )
{
// array init to zeros so 0 irq will not be requested as a side effect
have_requested_irq( char irq )
{
// array init to zeros so 0 irq will not be requested as a side effect
@@
-412,7
+414,9
@@
cleanup_module(void)
/* free io addresses and Tibet */
release_region( ip2config.addr[i], 8 );
class_device_destroy(ip2_class, MKDEV(IP2_IPL_MAJOR, 4 * i));
/* free io addresses and Tibet */
release_region( ip2config.addr[i], 8 );
class_device_destroy(ip2_class, MKDEV(IP2_IPL_MAJOR, 4 * i));
+ devfs_remove("ip2/ipl%d", i);
class_device_destroy(ip2_class, MKDEV(IP2_IPL_MAJOR, 4 * i + 1));
class_device_destroy(ip2_class, MKDEV(IP2_IPL_MAJOR, 4 * i + 1));
+ devfs_remove("ip2/stat%d", i);
}
/* Disable and remove interrupt handler. */
if ( (ip2config.irq[i] > 0) && have_requested_irq(ip2config.irq[i]) ) {
}
/* Disable and remove interrupt handler. */
if ( (ip2config.irq[i] > 0) && have_requested_irq(ip2config.irq[i]) ) {
@@
-421,6
+425,7
@@
cleanup_module(void)
}
}
class_destroy(ip2_class);
}
}
class_destroy(ip2_class);
+ devfs_remove("ip2");
if ( ( err = tty_unregister_driver ( ip2_tty_driver ) ) ) {
printk(KERN_ERR "IP2: failed to unregister tty driver (%d)\n", err);
}
if ( ( err = tty_unregister_driver ( ip2_tty_driver ) ) ) {
printk(KERN_ERR "IP2: failed to unregister tty driver (%d)\n", err);
}
@@
-491,8
+496,8
@@
static struct tty_operations ip2_ops = {
/* initialisation of the devices and driver structures, and registers itself */
/* with the relevant kernel modules. */
/******************************************************************************/
/* initialisation of the devices and driver structures, and registers itself */
/* with the relevant kernel modules. */
/******************************************************************************/
-/*
IRQF_DISABLED
- if set blocks all interrupts else only this line */
-/*
IRQF_SHARED
- for shared irq PCI or maybe EISA only */
+/*
SA_INTERRUPT
- if set blocks all interrupts else only this line */
+/*
SA_SHIRQ
- for shared irq PCI or maybe EISA only */
/* SA_RANDOM - can be source for cert. random number generators */
#define IP2_SA_FLAGS 0
/* SA_RANDOM - can be source for cert. random number generators */
#define IP2_SA_FLAGS 0
@@
-670,6
+675,7
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
ip2_tty_driver->owner = THIS_MODULE;
ip2_tty_driver->name = "ttyF";
ip2_tty_driver->owner = THIS_MODULE;
ip2_tty_driver->name = "ttyF";
+ ip2_tty_driver->devfs_name = "tts/F";
ip2_tty_driver->driver_name = pcDriver_name;
ip2_tty_driver->major = IP2_TTY_MAJOR;
ip2_tty_driver->minor_start = 0;
ip2_tty_driver->driver_name = pcDriver_name;
ip2_tty_driver->major = IP2_TTY_MAJOR;
ip2_tty_driver->minor_start = 0;
@@
-677,7
+683,7
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
ip2_tty_driver->subtype = SERIAL_TYPE_NORMAL;
ip2_tty_driver->init_termios = tty_std_termios;
ip2_tty_driver->init_termios.c_cflag = B9600|CS8|CREAD|HUPCL|CLOCAL;
ip2_tty_driver->subtype = SERIAL_TYPE_NORMAL;
ip2_tty_driver->init_termios = tty_std_termios;
ip2_tty_driver->init_termios.c_cflag = B9600|CS8|CREAD|HUPCL|CLOCAL;
- ip2_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_
DYNAMIC_DEV
;
+ ip2_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_
NO_DEVFS
;
tty_set_operations(ip2_tty_driver, &ip2_ops);
ip2trace (ITRC_NO_PORT, ITRC_INIT, 3, 0 );
tty_set_operations(ip2_tty_driver, &ip2_ops);
ip2trace (ITRC_NO_PORT, ITRC_INIT, 3, 0 );
@@
-718,9
+724,26
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
class_device_create(ip2_class, NULL,
MKDEV(IP2_IPL_MAJOR, 4 * i),
NULL, "ipl%d", i);
class_device_create(ip2_class, NULL,
MKDEV(IP2_IPL_MAJOR, 4 * i),
NULL, "ipl%d", i);
+ err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i),
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
+ "ip2/ipl%d", i);
+ if (err) {
+ class_device_destroy(ip2_class,
+ MKDEV(IP2_IPL_MAJOR, 4 * i));
+ goto out_class;
+ }
+
class_device_create(ip2_class, NULL,
MKDEV(IP2_IPL_MAJOR, 4 * i + 1),
NULL, "stat%d", i);
class_device_create(ip2_class, NULL,
MKDEV(IP2_IPL_MAJOR, 4 * i + 1),
NULL, "stat%d", i);
+ err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i + 1),
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
+ "ip2/stat%d", i);
+ if (err) {
+ class_device_destroy(ip2_class,
+ MKDEV(IP2_IPL_MAJOR, 4 * i + 1));
+ goto out_class;
+ }
for ( box = 0; box < ABS_MAX_BOXES; ++box )
{
for ( box = 0; box < ABS_MAX_BOXES; ++box )
{
@@
-753,7
+776,7
@@
retry:
if (have_requested_irq(ip2config.irq[i]))
continue;
rc = request_irq( ip2config.irq[i], ip2_interrupt,
if (have_requested_irq(ip2config.irq[i]))
continue;
rc = request_irq( ip2config.irq[i], ip2_interrupt,
- IP2_SA_FLAGS | (ip2config.type[i] == PCI ?
IRQF_SHARED
: 0),
+ IP2_SA_FLAGS | (ip2config.type[i] == PCI ?
SA_SHIRQ
: 0),
pcName, (void *)&pcName);
if (rc) {
printk(KERN_ERR "IP2: an request_irq failed: error %d\n",rc);
pcName, (void *)&pcName);
if (rc) {
printk(KERN_ERR "IP2: an request_irq failed: error %d\n",rc);
@@
-795,7
+818,7
@@
EXPORT_SYMBOL(ip2_loadmain);
/* the board, the channel structures are initialized, and the board details */
/* are reported on the console. */
/******************************************************************************/
/* the board, the channel structures are initialized, and the board details */
/* are reported on the console. */
/******************************************************************************/
-static void
+static void
__init
ip2_init_board( int boardnum )
{
int i;
ip2_init_board( int boardnum )
{
int i;
@@
-938,7
+961,7
@@
err_initialize:
/* EISA motherboard, or no valid board ID is selected it returns 0. Otherwise */
/* it returns the base address of the controller. */
/******************************************************************************/
/* EISA motherboard, or no valid board ID is selected it returns 0. Otherwise */
/* it returns the base address of the controller. */
/******************************************************************************/
-static unsigned short
+static unsigned short
__init
find_eisa_board( int start_slot )
{
int i, j;
find_eisa_board( int start_slot )
{
int i, j;
@@
-3186,10
+3209,3
@@
ip2trace (unsigned short pn, unsigned char cat, unsigned char label, unsigned lo
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
-
-static struct pci_device_id ip2main_pci_tbl[] __devinitdata = {
- { PCI_DEVICE(PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_IP2EX) },
- { }
-};
-
-MODULE_DEVICE_TABLE(pci, ip2main_pci_tbl);