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
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
char
/
ip2
/
ip2main.c
diff --git
a/drivers/char/ip2/ip2main.c
b/drivers/char/ip2/ip2main.c
index
03db1cb
..
7c70310
100644
(file)
--- a/
drivers/char/ip2/ip2main.c
+++ b/
drivers/char/ip2/ip2main.c
@@
-82,7
+82,6
@@
/************/
/* Includes */
/************/
/************/
/* Includes */
/************/
-#include <linux/config.h>
#include <linux/ctype.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/string.h>
@@
-91,7
+90,6
@@
#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>
@@
-179,7
+177,7
@@
static int ip2_write_room(PTTY);
static int ip2_chars_in_buf(PTTY);
static void ip2_flush_buffer(PTTY);
static int ip2_ioctl(PTTY, struct file *, UINT, ULONG);
static int ip2_chars_in_buf(PTTY);
static void ip2_flush_buffer(PTTY);
static int ip2_ioctl(PTTY, struct file *, UINT, ULONG);
-static void ip2_set_termios(PTTY, struct termios *);
+static void ip2_set_termios(PTTY, struct
k
termios *);
static void ip2_set_line_discipline(PTTY);
static void ip2_throttle(PTTY);
static void ip2_unthrottle(PTTY);
static void ip2_set_line_discipline(PTTY);
static void ip2_throttle(PTTY);
static void ip2_unthrottle(PTTY);
@@
-191,16
+189,16
@@
static int ip2_tiocmset(struct tty_struct *tty, struct file *file,
unsigned int set, unsigned int clear);
static void set_irq(int, int);
unsigned int set, unsigned int clear);
static void set_irq(int, int);
-static void ip2_interrupt_bh(
i2eBordStrPtr pB
);
-static irqreturn_t ip2_interrupt(int irq, void *dev_id
, struct pt_regs * regs
);
+static void ip2_interrupt_bh(
struct work_struct *work
);
+static irqreturn_t ip2_interrupt(int irq, void *dev_id);
static void ip2_poll(unsigned long arg);
static inline void service_all_boards(void);
static void ip2_poll(unsigned long arg);
static inline void service_all_boards(void);
-static void do_input(
void *p
);
-static void do_status(
void *p
);
+static void do_input(
struct work_struct *
);
+static void do_status(
struct work_struct *
);
static void ip2_wait_until_sent(PTTY,int);
static void ip2_wait_until_sent(PTTY,int);
-static void set_params (i2ChanStrPtr, struct termios *);
+static void set_params (i2ChanStrPtr, struct
k
termios *);
static int get_serial_info(i2ChanStrPtr, struct serial_struct __user *);
static int set_serial_info(i2ChanStrPtr, struct serial_struct __user *);
static int get_serial_info(i2ChanStrPtr, struct serial_struct __user *);
static int set_serial_info(i2ChanStrPtr, struct serial_struct __user *);
@@
-235,7
+233,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 struct file_operations ip2_ipl = {
+static
const
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,
@@
-305,7
+303,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
__init
+static int
is_valid_irq(int irq)
{
int *i = Valid_Irqs;
is_valid_irq(int irq)
{
int *i = Valid_Irqs;
@@
-316,14
+314,14
@@
is_valid_irq(int irq)
return (*i);
}
return (*i);
}
-static void
__init
+static void
mark_requested_irq( char irq )
{
rirqs[iindx++] = irq;
}
#ifdef MODULE
mark_requested_irq( char irq )
{
rirqs[iindx++] = irq;
}
#ifdef MODULE
-static int
__init
+static int
clear_requested_irq( char irq )
{
int i;
clear_requested_irq( char irq )
{
int i;
@@
-337,7
+335,7
@@
clear_requested_irq( char irq )
}
#endif
}
#endif
-static int
__init
+static int
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
@@
-414,9
+412,7
@@
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]) ) {
@@
-425,7
+421,6
@@
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);
}
@@
-441,6
+436,7
@@
cleanup_module(void)
#ifdef CONFIG_PCI
if (ip2config.type[i] == PCI && ip2config.pci_dev[i]) {
pci_disable_device(ip2config.pci_dev[i]);
#ifdef CONFIG_PCI
if (ip2config.type[i] == PCI && ip2config.pci_dev[i]) {
pci_disable_device(ip2config.pci_dev[i]);
+ pci_dev_put(ip2config.pci_dev[i]);
ip2config.pci_dev[i] = NULL;
}
#endif
ip2config.pci_dev[i] = NULL;
}
#endif
@@
-462,7
+458,7
@@
cleanup_module(void)
}
#endif /* MODULE */
}
#endif /* MODULE */
-static struct tty_operations ip2_ops = {
+static
const
struct tty_operations ip2_ops = {
.open = ip2_open,
.close = ip2_close,
.write = ip2_write,
.open = ip2_open,
.close = ip2_close,
.write = ip2_write,
@@
-496,8
+492,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. */
/******************************************************************************/
-/*
SA_INTERRUPT
- if set blocks all interrupts else only this line */
-/*
SA_SHIRQ
- for shared irq PCI or maybe EISA only */
+/*
IRQF_DISABLED
- if set blocks all interrupts else only this line */
+/*
IRQF_SHARED
- 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
@@
-510,6
+506,7
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
static int loaded;
i2eBordStrPtr pB = NULL;
int rc = -1;
static int loaded;
i2eBordStrPtr pB = NULL;
int rc = -1;
+ static struct pci_dev *pci_dev_i = NULL;
ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_ENTER, 0 );
ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_ENTER, 0 );
@@
-593,8
+590,7
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
case PCI:
#ifdef CONFIG_PCI
{
case PCI:
#ifdef CONFIG_PCI
{
- struct pci_dev *pci_dev_i = NULL;
- pci_dev_i = pci_find_device(PCI_VENDOR_ID_COMPUTONE,
+ pci_dev_i = pci_get_device(PCI_VENDOR_ID_COMPUTONE,
PCI_DEVICE_ID_COMPUTONE_IP2EX, pci_dev_i);
if (pci_dev_i != NULL) {
unsigned int addr;
PCI_DEVICE_ID_COMPUTONE_IP2EX, pci_dev_i);
if (pci_dev_i != NULL) {
unsigned int addr;
@@
-605,7
+601,7
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
break;
}
ip2config.type[i] = PCI;
break;
}
ip2config.type[i] = PCI;
- ip2config.pci_dev[i] = pci_dev_
i
;
+ ip2config.pci_dev[i] = pci_dev_
get(pci_dev_i)
;
status =
pci_read_config_dword(pci_dev_i, PCI_BASE_ADDRESS_1, &addr);
if ( addr & 1 ) {
status =
pci_read_config_dword(pci_dev_i, PCI_BASE_ADDRESS_1, &addr);
if ( addr & 1 ) {
@@
-646,6
+642,9
@@
ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
break;
} /* switch */
} /* for */
break;
} /* switch */
} /* for */
+ if (pci_dev_i)
+ pci_dev_put(pci_dev_i);
+
for ( i = 0; i < IP2_MAX_BOARDS; ++i ) {
if ( ip2config.addr[i] ) {
pB = kmalloc( sizeof(i2eBordStr), GFP_KERNEL);
for ( i = 0; i < IP2_MAX_BOARDS; ++i ) {
if ( ip2config.addr[i] ) {
pB = kmalloc( sizeof(i2eBordStr), GFP_KERNEL);
@@
-675,7
+674,6
@@
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;
@@
-683,7
+681,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_
NO_DEVFS
;
+ ip2_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_
DYNAMIC_DEV
;
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 );
@@
-724,26
+722,9
@@
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 )
{
@@
-776,7
+757,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 ?
SA_SHIRQ
: 0),
+ IP2_SA_FLAGS | (ip2config.type[i] == PCI ?
IRQF_SHARED
: 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);
@@
-798,8
+779,6
@@
retry:
ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_RETURN, 0 );
goto out;
ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_RETURN, 0 );
goto out;
-out_class:
- class_destroy(ip2_class);
out_chrdev:
unregister_chrdev(IP2_IPL_MAJOR, "ip2");
out:
out_chrdev:
unregister_chrdev(IP2_IPL_MAJOR, "ip2");
out:
@@
-818,7
+797,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
__init
+static void
ip2_init_board( int boardnum )
{
int i;
ip2_init_board( int boardnum )
{
int i;
@@
-939,7
+918,7
@@
ip2_init_board( int boardnum )
pCh++;
}
ex_exit:
pCh++;
}
ex_exit:
- INIT_WORK(&pB->tqueue_interrupt,
(void(*)(void*)) ip2_interrupt_bh, pB
);
+ INIT_WORK(&pB->tqueue_interrupt,
ip2_interrupt_bh
);
return;
err_release_region:
return;
err_release_region:
@@
-961,7
+940,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
__init
+static unsigned short
find_eisa_board( int start_slot )
{
int i, j;
find_eisa_board( int start_slot )
{
int i, j;
@@
-1146,8
+1125,8
@@
service_all_boards(void)
/******************************************************************************/
/******************************************************************************/
-/* Function: ip2_interrupt_bh(
pB)
*/
-/* Parameters:
pB - pointer to the board structure
*/
+/* Function: ip2_interrupt_bh(
work)
*/
+/* Parameters:
work - pointer to the board structure
*/
/* Returns: Nothing */
/* */
/* Description: */
/* Returns: Nothing */
/* */
/* Description: */
@@
-1156,8
+1135,9
@@
service_all_boards(void)
/* */
/******************************************************************************/
static void
/* */
/******************************************************************************/
static void
-ip2_interrupt_bh(
i2eBordStrPtr pB
)
+ip2_interrupt_bh(
struct work_struct *work
)
{
{
+ i2eBordStrPtr pB = container_of(work, i2eBordStr, tqueue_interrupt);
// pB better well be set or we have a problem! We can only get
// here from the IMMEDIATE queue. Here, we process the boards.
// Checking pB doesn't cost much and it saves us from the sanity checkers.
// pB better well be set or we have a problem! We can only get
// here from the IMMEDIATE queue. Here, we process the boards.
// Checking pB doesn't cost much and it saves us from the sanity checkers.
@@
-1175,10
+1155,9
@@
ip2_interrupt_bh(i2eBordStrPtr pB)
/******************************************************************************/
/******************************************************************************/
-/* Function: ip2_interrupt(int irq, void *dev_id
, struct pt_regs * regs
) */
+/* Function: ip2_interrupt(int irq, void *dev_id) */
/* Parameters: irq - interrupt number */
/* pointer to optional device ID structure */
/* Parameters: irq - interrupt number */
/* pointer to optional device ID structure */
-/* pointer to register structure */
/* Returns: Nothing */
/* */
/* Description: */
/* Returns: Nothing */
/* */
/* Description: */
@@
-1194,7
+1173,7
@@
ip2_interrupt_bh(i2eBordStrPtr pB)
/* */
/******************************************************************************/
static irqreturn_t
/* */
/******************************************************************************/
static irqreturn_t
-ip2_interrupt(int irq, void *dev_id
, struct pt_regs * regs
)
+ip2_interrupt(int irq, void *dev_id)
{
int i;
i2eBordStrPtr pB;
{
int i;
i2eBordStrPtr pB;
@@
-1258,7
+1237,7
@@
ip2_poll(unsigned long arg)
// Just polled boards, IRQ = 0 will hit all non-interrupt boards.
// It will NOT poll boards handled by hard interrupts.
// The issue of queued BH interrups is handled in ip2_interrupt().
// Just polled boards, IRQ = 0 will hit all non-interrupt boards.
// It will NOT poll boards handled by hard interrupts.
// The issue of queued BH interrups is handled in ip2_interrupt().
- ip2_interrupt(0, NULL
, NULL
);
+ ip2_interrupt(0, NULL);
PollTimer.expires = POLL_TIMEOUT;
add_timer( &PollTimer );
PollTimer.expires = POLL_TIMEOUT;
add_timer( &PollTimer );
@@
-1267,9
+1246,9
@@
ip2_poll(unsigned long arg)
ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
}
ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
}
-static void do_input(
void *p
)
+static void do_input(
struct work_struct *work
)
{
{
- i2ChanStrPtr pCh =
p
;
+ i2ChanStrPtr pCh =
container_of(work, i2ChanStr, tqueue_input)
;
unsigned long flags;
ip2trace(CHANN, ITRC_INPUT, 21, 0 );
unsigned long flags;
ip2trace(CHANN, ITRC_INPUT, 21, 0 );
@@
-1301,9
+1280,9
@@
static inline void isig(int sig, struct tty_struct *tty, int flush)
}
}
}
}
-static void do_status(
void *p
)
+static void do_status(
struct work_struct *work
)
{
{
- i2ChanStrPtr pCh =
p
;
+ i2ChanStrPtr pCh =
container_of(work, i2ChanStr, tqueue_status)
;
int status;
status = i2GetStatus( pCh, (I2_BRK|I2_PAR|I2_FRA|I2_OVR) );
int status;
status = i2GetStatus( pCh, (I2_BRK|I2_PAR|I2_FRA|I2_OVR) );
@@
-1726,7
+1705,7
@@
ip2_write( PTTY tty, const unsigned char *pData, int count)
/* This is the actual move bit. Make sure it does what we need!!!!! */
WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags);
/* This is the actual move bit. Make sure it does what we need!!!!! */
WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags);
- bytesSent = i2Output( pCh, pData, count
, 0
);
+ bytesSent = i2Output( pCh, pData, count);
WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags);
ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent );
WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags);
ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent );
@@
-1786,7
+1765,7
@@
ip2_flush_chars( PTTY tty )
//
// We may need to restart i2Output if it does not fullfill this request
//
//
// We may need to restart i2Output if it does not fullfill this request
//
- strip = i2Output( pCh, pCh->Pbuf, pCh->Pbuf_stuff
, 0
);
+ strip = i2Output( pCh, pCh->Pbuf, pCh->Pbuf_stuff);
if ( strip != pCh->Pbuf_stuff ) {
memmove( pCh->Pbuf, &pCh->Pbuf[strip], pCh->Pbuf_stuff - strip );
}
if ( strip != pCh->Pbuf_stuff ) {
memmove( pCh->Pbuf, &pCh->Pbuf[strip], pCh->Pbuf_stuff - strip );
}
@@
-2419,7
+2398,7
@@
set_serial_info( i2ChanStrPtr pCh, struct serial_struct __user *new_info )
/* */
/******************************************************************************/
static void
/* */
/******************************************************************************/
static void
-ip2_set_termios( PTTY tty, struct termios *old_termios )
+ip2_set_termios( PTTY tty, struct
k
termios *old_termios )
{
i2ChanStrPtr pCh = (i2ChanStrPtr)tty->driver_data;
{
i2ChanStrPtr pCh = (i2ChanStrPtr)tty->driver_data;
@@
-2461,11
+2440,11
@@
ip2_set_line_discipline ( PTTY tty )
/* change. */
/******************************************************************************/
static void
/* change. */
/******************************************************************************/
static void
-set_params( i2ChanStrPtr pCh, struct termios *o_tios )
+set_params( i2ChanStrPtr pCh, struct
k
termios *o_tios )
{
tcflag_t cflag, iflag, lflag;
char stop_char, start_char;
{
tcflag_t cflag, iflag, lflag;
char stop_char, start_char;
- struct termios dummy;
+ struct
k
termios dummy;
lflag = pCh->pTTY->termios->c_lflag;
cflag = pCh->pTTY->termios->c_cflag;
lflag = pCh->pTTY->termios->c_lflag;
cflag = pCh->pTTY->termios->c_cflag;
@@
-2721,7
+2700,7
@@
static
ssize_t
ip2_ipl_read(struct file *pFile, char __user *pData, size_t count, loff_t *off )
{
ssize_t
ip2_ipl_read(struct file *pFile, char __user *pData, size_t count, loff_t *off )
{
- unsigned int minor = iminor(pFile->f_dentry->d_inode);
+ unsigned int minor = iminor(pFile->f_
path.
dentry->d_inode);
int rc = 0;
#ifdef IP2DEBUG_IPL
int rc = 0;
#ifdef IP2DEBUG_IPL
@@
-3209,3
+3188,10
@@
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);