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
c34d6311
Commit
c34d6311
authored
Mar 03, 2004
by
David Mosberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge tiger.hpl.hp.com:/data1/bk/vanilla/linux-2.5
into tiger.hpl.hp.com:/data1/bk/lia64/to-linus-2.5
parents
8f7155ad
fb329400
Changes
13
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1330 additions
and
153 deletions
+1330
-153
arch/ia64/configs/zx1_defconfig
arch/ia64/configs/zx1_defconfig
+1078
-0
arch/ia64/hp/common/sba_iommu.c
arch/ia64/hp/common/sba_iommu.c
+31
-37
arch/ia64/hp/sim/simserial.c
arch/ia64/hp/sim/simserial.c
+4
-15
arch/ia64/kernel/head.S
arch/ia64/kernel/head.S
+2
-2
arch/ia64/kernel/irq_ia64.c
arch/ia64/kernel/irq_ia64.c
+15
-0
arch/ia64/kernel/mca.c
arch/ia64/kernel/mca.c
+0
-3
arch/ia64/kernel/process.c
arch/ia64/kernel/process.c
+2
-2
arch/ia64/kernel/sal.c
arch/ia64/kernel/sal.c
+111
-72
arch/ia64/pci/pci.c
arch/ia64/pci/pci.c
+54
-7
drivers/char/sn_serial.c
drivers/char/sn_serial.c
+22
-0
include/asm-ia64/hardirq.h
include/asm-ia64/hardirq.h
+1
-11
include/asm-ia64/sal.h
include/asm-ia64/sal.h
+9
-4
include/asm-ia64/sn/router.h
include/asm-ia64/sn/router.h
+1
-0
No files found.
arch/ia64/configs/zx1_defconfig
0 → 100644
View file @
c34d6311
This diff is collapsed.
Click to expand it.
arch/ia64/hp/common/sba_iommu.c
View file @
c34d6311
...
@@ -1479,7 +1479,6 @@ ioc_iova_init(struct ioc *ioc)
...
@@ -1479,7 +1479,6 @@ ioc_iova_init(struct ioc *ioc)
#ifdef FULL_VALID_PDIR
#ifdef FULL_VALID_PDIR
unsigned
long
index
;
unsigned
long
index
;
#endif
#endif
unsigned
int
i
;
/*
/*
** Firmware programs the base and size of a "safe IOVA space"
** Firmware programs the base and size of a "safe IOVA space"
...
@@ -1574,18 +1573,6 @@ ioc_iova_init(struct ioc *ioc)
...
@@ -1574,18 +1573,6 @@ ioc_iova_init(struct ioc *ioc)
/* Enable IOVA translation */
/* Enable IOVA translation */
WRITE_REG
(
ioc
->
ibase
|
1
,
ioc
->
ioc_hpa
+
IOC_IBASE
);
WRITE_REG
(
ioc
->
ibase
|
1
,
ioc
->
ioc_hpa
+
IOC_IBASE
);
READ_REG
(
ioc
->
ioc_hpa
+
IOC_IBASE
);
READ_REG
(
ioc
->
ioc_hpa
+
IOC_IBASE
);
/* Clear ROPE(N)_CONFIG AO bit.
** Disables "NT Ordering" (~= !"Relaxed Ordering")
** Overrides bit 1 in DMA Hint Sets.
** Improves netperf UDP_STREAM by ~10% for tg3 on bcm5701.
*/
for
(
i
=
0
;
i
<
(
8
*
8
);
i
+=
8
)
{
unsigned
long
rope_config
;
rope_config
=
READ_REG
(
ioc
->
ioc_hpa
+
IOC_ROPE0_CFG
+
i
);
rope_config
&=
~
IOC_ROPE_AO
;
WRITE_REG
(
rope_config
,
ioc
->
ioc_hpa
+
IOC_ROPE0_CFG
+
i
);
}
}
}
static
void
__init
static
void
__init
...
@@ -1659,26 +1646,25 @@ ioc_sac_init(struct ioc *ioc)
...
@@ -1659,26 +1646,25 @@ ioc_sac_init(struct ioc *ioc)
static
void
__init
static
void
__init
ioc_zx1_init
(
struct
ioc
*
ioc
)
ioc_zx1_init
(
struct
ioc
*
ioc
)
{
{
unsigned
long
rope_config
;
unsigned
int
i
;
if
(
ioc
->
rev
<
0x20
)
if
(
ioc
->
rev
<
0x20
)
panic
(
PFX
"IOC 2.0 or later required for IOMMU support
\n
"
);
panic
(
PFX
"IOC 2.0 or later required for IOMMU support
\n
"
);
ioc
->
dma_mask
=
0xFFFFFFFFFFUL
;
/* 38 bit memory controller + extra bit for range displaced by MMIO */
ioc
->
dma_mask
=
(
0x1UL
<<
39
)
-
1
;
if
(
!
iovp_shift
)
{
/* 64k is max iommu page size */
iovp_shift
=
min
(
PAGE_SHIFT
,
16
);
iovp_size
=
(
1
<<
iovp_shift
);
iovp_mask
=
~
(
iovp_size
-
1
);
}
}
static
void
__init
/*
ioc_sx1000_init
(
struct
ioc
*
ioc
)
** Clear ROPE(N)_CONFIG AO bit.
{
** Disables "NT Ordering" (~= !"Relaxed Ordering")
if
(
!
iovp_shift
)
{
** Overrides bit 1 in DMA Hint Sets.
iovp_shift
=
12
;
/* 4K for now */
** Improves netperf UDP_STREAM by ~10% for tg3 on bcm5701.
iovp_size
=
(
1
<<
iovp_shift
);
*/
iovp_mask
=
~
(
iovp_size
-
1
);
for
(
i
=
0
;
i
<
(
8
*
8
);
i
+=
8
)
{
rope_config
=
READ_REG
(
ioc
->
ioc_hpa
+
IOC_ROPE0_CFG
+
i
);
rope_config
&=
~
IOC_ROPE_AO
;
WRITE_REG
(
rope_config
,
ioc
->
ioc_hpa
+
IOC_ROPE0_CFG
+
i
);
}
}
}
}
...
@@ -1692,8 +1678,6 @@ struct ioc_iommu {
...
@@ -1692,8 +1678,6 @@ struct ioc_iommu {
static
struct
ioc_iommu
ioc_iommu_info
[]
__initdata
=
{
static
struct
ioc_iommu
ioc_iommu_info
[]
__initdata
=
{
{
ZX1_IOC_ID
,
"zx1"
,
ioc_zx1_init
},
{
ZX1_IOC_ID
,
"zx1"
,
ioc_zx1_init
},
{
REO_IOC_ID
,
"REO"
,
ioc_sx1000_init
},
{
SX1000_IOC_ID
,
"sx1000"
,
ioc_sx1000_init
},
};
};
static
struct
ioc
*
__init
static
struct
ioc
*
__init
...
@@ -1718,11 +1702,6 @@ ioc_init(u64 hpa, void *handle)
...
@@ -1718,11 +1702,6 @@ ioc_init(u64 hpa, void *handle)
ioc
->
rev
=
READ_REG
(
ioc
->
ioc_hpa
+
IOC_FCLASS
)
&
0xFFUL
;
ioc
->
rev
=
READ_REG
(
ioc
->
ioc_hpa
+
IOC_FCLASS
)
&
0xFFUL
;
ioc
->
dma_mask
=
0xFFFFFFFFFFFFFFFFUL
;
/* conservative */
ioc
->
dma_mask
=
0xFFFFFFFFFFFFFFFFUL
;
/* conservative */
if
(
iovp_shift
)
{
iovp_size
=
(
1
<<
iovp_shift
);
iovp_mask
=
~
(
iovp_size
-
1
);
}
for
(
info
=
ioc_iommu_info
;
info
<
ioc_iommu_info
+
ARRAY_SIZE
(
ioc_iommu_info
);
info
++
)
{
for
(
info
=
ioc_iommu_info
;
info
<
ioc_iommu_info
+
ARRAY_SIZE
(
ioc_iommu_info
);
info
++
)
{
if
(
ioc
->
func_id
==
info
->
func_id
)
{
if
(
ioc
->
func_id
==
info
->
func_id
)
{
ioc
->
name
=
info
->
name
;
ioc
->
name
=
info
->
name
;
...
@@ -1730,6 +1709,10 @@ ioc_init(u64 hpa, void *handle)
...
@@ -1730,6 +1709,10 @@ ioc_init(u64 hpa, void *handle)
(
info
->
init
)(
ioc
);
(
info
->
init
)(
ioc
);
}
}
}
}
iovp_size
=
(
1
<<
iovp_shift
);
iovp_mask
=
~
(
iovp_size
-
1
);
DBG_INIT
(
"%s: PAGE_SIZE %ldK, iovp_size %ldK
\n
"
,
__FUNCTION__
,
DBG_INIT
(
"%s: PAGE_SIZE %ldK, iovp_size %ldK
\n
"
,
__FUNCTION__
,
PAGE_SIZE
>>
10
,
iovp_size
>>
10
);
PAGE_SIZE
>>
10
,
iovp_size
>>
10
);
...
@@ -1929,10 +1912,21 @@ acpi_sba_ioc_add(struct acpi_device *device)
...
@@ -1929,10 +1912,21 @@ acpi_sba_ioc_add(struct acpi_device *device)
* For HWP0001, only SBA appears in ACPI namespace. It encloses the PCI
* For HWP0001, only SBA appears in ACPI namespace. It encloses the PCI
* root bridges, and its CSR space includes the IOC function.
* root bridges, and its CSR space includes the IOC function.
*/
*/
if
(
strncmp
(
"HWP0001"
,
dev_info
->
hardware_id
.
value
,
7
)
==
0
)
if
(
strncmp
(
"HWP0001"
,
dev_info
->
hardware_id
.
value
,
7
)
==
0
)
{
hpa
+=
ZX1_IOC_OFFSET
;
hpa
+=
ZX1_IOC_OFFSET
;
/* zx1 based systems default to kernel page size iommu pages */
if
(
!
iovp_shift
)
iovp_shift
=
min
(
PAGE_SHIFT
,
16
);
}
ACPI_MEM_FREE
(
dev_info
);
ACPI_MEM_FREE
(
dev_info
);
/*
* default anything not caught above or specified on cmdline to 4k
* iommu page size
*/
if
(
!
iovp_shift
)
iovp_shift
=
12
;
ioc
=
ioc_init
(
hpa
,
device
->
handle
);
ioc
=
ioc_init
(
hpa
,
device
->
handle
);
if
(
!
ioc
)
if
(
!
ioc
)
return
1
;
return
1
;
...
...
arch/ia64/hp/sim/simserial.c
View file @
c34d6311
...
@@ -636,7 +636,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
...
@@ -636,7 +636,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
#ifdef SIMSERIAL_DEBUG
#ifdef SIMSERIAL_DEBUG
printk
(
"rs_close: hung_up
\n
"
);
printk
(
"rs_close: hung_up
\n
"
);
#endif
#endif
MOD_DEC_USE_COUNT
;
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
...
@@ -661,7 +660,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
...
@@ -661,7 +660,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
state
->
count
=
0
;
state
->
count
=
0
;
}
}
if
(
state
->
count
)
{
if
(
state
->
count
)
{
MOD_DEC_USE_COUNT
;
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
...
@@ -686,7 +684,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
...
@@ -686,7 +684,6 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
}
}
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CLOSING
);
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CLOSING
);
wake_up_interruptible
(
&
info
->
close_wait
);
wake_up_interruptible
(
&
info
->
close_wait
);
MOD_DEC_USE_COUNT
;
}
}
/*
/*
...
@@ -874,17 +871,12 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
...
@@ -874,17 +871,12 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
int
retval
,
line
;
int
retval
,
line
;
unsigned
long
page
;
unsigned
long
page
;
MOD_INC_USE_COUNT
;
line
=
tty
->
index
;
line
=
tty
->
index
;
if
((
line
<
0
)
||
(
line
>=
NR_PORTS
))
{
if
((
line
<
0
)
||
(
line
>=
NR_PORTS
))
MOD_DEC_USE_COUNT
;
return
-
ENODEV
;
return
-
ENODEV
;
}
retval
=
get_async_struct
(
line
,
&
info
);
retval
=
get_async_struct
(
line
,
&
info
);
if
(
retval
)
{
if
(
retval
)
MOD_DEC_USE_COUNT
;
return
retval
;
return
retval
;
}
tty
->
driver_data
=
info
;
tty
->
driver_data
=
info
;
info
->
tty
=
tty
;
info
->
tty
=
tty
;
...
@@ -895,10 +887,8 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
...
@@ -895,10 +887,8 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
if
(
!
tmp_buf
)
{
if
(
!
tmp_buf
)
{
page
=
get_zeroed_page
(
GFP_KERNEL
);
page
=
get_zeroed_page
(
GFP_KERNEL
);
if
(
!
page
)
{
if
(
!
page
)
/* MOD_DEC_USE_COUNT; "info->tty" will cause this? */
return
-
ENOMEM
;
return
-
ENOMEM
;
}
if
(
tmp_buf
)
if
(
tmp_buf
)
free_page
(
page
);
free_page
(
page
);
else
else
...
@@ -912,7 +902,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
...
@@ -912,7 +902,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
(
info
->
flags
&
ASYNC_CLOSING
))
{
(
info
->
flags
&
ASYNC_CLOSING
))
{
if
(
info
->
flags
&
ASYNC_CLOSING
)
if
(
info
->
flags
&
ASYNC_CLOSING
)
interruptible_sleep_on
(
&
info
->
close_wait
);
interruptible_sleep_on
(
&
info
->
close_wait
);
/* MOD_DEC_USE_COUNT; "info->tty" will cause this? */
#ifdef SERIAL_DO_RESTART
#ifdef SERIAL_DO_RESTART
return
((
info
->
flags
&
ASYNC_HUP_NOTIFY
)
?
return
((
info
->
flags
&
ASYNC_HUP_NOTIFY
)
?
-
EAGAIN
:
-
ERESTARTSYS
);
-
EAGAIN
:
-
ERESTARTSYS
);
...
@@ -926,7 +915,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
...
@@ -926,7 +915,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
*/
*/
retval
=
startup
(
info
);
retval
=
startup
(
info
);
if
(
retval
)
{
if
(
retval
)
{
/* MOD_DEC_USE_COUNT; "info->tty" will cause this? */
return
retval
;
return
retval
;
}
}
...
@@ -1042,6 +1030,7 @@ simrs_init (void)
...
@@ -1042,6 +1030,7 @@ simrs_init (void)
/* Initialize the tty_driver structure */
/* Initialize the tty_driver structure */
hp_simserial_driver
->
owner
=
THIS_MODULE
;
hp_simserial_driver
->
driver_name
=
"simserial"
;
hp_simserial_driver
->
driver_name
=
"simserial"
;
hp_simserial_driver
->
name
=
"ttyS"
;
hp_simserial_driver
->
name
=
"ttyS"
;
hp_simserial_driver
->
major
=
TTY_MAJOR
;
hp_simserial_driver
->
major
=
TTY_MAJOR
;
...
...
arch/ia64/kernel/head.S
View file @
c34d6311
...
@@ -816,7 +816,7 @@ GLOBAL_ENTRY(ia64_delay_loop)
...
@@ -816,7 +816,7 @@ GLOBAL_ENTRY(ia64_delay_loop)
br.ret.sptk.many
rp
br.ret.sptk.many
rp
END
(
ia64_delay_loop
)
END
(
ia64_delay_loop
)
GLOBAL_ENTRY
(
ia64_invoke_kernel_thread_helper
)
GLOBAL_ENTRY
(
start_kernel_thread
)
.
prologue
.
prologue
.
save
rp
,
r0
//
this
is
the
end
of
the
call
-
chain
.
save
rp
,
r0
//
this
is
the
end
of
the
call
-
chain
.
body
.
body
...
@@ -827,7 +827,7 @@ GLOBAL_ENTRY(ia64_invoke_kernel_thread_helper)
...
@@ -827,7 +827,7 @@ GLOBAL_ENTRY(ia64_invoke_kernel_thread_helper)
mov
out0
=
r8
mov
out0
=
r8
br.call.sptk.many
rp
=
sys_exit
;;
br.call.sptk.many
rp
=
sys_exit
;;
1
:
br.sptk.few
1
b
//
not
reached
1
:
br.sptk.few
1
b
//
not
reached
END
(
ia64_invoke_kernel_thread_helper
)
END
(
start_kernel_thread
)
#ifdef CONFIG_IA64_BRL_EMU
#ifdef CONFIG_IA64_BRL_EMU
...
...
arch/ia64/kernel/irq_ia64.c
View file @
c34d6311
...
@@ -57,6 +57,21 @@ __u8 isa_irq_to_vector_map[16] = {
...
@@ -57,6 +57,21 @@ __u8 isa_irq_to_vector_map[16] = {
};
};
EXPORT_SYMBOL
(
isa_irq_to_vector_map
);
EXPORT_SYMBOL
(
isa_irq_to_vector_map
);
static
inline
void
irq_enter
(
void
)
{
preempt_count
()
+=
HARDIRQ_OFFSET
;
}
static
inline
void
irq_exit
(
void
)
{
preempt_count
()
-=
IRQ_EXIT_OFFSET
;
if
(
!
in_interrupt
()
&&
local_softirq_pending
())
do_softirq
();
preempt_enable_no_resched
();
}
int
int
ia64_alloc_vector
(
void
)
ia64_alloc_vector
(
void
)
{
{
...
...
arch/ia64/kernel/mca.c
View file @
c34d6311
...
@@ -103,8 +103,6 @@ extern void ia64_slave_init_handler (void);
...
@@ -103,8 +103,6 @@ extern void ia64_slave_init_handler (void);
static
ia64_mc_info_t
ia64_mc_info
;
static
ia64_mc_info_t
ia64_mc_info
;
extern
struct
hw_interrupt_type
irq_type_iosapic_level
;
struct
ia64_mca_tlb_info
ia64_mca_tlb_list
[
NR_CPUS
];
struct
ia64_mca_tlb_info
ia64_mca_tlb_list
[
NR_CPUS
];
#define MAX_CPE_POLL_INTERVAL (15*60*HZ)
/* 15 minutes */
#define MAX_CPE_POLL_INTERVAL (15*60*HZ)
/* 15 minutes */
...
@@ -1253,7 +1251,6 @@ ia64_mca_init(void)
...
@@ -1253,7 +1251,6 @@ ia64_mca_init(void)
if
(
irq_to_vector
(
irq
)
==
cpev
)
{
if
(
irq_to_vector
(
irq
)
==
cpev
)
{
desc
=
irq_descp
(
irq
);
desc
=
irq_descp
(
irq
);
desc
->
status
|=
IRQ_PER_CPU
;
desc
->
status
|=
IRQ_PER_CPU
;
desc
->
handler
=
&
irq_type_iosapic_level
;
setup_irq
(
irq
,
&
mca_cpe_irqaction
);
setup_irq
(
irq
,
&
mca_cpe_irqaction
);
}
}
ia64_mca_register_cpev
(
cpev
);
ia64_mca_register_cpev
(
cpev
);
...
...
arch/ia64/kernel/process.c
View file @
c34d6311
...
@@ -574,8 +574,8 @@ ia64_set_personality (struct elf64_hdr *elf_ex, int ibcs2_interpreter)
...
@@ -574,8 +574,8 @@ ia64_set_personality (struct elf64_hdr *elf_ex, int ibcs2_interpreter)
pid_t
pid_t
kernel_thread
(
int
(
*
fn
)(
void
*
),
void
*
arg
,
unsigned
long
flags
)
kernel_thread
(
int
(
*
fn
)(
void
*
),
void
*
arg
,
unsigned
long
flags
)
{
{
extern
void
ia64_invoke_kernel_thread_helper
(
void
);
extern
void
start_kernel_thread
(
void
);
unsigned
long
*
helper_fptr
=
(
unsigned
long
*
)
&
ia64_invoke_kernel_thread_helper
;
unsigned
long
*
helper_fptr
=
(
unsigned
long
*
)
&
start_kernel_thread
;
struct
{
struct
{
struct
switch_stack
sw
;
struct
switch_stack
sw
;
struct
pt_regs
pt
;
struct
pt_regs
pt
;
...
...
arch/ia64/kernel/sal.c
View file @
c34d6311
...
@@ -10,7 +10,6 @@
...
@@ -10,7 +10,6 @@
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/smp.h>
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/string.h>
...
@@ -21,6 +20,12 @@
...
@@ -21,6 +20,12 @@
spinlock_t
sal_lock
__cacheline_aligned
=
SPIN_LOCK_UNLOCKED
;
spinlock_t
sal_lock
__cacheline_aligned
=
SPIN_LOCK_UNLOCKED
;
unsigned
long
sal_platform_features
;
unsigned
long
sal_platform_features
;
unsigned
short
sal_revision
;
unsigned
short
sal_version
;
#define SAL_MAJOR(x) ((x) >> 8)
#define SAL_MINOR(x) ((x) & 0xff)
static
struct
{
static
struct
{
void
*
addr
;
/* function entry point */
void
*
addr
;
/* function entry point */
void
*
gpval
;
/* gp value to use */
void
*
gpval
;
/* gp value to use */
...
@@ -86,13 +91,98 @@ ia64_sal_handler_init (void *entry_point, void *gpval)
...
@@ -86,13 +91,98 @@ ia64_sal_handler_init (void *entry_point, void *gpval)
ia64_sal
=
(
ia64_sal_handler
)
&
pdesc
;
ia64_sal
=
(
ia64_sal_handler
)
&
pdesc
;
}
}
static
void
__init
check_versions
(
struct
ia64_sal_systab
*
systab
)
{
sal_revision
=
(
systab
->
sal_rev_major
<<
8
)
|
systab
->
sal_rev_minor
;
sal_version
=
(
systab
->
sal_b_rev_major
<<
8
)
|
systab
->
sal_b_rev_minor
;
/* Check for broken firmware */
if
((
sal_revision
==
SAL_VERSION_CODE
(
49
,
29
))
&&
(
sal_version
==
SAL_VERSION_CODE
(
49
,
29
)))
{
/*
* Old firmware for zx2000 prototypes have this weird version number,
* reset it to something sane.
*/
sal_revision
=
SAL_VERSION_CODE
(
2
,
8
);
sal_version
=
SAL_VERSION_CODE
(
0
,
0
);
}
}
static
void
__init
sal_desc_entry_point
(
void
*
p
)
{
struct
ia64_sal_desc_entry_point
*
ep
=
p
;
ia64_pal_handler_init
(
__va
(
ep
->
pal_proc
));
ia64_sal_handler_init
(
__va
(
ep
->
sal_proc
),
__va
(
ep
->
gp
));
}
#ifdef CONFIG_SMP
static
void
__init
set_smp_redirect
(
int
flag
)
{
if
(
no_int_routing
)
smp_int_redirect
&=
~
flag
;
else
smp_int_redirect
|=
flag
;
}
#else
#define set_smp_redirect(flag) do { } while (0)
#endif
static
void
__init
sal_desc_platform_feature
(
void
*
p
)
{
struct
ia64_sal_desc_platform_feature
*
pf
=
p
;
sal_platform_features
=
pf
->
feature_mask
;
printk
(
KERN_INFO
"SAL Platform features:"
);
if
(
!
sal_platform_features
)
{
printk
(
" None
\n
"
);
return
;
}
if
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_BUS_LOCK
)
printk
(
" BusLock"
);
if
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_IRQ_REDIR_HINT
)
{
printk
(
" IRQ_Redirection"
);
set_smp_redirect
(
SMP_IRQ_REDIRECTION
);
}
if
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_IPI_REDIR_HINT
)
{
printk
(
" IPI_Redirection"
);
set_smp_redirect
(
SMP_IPI_REDIRECTION
);
}
if
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT
)
printk
(
" ITC_Drift"
);
printk
(
"
\n
"
);
}
#ifdef CONFIG_SMP
static
void
__init
sal_desc_ap_wakeup
(
void
*
p
)
{
struct
ia64_sal_desc_ap_wakeup
*
ap
=
p
;
switch
(
ap
->
mechanism
)
{
case
IA64_SAL_AP_EXTERNAL_INT
:
ap_wakeup_vector
=
ap
->
vector
;
printk
(
KERN_INFO
"SAL: AP wakeup using external interrupt "
"vector 0x%lx
\n
"
,
ap_wakeup_vector
);
break
;
default:
printk
(
KERN_ERR
"SAL: AP wakeup mechanism unsupported!
\n
"
);
break
;
}
}
#else
static
void
__init
sal_desc_ap_wakeup
(
void
*
p
)
{
}
#endif
void
__init
void
__init
ia64_sal_init
(
struct
ia64_sal_systab
*
systab
)
ia64_sal_init
(
struct
ia64_sal_systab
*
systab
)
{
{
unsigned
long
min
,
max
;
char
*
p
;
char
*
p
;
struct
ia64_sal_desc_entry_point
*
ep
;
int
i
;
int
i
;
if
(
!
systab
)
{
if
(
!
systab
)
{
...
@@ -103,86 +193,35 @@ ia64_sal_init (struct ia64_sal_systab *systab)
...
@@ -103,86 +193,35 @@ ia64_sal_init (struct ia64_sal_systab *systab)
if
(
strncmp
(
systab
->
signature
,
"SST_"
,
4
)
!=
0
)
if
(
strncmp
(
systab
->
signature
,
"SST_"
,
4
)
!=
0
)
printk
(
KERN_ERR
"bad signature in system table!"
);
printk
(
KERN_ERR
"bad signature in system table!"
);
/*
check_versions
(
systab
);
* revisions are coded in BCD, so %x does the job for us
*/
printk
(
KERN_INFO
"SAL v%x.%x: oem=%.32s, product=%.32s
\n
"
,
systab
->
sal_rev_major
,
systab
->
sal_rev_minor
,
systab
->
oem_id
,
systab
->
product_id
);
min
=
~
0UL
;
/* revisions are coded in BCD, so %x does the job for us */
max
=
0
;
printk
(
KERN_INFO
"SAL %x.%x: %.32s %.32s%sversion %x.%x
\n
"
,
SAL_MAJOR
(
sal_revision
),
SAL_MINOR
(
sal_revision
),
systab
->
oem_id
,
systab
->
product_id
,
systab
->
product_id
[
0
]
?
" "
:
""
,
SAL_MAJOR
(
sal_version
),
SAL_MINOR
(
sal_version
));
p
=
(
char
*
)
(
systab
+
1
);
p
=
(
char
*
)
(
systab
+
1
);
for
(
i
=
0
;
i
<
systab
->
entry_count
;
i
++
)
{
for
(
i
=
0
;
i
<
systab
->
entry_count
;
i
++
)
{
/*
/*
* The first byte of each entry type contains the type descriptor.
* The first byte of each entry type contains the type
* descriptor.
*/
*/
switch
(
*
p
)
{
switch
(
*
p
)
{
case
SAL_DESC_ENTRY_POINT
:
case
SAL_DESC_ENTRY_POINT
:
ep
=
(
struct
ia64_sal_desc_entry_point
*
)
p
;
sal_desc_entry_point
(
p
);
printk
(
KERN_INFO
"SAL: entry: pal_proc=0x%lx, sal_proc=0x%lx
\n
"
,
break
;
ep
->
pal_proc
,
ep
->
sal_proc
);
case
SAL_DESC_PLATFORM_FEATURE
:
ia64_pal_handler_init
(
__va
(
ep
->
pal_proc
));
sal_desc_platform_feature
(
p
);
ia64_sal_handler_init
(
__va
(
ep
->
sal_proc
),
__va
(
ep
->
gp
));
break
;
break
;
case
SAL_DESC_PTC
:
case
SAL_DESC_PTC
:
ia64_ptc_domain_info
=
(
ia64_sal_desc_ptc_t
*
)
p
;
ia64_ptc_domain_info
=
(
ia64_sal_desc_ptc_t
*
)
p
;
break
;
break
;
case
SAL_DESC_AP_WAKEUP
:
case
SAL_DESC_AP_WAKEUP
:
#ifdef CONFIG_SMP
sal_desc_ap_wakeup
(
p
);
{
struct
ia64_sal_desc_ap_wakeup
*
ap
=
(
void
*
)
p
;
switch
(
ap
->
mechanism
)
{
case
IA64_SAL_AP_EXTERNAL_INT
:
ap_wakeup_vector
=
ap
->
vector
;
printk
(
KERN_INFO
"SAL: AP wakeup using external interrupt "
"vector 0x%lx
\n
"
,
ap_wakeup_vector
);
break
;
default:
printk
(
KERN_ERR
"SAL: AP wakeup mechanism unsupported!
\n
"
);
break
;
break
;
}
}
break
;
}
#endif
case
SAL_DESC_PLATFORM_FEATURE
:
{
struct
ia64_sal_desc_platform_feature
*
pf
=
(
void
*
)
p
;
sal_platform_features
=
pf
->
feature_mask
;
printk
(
KERN_INFO
"SAL: Platform features "
);
if
(
pf
->
feature_mask
&
IA64_SAL_PLATFORM_FEATURE_BUS_LOCK
)
printk
(
"BusLock "
);
if
(
pf
->
feature_mask
&
IA64_SAL_PLATFORM_FEATURE_IRQ_REDIR_HINT
)
{
printk
(
"IRQ_Redirection "
);
#ifdef CONFIG_SMP
if
(
no_int_routing
)
smp_int_redirect
&=
~
SMP_IRQ_REDIRECTION
;
else
smp_int_redirect
|=
SMP_IRQ_REDIRECTION
;
#endif
}
if
(
pf
->
feature_mask
&
IA64_SAL_PLATFORM_FEATURE_IPI_REDIR_HINT
)
{
printk
(
"IPI_Redirection "
);
#ifdef CONFIG_SMP
if
(
no_int_routing
)
smp_int_redirect
&=
~
SMP_IPI_REDIRECTION
;
else
smp_int_redirect
|=
SMP_IPI_REDIRECTION
;
#endif
}
if
(
pf
->
feature_mask
&
IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT
)
printk
(
"ITC_Drift "
);
printk
(
"
\n
"
);
break
;
}
}
p
+=
SAL_DESC_SIZE
(
*
p
);
p
+=
SAL_DESC_SIZE
(
*
p
);
}
}
}
}
arch/ia64/pci/pci.c
View file @
c34d6311
...
@@ -57,17 +57,16 @@ struct pci_fixup pcibios_fixups[1];
...
@@ -57,17 +57,16 @@ struct pci_fixup pcibios_fixups[1];
((u64)(seg << 24) | (u64)(bus << 16) | \
((u64)(seg << 24) | (u64)(bus << 16) | \
(u64)(devfn << 8) | (u64)(reg))
(u64)(devfn << 8) | (u64)(reg))
static
int
static
int
pci_sal_read
(
int
seg
,
int
bus
,
int
devfn
,
int
reg
,
int
len
,
u32
*
value
)
pci_sal_read
(
int
seg
,
int
bus
,
int
devfn
,
int
reg
,
int
len
,
u32
*
value
)
{
{
int
result
=
0
;
int
result
=
0
;
u64
data
=
0
;
u64
data
=
0
;
if
(
!
value
||
(
seg
>
255
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
255
))
if
((
seg
>
255
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
255
))
return
-
EINVAL
;
return
-
EINVAL
;
result
=
ia64_sal_pci_config_read
(
PCI_SAL_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
len
,
&
data
);
result
=
ia64_sal_pci_config_read
(
PCI_SAL_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
0
,
len
,
&
data
);
*
value
=
(
u32
)
data
;
*
value
=
(
u32
)
data
;
...
@@ -80,15 +79,62 @@ pci_sal_write (int seg, int bus, int devfn, int reg, int len, u32 value)
...
@@ -80,15 +79,62 @@ pci_sal_write (int seg, int bus, int devfn, int reg, int len, u32 value)
if
((
seg
>
255
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
255
))
if
((
seg
>
255
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
255
))
return
-
EINVAL
;
return
-
EINVAL
;
return
ia64_sal_pci_config_write
(
PCI_SAL_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
len
,
value
);
return
ia64_sal_pci_config_write
(
PCI_SAL_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
0
,
len
,
value
);
}
}
struct
pci_raw_ops
pci_sal_ops
=
{
st
atic
st
ruct
pci_raw_ops
pci_sal_ops
=
{
.
read
=
pci_sal_read
,
.
read
=
pci_sal_read
,
.
write
=
pci_sal_write
.
write
=
pci_sal_write
};
};
struct
pci_raw_ops
*
raw_pci_ops
=
&
pci_sal_ops
;
/* default to SAL */
/* SAL 3.2 adds support for extended config space. */
#define PCI_SAL_EXT_ADDRESS(seg, bus, devfn, reg) \
((u64)(seg << 28) | (u64)(bus << 20) | \
(u64)(devfn << 12) | (u64)(reg))
static
int
pci_sal_ext_read
(
int
seg
,
int
bus
,
int
devfn
,
int
reg
,
int
len
,
u32
*
value
)
{
int
result
=
0
;
u64
data
=
0
;
if
((
seg
>
65535
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
4095
))
return
-
EINVAL
;
result
=
ia64_sal_pci_config_read
(
PCI_SAL_EXT_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
1
,
len
,
&
data
);
*
value
=
(
u32
)
data
;
return
result
;
}
static
int
pci_sal_ext_write
(
int
seg
,
int
bus
,
int
devfn
,
int
reg
,
int
len
,
u32
value
)
{
if
((
seg
>
65535
)
||
(
bus
>
255
)
||
(
devfn
>
255
)
||
(
reg
>
4095
))
return
-
EINVAL
;
return
ia64_sal_pci_config_write
(
PCI_SAL_EXT_ADDRESS
(
seg
,
bus
,
devfn
,
reg
),
1
,
len
,
value
);
}
static
struct
pci_raw_ops
pci_sal_ext_ops
=
{
.
read
=
pci_sal_ext_read
,
.
write
=
pci_sal_ext_write
};
struct
pci_raw_ops
*
raw_pci_ops
=
&
pci_sal_ops
;
/* default to SAL < 3.2 */
static
int
__init
pci_set_sal_ops
(
void
)
{
if
(
sal_version
>=
SAL_VERSION_CODE
(
3
,
2
))
{
raw_pci_ops
=
&
pci_sal_ext_ops
;
}
return
0
;
}
arch_initcall
(
pci_set_sal_ops
);
static
int
static
int
...
@@ -139,7 +185,8 @@ alloc_pci_controller (int seg)
...
@@ -139,7 +185,8 @@ alloc_pci_controller (int seg)
}
}
static
int
__devinit
static
int
__devinit
alloc_resource
(
char
*
name
,
struct
resource
*
root
,
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
flags
)
alloc_resource
(
char
*
name
,
struct
resource
*
root
,
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
flags
)
{
{
struct
resource
*
res
;
struct
resource
*
res
;
...
...
drivers/char/sn_serial.c
View file @
c34d6311
...
@@ -952,6 +952,7 @@ static void
...
@@ -952,6 +952,7 @@ static void
sn_sal_console_write
(
struct
console
*
co
,
const
char
*
s
,
unsigned
count
)
sn_sal_console_write
(
struct
console
*
co
,
const
char
*
s
,
unsigned
count
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
const
char
*
s1
;
BUG_ON
(
!
sn_sal_is_asynch
);
BUG_ON
(
!
sn_sal_is_asynch
);
...
@@ -959,15 +960,36 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
...
@@ -959,15 +960,36 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
* oops, kdb, panic, etc. make sure they get it. */
* oops, kdb, panic, etc. make sure they get it. */
if
(
spin_is_locked
(
&
sn_sal_lock
))
{
if
(
spin_is_locked
(
&
sn_sal_lock
))
{
synch_flush_xmit
();
synch_flush_xmit
();
/* Output '\r' before each '\n' */
while
((
s1
=
memchr
(
s
,
'\n'
,
count
))
!=
NULL
)
{
sn_func
->
sal_puts
(
s
,
s1
-
s
);
sn_func
->
sal_puts
(
"
\r\n
"
,
2
);
count
-=
s1
+
1
-
s
;
s
=
s1
+
1
;
}
sn_func
->
sal_puts
(
s
,
count
);
sn_func
->
sal_puts
(
s
,
count
);
}
}
else
if
(
in_interrupt
())
{
else
if
(
in_interrupt
())
{
spin_lock_irqsave
(
&
sn_sal_lock
,
flags
);
spin_lock_irqsave
(
&
sn_sal_lock
,
flags
);
synch_flush_xmit
();
synch_flush_xmit
();
spin_unlock_irqrestore
(
&
sn_sal_lock
,
flags
);
spin_unlock_irqrestore
(
&
sn_sal_lock
,
flags
);
/* Output '\r' before each '\n' */
while
((
s1
=
memchr
(
s
,
'\n'
,
count
))
!=
NULL
)
{
sn_func
->
sal_puts
(
s
,
s1
-
s
);
sn_func
->
sal_puts
(
"
\r\n
"
,
2
);
count
-=
s1
+
1
-
s
;
s
=
s1
+
1
;
}
sn_func
->
sal_puts
(
s
,
count
);
sn_func
->
sal_puts
(
s
,
count
);
}
}
else
else
/* Output '\r' before each '\n' */
while
((
s1
=
memchr
(
s
,
'\n'
,
count
))
!=
NULL
)
{
sn_sal_write
(
NULL
,
0
,
s
,
s1
-
s
);
sn_sal_write
(
NULL
,
0
,
"
\r\n
"
,
2
);
count
-=
s1
+
1
-
s
;
s
=
s1
+
1
;
}
sn_sal_write
(
NULL
,
0
,
s
,
count
);
sn_sal_write
(
NULL
,
0
,
s
,
count
);
}
}
...
...
include/asm-ia64/hardirq.h
View file @
c34d6311
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
#define _ASM_IA64_HARDIRQ_H
#define _ASM_IA64_HARDIRQ_H
/*
/*
*
Copyright (C) 1998-2002
Hewlett-Packard Co
*
Modified 1998-2002, 2004
Hewlett-Packard Co
* David Mosberger-Tang <davidm@hpl.hp.com>
* David Mosberger-Tang <davidm@hpl.hp.com>
*/
*/
...
@@ -86,8 +86,6 @@
...
@@ -86,8 +86,6 @@
#define hardirq_trylock() (!in_interrupt())
#define hardirq_trylock() (!in_interrupt())
#define hardirq_endlock() do { } while (0)
#define hardirq_endlock() do { } while (0)
#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
#ifdef CONFIG_PREEMPT
#ifdef CONFIG_PREEMPT
# include <linux/smp_lock.h>
# include <linux/smp_lock.h>
# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
...
@@ -97,14 +95,6 @@
...
@@ -97,14 +95,6 @@
# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET
# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET
#endif
#endif
#define irq_exit() \
do { \
preempt_count() -= IRQ_EXIT_OFFSET; \
if (!in_interrupt() && local_softirq_pending()) \
do_softirq(); \
preempt_enable_no_resched(); \
} while (0)
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
extern
void
synchronize_irq
(
unsigned
int
irq
);
extern
void
synchronize_irq
(
unsigned
int
irq
);
#else
#else
...
...
include/asm-ia64/sal.h
View file @
c34d6311
...
@@ -35,6 +35,7 @@
...
@@ -35,6 +35,7 @@
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
#include <linux/bcd.h>
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/efi.h>
#include <linux/efi.h>
...
@@ -229,6 +230,10 @@ typedef struct ia64_sal_desc_ap_wakeup {
...
@@ -229,6 +230,10 @@ typedef struct ia64_sal_desc_ap_wakeup {
extern
ia64_sal_handler
ia64_sal
;
extern
ia64_sal_handler
ia64_sal
;
extern
struct
ia64_sal_desc_ptc
*
ia64_ptc_domain_info
;
extern
struct
ia64_sal_desc_ptc
*
ia64_ptc_domain_info
;
extern
unsigned
short
sal_revision
;
/* supported SAL spec revision */
extern
unsigned
short
sal_version
;
/* SAL version; OEM dependent */
#define SAL_VERSION_CODE(major, minor) ((BIN2BCD(major) << 8) | BIN2BCD(minor))
extern
const
char
*
ia64_sal_strerror
(
long
status
);
extern
const
char
*
ia64_sal_strerror
(
long
status
);
extern
void
ia64_sal_init
(
struct
ia64_sal_systab
*
sal_systab
);
extern
void
ia64_sal_init
(
struct
ia64_sal_systab
*
sal_systab
);
...
@@ -741,10 +746,10 @@ ia64_sal_mc_set_params (u64 param_type, u64 i_or_m, u64 i_or_m_val, u64 timeout,
...
@@ -741,10 +746,10 @@ ia64_sal_mc_set_params (u64 param_type, u64 i_or_m, u64 i_or_m_val, u64 timeout,
/* Read from PCI configuration space */
/* Read from PCI configuration space */
static
inline
s64
static
inline
s64
ia64_sal_pci_config_read
(
u64
pci_config_addr
,
u64
size
,
u64
*
value
)
ia64_sal_pci_config_read
(
u64
pci_config_addr
,
int
type
,
u64
size
,
u64
*
value
)
{
{
struct
ia64_sal_retval
isrv
;
struct
ia64_sal_retval
isrv
;
SAL_CALL
(
isrv
,
SAL_PCI_CONFIG_READ
,
pci_config_addr
,
size
,
0
,
0
,
0
,
0
,
0
);
SAL_CALL
(
isrv
,
SAL_PCI_CONFIG_READ
,
pci_config_addr
,
size
,
type
,
0
,
0
,
0
,
0
);
if
(
value
)
if
(
value
)
*
value
=
isrv
.
v0
;
*
value
=
isrv
.
v0
;
return
isrv
.
status
;
return
isrv
.
status
;
...
@@ -752,11 +757,11 @@ ia64_sal_pci_config_read (u64 pci_config_addr, u64 size, u64 *value)
...
@@ -752,11 +757,11 @@ ia64_sal_pci_config_read (u64 pci_config_addr, u64 size, u64 *value)
/* Write to PCI configuration space */
/* Write to PCI configuration space */
static
inline
s64
static
inline
s64
ia64_sal_pci_config_write
(
u64
pci_config_addr
,
u64
size
,
u64
value
)
ia64_sal_pci_config_write
(
u64
pci_config_addr
,
int
type
,
u64
size
,
u64
value
)
{
{
struct
ia64_sal_retval
isrv
;
struct
ia64_sal_retval
isrv
;
SAL_CALL
(
isrv
,
SAL_PCI_CONFIG_WRITE
,
pci_config_addr
,
size
,
value
,
SAL_CALL
(
isrv
,
SAL_PCI_CONFIG_WRITE
,
pci_config_addr
,
size
,
value
,
0
,
0
,
0
,
0
);
type
,
0
,
0
,
0
);
return
isrv
.
status
;
return
isrv
.
status
;
}
}
...
...
include/asm-ia64/sn/router.h
View file @
c34d6311
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include <asm/sn/vector.h>
#include <asm/sn/vector.h>
#include <asm/sn/slotnum.h>
#include <asm/sn/slotnum.h>
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
#include <asm/sn/sgi.h>
typedef
uint64_t
router_reg_t
;
typedef
uint64_t
router_reg_t
;
...
...
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