Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2e2cede4
Commit
2e2cede4
authored
Jul 14, 2003
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge Linus' tree into PCMCIA tree.
parents
3139853c
4e9470d6
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
67 additions
and
92 deletions
+67
-92
drivers/pcmcia/bulkmem.c
drivers/pcmcia/bulkmem.c
+3
-3
drivers/pcmcia/cistpl.c
drivers/pcmcia/cistpl.c
+2
-2
drivers/pcmcia/cs.c
drivers/pcmcia/cs.c
+33
-65
drivers/pcmcia/cs_internal.h
drivers/pcmcia/cs_internal.h
+1
-1
drivers/pcmcia/i82092.c
drivers/pcmcia/i82092.c
+1
-1
drivers/pcmcia/i82365.c
drivers/pcmcia/i82365.c
+1
-1
drivers/pcmcia/ricoh.h
drivers/pcmcia/ricoh.h
+1
-1
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/rsrc_mgr.c
+2
-2
drivers/pcmcia/sa11xx_core.c
drivers/pcmcia/sa11xx_core.c
+1
-1
drivers/pcmcia/tcic.c
drivers/pcmcia/tcic.c
+1
-1
drivers/pcmcia/ti113x.h
drivers/pcmcia/ti113x.h
+17
-12
drivers/pcmcia/yenta_socket.c
drivers/pcmcia/yenta_socket.c
+1
-1
include/pcmcia/ss.h
include/pcmcia/ss.h
+3
-1
No files found.
drivers/pcmcia/bulkmem.c
View file @
2e2cede4
...
...
@@ -258,7 +258,7 @@ static int mtd_modify_window(window_handle_t win, mtd_mod_win_t *req)
win
->
ctl
.
flags
|=
MAP_ATTRIB
;
win
->
ctl
.
speed
=
req
->
AccessSpeed
;
win
->
ctl
.
card_start
=
req
->
CardOffset
;
win
->
sock
->
ss_entry
->
set_mem_map
(
win
->
sock
,
&
win
->
ctl
);
win
->
sock
->
ops
->
set_mem_map
(
win
->
sock
,
&
win
->
ctl
);
return
CS_SUCCESS
;
}
...
...
@@ -271,7 +271,7 @@ static int mtd_set_vpp(client_handle_t handle, mtd_vpp_req_t *req)
return
CS_BAD_VPP
;
s
=
SOCKET
(
handle
);
s
->
socket
.
Vpp
=
req
->
Vpp1
;
if
(
s
->
ss_entry
->
set_socket
(
s
,
&
s
->
socket
))
if
(
s
->
ops
->
set_socket
(
s
,
&
s
->
socket
))
return
CS_BAD_VPP
;
return
CS_SUCCESS
;
}
...
...
@@ -286,7 +286,7 @@ static int mtd_rdy_mask(client_handle_t handle, mtd_rdy_req_t *req)
s
->
socket
.
csc_mask
|=
SS_READY
;
else
s
->
socket
.
csc_mask
&=
~
SS_READY
;
if
(
s
->
ss_entry
->
set_socket
(
s
,
&
s
->
socket
))
if
(
s
->
ops
->
set_socket
(
s
,
&
s
->
socket
))
return
CS_GENERAL_FAILURE
;
return
CS_SUCCESS
;
}
...
...
drivers/pcmcia/cistpl.c
View file @
2e2cede4
...
...
@@ -86,7 +86,7 @@ void release_cis_mem(struct pcmcia_socket *s)
{
if
(
s
->
cis_mem
.
sys_start
!=
0
)
{
s
->
cis_mem
.
flags
&=
~
MAP_ACTIVE
;
s
->
ss_entry
->
set_mem_map
(
s
,
&
s
->
cis_mem
);
s
->
ops
->
set_mem_map
(
s
,
&
s
->
cis_mem
);
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
))
release_mem_region
(
s
->
cis_mem
.
sys_start
,
s
->
map_size
);
iounmap
(
s
->
cis_virt
);
...
...
@@ -118,7 +118,7 @@ set_cis_map(struct pcmcia_socket *s, unsigned int card_offset, unsigned int flag
}
mem
->
card_start
=
card_offset
;
mem
->
flags
=
flags
;
s
->
ss_entry
->
set_mem_map
(
s
,
mem
);
s
->
ops
->
set_mem_map
(
s
,
mem
);
if
(
s
->
features
&
SS_CAP_STATIC_MAP
)
{
if
(
s
->
cis_virt
)
iounmap
(
s
->
cis_virt
);
...
...
drivers/pcmcia/cs.c
View file @
2e2cede4
...
...
@@ -225,43 +225,6 @@ static const lookup_t service_table[] = {
};
#define SERVICE_COUNT (sizeof(service_table)/sizeof(lookup_t))
/*======================================================================
These functions are just shorthand for the actual low-level drivers
======================================================================*/
static
int
get_socket_status
(
struct
pcmcia_socket
*
s
,
int
*
val
)
{
return
s
->
ss_entry
->
get_status
(
s
,
val
);
}
static
int
set_socket
(
struct
pcmcia_socket
*
s
,
socket_state_t
*
state
)
{
return
s
->
ss_entry
->
set_socket
(
s
,
state
);
}
static
int
set_io_map
(
struct
pcmcia_socket
*
s
,
struct
pccard_io_map
*
io
)
{
return
s
->
ss_entry
->
set_io_map
(
s
,
io
);
}
static
int
set_mem_map
(
struct
pcmcia_socket
*
s
,
struct
pccard_mem_map
*
mem
)
{
return
s
->
ss_entry
->
set_mem_map
(
s
,
mem
);
}
static
int
suspend_socket
(
struct
pcmcia_socket
*
s
)
{
s
->
socket
=
dead_socket
;
return
s
->
ss_entry
->
suspend
(
s
);
}
static
int
init_socket
(
struct
pcmcia_socket
*
s
)
{
s
->
socket
=
dead_socket
;
return
s
->
ss_entry
->
init
(
s
);
}
/*====================================================================
...
...
@@ -338,12 +301,14 @@ static int pcmcia_add_socket(struct class_device *class_dev)
socket
->
erase_busy
.
next
=
socket
->
erase_busy
.
prev
=
&
socket
->
erase_busy
;
INIT_LIST_HEAD
(
&
socket
->
cis_cache
);
spin_lock_init
(
&
socket
->
lock
);
init_completion
(
&
socket
->
thread_done
);
init_waitqueue_head
(
&
socket
->
thread_wait
);
init_MUTEX
(
&
socket
->
skt_sem
);
spin_lock_init
(
&
socket
->
thread_lock
);
init_socket
(
socket
);
socket
->
socket
=
dead_socket
;
socket
->
ops
->
init
(
socket
);
ret
=
kernel_thread
(
pccardd
,
socket
,
CLONE_KERNEL
);
if
(
ret
<
0
)
...
...
@@ -373,7 +338,7 @@ static void pcmcia_remove_socket(struct class_device *class_dev)
socket
->
clients
=
socket
->
clients
->
next
;
kfree
(
client
);
}
socket
->
ss_entry
=
NULL
;
socket
->
ops
=
NULL
;
}
static
void
pcmcia_release_socket
(
struct
class_device
*
class_dev
)
...
...
@@ -388,10 +353,10 @@ static void pcmcia_release_socket(struct class_device *class_dev)
*/
int
pcmcia_register_socket
(
struct
pcmcia_socket
*
socket
)
{
if
(
!
socket
||
!
socket
->
ss_entry
||
!
socket
->
dev
.
dev
)
if
(
!
socket
||
!
socket
->
ops
||
!
socket
->
dev
.
dev
)
return
-
EINVAL
;
DEBUG
(
0
,
"cs: pcmcia_register_socket(0x%p)
\n
"
,
socket
->
ss_entry
);
DEBUG
(
0
,
"cs: pcmcia_register_socket(0x%p)
\n
"
,
socket
->
ops
);
/* try to obtain a socket number [yes, it gets ugly if we
* register more than 2^sizeof(unsigned int) pcmcia
...
...
@@ -443,7 +408,7 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket)
if
(
!
socket
)
return
;
DEBUG
(
0
,
"cs: pcmcia_unregister_socket(0x%p)
\n
"
,
socket
->
ss_entry
);
DEBUG
(
0
,
"cs: pcmcia_unregister_socket(0x%p)
\n
"
,
socket
->
ops
);
init_completion
(
&
socket
->
socket_released
);
...
...
@@ -510,7 +475,8 @@ static void shutdown_socket(struct pcmcia_socket *s)
/* Blank out the socket state */
s
->
state
&=
SOCKET_PRESENT
|
SOCKET_SETUP_PENDING
;
init_socket
(
s
);
s
->
socket
=
dead_socket
;
s
->
ops
->
init
(
s
);
s
->
irq
.
AssignedIRQ
=
s
->
irq
.
Config
=
0
;
s
->
lock_count
=
0
;
destroy_cis_cache
(
s
);
...
...
@@ -525,7 +491,7 @@ static void shutdown_socket(struct pcmcia_socket *s)
s
->
socket
.
Vpp
=
0
;
s
->
socket
.
Vcc
=
0
;
s
->
socket
.
io_irq
=
0
;
set_socket
(
s
,
&
s
->
socket
);
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
);
/* */
#ifdef CONFIG_CARDBUS
cb_free
(
s
);
...
...
@@ -619,16 +585,16 @@ static int socket_reset(struct pcmcia_socket *skt)
int
status
,
i
;
skt
->
socket
.
flags
|=
SS_OUTPUT_ENA
|
SS_RESET
;
set_socket
(
skt
,
&
skt
->
socket
);
s
kt
->
ops
->
s
et_socket
(
skt
,
&
skt
->
socket
);
udelay
((
long
)
reset_time
);
skt
->
socket
.
flags
&=
~
SS_RESET
;
set_socket
(
skt
,
&
skt
->
socket
);
s
kt
->
ops
->
s
et_socket
(
skt
,
&
skt
->
socket
);
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
cs_to_timeout
(
unreset_delay
));
for
(
i
=
0
;
i
<
unreset_limit
;
i
++
)
{
get_sock
et_status
(
skt
,
&
status
);
skt
->
ops
->
g
et_status
(
skt
,
&
status
);
if
(
!
(
status
&
SS_DETECT
))
return
CS_NO_CARD
;
...
...
@@ -648,7 +614,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
{
int
status
,
i
;
get_sock
et_status
(
skt
,
&
status
);
skt
->
ops
->
g
et_status
(
skt
,
&
status
);
if
(
!
(
status
&
SS_DETECT
))
return
CS_NO_CARD
;
...
...
@@ -656,7 +622,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
schedule_timeout
(
cs_to_timeout
(
initial_delay
));
for
(
i
=
0
;
i
<
100
;
i
++
)
{
get_sock
et_status
(
skt
,
&
status
);
skt
->
ops
->
g
et_status
(
skt
,
&
status
);
if
(
!
(
status
&
SS_DETECT
))
return
CS_NO_CARD
;
...
...
@@ -693,7 +659,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
}
skt
->
state
|=
SOCKET_PRESENT
;
skt
->
socket
.
flags
=
SS_DEBOUNCED
;
set_socket
(
skt
,
&
skt
->
socket
);
s
kt
->
ops
->
s
et_socket
(
skt
,
&
skt
->
socket
);
/*
* Wait "vcc_settle" for the supply to stabilise.
...
...
@@ -739,7 +705,8 @@ static int socket_suspend(struct pcmcia_socket *skt)
return
CS_IN_USE
;
send_event
(
skt
,
CS_EVENT_PM_SUSPEND
,
CS_EVENT_PRI_LOW
);
suspend_socket
(
skt
);
skt
->
socket
=
dead_socket
;
skt
->
ops
->
suspend
(
skt
);
skt
->
state
|=
SOCKET_SUSPEND
;
return
CS_SUCCESS
;
...
...
@@ -757,7 +724,8 @@ static int socket_resume(struct pcmcia_socket *skt)
if
(
!
(
skt
->
state
&
SOCKET_SUSPEND
))
return
CS_IN_USE
;
init_socket
(
skt
);
skt
->
socket
=
dead_socket
;
skt
->
ops
->
init
(
skt
);
ret
=
socket_setup
(
skt
,
resume_delay
);
if
(
ret
==
CS_SUCCESS
)
{
...
...
@@ -811,7 +779,7 @@ static void socket_detect_change(struct pcmcia_socket *skt)
schedule_timeout
(
cs_to_timeout
(
2
));
}
get_sock
et_status
(
skt
,
&
status
);
skt
->
ops
->
g
et_status
(
skt
,
&
status
);
if
((
skt
->
state
&
SOCKET_PRESENT
)
&&
!
(
status
&
SS_DETECT
))
socket_remove
(
skt
);
...
...
@@ -1368,7 +1336,7 @@ int pcmcia_get_status(client_handle_t handle, cs_status_t *status)
if
(
CHECK_HANDLE
(
handle
))
return
CS_BAD_HANDLE
;
s
=
SOCKET
(
handle
);
get_sock
et_status
(
s
,
&
val
);
s
->
ops
->
g
et_status
(
s
,
&
val
);
status
->
CardState
=
status
->
SocketState
=
0
;
status
->
CardState
|=
(
val
&
SS_DETECT
)
?
CS_EVENT_CARD_DETECT
:
0
;
status
->
CardState
|=
(
val
&
SS_CARDBUS
)
?
CS_EVENT_CB_DETECT
:
0
;
...
...
@@ -1447,7 +1415,7 @@ int pcmcia_map_mem_page(window_handle_t win, memreq_t *req)
return
CS_BAD_PAGE
;
s
=
win
->
sock
;
win
->
ctl
.
card_start
=
req
->
CardOffset
;
if
(
set_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
if
(
s
->
ops
->
s
et_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
return
CS_BAD_OFFSET
;
return
CS_SUCCESS
;
}
/* map_mem_page */
...
...
@@ -1480,7 +1448,7 @@ int pcmcia_modify_configuration(client_handle_t handle,
c
->
Attributes
&=
~
CONF_ENABLE_IRQ
;
s
->
socket
.
io_irq
=
0
;
}
set_socket
(
s
,
&
s
->
socket
);
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
);
}
if
(
mod
->
Attributes
&
CONF_VCC_CHANGE_VALID
)
...
...
@@ -1492,7 +1460,7 @@ int pcmcia_modify_configuration(client_handle_t handle,
if
(
mod
->
Vpp1
!=
mod
->
Vpp2
)
return
CS_BAD_VPP
;
c
->
Vpp1
=
c
->
Vpp2
=
s
->
socket
.
Vpp
=
mod
->
Vpp1
;
if
(
set_socket
(
s
,
&
s
->
socket
))
if
(
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
))
return
CS_BAD_VPP
;
}
else
if
((
mod
->
Attributes
&
CONF_VPP1_CHANGE_VALID
)
||
(
mod
->
Attributes
&
CONF_VPP2_CHANGE_VALID
))
...
...
@@ -1522,7 +1490,7 @@ int pcmcia_modify_window(window_handle_t win, modwin_t *req)
if
(
req
->
Attributes
&
WIN_USE_WAIT
)
win
->
ctl
.
flags
|=
MAP_USE_WAIT
;
win
->
ctl
.
speed
=
req
->
AccessSpeed
;
set_mem_map
(
win
->
sock
,
&
win
->
ctl
);
win
->
sock
->
ops
->
set_mem_map
(
win
->
sock
,
&
win
->
ctl
);
return
CS_SUCCESS
;
}
/* modify_window */
...
...
@@ -1622,7 +1590,7 @@ int pcmcia_release_configuration(client_handle_t handle)
s
->
socket
.
flags
=
SS_OUTPUT_ENA
;
/* Is this correct? */
s
->
socket
.
Vpp
=
0
;
s
->
socket
.
io_irq
=
0
;
set_socket
(
s
,
&
s
->
socket
);
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
);
}
if
(
c
->
state
&
CONFIG_IO_REQ
)
for
(
i
=
0
;
i
<
MAX_IO_WIN
;
i
++
)
{
...
...
@@ -1632,7 +1600,7 @@ int pcmcia_release_configuration(client_handle_t handle)
if
(
s
->
io
[
i
].
Config
!=
0
)
continue
;
io
.
map
=
i
;
set_io_map
(
s
,
&
io
);
s
->
ops
->
s
et_io_map
(
s
,
&
io
);
}
c
->
state
&=
~
CONFIG_LOCKED
;
}
...
...
@@ -1733,7 +1701,7 @@ int pcmcia_release_window(window_handle_t win)
/* Shut down memory window */
win
->
ctl
.
flags
&=
~
MAP_ACTIVE
;
set_mem_map
(
s
,
&
win
->
ctl
);
s
->
ops
->
s
et_mem_map
(
s
,
&
win
->
ctl
);
s
->
state
&=
~
SOCKET_WIN_REQ
(
win
->
index
);
/* Release system memory */
...
...
@@ -1780,7 +1748,7 @@ int pcmcia_request_configuration(client_handle_t handle,
if
(
req
->
Vpp1
!=
req
->
Vpp2
)
return
CS_BAD_VPP
;
s
->
socket
.
Vpp
=
req
->
Vpp1
;
if
(
set_socket
(
s
,
&
s
->
socket
))
if
(
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
))
return
CS_BAD_VPP
;
c
->
Vcc
=
req
->
Vcc
;
c
->
Vpp1
=
c
->
Vpp2
=
req
->
Vpp1
;
...
...
@@ -1798,7 +1766,7 @@ int pcmcia_request_configuration(client_handle_t handle,
s
->
socket
.
io_irq
=
s
->
irq
.
AssignedIRQ
;
else
s
->
socket
.
io_irq
=
0
;
set_socket
(
s
,
&
s
->
socket
);
s
->
ops
->
s
et_socket
(
s
,
&
s
->
socket
);
s
->
lock_count
++
;
/* Set up CIS configuration registers */
...
...
@@ -1863,7 +1831,7 @@ int pcmcia_request_configuration(client_handle_t handle,
}
iomap
.
start
=
s
->
io
[
i
].
BasePort
;
iomap
.
stop
=
iomap
.
start
+
s
->
io
[
i
].
NumPorts
-
1
;
set_io_map
(
s
,
&
iomap
);
s
->
ops
->
s
et_io_map
(
s
,
&
iomap
);
s
->
io
[
i
].
Config
++
;
}
}
...
...
@@ -2084,7 +2052,7 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
win
->
ctl
.
sys_start
=
win
->
base
;
win
->
ctl
.
sys_stop
=
win
->
base
+
win
->
size
-
1
;
win
->
ctl
.
card_start
=
0
;
if
(
set_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
if
(
s
->
ops
->
s
et_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
return
CS_BAD_ARGS
;
s
->
state
|=
SOCKET_WIN_REQ
(
w
);
...
...
drivers/pcmcia/cs_internal.h
View file @
2e2cede4
...
...
@@ -113,7 +113,7 @@ struct cis_cache_entry {
(((h) == NULL) || ((h)->client_magic != CLIENT_MAGIC))
#define CHECK_SOCKET(s) \
(((s) >= sockets) || (socket_table[s]->
ss_entry
== NULL))
(((s) >= sockets) || (socket_table[s]->
ops
== NULL))
#define SOCKET(h) (h->Socket)
#define CONFIG(h) (&SOCKET(h)->config[(h)->Function])
...
...
drivers/pcmcia/i82092.c
View file @
2e2cede4
...
...
@@ -161,7 +161,7 @@ static int __init i82092aa_pci_probe(struct pci_dev *dev, const struct pci_devic
for
(
i
=
0
;
i
<
socket_count
;
i
++
)
{
sockets
[
i
].
socket
.
dev
.
dev
=
&
dev
->
dev
;
sockets
[
i
].
socket
.
ss_entry
=
&
i82092aa_operations
;
sockets
[
i
].
socket
.
ops
=
&
i82092aa_operations
;
ret
=
pcmcia_register_socket
(
&
sockets
[
i
].
socket
);
if
(
ret
)
{
goto
err_out_free_sockets
;
...
...
drivers/pcmcia/i82365.c
View file @
2e2cede4
...
...
@@ -1403,7 +1403,7 @@ static int __init init_i82365(void)
/* register sockets with the pcmcia core */
for
(
i
=
0
;
i
<
sockets
;
i
++
)
{
socket
[
i
].
socket
.
dev
.
dev
=
&
i82365_device
.
dev
;
socket
[
i
].
socket
.
ss_entry
=
&
pcic_operations
;
socket
[
i
].
socket
.
ops
=
&
pcic_operations
;
socket
[
i
].
socket
.
owner
=
THIS_MODULE
;
socket
[
i
].
number
=
i
;
ret
=
pcmcia_register_socket
(
&
socket
[
i
].
socket
);
...
...
drivers/pcmcia/ricoh.h
View file @
2e2cede4
...
...
@@ -161,7 +161,7 @@ static int ricoh_override(struct yenta_socket *socket)
rl_config
(
socket
)
|=
RL5C4XX_CONFIG_PREFETCH
;
}
socket
->
socket
.
ss_entry
->
init
=
ricoh_init
;
socket
->
socket
.
ops
->
init
=
ricoh_init
;
return
0
;
}
...
...
drivers/pcmcia/rsrc_mgr.c
View file @
2e2cede4
...
...
@@ -360,7 +360,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
map
.
sys_start
=
res
->
start
;
map
.
sys_stop
=
res
->
end
;
map
.
card_start
=
0
;
s
->
ss_entry
->
set_mem_map
(
s
,
&
map
);
s
->
ops
->
set_mem_map
(
s
,
&
map
);
/* Don't bother checking every word... */
for
(
i
=
0
;
i
<
s
->
map_size
;
i
+=
44
)
{
...
...
@@ -370,7 +370,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
}
map
.
flags
=
0
;
s
->
ss_entry
->
set_mem_map
(
s
,
&
map
);
s
->
ops
->
set_mem_map
(
s
,
&
map
);
iounmap
(
virt
);
}
...
...
drivers/pcmcia/sa11xx_core.c
View file @
2e2cede4
...
...
@@ -725,7 +725,7 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, in
struct
sa1100_pcmcia_socket
*
skt
=
PCMCIA_SOCKET
(
i
);
memset
(
skt
,
0
,
sizeof
(
*
skt
));
skt
->
socket
.
ss_entry
=
&
sa11xx_pcmcia_operations
;
skt
->
socket
.
ops
=
&
sa11xx_pcmcia_operations
;
skt
->
socket
.
owner
=
ops
->
owner
;
skt
->
socket
.
dev
.
dev
=
dev
;
...
...
drivers/pcmcia/tcic.c
View file @
2e2cede4
...
...
@@ -519,7 +519,7 @@ static int __init init_tcic(void)
platform_device_register
(
&
tcic_device
);
for
(
i
=
0
;
i
<
sockets
;
i
++
)
{
socket_table
[
i
].
socket
.
ss_entry
=
&
tcic_operations
;
socket_table
[
i
].
socket
.
ops
=
&
tcic_operations
;
socket_table
[
i
].
socket
.
dev
.
dev
=
&
tcic_device
.
dev
;
ret
=
pcmcia_register_socket
(
&
socket_table
[
i
].
socket
);
if
(
ret
&&
i
)
...
...
drivers/pcmcia/ti113x.h
View file @
2e2cede4
...
...
@@ -182,25 +182,30 @@ static int ti_override(struct yenta_socket *socket)
/*
* If ISA interrupts don't work, then fall back to routing card
* interrupts to the PCI interrupt of the socket.
*
* Tweaking this when we are using serial PCI IRQs causes hangs
* --rmk
*/
if (!socket->socket.irq_mask) {
int irqmux, devctl;
printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
u8 irqmux, devctl;
devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
devctl &= ~TI113X_DCR_IMODE_MASK;
if (devctl & TI113X_DCR_IMODE_MASK != TI12XX_DCR_IMODE_ALL_SERIAL) {
printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
devctl &= ~TI113X_DCR_IMODE_MASK;
irqmux = config_readl(socket, TI122X_IRQMUX);
irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */
irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */
irqmux = config_readl(socket, TI122X_IRQMUX);
irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */
irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */
config_writel(socket, TI122X_IRQMUX, irqmux);
config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
config_writel(socket, TI122X_IRQMUX, irqmux);
config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
}
}
#endif
socket
->
socket
.
ss_entry
->
init
=
ti_init
;
socket
->
socket
.
ops
->
init
=
ti_init
;
return
0
;
}
...
...
@@ -233,7 +238,7 @@ static int ti113x_override(struct yenta_socket *socket)
if
(
socket
->
cb_irq
)
ti_cardctl
(
socket
)
|=
TI113X_CCR_PCI_IRQ_ENA
|
TI113X_CCR_PCI_CSC
|
TI113X_CCR_PCI_IREQ
;
ti_override
(
socket
);
socket
->
socket
.
ss_entry
->
init
=
ti113x_init
;
socket
->
socket
.
ops
->
init
=
ti113x_init
;
return
0
;
}
...
...
@@ -262,7 +267,7 @@ static int ti1250_override(struct yenta_socket *socket)
if
(
socket
->
cb_irq
)
ti_diag
(
socket
)
|=
TI1250_DIAG_PCI_CSC
|
TI1250_DIAG_PCI_IREQ
;
ti113x_override
(
socket
);
socket
->
socket
.
ss_entry
->
init
=
ti1250_init
;
socket
->
socket
.
ops
->
init
=
ti1250_init
;
return
0
;
}
...
...
drivers/pcmcia/yenta_socket.c
View file @
2e2cede4
...
...
@@ -828,7 +828,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
memset
(
socket
,
0
,
sizeof
(
*
socket
));
/* prepare pcmcia_socket */
socket
->
socket
.
ss_entry
=
&
yenta_socket_operations
;
socket
->
socket
.
ops
=
&
yenta_socket_operations
;
socket
->
socket
.
dev
.
dev
=
&
dev
->
dev
;
socket
->
socket
.
driver_data
=
socket
;
socket
->
socket
.
owner
=
THIS_MODULE
;
...
...
include/pcmcia/ss.h
View file @
2e2cede4
...
...
@@ -170,7 +170,6 @@ struct region_t;
struct
pcmcia_socket
{
struct
module
*
owner
;
spinlock_t
lock
;
struct
pccard_operations
*
ss_entry
;
socket_state_t
socket
;
u_int
state
;
u_short
functions
;
...
...
@@ -207,6 +206,9 @@ struct pcmcia_socket {
u_char
pci_irq
;
struct
pci_dev
*
cb_dev
;
/* socket operations */
struct
pccard_operations
*
ops
;
/* state thread */
struct
semaphore
skt_sem
;
/* protects socket h/w state */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment