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
Kirill Smelkov
linux
Commits
d06e7a56
Commit
d06e7a56
authored
Jul 05, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
parents
346fced8
864ae180
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
349 additions
and
506 deletions
+349
-506
arch/sparc64/Kconfig
arch/sparc64/Kconfig
+18
-0
arch/sparc64/kernel/entry.S
arch/sparc64/kernel/entry.S
+3
-18
arch/sparc64/kernel/irq.c
arch/sparc64/kernel/irq.c
+197
-384
arch/sparc64/kernel/pci_psycho.c
arch/sparc64/kernel/pci_psycho.c
+1
-2
arch/sparc64/kernel/pci_sabre.c
arch/sparc64/kernel/pci_sabre.c
+26
-20
arch/sparc64/kernel/pci_schizo.c
arch/sparc64/kernel/pci_schizo.c
+60
-18
arch/sparc64/kernel/time.c
arch/sparc64/kernel/time.c
+1
-1
drivers/sbus/char/bpp.c
drivers/sbus/char/bpp.c
+2
-18
include/asm-sparc64/irq.h
include/asm-sparc64/irq.h
+20
-29
include/asm-sparc64/pbm.h
include/asm-sparc64/pbm.h
+3
-0
include/asm-sparc64/signal.h
include/asm-sparc64/signal.h
+0
-15
include/linux/compat_ioctl.h
include/linux/compat_ioctl.h
+18
-1
No files found.
arch/sparc64/Kconfig
View file @
d06e7a56
...
@@ -444,6 +444,24 @@ config PRINTER
...
@@ -444,6 +444,24 @@ config PRINTER
If you have more than 8 printers, you need to increase the LP_NO
If you have more than 8 printers, you need to increase the LP_NO
macro in lp.c and the PARPORT_MAX macro in parport.h.
macro in lp.c and the PARPORT_MAX macro in parport.h.
config PPDEV
tristate "Support for user-space parallel port device drivers"
depends on PARPORT
---help---
Saying Y to this adds support for /dev/parport device nodes. This
is needed for programs that want portable access to the parallel
port, for instance deviceid (which displays Plug-and-Play device
IDs).
This is the parallel port equivalent of SCSI generic support (sg).
It is safe to say N to this -- it is not needed for normal printing
or parallel port CD-ROM/disk support.
To compile this driver as a module, choose M here: the
module will be called ppdev.
If unsure, say N.
config ENVCTRL
config ENVCTRL
tristate "SUNW, envctrl support"
tristate "SUNW, envctrl support"
depends on PCI
depends on PCI
...
...
arch/sparc64/kernel/entry.S
View file @
d06e7a56
...
@@ -553,13 +553,11 @@ do_ivec:
...
@@ -553,13 +553,11 @@ do_ivec:
sllx
%
g3
,
5
,
%
g3
sllx
%
g3
,
5
,
%
g3
or
%
g2
,
%
lo
(
ivector_table
),
%
g2
or
%
g2
,
%
lo
(
ivector_table
),
%
g2
add
%
g2
,
%
g3
,
%
g3
add
%
g2
,
%
g3
,
%
g3
ldx
[%
g3
+
0x08
],
%
g2
/*
irq_info
*/
ldub
[%
g3
+
0x04
],
%
g4
/*
pil
*/
ldub
[%
g3
+
0x04
],
%
g4
/*
pil
*/
brz
,
pn
%
g2
,
do_ivec_spurious
mov
1
,
%
g2
mov
1
,
%
g2
sllx
%
g2
,
%
g4
,
%
g2
sllx
%
g2
,
%
g4
,
%
g2
sllx
%
g4
,
2
,
%
g4
sllx
%
g4
,
2
,
%
g4
lduw
[%
g6
+
%
g4
],
%
g5
/*
g5
=
irq_work
(
cpu
,
pil
)
*/
lduw
[%
g6
+
%
g4
],
%
g5
/*
g5
=
irq_work
(
cpu
,
pil
)
*/
stw
%
g5
,
[%
g3
+
0x00
]
/*
bucket
->
irq_chain
=
g5
*/
stw
%
g5
,
[%
g3
+
0x00
]
/*
bucket
->
irq_chain
=
g5
*/
stw
%
g3
,
[%
g6
+
%
g4
]
/*
irq_work
(
cpu
,
pil
)
=
bucket
*/
stw
%
g3
,
[%
g6
+
%
g4
]
/*
irq_work
(
cpu
,
pil
)
=
bucket
*/
...
@@ -567,9 +565,9 @@ do_ivec:
...
@@ -567,9 +565,9 @@ do_ivec:
retry
retry
do_ivec_xcall
:
do_ivec_xcall
:
mov
0x50
,
%
g1
mov
0x50
,
%
g1
ldxa
[%
g1
+
%
g0
]
ASI_INTR_R
,
%
g1
ldxa
[%
g1
+
%
g0
]
ASI_INTR_R
,
%
g1
srl
%
g3
,
0
,
%
g3
srl
%
g3
,
0
,
%
g3
mov
0x60
,
%
g7
mov
0x60
,
%
g7
ldxa
[%
g7
+
%
g0
]
ASI_INTR_R
,
%
g7
ldxa
[%
g7
+
%
g0
]
ASI_INTR_R
,
%
g7
stxa
%
g0
,
[%
g0
]
ASI_INTR_RECEIVE
stxa
%
g0
,
[%
g0
]
ASI_INTR_RECEIVE
...
@@ -581,19 +579,6 @@ do_ivec_xcall:
...
@@ -581,19 +579,6 @@ do_ivec_xcall:
1
:
jmpl
%
g3
,
%
g0
1
:
jmpl
%
g3
,
%
g0
nop
nop
do_ivec_spurious
:
stw
%
g3
,
[%
g6
+
0x00
]
/*
irq_work
(
cpu
,
0
)
=
bucket
*/
rdpr
%
pstate
,
%
g5
wrpr
%
g5
,
PSTATE_IG
|
PSTATE_AG
,
%
pstate
sethi
%
hi
(
109
f
),
%
g7
ba
,
pt
%
xcc
,
etrap
109
:
or
%
g7
,
%
lo
(
109
b
),
%
g7
call
catch_disabled_ivec
add
%
sp
,
PTREGS_OFF
,
%
o0
ba
,
pt
%
xcc
,
rtrap
clr
%
l6
.
globl
save_alternate_globals
.
globl
save_alternate_globals
save_alternate_globals
:
/
*
%
o0
=
save_area
*/
save_alternate_globals
:
/
*
%
o0
=
save_area
*/
rdpr
%
pstate
,
%
o5
rdpr
%
pstate
,
%
o5
...
...
arch/sparc64/kernel/irq.c
View file @
d06e7a56
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/pci_psycho.c
View file @
d06e7a56
...
@@ -1303,8 +1303,7 @@ static void psycho_controller_hwinit(struct pci_controller_info *p)
...
@@ -1303,8 +1303,7 @@ static void psycho_controller_hwinit(struct pci_controller_info *p)
{
{
u64
tmp
;
u64
tmp
;
/* PROM sets the IRQ retry value too low, increase it. */
psycho_write
(
p
->
pbm_A
.
controller_regs
+
PSYCHO_IRQ_RETRY
,
5
);
psycho_write
(
p
->
pbm_A
.
controller_regs
+
PSYCHO_IRQ_RETRY
,
0xff
);
/* Enable arbiter for all PCI slots. */
/* Enable arbiter for all PCI slots. */
tmp
=
psycho_read
(
p
->
pbm_A
.
controller_regs
+
PSYCHO_PCIA_CTRL
);
tmp
=
psycho_read
(
p
->
pbm_A
.
controller_regs
+
PSYCHO_PCIA_CTRL
);
...
...
arch/sparc64/kernel/pci_sabre.c
View file @
d06e7a56
...
@@ -595,6 +595,23 @@ static int __init sabre_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
...
@@ -595,6 +595,23 @@ static int __init sabre_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
return
ret
;
return
ret
;
}
}
/* When a device lives behind a bridge deeper in the PCI bus topology
* than APB, a special sequence must run to make sure all pending DMA
* transfers at the time of IRQ delivery are visible in the coherency
* domain by the cpu. This sequence is to perform a read on the far
* side of the non-APB bridge, then perform a read of Sabre's DMA
* write-sync register.
*/
static
void
sabre_wsync_handler
(
struct
ino_bucket
*
bucket
,
void
*
_arg1
,
void
*
_arg2
)
{
struct
pci_dev
*
pdev
=
_arg1
;
unsigned
long
sync_reg
=
(
unsigned
long
)
_arg2
;
u16
_unused
;
pci_read_config_word
(
pdev
,
PCI_VENDOR_ID
,
&
_unused
);
sabre_read
(
sync_reg
);
}
static
unsigned
int
__init
sabre_irq_build
(
struct
pci_pbm_info
*
pbm
,
static
unsigned
int
__init
sabre_irq_build
(
struct
pci_pbm_info
*
pbm
,
struct
pci_dev
*
pdev
,
struct
pci_dev
*
pdev
,
unsigned
int
ino
)
unsigned
int
ino
)
...
@@ -639,24 +656,14 @@ static unsigned int __init sabre_irq_build(struct pci_pbm_info *pbm,
...
@@ -639,24 +656,14 @@ static unsigned int __init sabre_irq_build(struct pci_pbm_info *pbm,
if
(
pdev
)
{
if
(
pdev
)
{
struct
pcidev_cookie
*
pcp
=
pdev
->
sysdata
;
struct
pcidev_cookie
*
pcp
=
pdev
->
sysdata
;
/* When a device lives behind a bridge deeper in the
* PCI bus topology than APB, a special sequence must
* run to make sure all pending DMA transfers at the
* time of IRQ delivery are visible in the coherency
* domain by the cpu. This sequence is to perform
* a read on the far side of the non-APB bridge, then
* perform a read of Sabre's DMA write-sync register.
*
* Currently, the PCI_CONFIG register for the device
* is used for this read from the far side of the bridge.
*/
if
(
pdev
->
bus
->
number
!=
pcp
->
pbm
->
pci_first_busno
)
{
if
(
pdev
->
bus
->
number
!=
pcp
->
pbm
->
pci_first_busno
)
{
bucket
->
flags
|=
IBF_DMA_SYNC
;
struct
pci_controller_info
*
p
=
pcp
->
pbm
->
parent
;
bucket
->
synctab_ent
=
dma_sync_reg_table_entry
++
;
struct
irq_desc
*
d
=
bucket
->
irq_info
;
dma_sync_reg_table
[
bucket
->
synctab_ent
]
=
(
unsigned
long
)
sabre_pci_config_mkaddr
(
d
->
pre_handler
=
sabre_wsync_handler
;
pcp
->
pbm
,
d
->
pre_handler_arg1
=
pdev
;
pdev
->
bus
->
number
,
pdev
->
devfn
,
PCI_COMMAND
);
d
->
pre_handler_arg2
=
(
void
*
)
p
->
pbm_A
.
controller_regs
+
SABRE_WRSYNC
;
}
}
}
}
return
__irq
(
bucket
);
return
__irq
(
bucket
);
...
@@ -1626,10 +1633,9 @@ void __init sabre_init(int pnode, char *model_name)
...
@@ -1626,10 +1633,9 @@ void __init sabre_init(int pnode, char *model_name)
*/
*/
p
->
pbm_A
.
controller_regs
=
pr_regs
[
0
].
phys_addr
;
p
->
pbm_A
.
controller_regs
=
pr_regs
[
0
].
phys_addr
;
p
->
pbm_B
.
controller_regs
=
pr_regs
[
0
].
phys_addr
;
p
->
pbm_B
.
controller_regs
=
pr_regs
[
0
].
phys_addr
;
pci_dma_wsync
=
p
->
pbm_A
.
controller_regs
+
SABRE_WRSYNC
;
printk
(
"PCI: Found SABRE, main regs at %016lx
, wsync at %016lx
\n
"
,
printk
(
"PCI: Found SABRE, main regs at %016lx
\n
"
,
p
->
pbm_A
.
controller_regs
,
pci_dma_wsync
);
p
->
pbm_A
.
controller_regs
);
/* Clear interrupts */
/* Clear interrupts */
...
...
arch/sparc64/kernel/pci_schizo.c
View file @
d06e7a56
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#include <asm/iommu.h>
#include <asm/iommu.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/upa.h>
#include <asm/upa.h>
#include <asm/pstate.h>
#include "pci_impl.h"
#include "pci_impl.h"
#include "iommu_common.h"
#include "iommu_common.h"
...
@@ -326,6 +327,44 @@ static int __init schizo_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
...
@@ -326,6 +327,44 @@ static int __init schizo_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
return
ret
;
return
ret
;
}
}
static
void
tomatillo_wsync_handler
(
struct
ino_bucket
*
bucket
,
void
*
_arg1
,
void
*
_arg2
)
{
unsigned
long
sync_reg
=
(
unsigned
long
)
_arg2
;
u64
mask
=
1
<<
(
__irq_ino
(
__irq
(
bucket
))
&
IMAP_INO
);
u64
val
;
int
limit
;
schizo_write
(
sync_reg
,
mask
);
limit
=
100000
;
val
=
0
;
while
(
--
limit
)
{
val
=
schizo_read
(
sync_reg
);
if
(
!
(
val
&
mask
))
break
;
}
if
(
limit
<=
0
)
{
printk
(
"tomatillo_wsync_handler: DMA won't sync [%lx:%lx]
\n
"
,
val
,
mask
);
}
if
(
_arg1
)
{
static
unsigned
char
cacheline
[
64
]
__attribute__
((
aligned
(
64
)));
__asm__
__volatile__
(
"rd %%fprs, %0
\n\t
"
"or %0, %4, %1
\n\t
"
"wr %1, 0x0, %%fprs
\n\t
"
"stda %%f0, [%5] %6
\n\t
"
"wr %0, 0x0, %%fprs
\n\t
"
"membar #Sync"
:
"=&r"
(
mask
),
"=&r"
(
val
)
:
"0"
(
mask
),
"1"
(
val
),
"i"
(
FPRS_FEF
),
"r"
(
&
cacheline
[
0
]),
"i"
(
ASI_BLK_COMMIT_P
));
}
}
static
unsigned
int
schizo_irq_build
(
struct
pci_pbm_info
*
pbm
,
static
unsigned
int
schizo_irq_build
(
struct
pci_pbm_info
*
pbm
,
struct
pci_dev
*
pdev
,
struct
pci_dev
*
pdev
,
unsigned
int
ino
)
unsigned
int
ino
)
...
@@ -369,6 +408,15 @@ static unsigned int schizo_irq_build(struct pci_pbm_info *pbm,
...
@@ -369,6 +408,15 @@ static unsigned int schizo_irq_build(struct pci_pbm_info *pbm,
bucket
=
__bucket
(
build_irq
(
pil
,
ign_fixup
,
iclr
,
imap
));
bucket
=
__bucket
(
build_irq
(
pil
,
ign_fixup
,
iclr
,
imap
));
bucket
->
flags
|=
IBF_PCI
;
bucket
->
flags
|=
IBF_PCI
;
if
(
pdev
&&
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
)
{
struct
irq_desc
*
p
=
bucket
->
irq_info
;
p
->
pre_handler
=
tomatillo_wsync_handler
;
p
->
pre_handler_arg1
=
((
pbm
->
chip_version
<=
4
)
?
(
void
*
)
1
:
(
void
*
)
0
);
p
->
pre_handler_arg2
=
(
void
*
)
pbm
->
sync_reg
;
}
return
__irq
(
bucket
);
return
__irq
(
bucket
);
}
}
...
@@ -885,6 +933,7 @@ static irqreturn_t schizo_ce_intr(int irq, void *dev_id, struct pt_regs *regs)
...
@@ -885,6 +933,7 @@ static irqreturn_t schizo_ce_intr(int irq, void *dev_id, struct pt_regs *regs)
#define SCHIZO_PCI_CTRL (0x2000UL)
#define SCHIZO_PCI_CTRL (0x2000UL)
#define SCHIZO_PCICTRL_BUS_UNUS (1UL << 63UL)
/* Safari */
#define SCHIZO_PCICTRL_BUS_UNUS (1UL << 63UL)
/* Safari */
#define SCHIZO_PCICTRL_DTO_INT (1UL << 61UL)
/* Tomatillo */
#define SCHIZO_PCICTRL_ARB_PRIO (0x1ff << 52UL)
/* Tomatillo */
#define SCHIZO_PCICTRL_ARB_PRIO (0x1ff << 52UL)
/* Tomatillo */
#define SCHIZO_PCICTRL_ESLCK (1UL << 51UL)
/* Safari */
#define SCHIZO_PCICTRL_ESLCK (1UL << 51UL)
/* Safari */
#define SCHIZO_PCICTRL_ERRSLOT (7UL << 48UL)
/* Safari */
#define SCHIZO_PCICTRL_ERRSLOT (7UL << 48UL)
/* Safari */
...
@@ -1887,37 +1936,27 @@ static void __init schizo_pbm_hw_init(struct pci_pbm_info *pbm)
...
@@ -1887,37 +1936,27 @@ static void __init schizo_pbm_hw_init(struct pci_pbm_info *pbm)
{
{
u64
tmp
;
u64
tmp
;
/* Set IRQ retry to infinity. */
schizo_write
(
pbm
->
pbm_regs
+
SCHIZO_PCI_IRQ_RETRY
,
5
);
schizo_write
(
pbm
->
pbm_regs
+
SCHIZO_PCI_IRQ_RETRY
,
SCHIZO_IRQ_RETRY_INF
);
/* Enable arbiter for all PCI slots. Also, disable PCI interval
* timer so that DTO (Discard TimeOuts) are not reported because
* some Schizo revisions report them erroneously.
*/
tmp
=
schizo_read
(
pbm
->
pbm_regs
+
SCHIZO_PCI_CTRL
);
tmp
=
schizo_read
(
pbm
->
pbm_regs
+
SCHIZO_PCI_CTRL
);
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_SCHIZO_PLUS
&&
pbm
->
chip_version
==
0x5
&&
pbm
->
chip_revision
==
0x1
)
tmp
|=
0x0f
;
else
tmp
|=
0xff
;
tmp
&=
~
SCHIZO_PCICTRL_PTO
;
/* Enable arbiter for all PCI slots. */
tmp
|=
0xff
;
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
&&
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
&&
pbm
->
chip_version
>=
0x2
)
pbm
->
chip_version
>=
0x2
)
tmp
|=
0x3UL
<<
SCHIZO_PCICTRL_PTO_SHIFT
;
tmp
|=
0x3UL
<<
SCHIZO_PCICTRL_PTO_SHIFT
;
else
tmp
|=
0x1UL
<<
SCHIZO_PCICTRL_PTO_SHIFT
;
if
(
!
prom_getbool
(
pbm
->
prom_node
,
"no-bus-parking"
))
if
(
!
prom_getbool
(
pbm
->
prom_node
,
"no-bus-parking"
))
tmp
|=
SCHIZO_PCICTRL_PARK
;
tmp
|=
SCHIZO_PCICTRL_PARK
;
else
tmp
&=
~
SCHIZO_PCICTRL_PARK
;
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
&&
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
&&
pbm
->
chip_version
<=
0x1
)
pbm
->
chip_version
<=
0x1
)
tmp
|=
(
1UL
<<
61
)
;
tmp
|=
SCHIZO_PCICTRL_DTO_INT
;
else
else
tmp
&=
~
(
1UL
<<
61
)
;
tmp
&=
~
SCHIZO_PCICTRL_DTO_INT
;
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
)
if
(
pbm
->
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
)
tmp
|=
(
SCHIZO_PCICTRL_MRM_PREF
|
tmp
|=
(
SCHIZO_PCICTRL_MRM_PREF
|
...
@@ -2015,6 +2054,9 @@ static void __init schizo_pbm_init(struct pci_controller_info *p,
...
@@ -2015,6 +2054,9 @@ static void __init schizo_pbm_init(struct pci_controller_info *p,
pbm
->
pbm_regs
=
pr_regs
[
0
].
phys_addr
;
pbm
->
pbm_regs
=
pr_regs
[
0
].
phys_addr
;
pbm
->
controller_regs
=
pr_regs
[
1
].
phys_addr
-
0x10000UL
;
pbm
->
controller_regs
=
pr_regs
[
1
].
phys_addr
-
0x10000UL
;
if
(
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
)
pbm
->
sync_reg
=
pr_regs
[
3
].
phys_addr
+
0x1a18UL
;
sprintf
(
pbm
->
name
,
sprintf
(
pbm
->
name
,
(
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
?
(
chip_type
==
PBM_CHIP_TYPE_TOMATILLO
?
"TOMATILLO%d PBM%c"
:
"TOMATILLO%d PBM%c"
:
...
...
arch/sparc64/kernel/time.c
View file @
d06e7a56
...
@@ -973,7 +973,7 @@ static void sparc64_start_timers(irqreturn_t (*cfunc)(int, void *, struct pt_reg
...
@@ -973,7 +973,7 @@ static void sparc64_start_timers(irqreturn_t (*cfunc)(int, void *, struct pt_reg
int
err
;
int
err
;
/* Register IRQ handler. */
/* Register IRQ handler. */
err
=
request_irq
(
build_irq
(
0
,
0
,
0UL
,
0UL
),
cfunc
,
SA_STATIC_ALLOC
,
err
=
request_irq
(
build_irq
(
0
,
0
,
0UL
,
0UL
),
cfunc
,
0
,
"timer"
,
NULL
);
"timer"
,
NULL
);
if
(
err
)
{
if
(
err
)
{
...
...
drivers/sbus/char/bpp.c
View file @
d06e7a56
...
@@ -79,10 +79,6 @@ struct inst {
...
@@ -79,10 +79,6 @@ struct inst {
unsigned
char
run_length
;
unsigned
char
run_length
;
unsigned
char
repeat_byte
;
unsigned
char
repeat_byte
;
/* These members manage timeouts for programmed delays */
wait_queue_head_t
wait_queue
;
struct
timer_list
timer_list
;
};
};
static
struct
inst
instances
[
BPP_NO
];
static
struct
inst
instances
[
BPP_NO
];
...
@@ -297,16 +293,10 @@ static unsigned short get_pins(unsigned minor)
...
@@ -297,16 +293,10 @@ static unsigned short get_pins(unsigned minor)
#endif
/* __sparc__ */
#endif
/* __sparc__ */
static
void
bpp_wake_up
(
unsigned
long
val
)
{
wake_up
(
&
instances
[
val
].
wait_queue
);
}
static
void
snooze
(
unsigned
long
snooze_time
,
unsigned
minor
)
static
void
snooze
(
unsigned
long
snooze_time
,
unsigned
minor
)
{
{
init_timer
(
&
instances
[
minor
].
timer_list
);
set_current_state
(
TASK_UNINTERRUPTIBLE
);
instances
[
minor
].
timer_list
.
expires
=
jiffies
+
snooze_time
+
1
;
schedule_timeout
(
snooze_time
+
1
);
instances
[
minor
].
timer_list
.
data
=
minor
;
add_timer
(
&
instances
[
minor
].
timer_list
);
sleep_on
(
&
instances
[
minor
].
wait_queue
);
}
}
static
int
wait_for
(
unsigned
short
set
,
unsigned
short
clr
,
static
int
wait_for
(
unsigned
short
set
,
unsigned
short
clr
,
...
@@ -880,11 +870,8 @@ static void probeLptPort(unsigned idx)
...
@@ -880,11 +870,8 @@ static void probeLptPort(unsigned idx)
instances
[
idx
].
enhanced
=
0
;
instances
[
idx
].
enhanced
=
0
;
instances
[
idx
].
direction
=
0
;
instances
[
idx
].
direction
=
0
;
instances
[
idx
].
mode
=
COMPATIBILITY
;
instances
[
idx
].
mode
=
COMPATIBILITY
;
instances
[
idx
].
wait_queue
=
0
;
instances
[
idx
].
run_length
=
0
;
instances
[
idx
].
run_length
=
0
;
instances
[
idx
].
run_flag
=
0
;
instances
[
idx
].
run_flag
=
0
;
init_timer
(
&
instances
[
idx
].
timer_list
);
instances
[
idx
].
timer_list
.
function
=
bpp_wake_up
;
if
(
!
request_region
(
lpAddr
,
3
,
dev_name
))
return
;
if
(
!
request_region
(
lpAddr
,
3
,
dev_name
))
return
;
/*
/*
...
@@ -977,11 +964,8 @@ static void probeLptPort(unsigned idx)
...
@@ -977,11 +964,8 @@ static void probeLptPort(unsigned idx)
instances
[
idx
].
enhanced
=
0
;
instances
[
idx
].
enhanced
=
0
;
instances
[
idx
].
direction
=
0
;
instances
[
idx
].
direction
=
0
;
instances
[
idx
].
mode
=
COMPATIBILITY
;
instances
[
idx
].
mode
=
COMPATIBILITY
;
init_waitqueue_head
(
&
instances
[
idx
].
wait_queue
);
instances
[
idx
].
run_length
=
0
;
instances
[
idx
].
run_length
=
0
;
instances
[
idx
].
run_flag
=
0
;
instances
[
idx
].
run_flag
=
0
;
init_timer
(
&
instances
[
idx
].
timer_list
);
instances
[
idx
].
timer_list
.
function
=
bpp_wake_up
;
if
(
!
rp
)
return
;
if
(
!
rp
)
return
;
...
...
include/asm-sparc64/irq.h
View file @
d06e7a56
...
@@ -16,6 +16,18 @@
...
@@ -16,6 +16,18 @@
#include <asm/pil.h>
#include <asm/pil.h>
#include <asm/ptrace.h>
#include <asm/ptrace.h>
struct
ino_bucket
;
#define MAX_IRQ_DESC_ACTION 4
struct
irq_desc
{
void
(
*
pre_handler
)(
struct
ino_bucket
*
,
void
*
,
void
*
);
void
*
pre_handler_arg1
;
void
*
pre_handler_arg2
;
u32
action_active_mask
;
struct
irqaction
action
[
MAX_IRQ_DESC_ACTION
];
};
/* You should not mess with this directly. That's the job of irq.c.
/* You should not mess with this directly. That's the job of irq.c.
*
*
* If you make changes here, please update hand coded assembler of
* If you make changes here, please update hand coded assembler of
...
@@ -42,24 +54,11 @@ struct ino_bucket {
...
@@ -42,24 +54,11 @@ struct ino_bucket {
/* Miscellaneous flags. */
/* Miscellaneous flags. */
/*0x06*/
unsigned
char
flags
;
/*0x06*/
unsigned
char
flags
;
/* This is used to deal with IBF_DMA_SYNC on
/* Currently unused. */
* Sabre systems.
/*0x07*/
unsigned
char
__pad
;
*/
/*0x07*/
unsigned
char
synctab_ent
;
/* Reference to IRQ descriptor for this bucket. */
/*0x08*/
struct
irq_desc
*
irq_info
;
/* Reference to handler for this IRQ. If this is
* non-NULL this means it is active and should be
* serviced. Else the pending member is set to one
* and later registry of the interrupt checks for
* this condition.
*
* Normally this is just an irq_action structure.
* But, on PCI, if multiple interrupt sources behind
* a bridge have multiple interrupt sources that share
* the same INO bucket, this points to an array of
* pointers to four IRQ action structures.
*/
/*0x08*/
void
*
irq_info
;
/* Sun5 Interrupt Clear Register. */
/* Sun5 Interrupt Clear Register. */
/*0x10*/
unsigned
long
iclr
;
/*0x10*/
unsigned
long
iclr
;
...
@@ -69,12 +68,6 @@ struct ino_bucket {
...
@@ -69,12 +68,6 @@ struct ino_bucket {
};
};
#ifdef CONFIG_PCI
extern
unsigned
long
pci_dma_wsync
;
extern
unsigned
long
dma_sync_reg_table
[
256
];
extern
unsigned
char
dma_sync_reg_table_entry
;
#endif
/* IMAP/ICLR register defines */
/* IMAP/ICLR register defines */
#define IMAP_VALID 0x80000000
/* IRQ Enabled */
#define IMAP_VALID 0x80000000
/* IRQ Enabled */
#define IMAP_TID_UPA 0x7c000000
/* UPA TargetID */
#define IMAP_TID_UPA 0x7c000000
/* UPA TargetID */
...
@@ -90,11 +83,9 @@ extern unsigned char dma_sync_reg_table_entry;
...
@@ -90,11 +83,9 @@ extern unsigned char dma_sync_reg_table_entry;
#define ICLR_PENDING 0x00000003
/* Pending state */
#define ICLR_PENDING 0x00000003
/* Pending state */
/* Only 8-bits are available, be careful. -DaveM */
/* Only 8-bits are available, be careful. -DaveM */
#define IBF_DMA_SYNC 0x01
/* DMA synchronization behind PCI bridge needed. */
#define IBF_PCI 0x02
/* PSYCHO/SABRE/SCHIZO PCI interrupt. */
#define IBF_PCI 0x02
/* Indicates PSYCHO/SABRE/SCHIZO PCI interrupt. */
#define IBF_ACTIVE 0x04
/* Interrupt is active and has a handler.*/
#define IBF_ACTIVE 0x04
/* This interrupt is active and has a handler. */
#define IBF_INPROGRESS 0x10
/* IRQ is being serviced. */
#define IBF_MULTI 0x08
/* On PCI, indicates shared bucket. */
#define IBF_INPROGRESS 0x10
/* IRQ is being serviced. */
#define NUM_IVECS (IMAP_INR + 1)
#define NUM_IVECS (IMAP_INR + 1)
extern
struct
ino_bucket
ivector_table
[
NUM_IVECS
];
extern
struct
ino_bucket
ivector_table
[
NUM_IVECS
];
...
...
include/asm-sparc64/pbm.h
View file @
d06e7a56
...
@@ -145,6 +145,9 @@ struct pci_pbm_info {
...
@@ -145,6 +145,9 @@ struct pci_pbm_info {
/* Physical address base of PBM registers. */
/* Physical address base of PBM registers. */
unsigned
long
pbm_regs
;
unsigned
long
pbm_regs
;
/* Physical address of DMA sync register, if any. */
unsigned
long
sync_reg
;
/* Opaque 32-bit system bus Port ID. */
/* Opaque 32-bit system bus Port ID. */
u32
portid
;
u32
portid
;
...
...
include/asm-sparc64/signal.h
View file @
d06e7a56
...
@@ -162,21 +162,6 @@ struct sigstack {
...
@@ -162,21 +162,6 @@ struct sigstack {
#define MINSIGSTKSZ 4096
#define MINSIGSTKSZ 4096
#define SIGSTKSZ 16384
#define SIGSTKSZ 16384
#ifdef __KERNEL__
/*
* DJHR
* SA_STATIC_ALLOC is used for the SPARC system to indicate that this
* interrupt handler's irq structure should be statically allocated
* by the request_irq routine.
* The alternative is that arch/sparc/kernel/irq.c has carnal knowledge
* of interrupt usage and that sucks. Also without a flag like this
* it may be possible for the free_irq routine to attempt to free
* statically allocated data.. which is NOT GOOD.
*
*/
#define SA_STATIC_ALLOC 0x80
#endif
#include <asm-generic/signal.h>
#include <asm-generic/signal.h>
struct
__new_sigaction
{
struct
__new_sigaction
{
...
...
include/linux/compat_ioctl.h
View file @
d06e7a56
...
@@ -346,10 +346,27 @@ COMPATIBLE_IOCTL(PPPOEIOCDFWD)
...
@@ -346,10 +346,27 @@ COMPATIBLE_IOCTL(PPPOEIOCDFWD)
/* LP */
/* LP */
COMPATIBLE_IOCTL
(
LPGETSTATUS
)
COMPATIBLE_IOCTL
(
LPGETSTATUS
)
/* ppdev */
/* ppdev */
COMPATIBLE_IOCTL
(
PPSETMODE
)
COMPATIBLE_IOCTL
(
PPRSTATUS
)
COMPATIBLE_IOCTL
(
PPRCONTROL
)
COMPATIBLE_IOCTL
(
PPWCONTROL
)
COMPATIBLE_IOCTL
(
PPFCONTROL
)
COMPATIBLE_IOCTL
(
PPRDATA
)
COMPATIBLE_IOCTL
(
PPWDATA
)
COMPATIBLE_IOCTL
(
PPCLAIM
)
COMPATIBLE_IOCTL
(
PPCLAIM
)
COMPATIBLE_IOCTL
(
PPRELEASE
)
COMPATIBLE_IOCTL
(
PPRELEASE
)
COMPATIBLE_IOCTL
(
PPEXCL
)
COMPATIBLE_IOCTL
(
PPYIELD
)
COMPATIBLE_IOCTL
(
PPYIELD
)
COMPATIBLE_IOCTL
(
PPEXCL
)
COMPATIBLE_IOCTL
(
PPDATADIR
)
COMPATIBLE_IOCTL
(
PPNEGOT
)
COMPATIBLE_IOCTL
(
PPWCTLONIRQ
)
COMPATIBLE_IOCTL
(
PPCLRIRQ
)
COMPATIBLE_IOCTL
(
PPSETPHASE
)
COMPATIBLE_IOCTL
(
PPGETMODES
)
COMPATIBLE_IOCTL
(
PPGETMODE
)
COMPATIBLE_IOCTL
(
PPGETPHASE
)
COMPATIBLE_IOCTL
(
PPGETFLAGS
)
COMPATIBLE_IOCTL
(
PPSETFLAGS
)
/* CDROM stuff */
/* CDROM stuff */
COMPATIBLE_IOCTL
(
CDROMPAUSE
)
COMPATIBLE_IOCTL
(
CDROMPAUSE
)
COMPATIBLE_IOCTL
(
CDROMRESUME
)
COMPATIBLE_IOCTL
(
CDROMRESUME
)
...
...
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