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
7e1ec8c8
Commit
7e1ec8c8
authored
Jun 26, 2004
by
Vojtech Pavlik
Browse files
Options
Browse Files
Download
Plain Diff
Merge suse.cz:/home/vojtech/bk/linus into suse.cz:/home/vojtech/bk/input
parents
4125f64c
f6a7507c
Changes
31
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
1024 additions
and
155 deletions
+1024
-155
arch/ppc/kernel/ppc_ksyms.c
arch/ppc/kernel/ppc_ksyms.c
+0
-3
arch/sparc64/defconfig
arch/sparc64/defconfig
+59
-40
arch/sparc64/lib/find_bit.c
arch/sparc64/lib/find_bit.c
+3
-2
arch/v850/kernel/vmlinux.lds.S
arch/v850/kernel/vmlinux.lds.S
+3
-3
drivers/ide/ide-disk.c
drivers/ide/ide-disk.c
+13
-2
drivers/ide/legacy/ide-cs.c
drivers/ide/legacy/ide-cs.c
+0
-5
drivers/ide/pci/pdc202xx_old.c
drivers/ide/pci/pdc202xx_old.c
+6
-0
drivers/pcmcia/Kconfig
drivers/pcmcia/Kconfig
+7
-0
drivers/pcmcia/Makefile
drivers/pcmcia/Makefile
+1
-0
drivers/pcmcia/cistpl.c
drivers/pcmcia/cistpl.c
+13
-12
drivers/pcmcia/cs.c
drivers/pcmcia/cs.c
+19
-13
drivers/pcmcia/cs_internal.h
drivers/pcmcia/cs_internal.h
+2
-2
drivers/pcmcia/ds.c
drivers/pcmcia/ds.c
+2
-0
drivers/pcmcia/i82092.c
drivers/pcmcia/i82092.c
+2
-2
drivers/pcmcia/i82365.c
drivers/pcmcia/i82365.c
+2
-2
drivers/pcmcia/pd6729.c
drivers/pcmcia/pd6729.c
+732
-0
drivers/pcmcia/pd6729.h
drivers/pcmcia/pd6729.h
+28
-0
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/rsrc_mgr.c
+31
-20
drivers/pcmcia/tcic.c
drivers/pcmcia/tcic.c
+2
-2
drivers/pcmcia/yenta_socket.c
drivers/pcmcia/yenta_socket.c
+2
-2
fs/isofs/inode.c
fs/isofs/inode.c
+3
-20
include/asm-ppc/smp.h
include/asm-ppc/smp.h
+0
-2
include/asm-ppc/system.h
include/asm-ppc/system.h
+0
-1
include/asm-sparc64/bitops.h
include/asm-sparc64/bitops.h
+2
-1
include/asm-sparc64/byteorder.h
include/asm-sparc64/byteorder.h
+3
-3
include/asm-v850/bitops.h
include/asm-v850/bitops.h
+76
-0
include/asm-v850/irq.h
include/asm-v850/irq.h
+3
-6
include/asm-v850/unistd.h
include/asm-v850/unistd.h
+2
-4
include/linux/iso_fs.h
include/linux/iso_fs.h
+6
-6
include/pcmcia/ss.h
include/pcmcia/ss.h
+1
-2
init/Kconfig
init/Kconfig
+1
-0
No files found.
arch/ppc/kernel/ppc_ksyms.c
View file @
7e1ec8c8
...
@@ -68,7 +68,6 @@ extern int sys_sigreturn(struct pt_regs *regs);
...
@@ -68,7 +68,6 @@ extern int sys_sigreturn(struct pt_regs *regs);
long
long
__ashrdi3
(
long
long
,
int
);
long
long
__ashrdi3
(
long
long
,
int
);
long
long
__ashldi3
(
long
long
,
int
);
long
long
__ashldi3
(
long
long
,
int
);
long
long
__lshrdi3
(
long
long
,
int
);
long
long
__lshrdi3
(
long
long
,
int
);
int
abs
(
int
);
extern
unsigned
long
mm_ptov
(
unsigned
long
paddr
);
extern
unsigned
long
mm_ptov
(
unsigned
long
paddr
);
...
@@ -276,8 +275,6 @@ EXPORT_SYMBOL(memscan);
...
@@ -276,8 +275,6 @@ EXPORT_SYMBOL(memscan);
EXPORT_SYMBOL
(
memcmp
);
EXPORT_SYMBOL
(
memcmp
);
EXPORT_SYMBOL
(
memchr
);
EXPORT_SYMBOL
(
memchr
);
EXPORT_SYMBOL
(
abs
);
#if defined(CONFIG_FB_VGA16_MODULE)
#if defined(CONFIG_FB_VGA16_MODULE)
EXPORT_SYMBOL
(
screen_info
);
EXPORT_SYMBOL
(
screen_info
);
#endif
#endif
...
...
arch/sparc64/defconfig
View file @
7e1ec8c8
...
@@ -110,6 +110,7 @@ CONFIG_DISPLAY7SEG=m
...
@@ -110,6 +110,7 @@ CONFIG_DISPLAY7SEG=m
#
#
# Generic Driver Options
# Generic Driver Options
#
#
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
CONFIG_FW_LOADER=m
CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DRIVER is not set
...
@@ -117,6 +118,7 @@ CONFIG_FW_LOADER=m
...
@@ -117,6 +118,7 @@ CONFIG_FW_LOADER=m
# Graphics support
# Graphics support
#
#
CONFIG_FB=y
CONFIG_FB=y
# CONFIG_FB_CIRRUS is not set
CONFIG_FB_PM2=y
CONFIG_FB_PM2=y
# CONFIG_FB_PM2_FIFO_DISCONNECT is not set
# CONFIG_FB_PM2_FIFO_DISCONNECT is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_CYBER2000 is not set
...
@@ -219,7 +221,7 @@ CONFIG_OBP_FLASH=m
...
@@ -219,7 +221,7 @@ CONFIG_OBP_FLASH=m
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_
CARMEL
=m
CONFIG_BLK_DEV_
SX8
=m
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_RAM is not set
#
#
...
@@ -231,6 +233,7 @@ CONFIG_BLK_DEV_IDE=y
...
@@ -231,6 +233,7 @@ CONFIG_BLK_DEV_IDE=y
#
#
# Please see Documentation/ide.txt for help/info on IDE drives
# Please see Documentation/ide.txt for help/info on IDE drives
#
#
# CONFIG_BLK_DEV_IDE_SATA is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
# CONFIG_IDEDISK_MULTI_MODE is not set
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDECD=y
...
@@ -317,6 +320,7 @@ CONFIG_SCSI_FC_ATTRS=m
...
@@ -317,6 +320,7 @@ CONFIG_SCSI_FC_ATTRS=m
# SCSI low-level drivers
# SCSI low-level drivers
#
#
CONFIG_BLK_DEV_3W_XXXX_RAID=m
CONFIG_BLK_DEV_3W_XXXX_RAID=m
CONFIG_SCSI_3W_9XXX=m
CONFIG_SCSI_ACARD=m
CONFIG_SCSI_ACARD=m
CONFIG_SCSI_AACRAID=m
CONFIG_SCSI_AACRAID=m
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX is not set
...
@@ -334,6 +338,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
...
@@ -334,6 +338,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_SCSI_SATA=y
CONFIG_SCSI_SATA=y
CONFIG_SCSI_SATA_SVW=m
CONFIG_SCSI_SATA_SVW=m
CONFIG_SCSI_ATA_PIIX=m
CONFIG_SCSI_ATA_PIIX=m
CONFIG_SCSI_SATA_NV=m
CONFIG_SCSI_SATA_PROMISE=m
CONFIG_SCSI_SATA_PROMISE=m
CONFIG_SCSI_SATA_SX4=m
CONFIG_SCSI_SATA_SX4=m
CONFIG_SCSI_SATA_SIL=m
CONFIG_SCSI_SATA_SIL=m
...
@@ -407,6 +412,9 @@ CONFIG_MD_RAID6=m
...
@@ -407,6 +412,9 @@ CONFIG_MD_RAID6=m
CONFIG_MD_MULTIPATH=m
CONFIG_MD_MULTIPATH=m
CONFIG_BLK_DEV_DM=m
CONFIG_BLK_DEV_DM=m
CONFIG_DM_CRYPT=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
#
#
# Fusion MPT device support
# Fusion MPT device support
...
@@ -579,6 +587,8 @@ CONFIG_IP_NF_COMPAT_IPCHAINS=m
...
@@ -579,6 +587,8 @@ CONFIG_IP_NF_COMPAT_IPCHAINS=m
CONFIG_IP_NF_COMPAT_IPFWADM=m
CONFIG_IP_NF_COMPAT_IPFWADM=m
CONFIG_IP_NF_TARGET_NOTRACK=m
CONFIG_IP_NF_TARGET_NOTRACK=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_MATCH_REALM=m
#
#
# IPv6: Netfilter Configuration
# IPv6: Netfilter Configuration
...
@@ -696,9 +706,12 @@ CONFIG_NET_CLS_ROUTE4=m
...
@@ -696,9 +706,12 @@ CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_NET_CLS_IND=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
#
#
# Network testing
# Network testing
...
@@ -860,6 +873,7 @@ CONFIG_SUNDANCE=m
...
@@ -860,6 +873,7 @@ CONFIG_SUNDANCE=m
CONFIG_SUNDANCE_MMIO=y
CONFIG_SUNDANCE_MMIO=y
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
# CONFIG_VIA_RHINE_MMIO is not set
CONFIG_VIA_VELOCITY=m
#
#
# Ethernet (1000 Mbit)
# Ethernet (1000 Mbit)
...
@@ -1195,6 +1209,8 @@ CONFIG_UDF_FS=m
...
@@ -1195,6 +1209,8 @@ CONFIG_UDF_FS=m
CONFIG_FAT_FS=m
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_FS is not set
#
#
...
@@ -1255,6 +1271,7 @@ CONFIG_SMB_FS=m
...
@@ -1255,6 +1271,7 @@ CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_SMB_NLS_DEFAULT is not set
CONFIG_CIFS=m
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
# CONFIG_CIFS_STATS is not set
CONFIG_CIFS_POSIX=y
CONFIG_NCP_FS=m
CONFIG_NCP_FS=m
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
...
@@ -1281,43 +1298,44 @@ CONFIG_SUN_PARTITION=y
...
@@ -1281,43 +1298,44 @@ CONFIG_SUN_PARTITION=y
#
#
CONFIG_NLS=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
CONFIG_NLS_CODEPAGE_437=m
# CONFIG_NLS_CODEPAGE_737 is not set
CONFIG_NLS_CODEPAGE_737=m
# CONFIG_NLS_CODEPAGE_775 is not set
CONFIG_NLS_CODEPAGE_775=m
# CONFIG_NLS_CODEPAGE_850 is not set
CONFIG_NLS_CODEPAGE_850=m
# CONFIG_NLS_CODEPAGE_852 is not set
CONFIG_NLS_CODEPAGE_852=m
# CONFIG_NLS_CODEPAGE_855 is not set
CONFIG_NLS_CODEPAGE_855=m
# CONFIG_NLS_CODEPAGE_857 is not set
CONFIG_NLS_CODEPAGE_857=m
# CONFIG_NLS_CODEPAGE_860 is not set
CONFIG_NLS_CODEPAGE_860=m
# CONFIG_NLS_CODEPAGE_861 is not set
CONFIG_NLS_CODEPAGE_861=m
# CONFIG_NLS_CODEPAGE_862 is not set
CONFIG_NLS_CODEPAGE_862=m
# CONFIG_NLS_CODEPAGE_863 is not set
CONFIG_NLS_CODEPAGE_863=m
# CONFIG_NLS_CODEPAGE_864 is not set
CONFIG_NLS_CODEPAGE_864=m
# CONFIG_NLS_CODEPAGE_865 is not set
CONFIG_NLS_CODEPAGE_865=m
# CONFIG_NLS_CODEPAGE_866 is not set
CONFIG_NLS_CODEPAGE_866=m
# CONFIG_NLS_CODEPAGE_869 is not set
CONFIG_NLS_CODEPAGE_869=m
# CONFIG_NLS_CODEPAGE_936 is not set
CONFIG_NLS_CODEPAGE_936=m
# CONFIG_NLS_CODEPAGE_950 is not set
CONFIG_NLS_CODEPAGE_950=m
# CONFIG_NLS_CODEPAGE_932 is not set
CONFIG_NLS_CODEPAGE_932=m
# CONFIG_NLS_CODEPAGE_949 is not set
CONFIG_NLS_CODEPAGE_949=m
# CONFIG_NLS_CODEPAGE_874 is not set
CONFIG_NLS_CODEPAGE_874=m
# CONFIG_NLS_ISO8859_8 is not set
CONFIG_NLS_ISO8859_8=m
# CONFIG_NLS_CODEPAGE_1250 is not set
CONFIG_NLS_CODEPAGE_1250=m
# CONFIG_NLS_CODEPAGE_1251 is not set
CONFIG_NLS_CODEPAGE_1251=m
# CONFIG_NLS_ISO8859_1 is not set
CONFIG_NLS_ASCII=m
# CONFIG_NLS_ISO8859_2 is not set
CONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_3 is not set
CONFIG_NLS_ISO8859_2=m
# CONFIG_NLS_ISO8859_4 is not set
CONFIG_NLS_ISO8859_3=m
# CONFIG_NLS_ISO8859_5 is not set
CONFIG_NLS_ISO8859_4=m
# CONFIG_NLS_ISO8859_6 is not set
CONFIG_NLS_ISO8859_5=m
# CONFIG_NLS_ISO8859_7 is not set
CONFIG_NLS_ISO8859_6=m
# CONFIG_NLS_ISO8859_9 is not set
CONFIG_NLS_ISO8859_7=m
# CONFIG_NLS_ISO8859_13 is not set
CONFIG_NLS_ISO8859_9=m
# CONFIG_NLS_ISO8859_14 is not set
CONFIG_NLS_ISO8859_13=m
# CONFIG_NLS_ISO8859_15 is not set
CONFIG_NLS_ISO8859_14=m
# CONFIG_NLS_KOI8_R is not set
CONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_KOI8_R=m
# CONFIG_NLS_UTF8 is not set
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
#
#
# Multimedia devices
# Multimedia devices
...
@@ -1349,6 +1367,7 @@ CONFIG_VIDEO_DPC=m
...
@@ -1349,6 +1367,7 @@ CONFIG_VIDEO_DPC=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_CX88=m
CONFIG_VIDEO_CX88=m
CONFIG_VIDEO_OVCAMCHIP=m
#
#
# Radio Adapters
# Radio Adapters
...
@@ -1544,6 +1563,7 @@ CONFIG_USB_ACM=m
...
@@ -1544,6 +1563,7 @@ CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_PRINTER=m
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_RW_DETECT=y
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_ISD200=y
...
@@ -1585,7 +1605,6 @@ CONFIG_USB_HPUSBSCSI=m
...
@@ -1585,7 +1605,6 @@ CONFIG_USB_HPUSBSCSI=m
# CONFIG_USB_IBMCAM is not set
# CONFIG_USB_IBMCAM is not set
# CONFIG_USB_KONICAWC is not set
# CONFIG_USB_KONICAWC is not set
# CONFIG_USB_OV511 is not set
# CONFIG_USB_OV511 is not set
CONFIG_USB_PWC=m
# CONFIG_USB_SE401 is not set
# CONFIG_USB_SE401 is not set
# CONFIG_USB_STV680 is not set
# CONFIG_USB_STV680 is not set
CONFIG_USB_W9968CF=m
CONFIG_USB_W9968CF=m
...
...
arch/sparc64/lib/find_bit.c
View file @
7e1ec8c8
...
@@ -6,9 +6,10 @@
...
@@ -6,9 +6,10 @@
* @offset: The bitnumber to start searching at
* @offset: The bitnumber to start searching at
* @size: The maximum size to search
* @size: The maximum size to search
*/
*/
unsigned
long
find_next_bit
(
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
unsigned
long
find_next_bit
(
const
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
{
{
unsigned
long
*
p
=
addr
+
(
offset
>>
6
);
const
unsigned
long
*
p
=
addr
+
(
offset
>>
6
);
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
tmp
;
unsigned
long
tmp
;
...
...
arch/v850/kernel/vmlinux.lds.S
View file @
7e1ec8c8
/*
/*
*
arch
/
v850
/
vmlinux
.
lds
.
S
--
kernel
linker
script
for
v850
platforms
*
arch
/
v850
/
vmlinux
.
lds
.
S
--
kernel
linker
script
for
v850
platforms
*
*
*
Copyright
(
C
)
2002
,
03
NEC
Electronics
Corporation
*
Copyright
(
C
)
2002
,
03
,
04
NEC
Electronics
Corporation
*
Copyright
(
C
)
2002
,
03
Miles
Bader
<
miles
@
gnu
.
org
>
*
Copyright
(
C
)
2002
,
03
,
04
Miles
Bader
<
miles
@
gnu
.
org
>
*
*
*
This
file
is
subject
to
the
terms
and
conditions
of
the
GNU
General
*
This
file
is
subject
to
the
terms
and
conditions
of
the
GNU
General
*
Public
License
.
See
the
file
COPYING
in
the
main
directory
of
this
*
Public
License
.
See
the
file
COPYING
in
the
main
directory
of
this
...
@@ -65,7 +65,7 @@
...
@@ -65,7 +65,7 @@
#define TEXT_CONTENTS \
#define TEXT_CONTENTS \
__stext
=
.
; \
__stext
=
.
; \
*(.
text
)
\
*(.
text
)
\
SCHED_TEXT
SCHED_TEXT
\
*(.
exit.text
)
/*
2
.5
convention
*/
\
*(.
exit.text
)
/*
2
.5
convention
*/
\
*(.
text.exit
)
/*
2
.4
convention
*/
\
*(.
text.exit
)
/*
2
.4
convention
*/
\
*(.
text.lock
)
\
*(.
text.lock
)
\
...
...
drivers/ide/ide-disk.c
View file @
7e1ec8c8
...
@@ -1334,7 +1334,8 @@ enum {
...
@@ -1334,7 +1334,8 @@ enum {
idedisk_pm_flush_cache
=
ide_pm_state_start_suspend
,
idedisk_pm_flush_cache
=
ide_pm_state_start_suspend
,
idedisk_pm_standby
,
idedisk_pm_standby
,
idedisk_pm_restore_dma
=
ide_pm_state_start_resume
,
idedisk_pm_idle
=
ide_pm_state_start_resume
,
idedisk_pm_restore_dma
,
};
};
static
void
idedisk_complete_power_step
(
ide_drive_t
*
drive
,
struct
request
*
rq
,
u8
stat
,
u8
error
)
static
void
idedisk_complete_power_step
(
ide_drive_t
*
drive
,
struct
request
*
rq
,
u8
stat
,
u8
error
)
...
@@ -1349,6 +1350,9 @@ static void idedisk_complete_power_step (ide_drive_t *drive, struct request *rq,
...
@@ -1349,6 +1350,9 @@ static void idedisk_complete_power_step (ide_drive_t *drive, struct request *rq,
case
idedisk_pm_standby
:
/* Suspend step 2 (standby) complete */
case
idedisk_pm_standby
:
/* Suspend step 2 (standby) complete */
rq
->
pm
->
pm_step
=
ide_pm_state_completed
;
rq
->
pm
->
pm_step
=
ide_pm_state_completed
;
break
;
break
;
case
idedisk_pm_idle
:
/* Resume step 1 (idle) complete */
rq
->
pm
->
pm_step
=
idedisk_pm_restore_dma
;
break
;
}
}
}
}
...
@@ -1372,13 +1376,20 @@ static ide_startstop_t idedisk_start_power_step (ide_drive_t *drive, struct requ
...
@@ -1372,13 +1376,20 @@ static ide_startstop_t idedisk_start_power_step (ide_drive_t *drive, struct requ
args
->
command_type
=
IDE_DRIVE_TASK_NO_DATA
;
args
->
command_type
=
IDE_DRIVE_TASK_NO_DATA
;
args
->
handler
=
&
task_no_data_intr
;
args
->
handler
=
&
task_no_data_intr
;
return
do_rw_taskfile
(
drive
,
args
);
return
do_rw_taskfile
(
drive
,
args
);
case
idedisk_pm_standby
:
/* Suspend step 2 (standby) */
case
idedisk_pm_standby
:
/* Suspend step 2 (standby) */
args
->
tfRegister
[
IDE_COMMAND_OFFSET
]
=
WIN_STANDBYNOW1
;
args
->
tfRegister
[
IDE_COMMAND_OFFSET
]
=
WIN_STANDBYNOW1
;
args
->
command_type
=
IDE_DRIVE_TASK_NO_DATA
;
args
->
command_type
=
IDE_DRIVE_TASK_NO_DATA
;
args
->
handler
=
&
task_no_data_intr
;
args
->
handler
=
&
task_no_data_intr
;
return
do_rw_taskfile
(
drive
,
args
);
return
do_rw_taskfile
(
drive
,
args
);
case
idedisk_pm_restore_dma
:
/* Resume step 1 (restore DMA) */
case
idedisk_pm_idle
:
/* Resume step 1 (idle) */
args
->
tfRegister
[
IDE_COMMAND_OFFSET
]
=
WIN_IDLEIMMEDIATE
;
args
->
command_type
=
IDE_DRIVE_TASK_NO_DATA
;
args
->
handler
=
task_no_data_intr
;
return
do_rw_taskfile
(
drive
,
args
);
case
idedisk_pm_restore_dma
:
/* Resume step 2 (restore DMA) */
/*
/*
* Right now, all we do is call hwif->ide_dma_check(drive),
* Right now, all we do is call hwif->ide_dma_check(drive),
* we could be smarter and check for current xfer_speed
* we could be smarter and check for current xfer_speed
...
...
drivers/ide/legacy/ide-cs.c
View file @
7e1ec8c8
...
@@ -336,11 +336,6 @@ void ide_config(dev_link_t *link)
...
@@ -336,11 +336,6 @@ void ide_config(dev_link_t *link)
CS_CHECK
(
RequestIRQ
,
pcmcia_request_irq
(
handle
,
&
link
->
irq
));
CS_CHECK
(
RequestIRQ
,
pcmcia_request_irq
(
handle
,
&
link
->
irq
));
CS_CHECK
(
RequestConfiguration
,
pcmcia_request_configuration
(
handle
,
&
link
->
conf
));
CS_CHECK
(
RequestConfiguration
,
pcmcia_request_configuration
(
handle
,
&
link
->
conf
));
/* deal with brain dead IDE resource management */
release_region
(
link
->
io
.
BasePort1
,
link
->
io
.
NumPorts1
);
if
(
link
->
io
.
NumPorts2
)
release_region
(
link
->
io
.
BasePort2
,
link
->
io
.
NumPorts2
);
/* disable drive interrupts during IDE probe */
/* disable drive interrupts during IDE probe */
outb
(
0x02
,
ctl_base
);
outb
(
0x02
,
ctl_base
);
...
...
drivers/ide/pci/pdc202xx_old.c
View file @
7e1ec8c8
...
@@ -717,6 +717,12 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev, const c
...
@@ -717,6 +717,12 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev, const c
static
void
__devinit
init_hwif_pdc202xx
(
ide_hwif_t
*
hwif
)
static
void
__devinit
init_hwif_pdc202xx
(
ide_hwif_t
*
hwif
)
{
{
struct
pci_dev
*
dev
=
hwif
->
pci_dev
;
/* PDC20265 has problems with large LBA48 requests */
if
(
dev
->
device
==
PCI_DEVICE_ID_PROMISE_20265
)
hwif
->
rqsize
=
256
;
hwif
->
autodma
=
0
;
hwif
->
autodma
=
0
;
hwif
->
tuneproc
=
&
config_chipset_for_pio
;
hwif
->
tuneproc
=
&
config_chipset_for_pio
;
hwif
->
quirkproc
=
&
pdc202xx_quirkproc
;
hwif
->
quirkproc
=
&
pdc202xx_quirkproc
;
...
...
drivers/pcmcia/Kconfig
View file @
7e1ec8c8
...
@@ -69,6 +69,13 @@ config CARDBUS
...
@@ -69,6 +69,13 @@ config CARDBUS
depends on YENTA
depends on YENTA
default y if YENTA
default y if YENTA
config PD6729
tristate "Cirrus PD6729 compatible bridge support"
depends on PCMCIA && PCI
help
This provides support for the Cirrus PD6729 PCI-to-PCMCIA bridge
device, found in some older laptops and PCMCIA card readers.
config I82092
config I82092
tristate "i82092 compatible bridge support"
tristate "i82092 compatible bridge support"
depends on PCMCIA && PCI
depends on PCMCIA && PCI
...
...
drivers/pcmcia/Makefile
View file @
7e1ec8c8
...
@@ -9,6 +9,7 @@ endif
...
@@ -9,6 +9,7 @@ endif
obj-$(CONFIG_PCMCIA)
+=
pcmcia_core.o ds.o
obj-$(CONFIG_PCMCIA)
+=
pcmcia_core.o ds.o
obj-$(CONFIG_YENTA)
+=
yenta_socket.o
obj-$(CONFIG_YENTA)
+=
yenta_socket.o
obj-$(CONFIG_PD6729)
+=
pd6729.o
obj-$(CONFIG_I82365)
+=
i82365.o
obj-$(CONFIG_I82365)
+=
i82365.o
obj-$(CONFIG_I82092)
+=
i82092.o
obj-$(CONFIG_I82092)
+=
i82092.o
obj-$(CONFIG_TCIC)
+=
tcic.o
obj-$(CONFIG_TCIC)
+=
tcic.o
...
...
drivers/pcmcia/cistpl.c
View file @
7e1ec8c8
...
@@ -85,13 +85,15 @@ INT_MODULE_PARM(cis_width, 0); /* 16-bit CIS? */
...
@@ -85,13 +85,15 @@ INT_MODULE_PARM(cis_width, 0); /* 16-bit CIS? */
void
release_cis_mem
(
struct
pcmcia_socket
*
s
)
void
release_cis_mem
(
struct
pcmcia_socket
*
s
)
{
{
if
(
s
->
cis_mem
.
sys_start
!=
0
)
{
if
(
s
->
cis_mem
.
flags
&
MAP_ACTIVE
)
{
s
->
cis_mem
.
flags
&=
~
MAP_ACTIVE
;
s
->
cis_mem
.
flags
&=
~
MAP_ACTIVE
;
s
->
ops
->
set_mem_map
(
s
,
&
s
->
cis_mem
);
s
->
ops
->
set_mem_map
(
s
,
&
s
->
cis_mem
);
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
))
if
(
s
->
cis_mem
.
res
)
{
release_mem_region
(
s
->
cis_mem
.
sys_start
,
s
->
map_size
);
release_resource
(
s
->
cis_mem
.
res
);
kfree
(
s
->
cis_mem
.
res
);
s
->
cis_mem
.
res
=
NULL
;
}
iounmap
(
s
->
cis_virt
);
iounmap
(
s
->
cis_virt
);
s
->
cis_mem
.
sys_start
=
0
;
s
->
cis_virt
=
NULL
;
s
->
cis_virt
=
NULL
;
}
}
}
}
...
@@ -105,17 +107,16 @@ static unsigned char *
...
@@ -105,17 +107,16 @@ static unsigned char *
set_cis_map
(
struct
pcmcia_socket
*
s
,
unsigned
int
card_offset
,
unsigned
int
flags
)
set_cis_map
(
struct
pcmcia_socket
*
s
,
unsigned
int
card_offset
,
unsigned
int
flags
)
{
{
pccard_mem_map
*
mem
=
&
s
->
cis_mem
;
pccard_mem_map
*
mem
=
&
s
->
cis_mem
;
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
)
&&
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
)
&&
mem
->
res
==
NULL
)
{
mem
->
sys_start
==
0
)
{
mem
->
res
=
find_mem_region
(
0
,
s
->
map_size
,
s
->
map_size
,
0
,
validate_mem
(
s
);
"card services"
,
s
);
mem
->
sys_start
=
0
;
if
(
mem
->
res
==
NULL
)
{
if
(
find_mem_region
(
&
mem
->
sys_start
,
s
->
map_size
,
s
->
map_size
,
0
,
"card services"
,
s
))
{
printk
(
KERN_NOTICE
"cs: unable to map card memory!
\n
"
);
printk
(
KERN_NOTICE
"cs: unable to map card memory!
\n
"
);
return
NULL
;
return
NULL
;
}
}
mem
->
sys_stop
=
mem
->
sys_start
+
s
->
map_size
-
1
;
mem
->
sys_start
=
mem
->
res
->
start
;
s
->
cis_virt
=
ioremap
(
mem
->
sys_start
,
s
->
map_size
);
mem
->
sys_stop
=
mem
->
res
->
end
;
s
->
cis_virt
=
ioremap
(
mem
->
res
->
start
,
s
->
map_size
);
}
}
mem
->
card_start
=
card_offset
;
mem
->
card_start
=
card_offset
;
mem
->
flags
=
flags
;
mem
->
flags
=
flags
;
...
...
drivers/pcmcia/cs.c
View file @
7e1ec8c8
...
@@ -1100,8 +1100,8 @@ int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req)
...
@@ -1100,8 +1100,8 @@ int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req)
if
(
w
==
MAX_WIN
)
if
(
w
==
MAX_WIN
)
return
CS_NO_MORE_ITEMS
;
return
CS_NO_MORE_ITEMS
;
win
=
&
s
->
win
[
w
];
win
=
&
s
->
win
[
w
];
req
->
Base
=
win
->
ctl
.
sys_
start
;
req
->
Base
=
win
->
ctl
.
res
->
start
;
req
->
Size
=
win
->
ctl
.
sys_stop
-
win
->
ctl
.
sys_
start
+
1
;
req
->
Size
=
win
->
ctl
.
res
->
end
-
win
->
ctl
.
res
->
start
+
1
;
req
->
AccessSpeed
=
win
->
ctl
.
speed
;
req
->
AccessSpeed
=
win
->
ctl
.
speed
;
req
->
Attributes
=
0
;
req
->
Attributes
=
0
;
if
(
win
->
ctl
.
flags
&
MAP_ATTRIB
)
if
(
win
->
ctl
.
flags
&
MAP_ATTRIB
)
...
@@ -1548,8 +1548,11 @@ int pcmcia_release_window(window_handle_t win)
...
@@ -1548,8 +1548,11 @@ int pcmcia_release_window(window_handle_t win)
s
->
state
&=
~
SOCKET_WIN_REQ
(
win
->
index
);
s
->
state
&=
~
SOCKET_WIN_REQ
(
win
->
index
);
/* Release system memory */
/* Release system memory */
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
))
if
(
win
->
ctl
.
res
)
{
release_mem_region
(
win
->
base
,
win
->
size
);
release_resource
(
win
->
ctl
.
res
);
kfree
(
win
->
ctl
.
res
);
win
->
ctl
.
res
=
NULL
;
}
win
->
handle
->
state
&=
~
CLIENT_WIN_REQ
(
win
->
index
);
win
->
handle
->
state
&=
~
CLIENT_WIN_REQ
(
win
->
index
);
win
->
magic
=
0
;
win
->
magic
=
0
;
...
@@ -1871,14 +1874,19 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
...
@@ -1871,14 +1874,19 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
win
->
index
=
w
;
win
->
index
=
w
;
win
->
handle
=
*
handle
;
win
->
handle
=
*
handle
;
win
->
sock
=
s
;
win
->
sock
=
s
;
win
->
base
=
req
->
Base
;
win
->
size
=
req
->
Size
;
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
)
&&
if
(
!
(
s
->
features
&
SS_CAP_STATIC_MAP
)
)
{
find_mem_region
(
&
win
->
base
,
win
->
s
ize
,
align
,
win
->
ctl
.
res
=
find_mem_region
(
req
->
Base
,
req
->
S
ize
,
align
,
(
req
->
Attributes
&
WIN_MAP_BELOW_1MB
),
(
req
->
Attributes
&
WIN_MAP_BELOW_1MB
),
(
*
handle
)
->
dev_info
,
s
))
(
*
handle
)
->
dev_info
,
s
);
if
(
!
win
->
ctl
.
res
)
return
CS_IN_USE
;
return
CS_IN_USE
;
win
->
ctl
.
sys_start
=
win
->
ctl
.
res
->
start
;
win
->
ctl
.
sys_stop
=
win
->
ctl
.
res
->
end
;
}
else
{
win
->
ctl
.
sys_start
=
req
->
Base
;
win
->
ctl
.
sys_stop
=
req
->
Base
+
req
->
Size
-
1
;
}
(
*
handle
)
->
state
|=
CLIENT_WIN_REQ
(
w
);
(
*
handle
)
->
state
|=
CLIENT_WIN_REQ
(
w
);
/* Configure the socket controller */
/* Configure the socket controller */
...
@@ -1893,8 +1901,6 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
...
@@ -1893,8 +1901,6 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
win
->
ctl
.
flags
|=
MAP_16BIT
;
win
->
ctl
.
flags
|=
MAP_16BIT
;
if
(
req
->
Attributes
&
WIN_USE_WAIT
)
if
(
req
->
Attributes
&
WIN_USE_WAIT
)
win
->
ctl
.
flags
|=
MAP_USE_WAIT
;
win
->
ctl
.
flags
|=
MAP_USE_WAIT
;
win
->
ctl
.
sys_start
=
win
->
base
;
win
->
ctl
.
sys_stop
=
win
->
base
+
win
->
size
-
1
;
win
->
ctl
.
card_start
=
0
;
win
->
ctl
.
card_start
=
0
;
if
(
s
->
ops
->
set_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
if
(
s
->
ops
->
set_mem_map
(
s
,
&
win
->
ctl
)
!=
0
)
return
CS_BAD_ARGS
;
return
CS_BAD_ARGS
;
...
...
drivers/pcmcia/cs_internal.h
View file @
7e1ec8c8
...
@@ -180,12 +180,12 @@ int write_memory(memory_handle_t handle, mem_op_t *req, caddr_t buf);
...
@@ -180,12 +180,12 @@ int write_memory(memory_handle_t handle, mem_op_t *req, caddr_t buf);
int
copy_memory
(
memory_handle_t
handle
,
copy_op_t
*
req
);
int
copy_memory
(
memory_handle_t
handle
,
copy_op_t
*
req
);
/* In rsrc_mgr */
/* In rsrc_mgr */
void
validate_mem
(
struct
pcmcia_socket
*
s
);
void
pcmcia_
validate_mem
(
struct
pcmcia_socket
*
s
);
struct
resource
*
find_io_region
(
unsigned
long
base
,
int
num
,
unsigned
long
align
,
struct
resource
*
find_io_region
(
unsigned
long
base
,
int
num
,
unsigned
long
align
,
char
*
name
,
struct
pcmcia_socket
*
s
);
char
*
name
,
struct
pcmcia_socket
*
s
);
int
adjust_io_region
(
struct
resource
*
res
,
unsigned
long
r_start
,
int
adjust_io_region
(
struct
resource
*
res
,
unsigned
long
r_start
,
unsigned
long
r_end
,
struct
pcmcia_socket
*
s
);
unsigned
long
r_end
,
struct
pcmcia_socket
*
s
);
int
find_mem_region
(
u_long
*
base
,
u_long
num
,
u_long
align
,
struct
resource
*
find_mem_region
(
u_long
base
,
u_long
num
,
u_long
align
,
int
low
,
char
*
name
,
struct
pcmcia_socket
*
s
);
int
low
,
char
*
name
,
struct
pcmcia_socket
*
s
);
int
try_irq
(
u_int
Attributes
,
int
irq
,
int
specific
);
int
try_irq
(
u_int
Attributes
,
int
irq
,
int
specific
);
void
undo_irq
(
u_int
Attributes
,
int
irq
);
void
undo_irq
(
u_int
Attributes
,
int
irq
);
...
...
drivers/pcmcia/ds.c
View file @
7e1ec8c8
...
@@ -941,6 +941,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
...
@@ -941,6 +941,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
ret
=
pcmcia_get_configuration_info
(
s
->
handle
,
&
buf
.
config
);
ret
=
pcmcia_get_configuration_info
(
s
->
handle
,
&
buf
.
config
);
break
;
break
;
case
DS_GET_FIRST_TUPLE
:
case
DS_GET_FIRST_TUPLE
:
pcmcia_validate_mem
(
s
->
parent
);
ret
=
pcmcia_get_first_tuple
(
s
->
handle
,
&
buf
.
tuple
);
ret
=
pcmcia_get_first_tuple
(
s
->
handle
,
&
buf
.
tuple
);
break
;
break
;
case
DS_GET_NEXT_TUPLE
:
case
DS_GET_NEXT_TUPLE
:
...
@@ -962,6 +963,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
...
@@ -962,6 +963,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
ret
=
pcmcia_get_status
(
s
->
handle
,
&
buf
.
status
);
ret
=
pcmcia_get_status
(
s
->
handle
,
&
buf
.
status
);
break
;
break
;
case
DS_VALIDATE_CIS
:
case
DS_VALIDATE_CIS
:
pcmcia_validate_mem
(
s
->
parent
);
ret
=
pcmcia_validate_cis
(
s
->
handle
,
&
buf
.
cisinfo
);
ret
=
pcmcia_validate_cis
(
s
->
handle
,
&
buf
.
cisinfo
);
break
;
break
;
case
DS_SUSPEND_CARD
:
case
DS_SUSPEND_CARD
:
...
...
drivers/pcmcia/i82092.c
View file @
7e1ec8c8
...
@@ -420,12 +420,12 @@ static void set_bridge_state(int sock)
...
@@ -420,12 +420,12 @@ static void set_bridge_state(int sock)
static
int
i82092aa_init
(
struct
pcmcia_socket
*
sock
)
static
int
i82092aa_init
(
struct
pcmcia_socket
*
sock
)
{
{
int
i
;
int
i
;
struct
resource
res
=
{
.
start
=
0
,
.
end
=
0x0fff
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_mem_map
mem
=
{
0
,
0
,
0
,
0
,
0
,
0
};
pccard_mem_map
mem
=
{
.
res
=
&
res
,
.
sys_stop
=
0x0fff
,
};
enter
(
"i82092aa_init"
);
enter
(
"i82092aa_init"
);
mem
.
sys_stop
=
0x0fff
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
io
.
map
=
i
;
io
.
map
=
i
;
i82092aa_set_io_map
(
sock
,
&
io
);
i82092aa_set_io_map
(
sock
,
&
io
);
...
...
drivers/pcmcia/i82365.c
View file @
7e1ec8c8
...
@@ -1307,10 +1307,10 @@ static int pcic_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
...
@@ -1307,10 +1307,10 @@ static int pcic_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
static
int
pcic_init
(
struct
pcmcia_socket
*
s
)
static
int
pcic_init
(
struct
pcmcia_socket
*
s
)
{
{
int
i
;
int
i
;
struct
resource
res
=
{
.
start
=
0
,
.
end
=
0x1000
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_mem_map
mem
=
{
0
,
0
,
0
,
0
,
0
,
0
};
pccard_mem_map
mem
=
{
.
res
=
&
res
,
.
sys_stop
=
0x1000
,
};
mem
.
sys_stop
=
0x1000
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
io
.
map
=
i
;
io
.
map
=
i
;
pcic_set_io_map
(
s
,
&
io
);
pcic_set_io_map
(
s
,
&
io
);
...
...
drivers/pcmcia/pd6729.c
0 → 100644
View file @
7e1ec8c8
/*
* Driver for the Cirrus PD6729 PCI-PCMCIA bridge.
*
* Based on the i82092.c driver.
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
*/
#include <linux/kernel.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/device.h>
#include <pcmcia/cs_types.h>
#include <pcmcia/ss.h>
#include <pcmcia/cs.h>
#include <asm/system.h>
#include <asm/io.h>
#include "pd6729.h"
#include "i82365.h"
#include "cirrus.h"
MODULE_LICENSE
(
"GPL"
);
#define MAX_SOCKETS 2
/* simple helper functions */
/* External clock time, in nanoseconds. 120 ns = 8.33 MHz */
#define to_cycles(ns) ((ns)/120)
static
spinlock_t
port_lock
=
SPIN_LOCK_UNLOCKED
;
/* basic value read/write functions */
static
unsigned
char
indirect_read
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
)
{
unsigned
long
port
;
unsigned
char
val
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
+=
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
val
=
inb
(
port
+
1
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
return
val
;
}
static
unsigned
short
indirect_read16
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
)
{
unsigned
long
port
;
unsigned
short
tmp
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
=
reg
+
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
tmp
=
inb
(
port
+
1
);
reg
++
;
outb
(
reg
,
port
);
tmp
=
tmp
|
(
inb
(
port
+
1
)
<<
8
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
return
tmp
;
}
static
void
indirect_write
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
,
unsigned
char
value
)
{
unsigned
long
port
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
=
reg
+
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
outb
(
value
,
port
+
1
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
}
static
void
indirect_setbit
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
,
unsigned
char
mask
)
{
unsigned
long
port
;
unsigned
char
val
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
=
reg
+
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
val
=
inb
(
port
+
1
);
val
|=
mask
;
outb
(
reg
,
port
);
outb
(
val
,
port
+
1
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
}
static
void
indirect_resetbit
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
,
unsigned
char
mask
)
{
unsigned
long
port
;
unsigned
char
val
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
=
reg
+
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
val
=
inb
(
port
+
1
);
val
&=
~
mask
;
outb
(
reg
,
port
);
outb
(
val
,
port
+
1
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
}
static
void
indirect_write16
(
struct
pd6729_socket
*
socket
,
unsigned
short
reg
,
unsigned
short
value
)
{
unsigned
long
port
;
unsigned
char
val
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
port_lock
,
flags
);
reg
=
reg
+
socket
->
number
*
0x40
;
port
=
socket
->
io_base
;
outb
(
reg
,
port
);
val
=
value
&
255
;
outb
(
val
,
port
+
1
);
reg
++
;
outb
(
reg
,
port
);
val
=
value
>>
8
;
outb
(
val
,
port
+
1
);
spin_unlock_irqrestore
(
&
port_lock
,
flags
);
}
/* Interrupt handler functionality */
static
irqreturn_t
pd6729_interrupt
(
int
irq
,
void
*
dev
,
struct
pt_regs
*
regs
)
{
struct
pd6729_socket
*
socket
=
(
struct
pd6729_socket
*
)
dev
;
int
i
;
int
loopcount
=
0
;
int
handled
=
0
;
unsigned
int
events
,
active
=
0
;
while
(
1
)
{
loopcount
++
;
if
(
loopcount
>
20
)
{
printk
(
KERN_ERR
"pd6729: infinite eventloop in interrupt
\n
"
);
break
;
}
active
=
0
;
for
(
i
=
0
;
i
<
MAX_SOCKETS
;
i
++
)
{
unsigned
int
csc
;
/* card status change register */
csc
=
indirect_read
(
&
socket
[
i
],
I365_CSC
);
if
(
csc
==
0
)
/* no events on this socket */
continue
;
handled
=
1
;
events
=
0
;
if
(
csc
&
I365_CSC_DETECT
)
{
events
|=
SS_DETECT
;
dprintk
(
"Card detected in socket %i!
\n
"
,
i
);
}
if
(
indirect_read
(
&
socket
[
i
],
I365_INTCTL
)
&
I365_PC_IOCARD
)
{
/* For IO/CARDS, bit 0 means "read the card" */
events
|=
(
csc
&
I365_CSC_STSCHG
)
?
SS_STSCHG
:
0
;
}
else
{
/* Check for battery/ready events */
events
|=
(
csc
&
I365_CSC_BVD1
)
?
SS_BATDEAD
:
0
;
events
|=
(
csc
&
I365_CSC_BVD2
)
?
SS_BATWARN
:
0
;
events
|=
(
csc
&
I365_CSC_READY
)
?
SS_READY
:
0
;
}
if
(
events
)
{
pcmcia_parse_events
(
&
socket
[
i
].
socket
,
events
);
}
active
|=
events
;
}
if
(
active
==
0
)
/* no more events to handle */
break
;
}
return
IRQ_RETVAL
(
handled
);
}
/* socket functions */
static
void
set_bridge_state
(
struct
pd6729_socket
*
socket
)
{
indirect_write
(
socket
,
I365_GBLCTL
,
0x00
);
indirect_write
(
socket
,
I365_GENCTL
,
0x00
);
indirect_setbit
(
socket
,
I365_INTCTL
,
0x08
);
}
static
int
pd6729_get_status
(
struct
pcmcia_socket
*
sock
,
u_int
*
value
)
{
struct
pd6729_socket
*
socket
=
container_of
(
sock
,
struct
pd6729_socket
,
socket
);
unsigned
int
status
;
unsigned
int
data
;
struct
pd6729_socket
*
t
;
/* Interface Status Register */
status
=
indirect_read
(
socket
,
I365_STATUS
);
*
value
=
0
;
if
((
status
&
I365_CS_DETECT
)
==
I365_CS_DETECT
)
{
*
value
|=
SS_DETECT
;
}
/* IO cards have a different meaning of bits 0,1 */
/* Also notice the inverse-logic on the bits */
if
(
indirect_read
(
socket
,
I365_INTCTL
)
&
I365_PC_IOCARD
)
{
/* IO card */
if
(
!
(
status
&
I365_CS_STSCHG
))
*
value
|=
SS_STSCHG
;
}
else
{
/* non I/O card */
if
(
!
(
status
&
I365_CS_BVD1
))
*
value
|=
SS_BATDEAD
;
if
(
!
(
status
&
I365_CS_BVD2
))
*
value
|=
SS_BATWARN
;
}
if
(
status
&
I365_CS_WRPROT
)
*
value
|=
SS_WRPROT
;
/* card is write protected */
if
(
status
&
I365_CS_READY
)
*
value
|=
SS_READY
;
/* card is not busy */
if
(
status
&
I365_CS_POWERON
)
*
value
|=
SS_POWERON
;
/* power is applied to the card */
t
=
(
socket
->
number
)
?
socket
:
socket
+
1
;
indirect_write
(
t
,
PD67_EXT_INDEX
,
PD67_EXTERN_DATA
);
data
=
indirect_read16
(
t
,
PD67_EXT_DATA
);
*
value
|=
(
data
&
PD67_EXD_VS1
(
socket
->
number
))
?
0
:
SS_3VCARD
;
return
0
;
}
static
int
pd6729_get_socket
(
struct
pcmcia_socket
*
sock
,
socket_state_t
*
state
)
{
struct
pd6729_socket
*
socket
=
container_of
(
sock
,
struct
pd6729_socket
,
socket
);
unsigned
char
reg
,
vcc
,
vpp
;
state
->
flags
=
0
;
state
->
Vcc
=
0
;
state
->
Vpp
=
0
;
state
->
io_irq
=
0
;
state
->
csc_mask
=
0
;
/* First the power status of the socket */
/* PCTRL - Power Control Register */
reg
=
indirect_read
(
socket
,
I365_POWER
);
if
(
reg
&
I365_PWR_AUTO
)
state
->
flags
|=
SS_PWR_AUTO
;
/* Automatic Power Switch */
if
(
reg
&
I365_PWR_OUT
)
state
->
flags
|=
SS_OUTPUT_ENA
;
/* Output signals are enabled */
vcc
=
reg
&
I365_VCC_MASK
;
vpp
=
reg
&
I365_VPP1_MASK
;
if
(
reg
&
I365_VCC_5V
)
{
state
->
Vcc
=
(
indirect_read
(
socket
,
PD67_MISC_CTL_1
)
&
PD67_MC1_VCC_3V
)
?
33
:
50
;
if
(
vpp
==
I365_VPP1_5V
)
{
if
(
state
->
Vcc
==
50
)
state
->
Vpp
=
50
;
else
state
->
Vpp
=
33
;
}
if
(
vpp
==
I365_VPP1_12V
)
state
->
Vpp
=
120
;
}
/* Now the IO card, RESET flags and IO interrupt */
/* IGENC, Interrupt and General Control */
reg
=
indirect_read
(
socket
,
I365_INTCTL
);
if
((
reg
&
I365_PC_RESET
)
==
0
)
state
->
flags
|=
SS_RESET
;
if
(
reg
&
I365_PC_IOCARD
)
state
->
flags
|=
SS_IOCARD
;
/* This is an IO card */
/* Set the IRQ number */
state
->
io_irq
=
socket
->
socket
.
pci_irq
;
/* Card status change */
/* CSCICR, Card Status Change Interrupt Configuration */
reg
=
indirect_read
(
socket
,
I365_CSCINT
);
if
(
reg
&
I365_CSC_DETECT
)
state
->
csc_mask
|=
SS_DETECT
;
/* Card detect is enabled */
if
(
state
->
flags
&
SS_IOCARD
)
{
/* IO Cards behave different */
if
(
reg
&
I365_CSC_STSCHG
)
state
->
csc_mask
|=
SS_STSCHG
;
}
else
{
if
(
reg
&
I365_CSC_BVD1
)
state
->
csc_mask
|=
SS_BATDEAD
;
if
(
reg
&
I365_CSC_BVD2
)
state
->
csc_mask
|=
SS_BATWARN
;
if
(
reg
&
I365_CSC_READY
)
state
->
csc_mask
|=
SS_READY
;
}
return
0
;
}
static
int
pd6729_set_socket
(
struct
pcmcia_socket
*
sock
,
socket_state_t
*
state
)
{
struct
pd6729_socket
*
socket
=
container_of
(
sock
,
struct
pd6729_socket
,
socket
);
unsigned
char
reg
;
/* First, set the global controller options */
set_bridge_state
(
socket
);
/* Values for the IGENC register */
reg
=
0
;
/* The reset bit has "inverse" logic */
if
(
!
(
state
->
flags
&
SS_RESET
))
reg
=
reg
|
I365_PC_RESET
;
if
(
state
->
flags
&
SS_IOCARD
)
reg
=
reg
|
I365_PC_IOCARD
;
/* IGENC, Interrupt and General Control Register */
indirect_write
(
socket
,
I365_INTCTL
,
reg
);
/* Power registers */
reg
=
I365_PWR_NORESET
;
/* default: disable resetdrv on resume */
if
(
state
->
flags
&
SS_PWR_AUTO
)
{
dprintk
(
"Auto power
\n
"
);
reg
|=
I365_PWR_AUTO
;
/* automatic power mngmnt */
}
if
(
state
->
flags
&
SS_OUTPUT_ENA
)
{
dprintk
(
"Power Enabled
\n
"
);
reg
|=
I365_PWR_OUT
;
/* enable power */
}
switch
(
state
->
Vcc
)
{
case
0
:
break
;
case
33
:
dprintk
(
"setting voltage to Vcc to 3.3V on socket %i
\n
"
,
socket
->
number
);
reg
|=
I365_VCC_5V
;
indirect_setbit
(
socket
,
PD67_MISC_CTL_1
,
PD67_MC1_VCC_3V
);
break
;
case
50
:
dprintk
(
"setting voltage to Vcc to 5V on socket %i
\n
"
,
socket
->
number
);
reg
|=
I365_VCC_5V
;
indirect_resetbit
(
socket
,
PD67_MISC_CTL_1
,
PD67_MC1_VCC_3V
);
break
;
default:
dprintk
(
"pd6729: pd6729_set_socket called with invalid VCC power value: %i
\n
"
,
state
->
Vcc
);
return
-
EINVAL
;
}
switch
(
state
->
Vpp
)
{
case
0
:
dprintk
(
"not setting Vpp on socket %i
\n
"
,
socket
->
number
);
break
;
case
33
:
case
50
:
dprintk
(
"setting Vpp to Vcc for socket %i
\n
"
,
socket
->
number
);
reg
|=
I365_VPP1_5V
;
break
;
case
120
:
dprintk
(
"setting Vpp to 12.0
\n
"
);
reg
|=
I365_VPP1_12V
;
break
;
default:
dprintk
(
"pd6729: pd6729_set_socket called with invalid VPP power value: %i
\n
"
,
state
->
Vpp
);
return
-
EINVAL
;
}
/* only write if changed */
if
(
reg
!=
indirect_read
(
socket
,
I365_POWER
))
indirect_write
(
socket
,
I365_POWER
,
reg
);
/* Now, specifiy that all interrupts are to be done as PCI interrupts */
indirect_write
(
socket
,
PD67_EXT_INDEX
,
PD67_EXT_CTL_1
);
indirect_write
(
socket
,
PD67_EXT_DATA
,
PD67_EC1_INV_MGMT_IRQ
|
PD67_EC1_INV_CARD_IRQ
);
/* Enable specific interrupt events */
reg
=
0x00
;
if
(
state
->
csc_mask
&
SS_DETECT
)
{
reg
|=
I365_CSC_DETECT
;
}
if
(
state
->
flags
&
SS_IOCARD
)
{
if
(
state
->
csc_mask
&
SS_STSCHG
)
reg
|=
I365_CSC_STSCHG
;
}
else
{
if
(
state
->
csc_mask
&
SS_BATDEAD
)
reg
|=
I365_CSC_BVD1
;
if
(
state
->
csc_mask
&
SS_BATWARN
)
reg
|=
I365_CSC_BVD2
;
if
(
state
->
csc_mask
&
SS_READY
)
reg
|=
I365_CSC_READY
;
}
reg
|=
0x30
;
/* management IRQ: PCI INTA# = "irq 3" */
indirect_write
(
socket
,
I365_CSCINT
,
reg
);
reg
=
indirect_read
(
socket
,
I365_INTCTL
);
reg
|=
0x03
;
/* card IRQ: PCI INTA# = "irq 3" */
indirect_write
(
socket
,
I365_INTCTL
,
reg
);
/* now clear the (probably bogus) pending stuff by doing a dummy read */
(
void
)
indirect_read
(
socket
,
I365_CSC
);
return
0
;
}
static
int
pd6729_set_io_map
(
struct
pcmcia_socket
*
sock
,
struct
pccard_io_map
*
io
)
{
struct
pd6729_socket
*
socket
=
container_of
(
sock
,
struct
pd6729_socket
,
socket
);
unsigned
char
map
,
ioctl
;
map
=
io
->
map
;
/* Check error conditions */
if
(
map
>
1
)
{
dprintk
(
"pd6729_set_io_map with invalid map"
);
return
-
EINVAL
;
}
/* Turn off the window before changing anything */
if
(
indirect_read
(
socket
,
I365_ADDRWIN
)
&
I365_ENA_IO
(
map
))
indirect_resetbit
(
socket
,
I365_ADDRWIN
,
I365_ENA_IO
(
map
));
/* dprintk("set_io_map: Setting range to %x - %x\n", io->start, io->stop);*/
/* write the new values */
indirect_write16
(
socket
,
I365_IO
(
map
)
+
I365_W_START
,
io
->
start
);
indirect_write16
(
socket
,
I365_IO
(
map
)
+
I365_W_STOP
,
io
->
stop
);
ioctl
=
indirect_read
(
socket
,
I365_IOCTL
)
&
~
I365_IOCTL_MASK
(
map
);
if
(
io
->
flags
&
MAP_0WS
)
ioctl
|=
I365_IOCTL_0WS
(
map
);
if
(
io
->
flags
&
MAP_16BIT
)
ioctl
|=
I365_IOCTL_16BIT
(
map
);
if
(
io
->
flags
&
MAP_AUTOSZ
)
ioctl
|=
I365_IOCTL_IOCS16
(
map
);
indirect_write
(
socket
,
I365_IOCTL
,
ioctl
);
/* Turn the window back on if needed */
if
(
io
->
flags
&
MAP_ACTIVE
)
indirect_setbit
(
socket
,
I365_ADDRWIN
,
I365_ENA_IO
(
map
));
return
0
;
}
static
int
pd6729_set_mem_map
(
struct
pcmcia_socket
*
sock
,
struct
pccard_mem_map
*
mem
)
{
struct
pd6729_socket
*
socket
=
container_of
(
sock
,
struct
pd6729_socket
,
socket
);
unsigned
short
base
,
i
;
unsigned
char
map
;
map
=
mem
->
map
;
if
(
map
>
4
)
{
printk
(
"pd6729_set_mem_map: invalid map"
);
return
-
EINVAL
;
}
if
((
mem
->
sys_start
>
mem
->
sys_stop
)
||
(
mem
->
speed
>
1000
))
{
printk
(
"pd6729_set_mem_map: invalid address / speed"
);
/* printk("invalid mem map for socket %i : %lx to %lx with a start of %x\n",
sock, mem->sys_start, mem->sys_stop, mem->card_start); */
return
-
EINVAL
;
}
/* Turn off the window before changing anything */
if
(
indirect_read
(
socket
,
I365_ADDRWIN
)
&
I365_ENA_MEM
(
map
))
indirect_resetbit
(
socket
,
I365_ADDRWIN
,
I365_ENA_MEM
(
map
));
/* write the start address */
base
=
I365_MEM
(
map
);
i
=
(
mem
->
sys_start
>>
12
)
&
0x0fff
;
if
(
mem
->
flags
&
MAP_16BIT
)
i
|=
I365_MEM_16BIT
;
if
(
mem
->
flags
&
MAP_0WS
)
i
|=
I365_MEM_0WS
;
indirect_write16
(
socket
,
base
+
I365_W_START
,
i
);
/* write the stop address */
i
=
(
mem
->
sys_stop
>>
12
)
&
0x0fff
;
switch
(
to_cycles
(
mem
->
speed
))
{
case
0
:
break
;
case
1
:
i
|=
I365_MEM_WS0
;
break
;
case
2
:
i
|=
I365_MEM_WS1
;
break
;
default:
i
|=
I365_MEM_WS1
|
I365_MEM_WS0
;
break
;
}
indirect_write16
(
socket
,
base
+
I365_W_STOP
,
i
);
/* Take care of high byte */
indirect_write
(
socket
,
PD67_EXT_INDEX
,
PD67_MEM_PAGE
(
map
));
indirect_write
(
socket
,
PD67_EXT_DATA
,
mem
->
sys_start
>>
24
);
/* card start */
i
=
((
mem
->
card_start
-
mem
->
sys_start
)
>>
12
)
&
0x3fff
;
if
(
mem
->
flags
&
MAP_WRPROT
)
i
|=
I365_MEM_WRPROT
;
if
(
mem
->
flags
&
MAP_ATTRIB
)
{
/* dprintk("requesting attribute memory for socket %i\n",
socket->number);*/
i
|=
I365_MEM_REG
;
}
else
{
/* dprintk("requesting normal memory for socket %i\n",
socket->number);*/
}
indirect_write16
(
socket
,
base
+
I365_W_OFF
,
i
);
/* Enable the window if necessary */
if
(
mem
->
flags
&
MAP_ACTIVE
)
indirect_setbit
(
socket
,
I365_ADDRWIN
,
I365_ENA_MEM
(
map
));
return
0
;
}
static
int
pd6729_suspend
(
struct
pcmcia_socket
*
sock
)
{
return
pd6729_set_socket
(
sock
,
&
dead_socket
);
}
static
int
pd6729_init
(
struct
pcmcia_socket
*
sock
)
{
int
i
;
struct
resource
res
=
{
.
end
=
0x0fff
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_mem_map
mem
=
{
.
res
=
&
res
,
.
sys_stop
=
0x0fff
};
pd6729_set_socket
(
sock
,
&
dead_socket
);
for
(
i
=
0
;
i
<
2
;
i
++
)
{
io
.
map
=
i
;
pd6729_set_io_map
(
sock
,
&
io
);
}
for
(
i
=
0
;
i
<
5
;
i
++
)
{
mem
.
map
=
i
;
pd6729_set_mem_map
(
sock
,
&
mem
);
}
return
0
;
}
/* the pccard structure and its functions */
static
struct
pccard_operations
pd6729_operations
=
{
.
init
=
pd6729_init
,
.
suspend
=
pd6729_suspend
,
.
get_status
=
pd6729_get_status
,
.
get_socket
=
pd6729_get_socket
,
.
set_socket
=
pd6729_set_socket
,
.
set_io_map
=
pd6729_set_io_map
,
.
set_mem_map
=
pd6729_set_mem_map
,
};
static
int
__devinit
pd6729_pci_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
id
)
{
int
i
,
j
,
ret
;
char
configbyte
;
struct
pd6729_socket
*
socket
;
socket
=
kmalloc
(
sizeof
(
struct
pd6729_socket
)
*
MAX_SOCKETS
,
GFP_KERNEL
);
if
(
!
socket
)
return
-
ENOMEM
;
memset
(
socket
,
0
,
sizeof
(
struct
pd6729_socket
)
*
MAX_SOCKETS
);
if
((
ret
=
pci_enable_device
(
dev
)))
goto
err_out_free_mem
;
printk
(
KERN_INFO
"pd6729: Cirrus PD6729 PCI to PCMCIA Bridge at 0x%lx on irq %d
\n
"
,
pci_resource_start
(
dev
,
0
),
dev
->
irq
);
printk
(
KERN_INFO
"pd6729: configured as a %d socket device.
\n
"
,
MAX_SOCKETS
);
/* Since we have no memory BARs some firmware we may not
have had PCI_COMMAND_MEM enabled, yet the device needs
it. */
pci_read_config_byte
(
dev
,
PCI_COMMAND
,
&
configbyte
);
if
(
!
(
configbyte
&
PCI_COMMAND_MEMORY
))
{
printk
(
KERN_DEBUG
"pd6729: Enabling PCI_COMMAND_MEMORY.
\n
"
);
configbyte
|=
PCI_COMMAND_MEMORY
;
pci_write_config_byte
(
dev
,
PCI_COMMAND
,
configbyte
);
}
ret
=
pci_request_regions
(
dev
,
"pd6729"
);
if
(
ret
)
{
printk
(
KERN_INFO
"pd6729: pci request region failed.
\n
"
);
goto
err_out_disable
;
}
for
(
i
=
0
;
i
<
MAX_SOCKETS
;
i
++
)
{
socket
[
i
].
io_base
=
pci_resource_start
(
dev
,
0
);
socket
[
i
].
socket
.
features
|=
SS_CAP_PCCARD
;
socket
[
i
].
socket
.
map_size
=
0x1000
;
socket
[
i
].
socket
.
irq_mask
=
0
;
socket
[
i
].
socket
.
pci_irq
=
dev
->
irq
;
socket
[
i
].
socket
.
owner
=
THIS_MODULE
;
socket
[
i
].
number
=
i
;
socket
[
i
].
socket
.
ops
=
&
pd6729_operations
;
socket
[
i
].
socket
.
dev
.
dev
=
&
dev
->
dev
;
socket
[
i
].
socket
.
driver_data
=
&
socket
[
i
];
}
pci_set_drvdata
(
dev
,
socket
);
/* Register the interrupt handler */
if
((
ret
=
request_irq
(
dev
->
irq
,
pd6729_interrupt
,
SA_SHIRQ
,
"pd6729"
,
socket
)))
{
printk
(
KERN_ERR
"pd6729: Failed to register irq %d, aborting
\n
"
,
dev
->
irq
);
goto
err_out_free_res
;
}
for
(
i
=
0
;
i
<
MAX_SOCKETS
;
i
++
)
{
ret
=
pcmcia_register_socket
(
&
socket
[
i
].
socket
);
if
(
ret
)
{
printk
(
KERN_INFO
"pd6729: pcmcia_register_socket failed.
\n
"
);
for
(
j
=
0
;
j
<
i
;
j
++
)
pcmcia_unregister_socket
(
&
socket
[
j
].
socket
);
goto
err_out_free_res2
;
}
}
return
0
;
err_out_free_res2:
free_irq
(
dev
->
irq
,
socket
);
err_out_free_res:
pci_release_regions
(
dev
);
err_out_disable:
pci_disable_device
(
dev
);
err_out_free_mem:
kfree
(
socket
);
return
ret
;
}
static
void
__devexit
pd6729_pci_remove
(
struct
pci_dev
*
dev
)
{
int
i
;
struct
pd6729_socket
*
socket
=
pci_get_drvdata
(
dev
);
for
(
i
=
0
;
i
<
MAX_SOCKETS
;
i
++
)
pcmcia_unregister_socket
(
&
socket
[
i
].
socket
);
free_irq
(
dev
->
irq
,
socket
);
pci_release_regions
(
dev
);
pci_disable_device
(
dev
);
kfree
(
socket
);
}
static
int
pd6729_socket_suspend
(
struct
pci_dev
*
dev
,
u32
state
)
{
return
pcmcia_socket_dev_suspend
(
&
dev
->
dev
,
state
);
}
static
int
pd6729_socket_resume
(
struct
pci_dev
*
dev
)
{
return
pcmcia_socket_dev_resume
(
&
dev
->
dev
);
}
static
struct
pci_device_id
pd6729_pci_ids
[]
=
{
{
.
vendor
=
PCI_VENDOR_ID_CIRRUS
,
.
device
=
PCI_DEVICE_ID_CIRRUS_6729
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
}
};
MODULE_DEVICE_TABLE
(
pci
,
pd6729_pci_ids
);
static
struct
pci_driver
pd6729_pci_drv
=
{
.
name
=
"pd6729"
,
.
id_table
=
pd6729_pci_ids
,
.
probe
=
pd6729_pci_probe
,
.
remove
=
__devexit_p
(
pd6729_pci_remove
),
.
suspend
=
pd6729_socket_suspend
,
.
resume
=
pd6729_socket_resume
,
};
static
int
pd6729_module_init
(
void
)
{
return
pci_module_init
(
&
pd6729_pci_drv
);
}
static
void
pd6729_module_exit
(
void
)
{
pci_unregister_driver
(
&
pd6729_pci_drv
);
}
module_init
(
pd6729_module_init
);
module_exit
(
pd6729_module_exit
);
drivers/pcmcia/pd6729.h
0 → 100644
View file @
7e1ec8c8
#ifndef _INCLUDE_GUARD_PD6729_H_
#define _INCLUDE_GUARD_PD6729_H_
/* Debuging defines */
#ifdef NOTRACE
#define dprintk(fmt, args...) printk(fmt , ## args)
#else
#define dprintk(fmt, args...) do {} while (0)
#endif
/* Flags for I365_GENCTL */
#define I365_DF_VS1 0x40
/* DF-step Voltage Sense */
#define I365_DF_VS2 0x80
/* Fields in PD67_EXTERN_DATA */
#define PD67_EXD_VS1(s) (0x01 << ((s) << 1))
#define PD67_EXD_VS2(s) (0x02 << ((s) << 1))
struct
pd6729_socket
{
int
number
;
unsigned
long
io_base
;
/* base io address of the socket */
struct
pcmcia_socket
socket
;
};
#endif
drivers/pcmcia/rsrc_mgr.c
View file @
7e1ec8c8
...
@@ -118,7 +118,7 @@ make_resource(unsigned long b, unsigned long n, int flags, char *name)
...
@@ -118,7 +118,7 @@ make_resource(unsigned long b, unsigned long n, int flags, char *name)
res
->
name
=
name
;
res
->
name
=
name
;
res
->
start
=
b
;
res
->
start
=
b
;
res
->
end
=
b
+
n
-
1
;
res
->
end
=
b
+
n
-
1
;
res
->
flags
=
flags
|
IORESOURCE_BUSY
;
res
->
flags
=
flags
;
}
}
return
res
;
return
res
;
}
}
...
@@ -303,6 +303,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, cisinfo_t *in
...
@@ -303,6 +303,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, cisinfo_t *in
s
->
cis_mem
.
sys_start
=
res
->
start
;
s
->
cis_mem
.
sys_start
=
res
->
start
;
s
->
cis_mem
.
sys_stop
=
res
->
end
;
s
->
cis_mem
.
sys_stop
=
res
->
end
;
s
->
cis_mem
.
res
=
res
;
s
->
cis_virt
=
ioremap
(
res
->
start
,
s
->
map_size
);
s
->
cis_virt
=
ioremap
(
res
->
start
,
s
->
map_size
);
if
(
s
->
cis_virt
)
{
if
(
s
->
cis_virt
)
{
ret
=
pcmcia_validate_cis
(
s
->
clients
,
info
);
ret
=
pcmcia_validate_cis
(
s
->
clients
,
info
);
...
@@ -313,6 +314,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, cisinfo_t *in
...
@@ -313,6 +314,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, cisinfo_t *in
}
}
s
->
cis_mem
.
sys_start
=
0
;
s
->
cis_mem
.
sys_start
=
0
;
s
->
cis_mem
.
sys_stop
=
0
;
s
->
cis_mem
.
sys_stop
=
0
;
s
->
cis_mem
.
res
=
NULL
;
if
((
ret
!=
0
)
||
(
info
->
Chains
==
0
))
if
((
ret
!=
0
)
||
(
info
->
Chains
==
0
))
return
0
;
return
0
;
return
1
;
return
1
;
...
@@ -332,6 +334,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
...
@@ -332,6 +334,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
map
.
speed
=
0
;
map
.
speed
=
0
;
map
.
sys_start
=
res
->
start
;
map
.
sys_start
=
res
->
start
;
map
.
sys_stop
=
res
->
end
;
map
.
sys_stop
=
res
->
end
;
map
.
res
=
res
;
map
.
card_start
=
0
;
map
.
card_start
=
0
;
s
->
ops
->
set_mem_map
(
s
,
&
map
);
s
->
ops
->
set_mem_map
(
s
,
&
map
);
...
@@ -454,7 +457,7 @@ static u_long inv_probe(resource_map_t *m, struct pcmcia_socket *s)
...
@@ -454,7 +457,7 @@ static u_long inv_probe(resource_map_t *m, struct pcmcia_socket *s)
return
do_mem_probe
(
m
->
base
,
m
->
num
,
s
);
return
do_mem_probe
(
m
->
base
,
m
->
num
,
s
);
}
}
void
validate_mem
(
struct
pcmcia_socket
*
s
)
static
void
validate_mem
(
struct
pcmcia_socket
*
s
)
{
{
resource_map_t
*
m
,
mm
;
resource_map_t
*
m
,
mm
;
static
u_char
order
[]
=
{
0xd0
,
0xe0
,
0xc0
,
0xf0
};
static
u_char
order
[]
=
{
0xd0
,
0xe0
,
0xc0
,
0xf0
};
...
@@ -462,9 +465,6 @@ void validate_mem(struct pcmcia_socket *s)
...
@@ -462,9 +465,6 @@ void validate_mem(struct pcmcia_socket *s)
u_long
b
,
i
,
ok
=
0
;
u_long
b
,
i
,
ok
=
0
;
int
force_low
=
!
(
s
->
features
&
SS_CAP_PAGE_REGS
);
int
force_low
=
!
(
s
->
features
&
SS_CAP_PAGE_REGS
);
if
(
!
probe_mem
)
return
;
down
(
&
rsrc_sem
);
down
(
&
rsrc_sem
);
/* We do up to four passes through the list */
/* We do up to four passes through the list */
if
(
!
force_low
)
{
if
(
!
force_low
)
{
...
@@ -500,12 +500,12 @@ void validate_mem(struct pcmcia_socket *s)
...
@@ -500,12 +500,12 @@ void validate_mem(struct pcmcia_socket *s)
#else
/* CONFIG_PCMCIA_PROBE */
#else
/* CONFIG_PCMCIA_PROBE */
void
validate_mem
(
struct
pcmcia_socket
*
s
)
static
void
validate_mem
(
struct
pcmcia_socket
*
s
)
{
{
resource_map_t
*
m
,
mm
;
resource_map_t
*
m
,
mm
;
static
int
done
=
0
;
static
int
done
=
0
;
if
(
probe_mem
&&
done
++
==
0
)
{
if
(
done
++
==
0
)
{
down
(
&
rsrc_sem
);
down
(
&
rsrc_sem
);
for
(
m
=
mem_db
.
next
;
m
!=
&
mem_db
;
m
=
mm
.
next
)
{
for
(
m
=
mem_db
.
next
;
m
!=
&
mem_db
;
m
=
mm
.
next
)
{
mm
=
*
m
;
mm
=
*
m
;
...
@@ -518,6 +518,18 @@ void validate_mem(struct pcmcia_socket *s)
...
@@ -518,6 +518,18 @@ void validate_mem(struct pcmcia_socket *s)
#endif
/* CONFIG_PCMCIA_PROBE */
#endif
/* CONFIG_PCMCIA_PROBE */
void
pcmcia_validate_mem
(
struct
pcmcia_socket
*
s
)
{
down
(
&
s
->
skt_sem
);
if
(
probe_mem
&&
s
->
state
&
SOCKET_PRESENT
)
validate_mem
(
s
);
up
(
&
s
->
skt_sem
);
}
EXPORT_SYMBOL
(
pcmcia_validate_mem
);
struct
pcmcia_align_data
{
struct
pcmcia_align_data
{
unsigned
long
mask
;
unsigned
long
mask
;
unsigned
long
offset
;
unsigned
long
offset
;
...
@@ -622,7 +634,7 @@ int adjust_io_region(struct resource *res, unsigned long r_start,
...
@@ -622,7 +634,7 @@ int adjust_io_region(struct resource *res, unsigned long r_start,
struct
resource
*
find_io_region
(
unsigned
long
base
,
int
num
,
struct
resource
*
find_io_region
(
unsigned
long
base
,
int
num
,
unsigned
long
align
,
char
*
name
,
struct
pcmcia_socket
*
s
)
unsigned
long
align
,
char
*
name
,
struct
pcmcia_socket
*
s
)
{
{
struct
resource
*
res
=
make_resource
(
0
,
num
,
IORESOURCE_IO
,
name
);
struct
resource
*
res
=
make_resource
(
0
,
num
,
IORESOURCE_IO
,
s
->
dev
.
class_id
);
struct
pcmcia_align_data
data
;
struct
pcmcia_align_data
data
;
unsigned
long
min
=
base
;
unsigned
long
min
=
base
;
int
ret
;
int
ret
;
...
@@ -641,8 +653,8 @@ struct resource *find_io_region(unsigned long base, int num,
...
@@ -641,8 +653,8 @@ struct resource *find_io_region(unsigned long base, int num,
min
,
0
,
pcmcia_align
,
&
data
);
min
,
0
,
pcmcia_align
,
&
data
);
}
else
}
else
#endif
#endif
ret
=
allocate_resource
(
&
ioport_resource
,
res
,
num
,
min
,
~
0UL
,
0
,
ret
=
allocate_resource
(
&
ioport_resource
,
res
,
num
,
min
,
~
0UL
,
pcmcia_align
,
&
data
);
1
,
pcmcia_align
,
&
data
);
up
(
&
rsrc_sem
);
up
(
&
rsrc_sem
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
...
@@ -652,10 +664,10 @@ struct resource *find_io_region(unsigned long base, int num,
...
@@ -652,10 +664,10 @@ struct resource *find_io_region(unsigned long base, int num,
return
res
;
return
res
;
}
}
int
find_mem_region
(
u_long
*
base
,
u_long
num
,
u_long
align
,
struct
resource
*
find_mem_region
(
u_long
base
,
u_long
num
,
u_long
align
,
int
low
,
char
*
name
,
struct
pcmcia_socket
*
s
)
int
low
,
char
*
name
,
struct
pcmcia_socket
*
s
)
{
{
struct
resource
*
res
=
make_resource
(
0
,
num
,
IORESOURCE_MEM
,
name
);
struct
resource
*
res
=
make_resource
(
0
,
num
,
IORESOURCE_MEM
,
s
->
dev
.
class_id
);
struct
pcmcia_align_data
data
;
struct
pcmcia_align_data
data
;
unsigned
long
min
,
max
;
unsigned
long
min
,
max
;
int
ret
,
i
;
int
ret
,
i
;
...
@@ -663,16 +675,16 @@ int find_mem_region(u_long *base, u_long num, u_long align,
...
@@ -663,16 +675,16 @@ int find_mem_region(u_long *base, u_long num, u_long align,
low
=
low
||
!
(
s
->
features
&
SS_CAP_PAGE_REGS
);
low
=
low
||
!
(
s
->
features
&
SS_CAP_PAGE_REGS
);
data
.
mask
=
align
-
1
;
data
.
mask
=
align
-
1
;
data
.
offset
=
*
base
&
data
.
mask
;
data
.
offset
=
base
&
data
.
mask
;
data
.
map
=
&
mem_db
;
data
.
map
=
&
mem_db
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
if
(
low
)
{
if
(
low
)
{
max
=
0x100000UL
;
max
=
0x100000UL
;
min
=
*
base
<
max
?
*
base
:
0
;
min
=
base
<
max
?
base
:
0
;
}
else
{
}
else
{
max
=
~
0UL
;
max
=
~
0UL
;
min
=
0x100000UL
+
*
base
;
min
=
0x100000UL
+
base
;
}
}
down
(
&
rsrc_sem
);
down
(
&
rsrc_sem
);
...
@@ -684,7 +696,7 @@ int find_mem_region(u_long *base, u_long num, u_long align,
...
@@ -684,7 +696,7 @@ int find_mem_region(u_long *base, u_long num, u_long align,
}
else
}
else
#endif
#endif
ret
=
allocate_resource
(
&
iomem_resource
,
res
,
num
,
min
,
ret
=
allocate_resource
(
&
iomem_resource
,
res
,
num
,
min
,
max
,
0
,
pcmcia_align
,
&
data
);
max
,
1
,
pcmcia_align
,
&
data
);
up
(
&
rsrc_sem
);
up
(
&
rsrc_sem
);
if
(
ret
==
0
||
low
)
if
(
ret
==
0
||
low
)
break
;
break
;
...
@@ -693,10 +705,9 @@ int find_mem_region(u_long *base, u_long num, u_long align,
...
@@ -693,10 +705,9 @@ int find_mem_region(u_long *base, u_long num, u_long align,
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
kfree
(
res
);
kfree
(
res
);
}
else
{
res
=
NULL
;
*
base
=
res
->
start
;
}
}
return
re
t
;
return
re
s
;
}
}
/*======================================================================
/*======================================================================
...
...
drivers/pcmcia/tcic.c
View file @
7e1ec8c8
...
@@ -868,10 +868,10 @@ static int tcic_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *m
...
@@ -868,10 +868,10 @@ static int tcic_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *m
static
int
tcic_init
(
struct
pcmcia_socket
*
s
)
static
int
tcic_init
(
struct
pcmcia_socket
*
s
)
{
{
int
i
;
int
i
;
struct
resource
res
=
{
.
start
=
0
,
.
end
=
0x1000
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_mem_map
mem
=
{
0
,
0
,
0
,
0
,
0
,
0
};
pccard_mem_map
mem
=
{
.
res
=
&
res
,
.
sys_stop
=
0x1000
,
};
mem
.
sys_stop
=
0x1000
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
io
.
map
=
i
;
io
.
map
=
i
;
tcic_set_io_map
(
s
,
&
io
);
tcic_set_io_map
(
s
,
&
io
);
...
...
drivers/pcmcia/yenta_socket.c
View file @
7e1ec8c8
...
@@ -445,10 +445,10 @@ static void yenta_interrupt_wrapper(unsigned long data)
...
@@ -445,10 +445,10 @@ static void yenta_interrupt_wrapper(unsigned long data)
static
void
yenta_clear_maps
(
struct
yenta_socket
*
socket
)
static
void
yenta_clear_maps
(
struct
yenta_socket
*
socket
)
{
{
int
i
;
int
i
;
struct
resource
res
=
{
.
start
=
0
,
.
end
=
0x0fff
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_io_map
io
=
{
0
,
0
,
0
,
0
,
1
};
pccard_mem_map
mem
=
{
0
,
0
,
0
,
0
,
0
,
0
};
pccard_mem_map
mem
=
{
.
res
=
&
res
,
.
sys_stop
=
0x0fff
,
};
mem
.
sys_stop
=
0x0fff
;
yenta_set_socket
(
&
socket
->
socket
,
&
dead_socket
);
yenta_set_socket
(
&
socket
->
socket
,
&
dead_socket
);
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
io
.
map
=
i
;
io
.
map
=
i
;
...
...
fs/isofs/inode.c
View file @
7e1ec8c8
...
@@ -1265,31 +1265,14 @@ static void isofs_read_inode(struct inode * inode)
...
@@ -1265,31 +1265,14 @@ static void isofs_read_inode(struct inode * inode)
inode
->
i_size
=
isonum_733
(
de
->
size
);
inode
->
i_size
=
isonum_733
(
de
->
size
);
}
}
/*
* The ISO-9660 filesystem only stores 32 bits for file size.
* mkisofs handles files up to 2GB-2 = 2147483646 = 0x7FFFFFFE bytes
* in size. This is according to the large file summit paper from 1996.
* WARNING: ISO-9660 filesystems > 1 GB and even > 2 GB are fully
* legal. Do not prevent to use DVD's schilling@fokus.gmd.de
*/
if
((
inode
->
i_size
<
0
||
inode
->
i_size
>
0x7FFFFFFE
)
&&
sbi
->
s_cruft
==
'n'
)
{
printk
(
KERN_WARNING
"Warning: defective CD-ROM. "
"Enabling
\"
cruft
\"
mount option.
\n
"
);
sbi
->
s_cruft
=
'y'
;
}
/*
/*
* Some dipshit decided to store some other bit of information
* Some dipshit decided to store some other bit of information
* in the high byte of the file length. Catch this and holler.
* in the high byte of the file length. Truncate size in case
* WARNING: this will make it impossible for a file to be > 16MB
* this CDROM was mounted with the cruft option.
* on the CDROM.
*/
*/
if
(
sbi
->
s_cruft
==
'y'
&&
if
(
sbi
->
s_cruft
==
'y'
)
inode
->
i_size
&
0xff000000
)
{
inode
->
i_size
&=
0x00ffffff
;
inode
->
i_size
&=
0x00ffffff
;
}
if
(
de
->
interleave
[
0
])
{
if
(
de
->
interleave
[
0
])
{
printk
(
"Interleaved files not (yet) supported.
\n
"
);
printk
(
"Interleaved files not (yet) supported.
\n
"
);
...
...
include/asm-ppc/smp.h
View file @
7e1ec8c8
...
@@ -47,8 +47,6 @@ extern void smp_local_timer_interrupt(struct pt_regs *);
...
@@ -47,8 +47,6 @@ extern void smp_local_timer_interrupt(struct pt_regs *);
#define smp_processor_id() (current_thread_info()->cpu)
#define smp_processor_id() (current_thread_info()->cpu)
#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
extern
int
__cpu_up
(
unsigned
int
cpu
);
extern
int
__cpu_up
(
unsigned
int
cpu
);
extern
int
smp_hw_index
[];
extern
int
smp_hw_index
[];
...
...
include/asm-ppc/system.h
View file @
7e1ec8c8
...
@@ -82,7 +82,6 @@ extern int fix_alignment(struct pt_regs *);
...
@@ -82,7 +82,6 @@ extern int fix_alignment(struct pt_regs *);
extern
void
cvt_fd
(
float
*
from
,
double
*
to
,
unsigned
long
*
fpscr
);
extern
void
cvt_fd
(
float
*
from
,
double
*
to
,
unsigned
long
*
fpscr
);
extern
void
cvt_df
(
double
*
from
,
float
*
to
,
unsigned
long
*
fpscr
);
extern
void
cvt_df
(
double
*
from
,
float
*
to
,
unsigned
long
*
fpscr
);
extern
int
call_rtas
(
const
char
*
,
int
,
int
,
unsigned
long
*
,
...);
extern
int
call_rtas
(
const
char
*
,
int
,
int
,
unsigned
long
*
,
...);
extern
int
abs
(
int
);
extern
void
cacheable_memzero
(
void
*
p
,
unsigned
int
nb
);
extern
void
cacheable_memzero
(
void
*
p
,
unsigned
int
nb
);
extern
int
do_page_fault
(
struct
pt_regs
*
,
unsigned
long
,
unsigned
long
);
extern
int
do_page_fault
(
struct
pt_regs
*
,
unsigned
long
,
unsigned
long
);
extern
void
bad_page_fault
(
struct
pt_regs
*
,
unsigned
long
,
int
);
extern
void
bad_page_fault
(
struct
pt_regs
*
,
unsigned
long
,
int
);
...
...
include/asm-sparc64/bitops.h
View file @
7e1ec8c8
...
@@ -204,7 +204,8 @@ static __inline__ unsigned int hweight8(unsigned int w)
...
@@ -204,7 +204,8 @@ static __inline__ unsigned int hweight8(unsigned int w)
* @offset: The bitnumber to start searching at
* @offset: The bitnumber to start searching at
* @size: The maximum size to search
* @size: The maximum size to search
*/
*/
extern
unsigned
long
find_next_bit
(
unsigned
long
*
,
unsigned
long
,
unsigned
long
);
extern
unsigned
long
find_next_bit
(
const
unsigned
long
*
,
unsigned
long
,
unsigned
long
);
/**
/**
* find_first_bit - find the first set bit in a memory region
* find_first_bit - find the first set bit in a memory region
...
...
include/asm-sparc64/byteorder.h
View file @
7e1ec8c8
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
#ifdef __GNUC__
#ifdef __GNUC__
static
__inline__
__u16
___arch__swab16p
(
__u16
*
addr
)
static
__inline__
__u16
___arch__swab16p
(
const
__u16
*
addr
)
{
{
__u16
ret
;
__u16
ret
;
...
@@ -17,7 +17,7 @@ static __inline__ __u16 ___arch__swab16p(__u16 *addr)
...
@@ -17,7 +17,7 @@ static __inline__ __u16 ___arch__swab16p(__u16 *addr)
return
ret
;
return
ret
;
}
}
static
__inline__
__u32
___arch__swab32p
(
__u32
*
addr
)
static
__inline__
__u32
___arch__swab32p
(
const
__u32
*
addr
)
{
{
__u32
ret
;
__u32
ret
;
...
@@ -27,7 +27,7 @@ static __inline__ __u32 ___arch__swab32p(__u32 *addr)
...
@@ -27,7 +27,7 @@ static __inline__ __u32 ___arch__swab32p(__u32 *addr)
return
ret
;
return
ret
;
}
}
static
__inline__
__u64
___arch__swab64p
(
__u64
*
addr
)
static
__inline__
__u64
___arch__swab64p
(
const
__u64
*
addr
)
{
{
__u64
ret
;
__u64
ret
;
...
...
include/asm-v850/bitops.h
View file @
7e1ec8c8
...
@@ -193,10 +193,86 @@ extern __inline__ int find_next_zero_bit (void *addr, int size, int offset)
...
@@ -193,10 +193,86 @@ extern __inline__ int find_next_zero_bit (void *addr, int size, int offset)
return
result
+
ffz
(
tmp
);
return
result
+
ffz
(
tmp
);
}
}
/* This is the same as generic_ffs, but we can't use that because it's
inline and the #include order mucks things up. */
static
inline
int
generic_ffs_for_find_next_bit
(
int
x
)
{
int
r
=
1
;
if
(
!
x
)
return
0
;
if
(
!
(
x
&
0xffff
))
{
x
>>=
16
;
r
+=
16
;
}
if
(
!
(
x
&
0xff
))
{
x
>>=
8
;
r
+=
8
;
}
if
(
!
(
x
&
0xf
))
{
x
>>=
4
;
r
+=
4
;
}
if
(
!
(
x
&
3
))
{
x
>>=
2
;
r
+=
2
;
}
if
(
!
(
x
&
1
))
{
x
>>=
1
;
r
+=
1
;
}
return
r
;
}
/*
* Find next one bit in a bitmap reasonably efficiently.
*/
static
__inline__
unsigned
long
find_next_bit
(
const
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
{
unsigned
int
*
p
=
((
unsigned
int
*
)
addr
)
+
(
offset
>>
5
);
unsigned
int
result
=
offset
&
~
31UL
;
unsigned
int
tmp
;
if
(
offset
>=
size
)
return
size
;
size
-=
result
;
offset
&=
31UL
;
if
(
offset
)
{
tmp
=
*
p
++
;
tmp
&=
~
0UL
<<
offset
;
if
(
size
<
32
)
goto
found_first
;
if
(
tmp
)
goto
found_middle
;
size
-=
32
;
result
+=
32
;
}
while
(
size
>=
32
)
{
if
((
tmp
=
*
p
++
)
!=
0
)
goto
found_middle
;
result
+=
32
;
size
-=
32
;
}
if
(
!
size
)
return
result
;
tmp
=
*
p
;
found_first:
tmp
&=
~
0UL
>>
(
32
-
size
);
if
(
tmp
==
0UL
)
/* Are any bits set? */
return
result
+
size
;
/* Nope. */
found_middle:
return
result
+
generic_ffs_for_find_next_bit
(
tmp
);
}
#define ffs(x) generic_ffs (x)
#define ffs(x) generic_ffs (x)
#define fls(x) generic_fls (x)
#define fls(x) generic_fls (x)
#define __ffs(x) ffs(x)
#define __ffs(x) ffs(x)
/*
/*
* This is just `generic_ffs' from <linux/bitops.h>, except that it assumes
* This is just `generic_ffs' from <linux/bitops.h>, except that it assumes
* that at least one bit is set, and returns the real index of the bit
* that at least one bit is set, and returns the real index of the bit
...
...
include/asm-v850/irq.h
View file @
7e1ec8c8
/*
/*
* include/asm-v850/irq.h -- Machine interrupt handling
* include/asm-v850/irq.h -- Machine interrupt handling
*
*
* Copyright (C) 2001,02
NEC
Corporation
* Copyright (C) 2001,02
,04 NEC Electronics
Corporation
* Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
* Copyright (C) 2001,02
,04
Miles Bader <miles@gnu.org>
*
*
* This file is subject to the terms and conditions of the GNU General
* This file is subject to the terms and conditions of the GNU General
* Public License. See the file COPYING in the main directory of this
* Public License. See the file COPYING in the main directory of this
...
@@ -62,11 +62,8 @@ extern void disable_irq (unsigned int irq);
...
@@ -62,11 +62,8 @@ extern void disable_irq (unsigned int irq);
/* Disable an irq without waiting. */
/* Disable an irq without waiting. */
extern
void
disable_irq_nosync
(
unsigned
int
irq
);
extern
void
disable_irq_nosync
(
unsigned
int
irq
);
extern
int
handle_IRQ_event
(
unsigned
int
,
struct
pt_regs
*
,
struct
irqaction
*
);
#endif
/* !__ASSEMBLY__ */
#endif
/* !__ASSEMBLY__ */
struct
irqaction
;
struct
pt_regs
;
int
handle_IRQ_event
(
unsigned
int
,
struct
pt_regs
*
,
struct
irqaction
*
);
#endif
/* __V850_IRQ_H__ */
#endif
/* __V850_IRQ_H__ */
include/asm-v850/unistd.h
View file @
7e1ec8c8
/*
/*
* include/asm-v850/unistd.h -- System call numbers and invocation mechanism
* include/asm-v850/unistd.h -- System call numbers and invocation mechanism
*
*
* Copyright (C) 2001,02,03 NEC Electronics Corporation
* Copyright (C) 2001,02,03
,04
NEC Electronics Corporation
* Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
* Copyright (C) 2001,02,03
,04
Miles Bader <miles@gnu.org>
*
*
* This file is subject to the terms and conditions of the GNU General
* This file is subject to the terms and conditions of the GNU General
* Public License. See the file COPYING in the main directory of this
* Public License. See the file COPYING in the main directory of this
...
@@ -389,7 +389,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \
...
@@ -389,7 +389,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \
#ifdef __KERNEL__
#ifdef __KERNEL__
#define __ARCH_WANT_IPC_PARSE_VERSION
#define __ARCH_WANT_IPC_PARSE_VERSION
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_OLD_STAT
#define __ARCH_WANT_STAT64
#define __ARCH_WANT_STAT64
#define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_GETHOSTNAME
#define __ARCH_WANT_SYS_GETHOSTNAME
...
@@ -404,7 +403,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \
...
@@ -404,7 +403,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_LLSEEK
#define __ARCH_WANT_SYS_LLSEEK
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_OLD_GETRLIMIT
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_SIGPROCMASK
...
...
include/linux/iso_fs.h
View file @
7e1ec8c8
...
@@ -190,28 +190,28 @@ static inline int isonum_712(char *p)
...
@@ -190,28 +190,28 @@ static inline int isonum_712(char *p)
{
{
return
*
(
s8
*
)
p
;
return
*
(
s8
*
)
p
;
}
}
static
inline
int
isonum_721
(
char
*
p
)
static
inline
unsigned
int
isonum_721
(
char
*
p
)
{
{
return
le16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
return
le16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
}
}
static
inline
int
isonum_722
(
char
*
p
)
static
inline
unsigned
int
isonum_722
(
char
*
p
)
{
{
return
be16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
return
be16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
}
}
static
inline
int
isonum_723
(
char
*
p
)
static
inline
unsigned
int
isonum_723
(
char
*
p
)
{
{
/* Ignore bigendian datum due to broken mastering programs */
/* Ignore bigendian datum due to broken mastering programs */
return
le16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
return
le16_to_cpu
(
get_unaligned
((
u16
*
)
p
));
}
}
static
inline
int
isonum_731
(
char
*
p
)
static
inline
unsigned
int
isonum_731
(
char
*
p
)
{
{
return
le32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
return
le32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
}
}
static
inline
int
isonum_732
(
char
*
p
)
static
inline
unsigned
int
isonum_732
(
char
*
p
)
{
{
return
be32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
return
be32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
}
}
static
inline
int
isonum_733
(
char
*
p
)
static
inline
unsigned
int
isonum_733
(
char
*
p
)
{
{
/* Ignore bigendian datum due to broken mastering programs */
/* Ignore bigendian datum due to broken mastering programs */
return
le32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
return
le32_to_cpu
(
get_unaligned
((
u32
*
)
p
));
...
...
include/pcmcia/ss.h
View file @
7e1ec8c8
...
@@ -105,6 +105,7 @@ typedef struct pccard_mem_map {
...
@@ -105,6 +105,7 @@ typedef struct pccard_mem_map {
u_short
speed
;
u_short
speed
;
u_long
sys_start
,
sys_stop
;
u_long
sys_start
,
sys_stop
;
u_int
card_start
;
u_int
card_start
;
struct
resource
*
res
;
}
pccard_mem_map
;
}
pccard_mem_map
;
typedef
struct
cb_bridge_map
{
typedef
struct
cb_bridge_map
{
...
@@ -154,8 +155,6 @@ typedef struct window_t {
...
@@ -154,8 +155,6 @@ typedef struct window_t {
u_short
index
;
u_short
index
;
client_handle_t
handle
;
client_handle_t
handle
;
struct
pcmcia_socket
*
sock
;
struct
pcmcia_socket
*
sock
;
u_long
base
;
u_long
size
;
pccard_mem_map
ctl
;
pccard_mem_map
ctl
;
}
window_t
;
}
window_t
;
...
...
init/Kconfig
View file @
7e1ec8c8
...
@@ -77,6 +77,7 @@ config SWAP
...
@@ -77,6 +77,7 @@ config SWAP
config SYSVIPC
config SYSVIPC
bool "System V IPC"
bool "System V IPC"
depends on MMU
---help---
---help---
Inter Process Communication is a suite of library functions and
Inter Process Communication is a suite of library functions and
system calls which let processes (running programs) synchronize and
system calls which let processes (running programs) synchronize and
...
...
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