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
aa7976d7
Commit
aa7976d7
authored
Jan 06, 2005
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/garz/repo/netdev-2.6/viro-old-eth
into pobox.com:/garz/repo/net-drivers-2.6
parents
18f955ce
2df5812d
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
256 additions
and
265 deletions
+256
-265
drivers/net/3c507.c
drivers/net/3c507.c
+81
-69
drivers/net/8390.h
drivers/net/8390.h
+1
-0
drivers/net/ac3200.c
drivers/net/ac3200.c
+25
-35
drivers/net/depca.c
drivers/net/depca.c
+12
-12
drivers/net/e2100.c
drivers/net/e2100.c
+13
-5
drivers/net/lne390.c
drivers/net/lne390.c
+25
-35
drivers/net/ne3210.c
drivers/net/ne3210.c
+17
-17
drivers/net/pcmcia/fmvj18x_cs.c
drivers/net/pcmcia/fmvj18x_cs.c
+2
-2
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/pcnet_cs.c
+21
-18
drivers/net/pcmcia/smc91c92_cs.c
drivers/net/pcmcia/smc91c92_cs.c
+1
-1
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
+1
-1
drivers/net/tokenring/3c359.c
drivers/net/tokenring/3c359.c
+18
-18
drivers/net/tokenring/3c359.h
drivers/net/tokenring/3c359.h
+1
-1
include/pcmcia/mem_op.h
include/pcmcia/mem_op.h
+38
-51
No files found.
drivers/net/3c507.c
View file @
aa7976d7
This diff is collapsed.
Click to expand it.
drivers/net/8390.h
View file @
aa7976d7
...
...
@@ -52,6 +52,7 @@ struct ei_device {
void
(
*
block_input
)(
struct
net_device
*
,
int
,
struct
sk_buff
*
,
int
);
unsigned
long
rmem_start
;
unsigned
long
rmem_end
;
void
__iomem
*
mem
;
unsigned
char
mcfilter
[
8
];
unsigned
open
:
1
;
unsigned
word16
:
1
;
/* We have the 16-bit (vs 8-bit) version of the card. */
...
...
drivers/net/ac3200.c
View file @
aa7976d7
...
...
@@ -128,8 +128,7 @@ static void cleanup_card(struct net_device *dev)
/* Someday free_irq may be in ac_close_card() */
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
AC_IO_EXTENT
);
if
(
ei_status
.
reg0
)
iounmap
((
void
*
)
dev
->
mem_start
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
...
...
@@ -237,32 +236,22 @@ static int __init ac_probe1(int ioaddr, struct net_device *dev)
/*
* BEWARE!! Some dain-bramaged EISA SCUs will allow you to put
* the card mem within the region covered by `normal' RAM !!!
*
* ioremap() will fail in that case.
*/
if
(
dev
->
mem_start
>
1024
*
1024
)
{
/* phys addr > 1MB */
if
(
dev
->
mem_start
<
virt_to_phys
(
high_memory
))
{
printk
(
KERN_CRIT
"ac3200.c: Card RAM overlaps with normal memory!!!
\n
"
);
printk
(
KERN_CRIT
"ac3200.c: Use EISA SCU to set card memory below 1MB,
\n
"
);
printk
(
KERN_CRIT
"ac3200.c: or to an address above 0x%lx.
\n
"
,
virt_to_phys
(
high_memory
));
printk
(
KERN_CRIT
"ac3200.c: Driver NOT installed.
\n
"
);
retval
=
-
EINVAL
;
goto
out1
;
}
dev
->
mem_start
=
(
unsigned
long
)
ioremap
(
dev
->
mem_start
,
AC_STOP_PG
*
0x100
);
if
(
dev
->
mem_start
==
0
)
{
printk
(
KERN_ERR
"ac3200.c: Unable to remap card memory above 1MB !!
\n
"
);
printk
(
KERN_ERR
"ac3200.c: Try using EISA SCU to set memory below 1MB.
\n
"
);
printk
(
KERN_ERR
"ac3200.c: Driver NOT installed.
\n
"
);
retval
=
-
EINVAL
;
goto
out1
;
}
ei_status
.
reg0
=
1
;
/* Use as remap flag */
printk
(
"ac3200.c: remapped %dkB card memory to virtual address %#lx
\n
"
,
AC_STOP_PG
/
4
,
dev
->
mem_start
);
ei_status
.
mem
=
ioremap
(
dev
->
mem_start
,
AC_STOP_PG
*
0x100
);
if
(
!
ei_status
.
mem
)
{
printk
(
KERN_ERR
"ac3200.c: Unable to remap card memory above 1MB !!
\n
"
);
printk
(
KERN_ERR
"ac3200.c: Try using EISA SCU to set memory below 1MB.
\n
"
);
printk
(
KERN_ERR
"ac3200.c: Driver NOT installed.
\n
"
);
retval
=
-
EINVAL
;
goto
out1
;
}
printk
(
"ac3200.c: remapped %dkB card memory to virtual address %p
\n
"
,
AC_STOP_PG
/
4
,
ei_status
.
mem
);
ei_status
.
rmem_start
=
dev
->
mem_start
+
TX_PAGES
*
256
;
dev
->
mem_end
=
ei_status
.
rmem_end
=
dev
->
mem_start
+
(
AC_STOP_PG
-
AC_START_PG
)
*
256
;
dev
->
mem_start
=
(
unsigned
long
)
ei_status
.
mem
;
dev
->
mem_end
=
dev
->
mem_start
+
(
AC_STOP_PG
-
AC_START_PG
)
*
256
;
ei_status
.
name
=
"AC3200"
;
ei_status
.
tx_start_page
=
AC_START_PG
;
...
...
@@ -324,8 +313,8 @@ static void ac_reset_8390(struct net_device *dev)
static
void
ac_get_8390_hdr
(
struct
net_device
*
dev
,
struct
e8390_pkt_hdr
*
hdr
,
int
ring_page
)
{
unsigned
long
hdr_start
=
dev
->
mem_start
+
((
ring_page
-
AC_START_PG
)
<<
8
);
isa_
memcpy_fromio
(
hdr
,
hdr_start
,
sizeof
(
struct
e8390_pkt_hdr
));
void
__iomem
*
hdr_start
=
ei_status
.
mem
+
((
ring_page
-
AC_START_PG
)
<<
8
);
memcpy_fromio
(
hdr
,
hdr_start
,
sizeof
(
struct
e8390_pkt_hdr
));
}
/* Block input and output are easy on shared memory ethercards, the only
...
...
@@ -334,26 +323,27 @@ ac_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page
static
void
ac_block_input
(
struct
net_device
*
dev
,
int
count
,
struct
sk_buff
*
skb
,
int
ring_offset
)
{
unsigned
long
xfer_start
=
dev
->
mem_start
+
ring_offset
-
(
AC_START_PG
<<
8
)
;
void
__iomem
*
start
=
ei_status
.
mem
+
ring_offset
-
AC_START_PG
*
256
;
if
(
xfer_start
+
count
>
ei_status
.
rmem_end
)
{
if
(
ring_offset
+
count
>
AC_STOP_PG
*
256
)
{
/* We must wrap the input move. */
int
semi_count
=
ei_status
.
rmem_end
-
xfer_star
t
;
isa_memcpy_fromio
(
skb
->
data
,
xfer_
start
,
semi_count
);
int
semi_count
=
AC_STOP_PG
*
256
-
ring_offse
t
;
memcpy_fromio
(
skb
->
data
,
start
,
semi_count
);
count
-=
semi_count
;
isa_memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
rmem_start
,
count
);
memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
mem
+
TX_PAGES
*
256
,
count
);
}
else
{
/* Packet is in one chunk -- we can copy + cksum. */
isa_eth_io_copy_and_sum
(
skb
,
xfer_
start
,
count
,
0
);
eth_io_copy_and_sum
(
skb
,
start
,
count
,
0
);
}
}
static
void
ac_block_output
(
struct
net_device
*
dev
,
int
count
,
const
unsigned
char
*
buf
,
int
start_page
)
{
unsigned
long
shmem
=
dev
->
mem_start
+
((
start_page
-
AC_START_PG
)
<<
8
);
void
__iomem
*
shmem
=
ei_status
.
mem
+
((
start_page
-
AC_START_PG
)
<<
8
);
isa_
memcpy_toio
(
shmem
,
buf
,
count
);
memcpy_toio
(
shmem
,
buf
,
count
);
}
static
int
ac_close_card
(
struct
net_device
*
dev
)
...
...
drivers/net/depca.c
View file @
aa7976d7
...
...
@@ -463,11 +463,11 @@ struct depca_private {
}
depca_bus
;
/* type of bus */
struct
depca_init
init_block
;
/* Shadow Initialization block */
/* CPU address space fields */
struct
depca_rx_desc
*
rx_ring
;
/* Pointer to start of RX descriptor ring */
struct
depca_tx_desc
*
tx_ring
;
/* Pointer to start of TX descriptor ring */
void
*
rx_buff
[
NUM_RX_DESC
];
/* CPU virt address of sh'd memory buffs */
void
*
tx_buff
[
NUM_TX_DESC
];
/* CPU virt address of sh'd memory buffs */
void
*
sh_mem
;
/* CPU mapped virt address of device RAM */
struct
depca_rx_desc
__iomem
*
rx_ring
;
/* Pointer to start of RX descriptor ring */
struct
depca_tx_desc
__iomem
*
tx_ring
;
/* Pointer to start of TX descriptor ring */
void
__iomem
*
rx_buff
[
NUM_RX_DESC
];
/* CPU virt address of sh'd memory buffs */
void
__iomem
*
tx_buff
[
NUM_TX_DESC
];
/* CPU virt address of sh'd memory buffs */
void
__iomem
*
sh_mem
;
/* CPU mapped virt address of device RAM */
u_long
mem_start
;
/* Bus address of device RAM (before remap) */
u_long
mem_len
;
/* device memory size */
/* Device address space fields */
...
...
@@ -693,11 +693,11 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
/* Tx & Rx descriptors (aligned to a quadword boundary) */
offset
=
(
offset
+
DEPCA_ALIGN
)
&
~
DEPCA_ALIGN
;
lp
->
rx_ring
=
(
struct
depca_rx_desc
*
)
(
lp
->
sh_mem
+
offset
);
lp
->
rx_ring
=
(
struct
depca_rx_desc
__iomem
*
)
(
lp
->
sh_mem
+
offset
);
lp
->
rx_ring_offset
=
offset
;
offset
+=
(
sizeof
(
struct
depca_rx_desc
)
*
NUM_RX_DESC
);
lp
->
tx_ring
=
(
struct
depca_tx_desc
*
)
(
lp
->
sh_mem
+
offset
);
lp
->
tx_ring
=
(
struct
depca_tx_desc
__iomem
*
)
(
lp
->
sh_mem
+
offset
);
lp
->
tx_ring_offset
=
offset
;
offset
+=
(
sizeof
(
struct
depca_tx_desc
)
*
NUM_TX_DESC
);
...
...
@@ -1649,7 +1649,7 @@ static int __devexit depca_device_remove (struct device *device)
static
int
__init
DepcaSignature
(
char
*
name
,
u_long
base_addr
)
{
u_int
i
,
j
,
k
;
void
*
ptr
;
void
__iomem
*
ptr
;
char
tmpstr
[
16
];
u_long
prom_addr
=
base_addr
+
0xc000
;
u_long
mem_addr
=
base_addr
+
0x8000
;
/* 32KB */
...
...
@@ -1876,17 +1876,17 @@ static void depca_dbg_open(struct net_device *dev)
printk
(
"Descriptor addresses (CPU):
\n
RX: "
);
for
(
i
=
0
;
i
<
lp
->
rxRingMask
;
i
++
)
{
if
(
i
<
3
)
{
printk
(
"
0x%8.8lx "
,
(
long
)
&
lp
->
rx_ring
[
i
].
base
);
printk
(
"
%p "
,
&
lp
->
rx_ring
[
i
].
base
);
}
}
printk
(
"...
0x%8.8lx
\n
"
,
(
long
)
&
lp
->
rx_ring
[
i
].
base
);
printk
(
"...
%p
\n
"
,
&
lp
->
rx_ring
[
i
].
base
);
printk
(
"TX: "
);
for
(
i
=
0
;
i
<
lp
->
txRingMask
;
i
++
)
{
if
(
i
<
3
)
{
printk
(
"
0x%8.8lx "
,
(
long
)
&
lp
->
tx_ring
[
i
].
base
);
printk
(
"
%p "
,
&
lp
->
tx_ring
[
i
].
base
);
}
}
printk
(
"...
0x%8.8lx
\n
"
,
(
long
)
&
lp
->
tx_ring
[
i
].
base
);
printk
(
"...
%p
\n
"
,
&
lp
->
tx_ring
[
i
].
base
);
printk
(
"
\n
Descriptor buffers (Device):
\n
RX: "
);
for
(
i
=
0
;
i
<
lp
->
rxRingMask
;
i
++
)
{
if
(
i
<
3
)
{
...
...
drivers/net/e2100.c
View file @
aa7976d7
...
...
@@ -72,7 +72,7 @@ static int e21_probe_list[] = {0x300, 0x280, 0x380, 0x220, 0};
#define E21_SAPROM 0x10
/* Offset to station address data. */
#define E21_IO_EXTENT 0x20
static
inline
void
mem_on
(
short
port
,
volatile
char
*
mem_base
,
static
inline
void
mem_on
(
short
port
,
volatile
char
__iomem
*
mem_base
,
unsigned
char
start_page
)
{
/* This is a little weird: set the shared memory window by doing a
...
...
@@ -143,6 +143,7 @@ static int __init do_e2100_probe(struct net_device *dev)
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: e21_close() handles free_irq */
iounmap
(
ei_status
.
mem
);
release_region
(
dev
->
base_addr
,
E21_IO_EXTENT
);
}
...
...
@@ -257,6 +258,13 @@ static int __init e21_probe1(struct net_device *dev, int ioaddr)
if
(
dev
->
mem_start
==
0
)
dev
->
mem_start
=
0xd0000
;
ei_status
.
mem
=
ioremap
(
dev
->
mem_start
,
2
*
1024
);
if
(
!
ei_status
.
mem
)
{
printk
(
"unable to remap memory
\n
"
);
retval
=
-
EAGAIN
;
goto
out
;
}
#ifdef notdef
/* These values are unused. The E2100 has a 2K window into the packet
buffer. The window can be set to start on any page boundary. */
...
...
@@ -329,7 +337,7 @@ e21_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_pag
{
short
ioaddr
=
dev
->
base_addr
;
char
*
shared_mem
=
(
char
*
)
dev
->
mem_start
;
char
__iomem
*
shared_mem
=
ei_status
.
mem
;
mem_on
(
ioaddr
,
shared_mem
,
ring_page
);
...
...
@@ -352,12 +360,12 @@ static void
e21_block_input
(
struct
net_device
*
dev
,
int
count
,
struct
sk_buff
*
skb
,
int
ring_offset
)
{
short
ioaddr
=
dev
->
base_addr
;
char
*
shared_mem
=
(
char
*
)
dev
->
mem_start
;
char
__iomem
*
shared_mem
=
ei_status
.
mem
;
mem_on
(
ioaddr
,
shared_mem
,
(
ring_offset
>>
8
));
/* Packet is always in one chunk -- we can copy + cksum. */
eth_io_copy_and_sum
(
skb
,
dev
->
mem_start
+
(
ring_offset
&
0xff
),
count
,
0
);
eth_io_copy_and_sum
(
skb
,
ei_status
.
mem
+
(
ring_offset
&
0xff
),
count
,
0
);
mem_off
(
ioaddr
);
}
...
...
@@ -367,7 +375,7 @@ e21_block_output(struct net_device *dev, int count, const unsigned char *buf,
int
start_page
)
{
short
ioaddr
=
dev
->
base_addr
;
volatile
char
*
shared_mem
=
(
char
*
)
dev
->
mem_start
;
volatile
char
__iomem
*
shared_mem
=
ei_status
.
mem
;
/* Set the shared memory window start by doing a read, with the low address
bits specifying the starting page. */
...
...
drivers/net/lne390.c
View file @
aa7976d7
...
...
@@ -149,8 +149,7 @@ static void cleanup_card(struct net_device *dev)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
LNE390_IO_EXTENT
);
if
(
ei_status
.
reg0
)
iounmap
((
void
*
)
dev
->
mem_start
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
...
...
@@ -257,32 +256,22 @@ static int __init lne390_probe1(struct net_device *dev, int ioaddr)
/*
BEWARE!! Some dain-bramaged EISA SCUs will allow you to put
the card mem within the region covered by `normal' RAM !!!
ioremap() will fail in that case.
*/
if
(
dev
->
mem_start
>
1024
*
1024
)
{
/* phys addr > 1MB */
if
(
dev
->
mem_start
<
virt_to_phys
(
high_memory
))
{
printk
(
KERN_CRIT
"lne390.c: Card RAM overlaps with normal memory!!!
\n
"
);
printk
(
KERN_CRIT
"lne390.c: Use EISA SCU to set card memory below 1MB,
\n
"
);
printk
(
KERN_CRIT
"lne390.c: or to an address above 0x%lx.
\n
"
,
virt_to_phys
(
high_memory
));
printk
(
KERN_CRIT
"lne390.c: Driver NOT installed.
\n
"
);
ret
=
-
EINVAL
;
goto
cleanup
;
}
dev
->
mem_start
=
(
unsigned
long
)
ioremap
(
dev
->
mem_start
,
LNE390_STOP_PG
*
0x100
);
if
(
dev
->
mem_start
==
0
)
{
printk
(
KERN_ERR
"lne390.c: Unable to remap card memory above 1MB !!
\n
"
);
printk
(
KERN_ERR
"lne390.c: Try using EISA SCU to set memory below 1MB.
\n
"
);
printk
(
KERN_ERR
"lne390.c: Driver NOT installed.
\n
"
);
ret
=
-
EAGAIN
;
goto
cleanup
;
}
ei_status
.
reg0
=
1
;
/* Use as remap flag */
printk
(
"lne390.c: remapped %dkB card memory to virtual address %#lx
\n
"
,
LNE390_STOP_PG
/
4
,
dev
->
mem_start
);
ei_status
.
mem
=
ioremap
(
dev
->
mem_start
,
LNE390_STOP_PG
*
0x100
);
if
(
!
ei_status
.
mem
)
{
printk
(
KERN_ERR
"lne390.c: Unable to remap card memory above 1MB !!
\n
"
);
printk
(
KERN_ERR
"lne390.c: Try using EISA SCU to set memory below 1MB.
\n
"
);
printk
(
KERN_ERR
"lne390.c: Driver NOT installed.
\n
"
);
ret
=
-
EAGAIN
;
goto
cleanup
;
}
printk
(
"lne390.c: remapped %dkB card memory to virtual address %p
\n
"
,
LNE390_STOP_PG
/
4
,
ei_status
.
mem
);
dev
->
mem_end
=
ei_status
.
rmem_end
=
dev
->
mem_start
+
(
LNE390_STOP_PG
-
LNE390_START_PG
)
*
256
;
ei_status
.
rmem_start
=
dev
->
mem_start
+
TX_PAGES
*
256
;
dev
->
mem_start
=
(
unsigned
long
)
ei_status
.
mem
;
dev
->
mem_end
=
dev
->
mem_start
+
(
LNE390_STOP_PG
-
LNE390_START_PG
)
*
256
;
/* The 8390 offset is zero for the LNE390 */
dev
->
base_addr
=
ioaddr
;
...
...
@@ -352,8 +341,8 @@ static void lne390_reset_8390(struct net_device *dev)
static
void
lne390_get_8390_hdr
(
struct
net_device
*
dev
,
struct
e8390_pkt_hdr
*
hdr
,
int
ring_page
)
{
unsigned
long
hdr_start
=
dev
->
mem_start
+
((
ring_page
-
LNE390_START_PG
)
<<
8
);
isa_
memcpy_fromio
(
hdr
,
hdr_start
,
sizeof
(
struct
e8390_pkt_hdr
));
void
__iomem
*
hdr_start
=
ei_status
.
mem
+
((
ring_page
-
LNE390_START_PG
)
<<
8
);
memcpy_fromio
(
hdr
,
hdr_start
,
sizeof
(
struct
e8390_pkt_hdr
));
hdr
->
count
=
(
hdr
->
count
+
3
)
&
~
3
;
/* Round up allocation. */
}
...
...
@@ -366,27 +355,28 @@ lne390_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_
static
void
lne390_block_input
(
struct
net_device
*
dev
,
int
count
,
struct
sk_buff
*
skb
,
int
ring_offset
)
{
unsigned
long
xfer_start
=
dev
->
mem_start
+
ring_offset
-
(
LNE390_START_PG
<<
8
);
void
__iomem
*
xfer_start
=
ei_status
.
mem
+
ring_offset
-
(
LNE390_START_PG
<<
8
);
if
(
xfer_start
+
count
>
ei_status
.
rmem_end
)
{
if
(
ring_offset
+
count
>
(
LNE390_STOP_PG
<<
8
)
)
{
/* Packet wraps over end of ring buffer. */
int
semi_count
=
ei_status
.
rmem_end
-
xfer_star
t
;
isa_
memcpy_fromio
(
skb
->
data
,
xfer_start
,
semi_count
);
int
semi_count
=
(
LNE390_STOP_PG
<<
8
)
-
ring_offse
t
;
memcpy_fromio
(
skb
->
data
,
xfer_start
,
semi_count
);
count
-=
semi_count
;
isa_memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
rmem_start
,
count
);
memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
mem
+
(
TX_PAGES
<<
8
),
count
);
}
else
{
/* Packet is in one chunk. */
isa_
memcpy_fromio
(
skb
->
data
,
xfer_start
,
count
);
memcpy_fromio
(
skb
->
data
,
xfer_start
,
count
);
}
}
static
void
lne390_block_output
(
struct
net_device
*
dev
,
int
count
,
const
unsigned
char
*
buf
,
int
start_page
)
{
unsigned
long
shmem
=
dev
->
mem_start
+
((
start_page
-
LNE390_START_PG
)
<<
8
);
void
__iomem
*
shmem
=
ei_status
.
mem
+
((
start_page
-
LNE390_START_PG
)
<<
8
);
count
=
(
count
+
3
)
&
~
3
;
/* Round up to doubleword */
isa_
memcpy_toio
(
shmem
,
buf
,
count
);
memcpy_toio
(
shmem
,
buf
,
count
);
}
static
int
lne390_open
(
struct
net_device
*
dev
)
...
...
drivers/net/ne3210.c
View file @
aa7976d7
...
...
@@ -174,18 +174,17 @@ static int __init ne3210_eisa_probe (struct device *device)
printk
(
"%dkB memory at physical address %#lx
\n
"
,
NE3210_STOP_PG
/
4
,
phys_mem
);
dev
->
mem_start
=
(
unsigned
long
)
ioremap
(
phys_mem
,
NE3210_STOP_PG
*
0x100
);
if
(
dev
->
mem_start
==
0
)
{
ei_status
.
mem
=
ioremap
(
phys_mem
,
NE3210_STOP_PG
*
0x100
);
if
(
!
ei_status
.
mem
)
{
printk
(
KERN_ERR
"ne3210.c: Unable to remap card memory !!
\n
"
);
printk
(
KERN_ERR
"ne3210.c: Driver NOT installed.
\n
"
);
retval
=
-
EAGAIN
;
goto
out4
;
}
printk
(
"ne3210.c: remapped %dkB card memory to virtual address %#lx
\n
"
,
NE3210_STOP_PG
/
4
,
dev
->
mem_start
);
dev
->
mem_end
=
ei_status
.
rmem_end
=
dev
->
mem_start
+
(
NE3210_STOP_PG
-
NE3210_START_PG
)
*
256
;
ei_status
.
rmem_start
=
dev
->
mem_start
+
TX_PAGES
*
256
;
printk
(
"ne3210.c: remapped %dkB card memory to virtual address %p
\n
"
,
NE3210_STOP_PG
/
4
,
ei_status
.
mem
);
dev
->
mem_start
=
(
unsigned
long
)
ei_status
.
mem
;
dev
->
mem_end
=
dev
->
mem_start
+
(
NE3210_STOP_PG
-
NE3210_START_PG
)
*
256
;
/* The 8390 offset is zero for the NE3210 */
dev
->
base_addr
=
ioaddr
;
...
...
@@ -219,7 +218,7 @@ static int __init ne3210_eisa_probe (struct device *device)
return
0
;
out5:
iounmap
(
(
void
*
)
dev
->
mem_start
);
iounmap
(
ei_status
.
mem
);
out4:
release_mem_region
(
phys_mem
,
NE3210_STOP_PG
*
0x100
);
out3:
...
...
@@ -240,7 +239,7 @@ static int __devexit ne3210_eisa_remove (struct device *device)
unsigned
long
ioaddr
=
to_eisa_device
(
device
)
->
base_addr
;
unregister_netdev
(
dev
);
iounmap
(
(
void
*
)
dev
->
mem_start
);
iounmap
(
ei_status
.
mem
);
release_mem_region
(
ei_status
.
priv
,
NE3210_STOP_PG
*
0x100
);
free_irq
(
dev
->
irq
,
dev
);
release_region
(
ioaddr
+
NE3210_CFG1
,
NE3210_CFG_EXTENT
);
...
...
@@ -288,7 +287,7 @@ static void ne3210_reset_8390(struct net_device *dev)
static
void
ne3210_get_8390_hdr
(
struct
net_device
*
dev
,
struct
e8390_pkt_hdr
*
hdr
,
int
ring_page
)
{
unsigned
long
hdr_start
=
dev
->
mem_start
+
((
ring_page
-
NE3210_START_PG
)
<<
8
);
void
__iomem
*
hdr_start
=
ei_status
.
mem
+
((
ring_page
-
NE3210_START_PG
)
<<
8
);
memcpy_fromio
(
hdr
,
hdr_start
,
sizeof
(
struct
e8390_pkt_hdr
));
hdr
->
count
=
(
hdr
->
count
+
3
)
&
~
3
;
/* Round up allocation. */
}
...
...
@@ -302,24 +301,25 @@ ne3210_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_
static
void
ne3210_block_input
(
struct
net_device
*
dev
,
int
count
,
struct
sk_buff
*
skb
,
int
ring_offset
)
{
unsigned
long
xfer_start
=
dev
->
mem_start
+
ring_offset
-
(
NE3210_START_PG
<<
8
)
;
void
__iomem
*
start
=
ei_status
.
mem
+
ring_offset
-
NE3210_START_PG
*
256
;
if
(
xfer_start
+
count
>
ei_status
.
rmem_end
)
{
if
(
ring_offset
+
count
>
NE3210_STOP_PG
*
256
)
{
/* Packet wraps over end of ring buffer. */
int
semi_count
=
ei_status
.
rmem_end
-
xfer_star
t
;
memcpy_fromio
(
skb
->
data
,
xfer_
start
,
semi_count
);
int
semi_count
=
NE3210_STOP_PG
*
256
-
ring_offse
t
;
memcpy_fromio
(
skb
->
data
,
start
,
semi_count
);
count
-=
semi_count
;
memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
rmem_start
,
count
);
memcpy_fromio
(
skb
->
data
+
semi_count
,
ei_status
.
mem
+
TX_PAGES
*
256
,
count
);
}
else
{
/* Packet is in one chunk. */
memcpy_fromio
(
skb
->
data
,
xfer_
start
,
count
);
memcpy_fromio
(
skb
->
data
,
start
,
count
);
}
}
static
void
ne3210_block_output
(
struct
net_device
*
dev
,
int
count
,
const
unsigned
char
*
buf
,
int
start_page
)
{
unsigned
long
shmem
=
dev
->
mem_start
+
((
start_page
-
NE3210_START_PG
)
<<
8
);
void
__iomem
*
shmem
=
ei_status
.
mem
+
((
start_page
-
NE3210_START_PG
)
<<
8
);
count
=
(
count
+
3
)
&
~
3
;
/* Round up to doubleword */
memcpy_toio
(
shmem
,
buf
,
count
);
...
...
drivers/net/pcmcia/fmvj18x_cs.c
View file @
aa7976d7
...
...
@@ -623,7 +623,7 @@ static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id)
{
win_req_t
req
;
memreq_t
mem
;
u_char
*
base
;
u_char
__iomem
*
base
;
int
i
,
j
;
/* Allocate a small memory window */
...
...
@@ -676,7 +676,7 @@ static int fmvj18x_setup_mfc(dev_link_t *link)
{
win_req_t
req
;
memreq_t
mem
;
u_char
*
base
;
u_char
__iomem
*
base
;
int
i
,
j
;
struct
net_device
*
dev
=
link
->
priv
;
ioaddr_t
ioaddr
;
...
...
drivers/net/pcmcia/pcnet_cs.c
View file @
aa7976d7
...
...
@@ -227,7 +227,7 @@ typedef struct pcnet_dev_t {
dev_link_t
link
;
dev_node_t
node
;
u_int
flags
;
caddr_t
base
;
void
__iomem
*
base
;
struct
timer_list
watchdog
;
int
stale
,
fast_poll
;
u_char
phy_id
;
...
...
@@ -352,7 +352,7 @@ static hw_info_t *get_hwinfo(dev_link_t *link)
struct
net_device
*
dev
=
link
->
priv
;
win_req_t
req
;
memreq_t
mem
;
u_char
*
base
,
*
virt
;
u_char
__iomem
*
base
,
*
virt
;
int
i
,
j
;
/* Allocate a small memory window */
...
...
@@ -1491,9 +1491,10 @@ static int setup_dma_config(dev_link_t *link, int start_pg,
/*====================================================================*/
static
void
copyin
(
u_char
*
dest
,
u_char
*
src
,
int
c
)
static
void
copyin
(
void
*
dest
,
void
__iomem
*
src
,
int
c
)
{
u_short
*
d
=
(
u_short
*
)
dest
,
*
s
=
(
u_short
*
)
src
;
u_short
*
d
=
dest
;
u_short
__iomem
*
s
=
src
;
int
odd
;
if
(
c
<=
0
)
...
...
@@ -1508,9 +1509,10 @@ static void copyin(u_char *dest, u_char *src, int c)
*
((
u_char
*
)
d
)
=
readw
(
s
)
&
0xff
;
}
static
void
copyout
(
u_char
*
dest
,
const
u_char
*
src
,
int
c
)
static
void
copyout
(
void
__iomem
*
dest
,
const
void
*
src
,
int
c
)
{
u_short
*
d
=
(
u_short
*
)
dest
,
*
s
=
(
u_short
*
)
src
;
u_short
__iomem
*
d
=
dest
;
const
u_short
*
s
=
src
;
int
odd
;
if
(
c
<=
0
)
...
...
@@ -1531,10 +1533,11 @@ static void shmem_get_8390_hdr(struct net_device *dev,
struct
e8390_pkt_hdr
*
hdr
,
int
ring_page
)
{
void
*
xfer_start
=
(
void
*
)(
ei_status
.
rmem_start
+
(
ring_page
<<
8
)
-
(
ei_status
.
rx_start_page
<<
8
));
void
__iomem
*
xfer_start
=
ei_status
.
mem
+
(
TX_PAGES
<<
8
)
+
(
ring_page
<<
8
)
-
(
ei_status
.
rx_start_page
<<
8
);
copyin
(
(
void
*
)
hdr
,
xfer_start
,
sizeof
(
struct
e8390_pkt_hdr
));
copyin
(
hdr
,
xfer_start
,
sizeof
(
struct
e8390_pkt_hdr
));
/* Fix for big endian systems */
hdr
->
count
=
le16_to_cpu
(
hdr
->
count
);
}
...
...
@@ -1544,17 +1547,17 @@ static void shmem_get_8390_hdr(struct net_device *dev,
static
void
shmem_block_input
(
struct
net_device
*
dev
,
int
count
,
struct
sk_buff
*
skb
,
int
ring_offset
)
{
void
*
xfer_start
=
(
void
*
)(
ei_status
.
rmem_start
+
ring_offset
-
(
ei_status
.
rx_start_page
<<
8
));
void
__iomem
*
xfer_start
=
ei_status
.
mem
+
(
TX_PAGES
<<
8
)
+
ring_offset
-
(
ei_status
.
rx_start_page
<<
8
);
char
*
buf
=
skb
->
data
;
if
(
xfer_start
+
count
>
(
void
*
)
ei_status
.
rmem_end
)
{
if
(
xfer_start
+
count
>
(
void
__iomem
*
)
ei_status
.
rmem_end
)
{
/* We must wrap the input move. */
int
semi_count
=
(
void
*
)
ei_status
.
rmem_end
-
xfer_start
;
int
semi_count
=
(
void
__iomem
*
)
ei_status
.
rmem_end
-
xfer_start
;
copyin
(
buf
,
xfer_start
,
semi_count
);
buf
+=
semi_count
;
ring_offset
=
ei_status
.
rx_start_page
<<
8
;
xfer_start
=
(
void
*
)
ei_status
.
rmem_start
;
xfer_start
=
ei_status
.
mem
+
(
TX_PAGES
<<
8
);
count
-=
semi_count
;
}
copyin
(
buf
,
xfer_start
,
count
);
...
...
@@ -1565,7 +1568,7 @@ static void shmem_block_input(struct net_device *dev, int count,
static
void
shmem_block_output
(
struct
net_device
*
dev
,
int
count
,
const
u_char
*
buf
,
const
int
start_page
)
{
void
*
shmem
=
(
void
*
)
dev
->
mem_start
+
(
start_page
<<
8
);
void
__iomem
*
shmem
=
ei_status
.
mem
+
(
start_page
<<
8
);
shmem
-=
ei_status
.
tx_start_page
<<
8
;
copyout
(
shmem
,
buf
,
count
);
}
...
...
@@ -1617,8 +1620,8 @@ static int setup_shmem_window(dev_link_t *link, int start_pg,
goto
failed
;
}
dev
->
mem_start
=
(
u_long
)
info
->
base
+
offset
;
ei_status
.
rmem_start
=
dev
->
mem_start
+
(
TX_PAGES
<<
8
)
;
ei_status
.
mem
=
info
->
base
+
offset
;
dev
->
mem_start
=
(
u_long
)
ei_status
.
mem
;
dev
->
mem_end
=
ei_status
.
rmem_end
=
(
u_long
)
info
->
base
+
req
.
Size
;
ei_status
.
tx_start_page
=
start_pg
;
...
...
drivers/net/pcmcia/smc91c92_cs.c
View file @
aa7976d7
...
...
@@ -120,7 +120,7 @@ struct smc_private {
dev_node_t
node
;
struct
sk_buff
*
saved_skb
;
int
packets_waiting
;
caddr_t
base
;
void
__iomem
*
base
;
u_short
cfg
;
struct
timer_list
media
;
int
watchdog
,
tx_err
;
...
...
drivers/net/pcmcia/xirc2ps_cs.c
View file @
aa7976d7
...
...
@@ -365,7 +365,7 @@ typedef struct local_info_t {
int
dingo
;
/* a CEM56 type card */
int
new_mii
;
/* has full 10baseT/100baseT MII */
int
modem
;
/* is a multi function card (i.e with a modem) */
caddr_t
dingo_ccr
;
/* only used for CEM56 cards */
void
__iomem
*
dingo_ccr
;
/* only used for CEM56 cards */
unsigned
last_ptr_value
;
/* last packets transmitted value */
const
char
*
manf_str
;
}
local_info_t
;
...
...
drivers/net/tokenring/3c359.c
View file @
aa7976d7
...
...
@@ -159,7 +159,7 @@ static void print_tx_state(struct net_device *dev)
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
struct
xl_tx_desc
*
txd
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
int
i
;
printk
(
"tx_ring_head: %d, tx_ring_tail: %d, free_ent: %d
\n
"
,
xl_priv
->
tx_ring_head
,
...
...
@@ -182,7 +182,7 @@ static void print_rx_state(struct net_device *dev)
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
struct
xl_rx_desc
*
rxd
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
int
i
;
printk
(
"rx_ring_tail: %d
\n
"
,
xl_priv
->
rx_ring_tail
)
;
...
...
@@ -215,7 +215,7 @@ static void print_rx_state(struct net_device *dev)
static
u16
xl_ee_read
(
struct
net_device
*
dev
,
int
ee_addr
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
/* Wait for EEProm to not be busy */
writel
(
IO_WORD_READ
|
EECONTROL
,
xl_mmio
+
MMIO_MAC_ACCESS_CMD
)
;
...
...
@@ -247,7 +247,7 @@ static u16 xl_ee_read(struct net_device *dev, int ee_addr)
static
void
xl_ee_write
(
struct
net_device
*
dev
,
int
ee_addr
,
u16
ee_value
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
/* Wait for EEProm to not be busy */
writel
(
IO_WORD_READ
|
EECONTROL
,
xl_mmio
+
MMIO_MAC_ACCESS_CMD
)
;
...
...
@@ -386,7 +386,7 @@ static int __init xl_init(struct net_device *dev)
static
int
xl_hw_reset
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
unsigned
long
t
;
u16
i
;
u16
result_16
;
...
...
@@ -569,7 +569,7 @@ static int xl_hw_reset(struct net_device *dev)
static
int
xl_open
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
i
;
u16
hwaddr
[
3
]
;
/* Should be u8[6] but we get word return values */
int
open_err
;
...
...
@@ -727,7 +727,7 @@ static int xl_open(struct net_device *dev)
static
int
xl_open_hw
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u16
vsoff
;
char
ver_str
[
33
];
int
open_err
;
...
...
@@ -891,7 +891,7 @@ static void adv_rx_ring(struct net_device *dev) /* Advance rx_ring, cut down on
static
void
xl_rx
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
struct
sk_buff
*
skb
,
*
skb2
;
int
frame_length
=
0
,
copy_len
=
0
;
int
temp_ring_loc
;
...
...
@@ -999,7 +999,7 @@ static void xl_rx(struct net_device *dev)
static
void
xl_reset
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
unsigned
long
t
;
writew
(
GLOBAL_RESET
,
xl_mmio
+
MMIO_COMMAND
)
;
...
...
@@ -1046,7 +1046,7 @@ static irqreturn_t xl_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_id
;
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u16
intstatus
,
macstatus
;
if
(
!
dev
)
{
...
...
@@ -1234,7 +1234,7 @@ static int xl_xmit(struct sk_buff *skb, struct net_device *dev)
static
void
xl_dn_comp
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
struct
xl_tx_desc
*
txd
;
...
...
@@ -1270,7 +1270,7 @@ static void xl_dn_comp(struct net_device *dev)
static
int
xl_close
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
unsigned
long
t
;
netif_stop_queue
(
dev
)
;
...
...
@@ -1409,7 +1409,7 @@ static void xl_set_rx_mode(struct net_device *dev)
static
void
xl_srb_bh
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
srb_cmd
,
ret_code
;
int
i
;
...
...
@@ -1506,7 +1506,7 @@ static int xl_set_mac_address (struct net_device *dev, void *addr)
static
void
xl_arb_cmd
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
arb_cmd
;
u16
lan_status
,
lan_status_diff
;
...
...
@@ -1634,7 +1634,7 @@ static void xl_arb_cmd(struct net_device *dev)
static
void
xl_asb_cmd
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
if
(
xl_priv
->
asb_queued
==
1
)
writel
(
ACK_INTERRUPT
|
LATCH_ACK
|
ASBFACK
,
xl_mmio
+
MMIO_COMMAND
)
;
...
...
@@ -1665,7 +1665,7 @@ static void xl_asb_cmd(struct net_device *dev)
static
void
xl_asb_bh
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
ret_code
;
writel
(
MMIO_BYTE_READ
|
0xd0000
|
xl_priv
->
asb
|
2
,
xl_mmio
+
MMIO_MAC_ACCESS_CMD
)
;
...
...
@@ -1693,7 +1693,7 @@ static void xl_asb_bh(struct net_device *dev)
static
void
xl_srb_cmd
(
struct
net_device
*
dev
,
int
srb_cmd
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
switch
(
srb_cmd
)
{
case
READ_LOG
:
...
...
@@ -1750,7 +1750,7 @@ static void xl_srb_cmd(struct net_device *dev, int srb_cmd)
static
void
xl_wait_misr_flags
(
struct
net_device
*
dev
)
{
struct
xl_private
*
xl_priv
=
(
struct
xl_private
*
)
dev
->
priv
;
u8
*
xl_mmio
=
xl_priv
->
xl_mmio
;
u8
__iomem
*
xl_mmio
=
xl_priv
->
xl_mmio
;
int
i
;
...
...
drivers/net/tokenring/3c359.h
View file @
aa7976d7
...
...
@@ -263,7 +263,7 @@ struct xl_private {
u16
arb
;
u16
asb
;
u8
*
xl_mmio
;
u8
__iomem
*
xl_mmio
;
char
*
xl_card_name
;
struct
pci_dev
*
pdev
;
...
...
include/pcmcia/mem_op.h
View file @
aa7976d7
...
...
@@ -76,67 +76,54 @@ static inline void copy_user_to_pc(void *to, const void *from, size_t n)
#else
/* UNSAFE_MEMCPY */
static
inline
void
copy_from_pc
(
void
*
to
,
const
void
*
from
,
size_t
n
)
static
inline
void
copy_from_pc
(
void
*
to
,
void
__iomem
*
from
,
size_t
n
)
{
size_t
odd
=
(
n
&
1
);
n
-=
odd
;
while
(
n
)
{
u_short
*
t
=
to
;
*
t
=
__raw_readw
(
from
);
to
=
(
void
*
)((
long
)
to
+
2
);
from
=
(
const
void
*
)((
long
)
from
+
2
);
n
-=
2
;
}
if
(
odd
)
*
(
u_char
*
)
to
=
readb
(
from
);
__u16
*
t
=
to
;
__u16
__iomem
*
f
=
from
;
size_t
odd
=
(
n
&
1
);
for
(
n
>>=
1
;
n
;
n
--
)
*
t
++
=
__raw_readw
(
f
++
);
if
(
odd
)
*
(
__u8
*
)
t
=
readb
(
f
);
}
static
inline
void
copy_to_pc
(
void
*
to
,
const
void
*
from
,
size_t
n
)
static
inline
void
copy_to_pc
(
void
__iomem
*
to
,
const
void
*
from
,
size_t
n
)
{
size_t
odd
=
(
n
&
1
);
n
-=
odd
;
while
(
n
)
{
__raw_writew
(
*
(
u_short
*
)
from
,
to
);
to
=
(
void
*
)((
long
)
to
+
2
);
from
=
(
const
void
*
)((
long
)
from
+
2
);
n
-=
2
;
}
if
(
odd
)
writeb
(
*
(
u_char
*
)
from
,
to
);
__u16
__iomem
*
t
=
to
;
const
__u16
*
f
=
from
;
size_t
odd
=
(
n
&
1
);
for
(
n
>>=
1
;
n
;
n
--
)
__raw_writew
(
*
f
++
,
t
++
);
if
(
odd
)
writeb
(
*
(
__u8
*
)
f
,
t
);
}
static
inline
void
copy_pc_to_user
(
void
*
to
,
const
void
*
from
,
size_t
n
)
static
inline
void
copy_pc_to_user
(
void
__user
*
to
,
void
__iomem
*
from
,
size_t
n
)
{
size_t
odd
=
(
n
&
1
);
n
-=
odd
;
while
(
n
)
{
put_user
(
__raw_readw
(
from
),
(
short
*
)
to
);
to
=
(
void
*
)((
long
)
to
+
2
);
from
=
(
const
void
*
)((
long
)
from
+
2
);
n
-=
2
;
}
if
(
odd
)
put_user
(
readb
(
from
),
(
char
*
)
to
);
__u16
__user
*
t
=
to
;
__u16
__iomem
*
f
=
from
;
size_t
odd
=
(
n
&
1
);
for
(
n
>>=
1
;
n
;
n
--
)
put_user
(
__raw_readw
(
f
++
),
t
++
);
if
(
odd
)
put_user
(
readb
(
f
),
(
char
__user
*
)
t
);
}
static
inline
void
copy_user_to_pc
(
void
*
to
,
const
void
*
from
,
size_t
n
)
static
inline
void
copy_user_to_pc
(
void
__iomem
*
to
,
void
__user
*
from
,
size_t
n
)
{
short
s
;
char
c
;
size_t
odd
=
(
n
&
1
);
n
-=
odd
;
while
(
n
)
{
get_user
(
s
,
(
short
*
)
from
);
__raw_writew
(
s
,
to
);
to
=
(
void
*
)((
long
)
to
+
2
);
from
=
(
const
void
*
)((
long
)
from
+
2
);
n
-=
2
;
}
if
(
odd
)
{
get_user
(
c
,
(
char
*
)
from
);
writeb
(
c
,
to
);
}
__u16
__user
*
f
=
from
;
__u16
__iomem
*
t
=
to
;
short
s
;
char
c
;
size_t
odd
=
(
n
&
1
);
for
(
n
>>=
1
;
n
;
n
--
)
{
get_user
(
s
,
f
++
);
__raw_writew
(
s
,
t
++
);
}
if
(
odd
)
{
get_user
(
c
,
(
char
__user
*
)
f
);
writeb
(
c
,
t
);
}
}
#endif
/* UNSAFE_MEMCPY */
...
...
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