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
vserver 1.9.5.x5
[linux-2.6.git]
/
drivers
/
pcmcia
/
i82365.c
diff --git
a/drivers/pcmcia/i82365.c
b/drivers/pcmcia/i82365.c
index
561974e
..
e9b5eb3
100644
(file)
--- a/
drivers/pcmcia/i82365.c
+++ b/
drivers/pcmcia/i82365.c
@@
-48,9
+48,9
@@
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/device.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/device.h>
+#include <linux/bitops.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/io.h>
-#include <asm/bitops.h>
#include <asm/system.h>
#include <pcmcia/version.h>
#include <asm/system.h>
#include <pcmcia/version.h>
@@
-96,7
+96,7
@@
static inline int _check_irq(int irq, int flags)
/* Parameters that can be set with 'insmod' */
/* Default base address for i82365sl and other ISA chips */
/* Parameters that can be set with 'insmod' */
/* Default base address for i82365sl and other ISA chips */
-static
int
i365_base = 0x3e0;
+static
unsigned long
i365_base = 0x3e0;
/* Should we probe at 0x3e2 for an extra ISA controller? */
static int extra_sockets = 0;
/* Specify a socket number to ignore */
/* Should we probe at 0x3e2 for an extra ISA controller? */
static int extra_sockets = 0;
/* Specify a socket number to ignore */
@@
-130,11
+130,11
@@
static int async_clock = -1;
static int cable_mode = -1;
static int wakeup = 0;
static int cable_mode = -1;
static int wakeup = 0;
-module_param(i365_base,
int
, 0444);
+module_param(i365_base,
ulong
, 0444);
module_param(ignore, int, 0444);
module_param(extra_sockets, int, 0444);
module_param(irq_mask, int, 0444);
module_param(ignore, int, 0444);
module_param(extra_sockets, int, 0444);
module_param(irq_mask, int, 0444);
-module_param_array(irq_list, int, irq_list_count, 0444);
+module_param_array(irq_list, int,
&
irq_list_count, 0444);
module_param(cs_irq, int, 0444);
module_param(async_clock, int, 0444);
module_param(cable_mode, int, 0444);
module_param(cs_irq, int, 0444);
module_param(async_clock, int, 0444);
module_param(cable_mode, int, 0444);
@@
-167,7
+167,7
@@
struct i82365_socket {
u_short type, flags;
struct pcmcia_socket socket;
unsigned int number;
u_short type, flags;
struct pcmcia_socket socket;
unsigned int number;
-
ioaddr_t
ioaddr;
+
kio_addr_t
ioaddr;
u_short psock;
u_char cs_irq, intr;
union {
u_short psock;
u_char cs_irq, intr;
union {
@@
-186,7
+186,7
@@
static struct i82365_socket socket[8] = {
#define I365_MASK 0xdeb8 /* irq 15,14,12,11,10,9,7,5,4,3 */
static int grab_irq;
#define I365_MASK 0xdeb8 /* irq 15,14,12,11,10,9,7,5,4,3 */
static int grab_irq;
-static
spinlock_t isa_lock = SPIN_LOCK_UNLOCKED
;
+static
DEFINE_SPINLOCK(isa_lock)
;
#define ISA_LOCK(n, f) spin_lock_irqsave(&isa_lock, f)
#define ISA_UNLOCK(n, f) spin_unlock_irqrestore(&isa_lock, f)
#define ISA_LOCK(n, f) spin_lock_irqsave(&isa_lock, f)
#define ISA_UNLOCK(n, f) spin_unlock_irqrestore(&isa_lock, f)
@@
-208,6
+208,7
@@
typedef enum pcic_id {
#define IS_UNKNOWN 0x0400
#define IS_VG_PWR 0x0800
#define IS_DF_PWR 0x1000
#define IS_UNKNOWN 0x0400
#define IS_VG_PWR 0x0800
#define IS_DF_PWR 0x1000
+#define IS_REGISTERED 0x2000
#define IS_ALIVE 0x8000
typedef struct pcic_t {
#define IS_ALIVE 0x8000
typedef struct pcic_t {
@@
-233,14
+234,14
@@
static pcic_t pcic[] = {
/*====================================================================*/
/*====================================================================*/
-static
spinlock_t bus_lock = SPIN_LOCK_UNLOCKED
;
+static
DEFINE_SPINLOCK(bus_lock)
;
static u_char i365_get(u_short sock, u_short reg)
{
unsigned long flags;
spin_lock_irqsave(&bus_lock,flags);
{
static u_char i365_get(u_short sock, u_short reg)
{
unsigned long flags;
spin_lock_irqsave(&bus_lock,flags);
{
-
io
addr_t port = socket[sock].ioaddr;
+
kio_
addr_t port = socket[sock].ioaddr;
u_char val;
reg = I365_REG(socket[sock].psock, reg);
outb(reg, port); val = inb(port+1);
u_char val;
reg = I365_REG(socket[sock].psock, reg);
outb(reg, port); val = inb(port+1);
@@
-254,7
+255,7
@@
static void i365_set(u_short sock, u_short reg, u_char data)
unsigned long flags;
spin_lock_irqsave(&bus_lock,flags);
{
unsigned long flags;
spin_lock_irqsave(&bus_lock,flags);
{
-
io
addr_t port = socket[sock].ioaddr;
+
kio_
addr_t port = socket[sock].ioaddr;
u_char val = I365_REG(socket[sock].psock, reg);
outb(val, port); outb(data, port+1);
spin_unlock_irqrestore(&bus_lock,flags);
u_char val = I365_REG(socket[sock].psock, reg);
outb(val, port); outb(data, port+1);
spin_unlock_irqrestore(&bus_lock,flags);
@@
-589,7
+590,7
@@
static int to_cycles(int ns)
/*====================================================================*/
/*====================================================================*/
-static int __init identify(
u_shor
t port, u_short sock)
+static int __init identify(
kio_addr_
t port, u_short sock)
{
u_char val;
int type = -1;
{
u_char val;
int type = -1;
@@
-660,7
+661,7
@@
static int __init identify(u_short port, u_short sock)
static int __init is_alive(u_short sock)
{
u_char stat;
static int __init is_alive(u_short sock)
{
u_char stat;
-
u_shor
t start, stop;
+
kio_addr_
t start, stop;
stat = i365_get(sock, I365_STATUS);
start = i365_get_pair(sock, I365_IO(0)+I365_W_START);
stat = i365_get(sock, I365_STATUS);
start = i365_get_pair(sock, I365_IO(0)+I365_W_START);
@@
-677,7
+678,7
@@
static int __init is_alive(u_short sock)
/*====================================================================*/
/*====================================================================*/
-static void __init add_socket(
u_shor
t port, int psock, int type)
+static void __init add_socket(
kio_addr_
t port, int psock, int type)
{
socket[sockets].ioaddr = port;
socket[sockets].psock = psock;
{
socket[sockets].ioaddr = port;
socket[sockets].psock = psock;
@@
-699,7
+700,7
@@
static void __init add_pcic(int ns, int type)
if (base == 0) printk("\n");
printk(KERN_INFO " %s", pcic[type].name);
if (base == 0) printk("\n");
printk(KERN_INFO " %s", pcic[type].name);
- printk(" ISA-to-PCMCIA at port %#x ofs 0x%02x",
+ printk(" ISA-to-PCMCIA at port %#
l
x ofs 0x%02x",
t->ioaddr, t->psock*0x40);
printk(", %d socket%s\n", ns, ((ns > 1) ? "s" : ""));
t->ioaddr, t->psock*0x40);
printk(", %d socket%s\n", ns, ((ns > 1) ? "s" : ""));
@@
-773,7
+774,7
@@
static struct pnp_dev *i82365_pnpdev;
static void __init isa_probe(void)
{
int i, j, sock, k, ns, id;
static void __init isa_probe(void)
{
int i, j, sock, k, ns, id;
-
io
addr_t port;
+
kio_
addr_t port;
#ifdef CONFIG_PNP
struct isapnp_device_id *devid;
struct pnp_dev *dev;
#ifdef CONFIG_PNP
struct isapnp_device_id *devid;
struct pnp_dev *dev;
@@
-804,7
+805,7
@@
static void __init isa_probe(void)
if (check_region(i365_base, 2) != 0) {
if (sockets == 0)
if (check_region(i365_base, 2) != 0) {
if (sockets == 0)
- printk("port conflict at %#x\n", i365_base);
+ printk("port conflict at %#
l
x\n", i365_base);
return;
}
return;
}
@@
-1127,7
+1128,7
@@
static int i365_set_io_map(u_short sock, struct pccard_io_map *io)
u_char map, ioctl;
debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
u_char map, ioctl;
debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
- "%#
4.4x-%#4.4
x)\n", sock, io->map, io->flags,
+ "%#
lx-%#l
x)\n", sock, io->map, io->flags,
io->speed, io->start, io->stop);
map = io->map;
if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||
io->speed, io->start, io->stop);
map = io->map;
if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||
@@
-1156,8
+1157,8
@@
static int i365_set_mem_map(u_short sock, struct pccard_mem_map *mem)
u_short base, i;
u_char map;
u_short base, i;
u_char map;
- debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, %#
5.5lx-%#5.5
"
- "
lx, %#5.5
x)\n", sock, mem->map, mem->flags, mem->speed,
+ debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, %#
lx-%#lx,
"
+ "
%#
x)\n", sock, mem->map, mem->flags, mem->speed,
mem->res->start, mem->res->end, mem->card_start);
map = mem->map;
mem->res->start, mem->res->end, mem->card_start);
map = mem->map;
@@
-1400,14
+1401,13
@@
static int __init init_i82365(void)
for (i = 0; i < sockets; i++) {
socket[i].socket.dev.dev = &i82365_device.dev;
socket[i].socket.ops = &pcic_operations;
for (i = 0; i < sockets; i++) {
socket[i].socket.dev.dev = &i82365_device.dev;
socket[i].socket.ops = &pcic_operations;
+ socket[i].socket.resource_ops = &pccard_nonstatic_ops;
socket[i].socket.owner = THIS_MODULE;
socket[i].number = i;
socket[i].socket.owner = THIS_MODULE;
socket[i].number = i;
- ret = pcmcia_register_socket(&socket[i].socket);
- if (ret && i--) {
- for (; i>= 0; i--)
- pcmcia_unregister_socket(&socket[i].socket);
- break;
- }
+ ret = pcmcia_register_socket(&socket[i].socket);
+ if (!ret)
+ socket[i].flags |= IS_REGISTERED;
+
#if 0 /* driver model ordering issue */
class_device_create_file(&socket[i].socket.dev,
&class_device_attr_info);
#if 0 /* driver model ordering issue */
class_device_create_file(&socket[i].socket.dev,
&class_device_attr_info);
@@
-1434,7
+1434,8
@@
static void __exit exit_i82365(void)
int i;
for (i = 0; i < sockets; i++) {
int i;
for (i = 0; i < sockets; i++) {
- pcmcia_unregister_socket(&socket[i].socket);
+ if (socket[i].flags & IS_REGISTERED)
+ pcmcia_unregister_socket(&socket[i].socket);
}
platform_device_unregister(&i82365_device);
if (poll_interval != 0)
}
platform_device_unregister(&i82365_device);
if (poll_interval != 0)
@@
-1446,7
+1447,7
@@
static void __exit exit_i82365(void)
i365_set(i, I365_CSCINT, 0);
release_region(socket[i].ioaddr, 2);
}
i365_set(i, I365_CSCINT, 0);
release_region(socket[i].ioaddr, 2);
}
-#ifdef
__ISAPNP__
+#ifdef
CONFIG_PNP
if (i82365_pnpdev)
pnp_disable_dev(i82365_pnpdev);
#endif
if (i82365_pnpdev)
pnp_disable_dev(i82365_pnpdev);
#endif