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
76f0f1f3
Commit
76f0f1f3
authored
May 23, 2002
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
e6d19c6a
86d6792a
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
288 additions
and
677 deletions
+288
-677
arch/ia64/Config.help
arch/ia64/Config.help
+1
-1
arch/ia64/Makefile
arch/ia64/Makefile
+0
-7
arch/ia64/config.in
arch/ia64/config.in
+9
-2
arch/ia64/hp/common/Makefile
arch/ia64/hp/common/Makefile
+0
-14
arch/ia64/hp/common/sba_iommu.c
arch/ia64/hp/common/sba_iommu.c
+7
-0
arch/ia64/hp/sim/simserial.c
arch/ia64/hp/sim/simserial.c
+4
-4
arch/ia64/hp/zx1/Makefile
arch/ia64/hp/zx1/Makefile
+0
-13
arch/ia64/hp/zx1/hpzx1_misc.c
arch/ia64/hp/zx1/hpzx1_misc.c
+0
-401
arch/ia64/kernel/acpi.c
arch/ia64/kernel/acpi.c
+4
-4
arch/ia64/kernel/efi.c
arch/ia64/kernel/efi.c
+7
-7
arch/ia64/kernel/gate.S
arch/ia64/kernel/gate.S
+2
-2
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/iosapic.c
+3
-2
arch/ia64/kernel/irq.c
arch/ia64/kernel/irq.c
+1
-1
arch/ia64/kernel/pal.S
arch/ia64/kernel/pal.S
+1
-1
arch/ia64/kernel/process.c
arch/ia64/kernel/process.c
+4
-0
arch/ia64/kernel/setup.c
arch/ia64/kernel/setup.c
+19
-1
arch/ia64/kernel/signal.c
arch/ia64/kernel/signal.c
+4
-3
arch/ia64/lib/swiotlb.c
arch/ia64/lib/swiotlb.c
+12
-0
arch/ia64/mm/init.c
arch/ia64/mm/init.c
+3
-3
arch/ia64/sn/io/Makefile
arch/ia64/sn/io/Makefile
+1
-1
arch/ia64/sn/io/pci_dma.c
arch/ia64/sn/io/pci_dma.c
+24
-14
arch/ia64/sn/kernel/misctest.c
arch/ia64/sn/kernel/misctest.c
+3
-3
arch/ia64/vmlinux.lds.S
arch/ia64/vmlinux.lds.S
+2
-1
include/asm-ia64/efi.h
include/asm-ia64/efi.h
+6
-5
include/asm-ia64/elf.h
include/asm-ia64/elf.h
+1
-1
include/asm-ia64/kregs.h
include/asm-ia64/kregs.h
+119
-2
include/asm-ia64/machvec.h
include/asm-ia64/machvec.h
+9
-0
include/asm-ia64/machvec_hpzx1.h
include/asm-ia64/machvec_hpzx1.h
+2
-37
include/asm-ia64/offsets.h
include/asm-ia64/offsets.h
+1
-0
include/asm-ia64/pci.h
include/asm-ia64/pci.h
+1
-11
include/asm-ia64/processor.h
include/asm-ia64/processor.h
+14
-123
include/asm-ia64/system.h
include/asm-ia64/system.h
+23
-13
include/asm-ia64/unistd.h
include/asm-ia64/unistd.h
+1
-0
No files found.
arch/ia64/Config.help
View file @
76f0f1f3
...
@@ -400,7 +400,7 @@ CONFIG_ITANIUM
...
@@ -400,7 +400,7 @@ CONFIG_ITANIUM
Select your IA64 processor type. The default is Intel Itanium.
Select your IA64 processor type. The default is Intel Itanium.
CONFIG_MCKINLEY
CONFIG_MCKINLEY
Select this to configure for a
McKinley
processor.
Select this to configure for a
n Itanium 2 (McKinley)
processor.
CONFIG_IA64_GENERIC
CONFIG_IA64_GENERIC
This selects the system type of your hardware. A "generic" kernel
This selects the system type of your hardware. A "generic" kernel
...
...
arch/ia64/Makefile
View file @
76f0f1f3
...
@@ -69,13 +69,6 @@ ifdef CONFIG_IA64_SGI_SN
...
@@ -69,13 +69,6 @@ ifdef CONFIG_IA64_SGI_SN
$(CORE_FILES)
$(CORE_FILES)
endif
endif
ifdef
CONFIG_IA64_SOFTSDV
SUBDIRS
:=
arch
/
$(ARCH)
/dig
\
$(SUBDIRS)
CORE_FILES
:=
arch
/
$(ARCH)
/dig/dig.a
\
$(CORE_FILES)
endif
ifdef
CONFIG_IA64_DIG
ifdef
CONFIG_IA64_DIG
SUBDIRS
:=
arch
/
$(ARCH)
/dig
\
SUBDIRS
:=
arch
/
$(ARCH)
/dig
\
$(SUBDIRS)
$(SUBDIRS)
...
...
arch/ia64/config.in
View file @
76f0f1f3
...
@@ -16,7 +16,7 @@ define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n
...
@@ -16,7 +16,7 @@ define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n
choice 'IA-64 processor type' \
choice 'IA-64 processor type' \
"Itanium CONFIG_ITANIUM \
"Itanium CONFIG_ITANIUM \
McKinley
CONFIG_MCKINLEY" Itanium
Itanium-2
CONFIG_MCKINLEY" Itanium
choice 'IA-64 system type' \
choice 'IA-64 system type' \
"generic CONFIG_IA64_GENERIC \
"generic CONFIG_IA64_GENERIC \
...
@@ -26,11 +26,18 @@ choice 'IA-64 system type' \
...
@@ -26,11 +26,18 @@ choice 'IA-64 system type' \
SGI-SN1 CONFIG_IA64_SGI_SN1 \
SGI-SN1 CONFIG_IA64_SGI_SN1 \
SGI-SN2 CONFIG_IA64_SGI_SN2" generic
SGI-SN2 CONFIG_IA64_SGI_SN2" generic
choice 'Kernel page size' \
if [ "$CONFIG_ITANIUM" = "y" ]; then
choice 'Kernel page size' \
"4KB CONFIG_IA64_PAGE_SIZE_4KB \
8KB CONFIG_IA64_PAGE_SIZE_8KB \
16KB CONFIG_IA64_PAGE_SIZE_16KB" 16KB
else
choice 'Kernel page size' \
"4KB CONFIG_IA64_PAGE_SIZE_4KB \
"4KB CONFIG_IA64_PAGE_SIZE_4KB \
8KB CONFIG_IA64_PAGE_SIZE_8KB \
8KB CONFIG_IA64_PAGE_SIZE_8KB \
16KB CONFIG_IA64_PAGE_SIZE_16KB \
16KB CONFIG_IA64_PAGE_SIZE_16KB \
64KB CONFIG_IA64_PAGE_SIZE_64KB" 16KB
64KB CONFIG_IA64_PAGE_SIZE_64KB" 16KB
endif
if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
define_bool CONFIG_ACPI y
define_bool CONFIG_ACPI y
...
...
arch/ia64/hp/common/Makefile
View file @
76f0f1f3
...
@@ -12,17 +12,3 @@ export-objs := sba_iommu.o
...
@@ -12,17 +12,3 @@ export-objs := sba_iommu.o
obj-y
:=
sba_iommu.o
obj-y
:=
sba_iommu.o
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
#
# ia64/platform/hp/common/Makefile
#
# Copyright (C) 2002 Hewlett Packard
# Copyright (C) Alex Williamson (alex_williamson@hp.com)
#
O_TARGET
:=
common.o
export-objs
:=
sba_iommu.o
obj-y
:=
sba_iommu.o
include
$(TOPDIR)/Rules.make
arch/ia64/hp/common/sba_iommu.c
View file @
76f0f1f3
...
@@ -1389,6 +1389,12 @@ sba_dma_address (struct scatterlist *sg)
...
@@ -1389,6 +1389,12 @@ sba_dma_address (struct scatterlist *sg)
return
((
unsigned
long
)
sba_sg_iova
(
sg
));
return
((
unsigned
long
)
sba_sg_iova
(
sg
));
}
}
int
sba_dma_supported
(
struct
pci_dev
*
dev
,
u64
mask
)
{
return
1
;
}
/**************************************************************
/**************************************************************
*
*
* Initialization and claim
* Initialization and claim
...
@@ -1858,5 +1864,6 @@ EXPORT_SYMBOL(sba_unmap_single);
...
@@ -1858,5 +1864,6 @@ EXPORT_SYMBOL(sba_unmap_single);
EXPORT_SYMBOL
(
sba_map_sg
);
EXPORT_SYMBOL
(
sba_map_sg
);
EXPORT_SYMBOL
(
sba_unmap_sg
);
EXPORT_SYMBOL
(
sba_unmap_sg
);
EXPORT_SYMBOL
(
sba_dma_address
);
EXPORT_SYMBOL
(
sba_dma_address
);
EXPORT_SYMBOL
(
sba_dma_supported
);
EXPORT_SYMBOL
(
sba_alloc_consistent
);
EXPORT_SYMBOL
(
sba_alloc_consistent
);
EXPORT_SYMBOL
(
sba_free_consistent
);
EXPORT_SYMBOL
(
sba_free_consistent
);
arch/ia64/hp/sim/simserial.c
View file @
76f0f1f3
...
@@ -7,9 +7,9 @@
...
@@ -7,9 +7,9 @@
* case means sys_sim.c console (goes via the simulator). The code hereafter
* case means sys_sim.c console (goes via the simulator). The code hereafter
* is completely leveraged from the serial.c driver.
* is completely leveraged from the serial.c driver.
*
*
* Copyright (C) 1999-2000 Hewlett-Packard Co
* Copyright (C) 1999-2000
, 2002
Hewlett-Packard Co
*
Copyright (C) 1999
Stephane Eranian <eranian@hpl.hp.com>
*
Stephane Eranian <eranian@hpl.hp.com>
*
Copyright (C) 2000
David Mosberger-Tang <davidm@hpl.hp.com>
*
David Mosberger-Tang <davidm@hpl.hp.com>
*
*
* 02/04/00 D. Mosberger Merged in serial.c bug fixes in rs_close().
* 02/04/00 D. Mosberger Merged in serial.c bug fixes in rs_close().
* 02/25/00 D. Mosberger Synced up with 2.3.99pre-5 version of serial.c.
* 02/25/00 D. Mosberger Synced up with 2.3.99pre-5 version of serial.c.
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
#include <linux/major.h>
#include <linux/major.h>
#include <linux/fcntl.h>
#include <linux/fcntl.h>
#include <linux/mm.h>
#include <linux/mm.h>
#include <linux/
malloc
.h>
#include <linux/
slab
.h>
#include <linux/console.h>
#include <linux/console.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/serial.h>
#include <linux/serial.h>
...
...
arch/ia64/hp/zx1/Makefile
View file @
76f0f1f3
...
@@ -11,16 +11,3 @@ obj-y := hpzx1_misc.o
...
@@ -11,16 +11,3 @@ obj-y := hpzx1_misc.o
obj-$(CONFIG_IA64_GENERIC)
+=
hpzx1_machvec.o
obj-$(CONFIG_IA64_GENERIC)
+=
hpzx1_machvec.o
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
#
# ia64/platform/hp/zx1/Makefile
#
# Copyright (C) 2002 Hewlett Packard
# Copyright (C) Alex Williamson (alex_williamson@hp.com)
#
O_TARGET
:=
zx1.o
obj-y
:=
hpzx1_misc.o
obj-$(CONFIG_IA64_GENERIC)
+=
hpzx1_machvec.o
include
$(TOPDIR)/Rules.make
arch/ia64/hp/zx1/hpzx1_misc.c
View file @
76f0f1f3
...
@@ -198,7 +198,6 @@ extern acpi_status acpi_get_crs(acpi_handle, acpi_buffer *);
...
@@ -198,7 +198,6 @@ extern acpi_status acpi_get_crs(acpi_handle, acpi_buffer *);
extern
acpi_resource
*
acpi_get_crs_next
(
acpi_buffer
*
,
int
*
);
extern
acpi_resource
*
acpi_get_crs_next
(
acpi_buffer
*
,
int
*
);
extern
acpi_resource_data
*
acpi_get_crs_type
(
acpi_buffer
*
,
int
*
,
int
);
extern
acpi_resource_data
*
acpi_get_crs_type
(
acpi_buffer
*
,
int
*
,
int
);
extern
void
acpi_dispose_crs
(
acpi_buffer
*
);
extern
void
acpi_dispose_crs
(
acpi_buffer
*
);
extern
acpi_status
acpi_cf_evaluate_method
(
acpi_handle
,
UINT8
*
,
NATIVE_UINT
*
);
static
acpi_status
static
acpi_status
hp_csr_space
(
acpi_handle
obj
,
u64
*
csr_base
,
u64
*
csr_length
)
hp_csr_space
(
acpi_handle
obj
,
u64
*
csr_base
,
u64
*
csr_length
)
...
@@ -388,407 +387,7 @@ hpzx1_acpi_dev_init(void)
...
@@ -388,407 +387,7 @@ hpzx1_acpi_dev_init(void)
}
}
extern
void
sba_init
(
void
);
extern
void
sba_init
(
void
);
void
hpzx1_pci_fixup
(
int
phase
)
{
if
(
phase
==
0
)
hpzx1_acpi_dev_init
();
iosapic_pci_fixup
(
phase
);
if
(
phase
==
1
)
sba_init
();
}
/*
* Misc. support for HP zx1 chipset support
*
* Copyright (C) 2002 Hewlett-Packard Co
* Copyright (C) 2002 Alex Williamson <alex_williamson@hp.com>
* Copyright (C) 2002 Bjorn Helgaas <bjorn_helgaas@hp.com>
*/
#include <linux/config.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/acpi.h>
#include <asm/iosapic.h>
#include <asm/efi.h>
#include "../drivers/acpi/include/platform/acgcc.h"
#include "../drivers/acpi/include/actypes.h"
#include "../drivers/acpi/include/acexcep.h"
#include "../drivers/acpi/include/acpixf.h"
#include "../drivers/acpi/include/actbl.h"
#include "../drivers/acpi/include/acconfig.h"
#include "../drivers/acpi/include/acmacros.h"
#include "../drivers/acpi/include/aclocal.h"
#include "../drivers/acpi/include/acobject.h"
#include "../drivers/acpi/include/acstruct.h"
#include "../drivers/acpi/include/acnamesp.h"
#include "../drivers/acpi/include/acutils.h"
#define PFX "hpzx1: "
struct
fake_pci_dev
{
struct
fake_pci_dev
*
next
;
unsigned
char
bus
;
unsigned
int
devfn
;
int
sizing
;
// in middle of BAR sizing operation?
unsigned
long
csr_base
;
unsigned
int
csr_size
;
unsigned
long
mapped_csrs
;
// ioremapped
};
static
struct
fake_pci_dev
*
fake_pci_head
,
**
fake_pci_tail
=
&
fake_pci_head
;
static
struct
pci_ops
orig_pci_ops
;
static
inline
struct
fake_pci_dev
*
fake_pci_find_slot
(
unsigned
char
bus
,
unsigned
int
devfn
)
{
struct
fake_pci_dev
*
dev
;
for
(
dev
=
fake_pci_head
;
dev
;
dev
=
dev
->
next
)
if
(
dev
->
bus
==
bus
&&
dev
->
devfn
==
devfn
)
return
dev
;
return
NULL
;
}
static
struct
fake_pci_dev
*
alloc_fake_pci_dev
(
void
)
{
struct
fake_pci_dev
*
dev
;
dev
=
kmalloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
if
(
!
dev
)
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
*
dev
));
*
fake_pci_tail
=
dev
;
fake_pci_tail
=
&
dev
->
next
;
return
dev
;
}
#define HP_CFG_RD(sz, bits, name) \
static int hp_cfg_read##sz (struct pci_dev *dev, int where, u##bits *value) \
{ \
struct fake_pci_dev *fake_dev; \
if (!(fake_dev = fake_pci_find_slot(dev->bus->number, dev->devfn))) \
return orig_pci_ops.name(dev, where, value); \
\
switch (where) { \
case PCI_COMMAND: \
*value = read##sz(fake_dev->mapped_csrs + where); \
*value |= PCI_COMMAND_MEMORY;
/* SBA omits this */
\
break; \
case PCI_BASE_ADDRESS_0: \
if (fake_dev->sizing) \
*value = ~(fake_dev->csr_size - 1); \
else \
*value = (fake_dev->csr_base & \
PCI_BASE_ADDRESS_MEM_MASK) | \
PCI_BASE_ADDRESS_SPACE_MEMORY; \
fake_dev->sizing = 0; \
break; \
default: \
*value = read##sz(fake_dev->mapped_csrs + where); \
break; \
} \
return PCIBIOS_SUCCESSFUL; \
}
#define HP_CFG_WR(sz, bits, name) \
static int hp_cfg_write##sz (struct pci_dev *dev, int where, u##bits value) \
{ \
struct fake_pci_dev *fake_dev; \
if (!(fake_dev = fake_pci_find_slot(dev->bus->number, dev->devfn))) \
return orig_pci_ops.name(dev, where, value); \
\
switch (where) { \
case PCI_BASE_ADDRESS_0: \
if (value == ~0) \
fake_dev->sizing = 1; \
break; \
default: \
write##sz(value, fake_dev->mapped_csrs + where); \
break; \
} \
return PCIBIOS_SUCCESSFUL; \
}
HP_CFG_RD
(
b
,
8
,
read_byte
)
HP_CFG_RD
(
w
,
16
,
read_word
)
HP_CFG_RD
(
l
,
32
,
read_dword
)
HP_CFG_WR
(
b
,
8
,
write_byte
)
HP_CFG_WR
(
w
,
16
,
write_word
)
HP_CFG_WR
(
l
,
32
,
write_dword
)
static
struct
pci_ops
hp_pci_conf
=
{
hp_cfg_readb
,
hp_cfg_readw
,
hp_cfg_readl
,
hp_cfg_writeb
,
hp_cfg_writew
,
hp_cfg_writel
,
};
/*
* Assume we'll never have a physical slot higher than 0x10, so we can
* use slots above that for "fake" PCI devices to represent things
* that only show up in the ACPI namespace.
*/
#define HP_MAX_SLOT 0x10
static
struct
fake_pci_dev
*
hpzx1_fake_pci_dev
(
unsigned
long
addr
,
unsigned
int
bus
,
unsigned
int
size
)
{
struct
fake_pci_dev
*
dev
;
int
slot
;
// Note: lspci thinks 0x1f is invalid
for
(
slot
=
0x1e
;
slot
>
HP_MAX_SLOT
;
slot
--
)
{
if
(
!
fake_pci_find_slot
(
bus
,
PCI_DEVFN
(
slot
,
0
)))
break
;
}
if
(
slot
==
HP_MAX_SLOT
)
{
printk
(
KERN_ERR
PFX
"no slot space for device (0x%p) on bus 0x%02x
\n
"
,
(
void
*
)
addr
,
bus
);
return
NULL
;
}
dev
=
alloc_fake_pci_dev
();
if
(
!
dev
)
{
printk
(
KERN_ERR
PFX
"no memory for device (0x%p) on bus 0x%02x
\n
"
,
(
void
*
)
addr
,
bus
);
return
NULL
;
}
dev
->
bus
=
bus
;
dev
->
devfn
=
PCI_DEVFN
(
slot
,
0
);
dev
->
csr_base
=
addr
;
dev
->
csr_size
=
size
;
/*
* Drivers should ioremap what they need, but we have to do
* it here, too, so PCI config accesses work.
*/
dev
->
mapped_csrs
=
(
unsigned
long
)
ioremap
(
dev
->
csr_base
,
dev
->
csr_size
);
return
dev
;
}
typedef
struct
{
u8
guid_id
;
u8
guid
[
16
];
u8
csr_base
[
8
];
u8
csr_length
[
8
];
}
acpi_hp_vendor_long
;
#define HP_CCSR_LENGTH 0x21
#define HP_CCSR_TYPE 0x2
#define HP_CCSR_GUID \
((efi_guid_t) { 0x69e9adf9, 0x924f, 0xab5f, { 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad }})
extern
acpi_status
acpi_get_crs
(
acpi_handle
,
acpi_buffer
*
);
extern
acpi_resource
*
acpi_get_crs_next
(
acpi_buffer
*
,
int
*
);
extern
acpi_resource_data
*
acpi_get_crs_type
(
acpi_buffer
*
,
int
*
,
int
);
extern
void
acpi_dispose_crs
(
acpi_buffer
*
);
extern
acpi_status
acpi_cf_evaluate_method
(
acpi_handle
,
UINT8
*
,
NATIVE_UINT
*
);
static
acpi_status
hp_csr_space
(
acpi_handle
obj
,
u64
*
csr_base
,
u64
*
csr_length
)
{
int
i
,
offset
=
0
;
acpi_status
status
;
acpi_buffer
buf
;
acpi_resource_vendor
*
res
;
acpi_hp_vendor_long
*
hp_res
;
efi_guid_t
vendor_guid
;
*
csr_base
=
0
;
*
csr_length
=
0
;
status
=
acpi_get_crs
(
obj
,
&
buf
);
if
(
status
!=
AE_OK
)
{
printk
(
KERN_ERR
PFX
"Unable to get _CRS data on object
\n
"
);
return
status
;
}
res
=
(
acpi_resource_vendor
*
)
acpi_get_crs_type
(
&
buf
,
&
offset
,
ACPI_RSTYPE_VENDOR
);
if
(
!
res
)
{
printk
(
KERN_ERR
PFX
"Failed to find config space for device
\n
"
);
acpi_dispose_crs
(
&
buf
);
return
AE_NOT_FOUND
;
}
hp_res
=
(
acpi_hp_vendor_long
*
)(
res
->
reserved
);
if
(
res
->
length
!=
HP_CCSR_LENGTH
||
hp_res
->
guid_id
!=
HP_CCSR_TYPE
)
{
printk
(
KERN_ERR
PFX
"Unknown Vendor data
\n
"
);
acpi_dispose_crs
(
&
buf
);
return
AE_TYPE
;
/* Revisit error? */
}
memcpy
(
&
vendor_guid
,
hp_res
->
guid
,
sizeof
(
efi_guid_t
));
if
(
efi_guidcmp
(
vendor_guid
,
HP_CCSR_GUID
)
!=
0
)
{
printk
(
KERN_ERR
PFX
"Vendor GUID does not match
\n
"
);
acpi_dispose_crs
(
&
buf
);
return
AE_TYPE
;
/* Revisit error? */
}
for
(
i
=
0
;
i
<
8
;
i
++
)
{
*
csr_base
|=
((
u64
)(
hp_res
->
csr_base
[
i
])
<<
(
i
*
8
));
*
csr_length
|=
((
u64
)(
hp_res
->
csr_length
[
i
])
<<
(
i
*
8
));
}
acpi_dispose_crs
(
&
buf
);
return
AE_OK
;
}
static
acpi_status
hpzx1_sba_probe
(
acpi_handle
obj
,
u32
depth
,
void
*
context
,
void
**
ret
)
{
u64
csr_base
=
0
,
csr_length
=
0
;
char
*
name
=
context
;
struct
fake_pci_dev
*
dev
;
acpi_status
status
;
status
=
hp_csr_space
(
obj
,
&
csr_base
,
&
csr_length
);
if
(
status
!=
AE_OK
)
return
status
;
/*
* Only SBA shows up in ACPI namespace, so its CSR space
* includes both SBA and IOC. Make SBA and IOC show up
* separately in PCI space.
*/
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
,
0
,
0x1000
)))
printk
(
KERN_INFO
PFX
"%s SBA at 0x%lx; pci dev %02x:%02x.%d
\n
"
,
name
,
csr_base
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
+
0x1000
,
0
,
0x1000
)))
printk
(
KERN_INFO
PFX
"%s IOC at 0x%lx; pci dev %02x:%02x.%d
\n
"
,
name
,
csr_base
+
0x1000
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
return
AE_OK
;
}
static
acpi_status
hpzx1_lba_probe
(
acpi_handle
obj
,
u32
depth
,
void
*
context
,
void
**
ret
)
{
acpi_status
status
;
u64
csr_base
=
0
,
csr_length
=
0
;
char
*
name
=
context
;
NATIVE_UINT
busnum
=
0
;
struct
fake_pci_dev
*
dev
;
status
=
hp_csr_space
(
obj
,
&
csr_base
,
&
csr_length
);
if
(
status
!=
AE_OK
)
return
status
;
status
=
acpi_cf_evaluate_method
(
obj
,
METHOD_NAME__BBN
,
&
busnum
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_ERR
PFX
"evaluate _BBN fail=0x%x
\n
"
,
status
);
busnum
=
0
;
// no _BBN; stick it on bus 0
}
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
,
busnum
,
csr_length
)))
printk
(
KERN_INFO
PFX
"%s LBA at 0x%lx, _BBN 0x%02x; "
"pci dev %02x:%02x.%d
\n
"
,
name
,
csr_base
,
busnum
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
return
AE_OK
;
}
static
void
hpzx1_acpi_dev_init
(
void
)
{
extern
struct
pci_ops
pci_conf
;
/*
* Make fake PCI devices for the following hardware in the
* ACPI namespace. This makes it more convenient for drivers
* because they can claim these devices based on PCI
* information, rather than needing to know about ACPI. The
* 64-bit "HPA" space for this hardware is available as BAR
* 0/1.
*
* HWP0001: Single IOC SBA w/o IOC in namespace
* HWP0002: LBA device
* HWP0003: AGP LBA device
*/
acpi_get_devices
(
"HWP0001"
,
hpzx1_sba_probe
,
"HWP0001"
,
NULL
);
#ifdef CONFIG_IA64_HP_PROTO
if
(
fake_pci_tail
!=
&
fake_pci_head
)
{
#endif
acpi_get_devices
(
"HWP0002"
,
hpzx1_lba_probe
,
"HWP0002"
,
NULL
);
acpi_get_devices
(
"HWP0003"
,
hpzx1_lba_probe
,
"HWP0003"
,
NULL
);
#ifdef CONFIG_IA64_HP_PROTO
}
#define ZX1_FUNC_ID_VALUE (PCI_DEVICE_ID_HP_ZX1_SBA << 16) | PCI_VENDOR_ID_HP
/*
* Early protos don't have bridges in the ACPI namespace, so
* if we didn't find anything, add the things we know are
* there.
*/
if
(
fake_pci_tail
==
&
fake_pci_head
)
{
u64
hpa
,
csr_base
;
struct
fake_pci_dev
*
dev
;
csr_base
=
0xfed00000UL
;
hpa
=
(
u64
)
ioremap
(
csr_base
,
0x1000
);
if
(
__raw_readl
(
hpa
)
==
ZX1_FUNC_ID_VALUE
)
{
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
,
0
,
0x1000
)))
printk
(
KERN_INFO
PFX
"HWP0001 SBA at 0x%lx; "
"pci dev %02x:%02x.%d
\n
"
,
csr_base
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
+
0x1000
,
0
,
0x1000
)))
printk
(
KERN_INFO
PFX
"HWP0001 IOC at 0x%lx; "
"pci dev %02x:%02x.%d
\n
"
,
csr_base
+
0x1000
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
csr_base
=
0xfed24000UL
;
iounmap
(
hpa
);
hpa
=
(
u64
)
ioremap
(
csr_base
,
0x1000
);
if
((
dev
=
hpzx1_fake_pci_dev
(
csr_base
,
0x40
,
0x1000
)))
printk
(
KERN_INFO
PFX
"HWP0003 AGP LBA at "
"0x%lx; pci dev %02x:%02x.%d
\n
"
,
csr_base
,
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
}
iounmap
(
hpa
);
}
#endif
if
(
fake_pci_tail
==
&
fake_pci_head
)
return
;
/*
* Replace PCI ops, but only if we made fake devices.
*/
orig_pci_ops
=
pci_conf
;
pci_conf
=
hp_pci_conf
;
}
extern
void
sba_init
(
void
);
void
void
hpzx1_pci_fixup
(
int
phase
)
hpzx1_pci_fixup
(
int
phase
)
{
{
...
...
arch/ia64/kernel/acpi.c
View file @
76f0f1f3
...
@@ -660,10 +660,10 @@ acpi_get_prt (struct pci_vector_struct **vectors, int *count)
...
@@ -660,10 +660,10 @@ acpi_get_prt (struct pci_vector_struct **vectors, int *count)
list_for_each
(
node
,
&
acpi_prts
.
entries
)
{
list_for_each
(
node
,
&
acpi_prts
.
entries
)
{
entry
=
(
struct
acpi_prt_entry
*
)
node
;
entry
=
(
struct
acpi_prt_entry
*
)
node
;
vector
[
i
].
bus
=
(
u16
)
entry
->
id
.
bus
;
vector
[
i
].
bus
=
entry
->
id
.
bus
;
vector
[
i
].
pci_id
=
(
u32
)
entry
->
id
.
dev
<<
16
|
0xffff
;
vector
[
i
].
pci_id
=
(
(
u32
)
entry
->
id
.
dev
)
<<
16
|
0xffff
;
vector
[
i
].
pin
=
(
u8
)
entry
->
id
.
pin
;
vector
[
i
].
pin
=
entry
->
id
.
pin
;
vector
[
i
].
irq
=
(
u8
)
entry
->
source
.
index
;
vector
[
i
].
irq
=
entry
->
source
.
index
;
i
++
;
i
++
;
}
}
*
count
=
acpi_prts
.
count
;
*
count
=
acpi_prts
.
count
;
...
...
arch/ia64/kernel/efi.c
View file @
76f0f1f3
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
*
*
* Copyright (C) 1999 VA Linux Systems
* Copyright (C) 1999 VA Linux Systems
* Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
* Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
* Copyright (C) 1999-200
1
Hewlett-Packard Co.
* Copyright (C) 1999-200
2
Hewlett-Packard Co.
* David Mosberger-Tang <davidm@hpl.hp.com>
* David Mosberger-Tang <davidm@hpl.hp.com>
* Stephane Eranian <eranian@hpl.hp.com>
* Stephane Eranian <eranian@hpl.hp.com>
*
*
...
@@ -212,8 +212,8 @@ efi_map_pal_code (void)
...
@@ -212,8 +212,8 @@ efi_map_pal_code (void)
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
efi_memory_desc_t
*
md
;
efi_memory_desc_t
*
md
;
u64
efi_desc_size
;
u64
efi_desc_size
;
int
pal_code_count
=
0
;
int
pal_code_count
=
0
;
u64
mask
,
flags
;
u64
mask
,
psr
;
u64
vaddr
;
u64
vaddr
;
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
...
@@ -266,10 +266,10 @@ efi_map_pal_code (void)
...
@@ -266,10 +266,10 @@ efi_map_pal_code (void)
/*
/*
* Cannot write to CRx with PSR.ic=1
* Cannot write to CRx with PSR.ic=1
*/
*/
ia64_clear_ic
(
flags
);
psr
=
ia64_clear_ic
(
);
ia64_itr
(
0x1
,
IA64_TR_PALCODE
,
vaddr
&
mask
,
ia64_itr
(
0x1
,
IA64_TR_PALCODE
,
vaddr
&
mask
,
pte_val
(
pfn_pte
(
md
->
phys_addr
>>
PAGE_SHIFT
,
PAGE_KERNEL
)),
IA64_GRANULE_SHIFT
);
pte_val
(
pfn_pte
(
md
->
phys_addr
>>
PAGE_SHIFT
,
PAGE_KERNEL
)),
IA64_GRANULE_SHIFT
);
local_irq_restore
(
flags
);
ia64_set_psr
(
psr
);
ia64_srlz_i
();
ia64_srlz_i
();
}
}
}
}
...
@@ -485,7 +485,7 @@ efi_get_iobase (void)
...
@@ -485,7 +485,7 @@ efi_get_iobase (void)
}
}
u32
u32
efi_mem_type
(
u
64
phys_addr
)
efi_mem_type
(
u
nsigned
long
phys_addr
)
{
{
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
efi_memory_desc_t
*
md
;
efi_memory_desc_t
*
md
;
...
@@ -506,7 +506,7 @@ efi_mem_type (u64 phys_addr)
...
@@ -506,7 +506,7 @@ efi_mem_type (u64 phys_addr)
}
}
u64
u64
efi_mem_attributes
(
u
64
phys_addr
)
efi_mem_attributes
(
u
nsigned
long
phys_addr
)
{
{
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
efi_memory_desc_t
*
md
;
efi_memory_desc_t
*
md
;
...
...
arch/ia64/kernel/gate.S
View file @
76f0f1f3
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
#include <asm/unistd.h>
#include <asm/unistd.h>
#include <asm/page.h>
#include <asm/page.h>
.
section
.
text
.
gate
,
"ax"
.
section
.
text
.
gate
,
"ax"
# define ARG0_OFF (16 + IA64_SIGFRAME_ARG0_OFFSET)
# define ARG0_OFF (16 + IA64_SIGFRAME_ARG0_OFFSET)
# define ARG1_OFF (16 + IA64_SIGFRAME_ARG1_OFFSET)
# define ARG1_OFF (16 + IA64_SIGFRAME_ARG1_OFFSET)
...
@@ -108,7 +108,7 @@ back_from_setup_rbs:
...
@@ -108,7 +108,7 @@ back_from_setup_rbs:
dep
r8
=
0
,
r8
,
38
,
26
//
clear
EC0
,
CPL0
and
reserved
bits
dep
r8
=
0
,
r8
,
38
,
26
//
clear
EC0
,
CPL0
and
reserved
bits
adds
base1
=(
FR6_OFF
+
16
+
SIGCONTEXT_OFF
),
sp
adds
base1
=(
FR6_OFF
+
16
+
SIGCONTEXT_OFF
),
sp
;;
;;
.
spillsp
ar
.
pfs
,
CFM_OFF
.
spillsp
ar
.
pfs
,
CFM_OFF
+
SIGCONTEXT_OFF
st8
[
base0
]=
r8
//
save
CFM0
st8
[
base0
]=
r8
//
save
CFM0
adds
base0
=(
FR6_OFF
+
SIGCONTEXT_OFF
),
sp
adds
base0
=(
FR6_OFF
+
SIGCONTEXT_OFF
),
sp
;;
;;
...
...
arch/ia64/kernel/iosapic.c
View file @
76f0f1f3
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
* /proc/irq/#/smp_affinity
* /proc/irq/#/smp_affinity
* 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing.
* 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing.
* 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq
* 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq
* 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping error
*/
*/
/*
/*
* Here is what the interrupt logic between a PCI device and the CPU looks like:
* Here is what the interrupt logic between a PCI device and the CPU looks like:
...
@@ -112,7 +113,7 @@ find_iosapic (unsigned int irq)
...
@@ -112,7 +113,7 @@ find_iosapic (unsigned int irq)
int
i
;
int
i
;
for
(
i
=
0
;
i
<
num_iosapic
;
i
++
)
{
for
(
i
=
0
;
i
<
num_iosapic
;
i
++
)
{
if
((
irq
-
iosapic_lists
[
i
].
base_irq
)
<
iosapic_lists
[
i
].
max_pin
)
if
((
unsigned
)
(
irq
-
iosapic_lists
[
i
].
base_irq
)
<=
iosapic_lists
[
i
].
max_pin
)
return
i
;
return
i
;
}
}
...
@@ -138,7 +139,7 @@ iosapic_irq_to_vector (int irq)
...
@@ -138,7 +139,7 @@ iosapic_irq_to_vector (int irq)
* Map PCI pin to the corresponding IA-64 interrupt vector. If no such mapping exists,
* Map PCI pin to the corresponding IA-64 interrupt vector. If no such mapping exists,
* return -1.
* return -1.
*/
*/
static
int
int
pci_pin_to_vector
(
int
bus
,
int
slot
,
int
pci_pin
)
pci_pin_to_vector
(
int
bus
,
int
slot
,
int
pci_pin
)
{
{
struct
pci_vector_struct
*
r
;
struct
pci_vector_struct
*
r
;
...
...
arch/ia64/kernel/irq.c
View file @
76f0f1f3
...
@@ -1197,7 +1197,7 @@ static void register_irq_proc (unsigned int irq)
...
@@ -1197,7 +1197,7 @@ static void register_irq_proc (unsigned int irq)
{
{
char
name
[
MAX_NAMELEN
];
char
name
[
MAX_NAMELEN
];
if
(
!
root_irq_dir
||
(
irq_desc
(
irq
)
->
handler
==
&
no_irq_type
))
if
(
!
root_irq_dir
||
(
irq_desc
(
irq
)
->
handler
==
&
no_irq_type
)
||
irq_dir
[
irq
]
)
return
;
return
;
memset
(
name
,
0
,
MAX_NAMELEN
);
memset
(
name
,
0
,
MAX_NAMELEN
);
...
...
arch/ia64/kernel/pal.S
View file @
76f0f1f3
...
@@ -216,7 +216,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
...
@@ -216,7 +216,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
mov
out3
=
in3
//
copy
arg3
mov
out3
=
in3
//
copy
arg3
;;
;;
mov
loc3
=
psr
//
save
psr
mov
loc3
=
psr
//
save
psr
;;
;;
mov
loc4
=
ar
.
rsc
//
save
RSE
configuration
mov
loc4
=
ar
.
rsc
//
save
RSE
configuration
dep.z
loc2
=
loc2
,
0
,
61
//
convert
pal
entry
point
to
physical
dep.z
loc2
=
loc2
,
0
,
61
//
convert
pal
entry
point
to
physical
;;
;;
...
...
arch/ia64/kernel/process.c
View file @
76f0f1f3
...
@@ -199,8 +199,10 @@ ia64_save_extra (struct task_struct *task)
...
@@ -199,8 +199,10 @@ ia64_save_extra (struct task_struct *task)
# endif
# endif
#endif
#endif
#ifdef CONFIG_IA32_SUPPORT
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
ia32_save_state
(
task
);
ia32_save_state
(
task
);
#endif
}
}
void
void
...
@@ -218,8 +220,10 @@ ia64_load_extra (struct task_struct *task)
...
@@ -218,8 +220,10 @@ ia64_load_extra (struct task_struct *task)
# endif
# endif
#endif
#endif
#ifdef CONFIG_IA32_SUPPORT
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
ia32_load_state
(
task
);
ia32_load_state
(
task
);
#endif
}
}
/*
/*
...
...
arch/ia64/kernel/setup.c
View file @
76f0f1f3
...
@@ -559,6 +559,24 @@ cpu_init (void)
...
@@ -559,6 +559,24 @@ cpu_init (void)
*/
*/
identify_cpu
(
my_cpu_info
);
identify_cpu
(
my_cpu_info
);
#ifdef CONFIG_MCKINLEY
{
#define FEATURE_SET 16
struct
ia64_pal_retval
iprv
;
if
(
my_cpu_data
->
family
==
0x1f
)
{
PAL_CALL_PHYS
(
iprv
,
PAL_PROC_GET_FEATURES
,
0
,
FEATURE_SET
,
0
);
if
((
iprv
.
status
==
0
)
&&
(
iprv
.
v0
&
0x80
)
&&
(
iprv
.
v2
&
0x80
))
{
PAL_CALL_PHYS
(
iprv
,
PAL_PROC_SET_FEATURES
,
(
iprv
.
v1
|
0x80
),
FEATURE_SET
,
0
);
}
}
}
#endif
/* Clear the stack memory reserved for pt_regs: */
/* Clear the stack memory reserved for pt_regs: */
memset
(
ia64_task_regs
(
current
),
0
,
sizeof
(
struct
pt_regs
));
memset
(
ia64_task_regs
(
current
),
0
,
sizeof
(
struct
pt_regs
));
...
@@ -570,7 +588,7 @@ cpu_init (void)
...
@@ -570,7 +588,7 @@ cpu_init (void)
* shouldn't be affected by this (moral: keep your ia32 locks aligned and you'll
* shouldn't be affected by this (moral: keep your ia32 locks aligned and you'll
* be fine).
* be fine).
*/
*/
ia64_set_dcr
(
IA64_DCR_D
M
|
IA64_DCR_D
P
|
IA64_DCR_DK
|
IA64_DCR_DX
|
IA64_DCR_DR
ia64_set_dcr
(
IA64_DCR_DP
|
IA64_DCR_DK
|
IA64_DCR_DX
|
IA64_DCR_DR
|
IA64_DCR_DA
|
IA64_DCR_DD
|
IA64_DCR_LC
);
|
IA64_DCR_DA
|
IA64_DCR_DD
|
IA64_DCR_LC
);
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
ia64_set_fpu_owner
(
0
);
ia64_set_fpu_owner
(
0
);
...
...
arch/ia64/kernel/signal.c
View file @
76f0f1f3
...
@@ -143,9 +143,10 @@ copy_siginfo_to_user (siginfo_t *to, siginfo_t *from)
...
@@ -143,9 +143,10 @@ copy_siginfo_to_user (siginfo_t *to, siginfo_t *from)
{
{
if
(
!
access_ok
(
VERIFY_WRITE
,
to
,
sizeof
(
siginfo_t
)))
if
(
!
access_ok
(
VERIFY_WRITE
,
to
,
sizeof
(
siginfo_t
)))
return
-
EFAULT
;
return
-
EFAULT
;
if
(
from
->
si_code
<
0
)
if
(
from
->
si_code
<
0
)
{
return
__copy_to_user
(
to
,
from
,
sizeof
(
siginfo_t
));
if
(
__copy_to_user
(
to
,
from
,
sizeof
(
siginfo_t
)))
else
{
return
-
EFAULT
;
}
else
{
int
err
;
int
err
;
/*
/*
...
...
arch/ia64/lib/swiotlb.c
View file @
76f0f1f3
...
@@ -478,6 +478,17 @@ swiotlb_dma_address (struct scatterlist *sg)
...
@@ -478,6 +478,17 @@ swiotlb_dma_address (struct scatterlist *sg)
return
SG_ENT_PHYS_ADDRESS
(
sg
);
return
SG_ENT_PHYS_ADDRESS
(
sg
);
}
}
/*
* Return whether the given PCI device DMA address mask can be supported properly. For
* example, if your device can only drive the low 24-bits during PCI bus mastering, then
* you would pass 0x00ffffff as the mask to this function.
*/
int
swiotlb_pci_dma_supported
(
struct
pci_dev
*
hwdev
,
u64
mask
)
{
return
1
;
}
EXPORT_SYMBOL
(
swiotlb_init
);
EXPORT_SYMBOL
(
swiotlb_init
);
EXPORT_SYMBOL
(
swiotlb_map_single
);
EXPORT_SYMBOL
(
swiotlb_map_single
);
EXPORT_SYMBOL
(
swiotlb_unmap_single
);
EXPORT_SYMBOL
(
swiotlb_unmap_single
);
...
@@ -488,3 +499,4 @@ EXPORT_SYMBOL(swiotlb_sync_sg);
...
@@ -488,3 +499,4 @@ EXPORT_SYMBOL(swiotlb_sync_sg);
EXPORT_SYMBOL
(
swiotlb_dma_address
);
EXPORT_SYMBOL
(
swiotlb_dma_address
);
EXPORT_SYMBOL
(
swiotlb_alloc_consistent
);
EXPORT_SYMBOL
(
swiotlb_alloc_consistent
);
EXPORT_SYMBOL
(
swiotlb_free_consistent
);
EXPORT_SYMBOL
(
swiotlb_free_consistent
);
EXPORT_SYMBOL
(
swiotlb_pci_dma_supported
);
arch/ia64/mm/init.c
View file @
76f0f1f3
...
@@ -252,7 +252,7 @@ put_gate_page (struct page *page, unsigned long address)
...
@@ -252,7 +252,7 @@ put_gate_page (struct page *page, unsigned long address)
void
__init
void
__init
ia64_mmu_init
(
void
*
my_cpu_data
)
ia64_mmu_init
(
void
*
my_cpu_data
)
{
{
unsigned
long
flags
,
rid
,
pta
,
impl_va_bits
;
unsigned
long
psr
,
rid
,
pta
,
impl_va_bits
;
extern
void
__init
tlb_init
(
void
);
extern
void
__init
tlb_init
(
void
);
#ifdef CONFIG_DISABLE_VHPT
#ifdef CONFIG_DISABLE_VHPT
# define VHPT_ENABLE_BIT 0
# define VHPT_ENABLE_BIT 0
...
@@ -264,7 +264,7 @@ ia64_mmu_init (void *my_cpu_data)
...
@@ -264,7 +264,7 @@ ia64_mmu_init (void *my_cpu_data)
* Set up the kernel identity mapping for regions 6 and 5. The mapping for region
* Set up the kernel identity mapping for regions 6 and 5. The mapping for region
* 7 is setup up in _start().
* 7 is setup up in _start().
*/
*/
ia64_clear_ic
(
flags
);
psr
=
ia64_clear_ic
(
);
rid
=
ia64_rid
(
IA64_REGION_ID_KERNEL
,
__IA64_UNCACHED_OFFSET
);
rid
=
ia64_rid
(
IA64_REGION_ID_KERNEL
,
__IA64_UNCACHED_OFFSET
);
ia64_set_rr
(
__IA64_UNCACHED_OFFSET
,
(
rid
<<
8
)
|
(
IA64_GRANULE_SHIFT
<<
2
));
ia64_set_rr
(
__IA64_UNCACHED_OFFSET
,
(
rid
<<
8
)
|
(
IA64_GRANULE_SHIFT
<<
2
));
...
@@ -278,7 +278,7 @@ ia64_mmu_init (void *my_cpu_data)
...
@@ -278,7 +278,7 @@ ia64_mmu_init (void *my_cpu_data)
ia64_itr
(
0x2
,
IA64_TR_PERCPU_DATA
,
PERCPU_ADDR
,
ia64_itr
(
0x2
,
IA64_TR_PERCPU_DATA
,
PERCPU_ADDR
,
pte_val
(
pfn_pte
(
__pa
(
my_cpu_data
)
>>
PAGE_SHIFT
,
PAGE_KERNEL
)),
PAGE_SHIFT
);
pte_val
(
pfn_pte
(
__pa
(
my_cpu_data
)
>>
PAGE_SHIFT
,
PAGE_KERNEL
)),
PAGE_SHIFT
);
__restore_flags
(
flags
);
ia64_set_psr
(
psr
);
ia64_srlz_i
();
ia64_srlz_i
();
/*
/*
...
...
arch/ia64/sn/io/Makefile
View file @
76f0f1f3
...
@@ -18,7 +18,7 @@ EXTRA_CFLAGS := -DLITTLE_ENDIAN
...
@@ -18,7 +18,7 @@ EXTRA_CFLAGS := -DLITTLE_ENDIAN
O_TARGET
:=
sgiio.o
O_TARGET
:=
sgiio.o
ifeq
($(CONFIG_MODULES),y)
ifeq
($(CONFIG_MODULES),y)
export-objs
=
pciio.o hcl.o
export-objs
=
pciio.o hcl.o
pci_dma.o
endif
endif
obj-y
:=
stubs.o sgi_if.o pciio.o xtalk.o xbow.o xswitch.o klgraph_hack.o
\
obj-y
:=
stubs.o sgi_if.o pciio.o xtalk.o xbow.o xswitch.o klgraph_hack.o
\
...
...
arch/ia64/sn/io/pci_dma.c
View file @
76f0f1f3
...
@@ -4,6 +4,9 @@
...
@@ -4,6 +4,9 @@
* for more details.
* for more details.
*
*
* Copyright (C) 2000,2002 Silicon Graphics, Inc. All rights reserved.
* Copyright (C) 2000,2002 Silicon Graphics, Inc. All rights reserved.
*
* Routines for PCI DMA mapping. See Documentation/DMA-mapping.txt for
* a description of how these routines should be used.
*/
*/
#include <linux/types.h>
#include <linux/types.h>
...
@@ -12,6 +15,7 @@
...
@@ -12,6 +15,7 @@
#include <linux/pci.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/module.h>
#include <asm/delay.h>
#include <asm/delay.h>
#include <asm/io.h>
#include <asm/io.h>
...
@@ -46,7 +50,7 @@ get_free_pciio_dmamap(devfs_handle_t pci_bus)
...
@@ -46,7 +50,7 @@ get_free_pciio_dmamap(devfs_handle_t pci_bus)
/*
/*
* Darn, we need to get the maps allocated for this bus.
* Darn, we need to get the maps allocated for this bus.
*/
*/
for
(
i
=
0
;
i
<
MAX_PCI_XWIDGET
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_PCI_XWIDGET
;
i
++
)
{
if
(
busnum_to_pcibr_vhdl
[
i
]
==
pci_bus
)
{
if
(
busnum_to_pcibr_vhdl
[
i
]
==
pci_bus
)
{
sn1_dma_map
=
busnum_to_atedmamaps
[
i
];
sn1_dma_map
=
busnum_to_atedmamaps
[
i
];
}
}
...
@@ -314,22 +318,18 @@ sn1_pci_map_sg (struct pci_dev *hwdev,
...
@@ -314,22 +318,18 @@ sn1_pci_map_sg (struct pci_dev *hwdev,
}
}
/*
/*
* It is a 32
bit card and we cannot do Direct mapping.
* It is a 32
bit card and we cannot do direct mapping,
*
Let's 32Bit Page map the request
.
*
so we use an ATE
.
*/
*/
dma_map
=
NULL
;
dma_map
=
0
;
#ifdef CONFIG_IA64_SGI_SN1
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
DMA_DATA_FLAGS
);
PCIIO_BYTE_STREAM
|
PCIIO_DMA_DATA
);
#else
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
PCIIO_DMA_DATA
);
#endif
if
(
!
dma_map
)
{
if
(
!
dma_map
)
{
printk
(
"pci_map_sg: Unable to allocate anymore 32Bits Page Map entries.
\n
"
);
printk
(
KERN_ERR
"sn_pci_map_sg: Unable to allocate "
"anymore 32 bit page map entries.
\n
"
);
BUG
();
BUG
();
}
}
dma_addr
=
(
dma_addr_t
)
pciio_dmamap_addr
(
dma_map
,
temp_ptr
,
sg
->
length
);
dma_addr
=
pciio_dmamap_addr
(
dma_map
,
phys_addr
,
sg
->
length
);
/* printk("pci_map_sg: dma_map 0x%p Phys Addr 0x%p dma_addr 0x%p\n", dma_map, temp_ptr, dma_addr); */
sg
->
address
=
(
char
*
)
dma_addr
;
sg
->
address
=
(
char
*
)
dma_addr
;
sg
->
page
=
(
char
*
)
dma_map
;
sg
->
page
=
(
char
*
)
dma_map
;
...
@@ -372,7 +372,17 @@ sn1_pci_unmap_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int
...
@@ -372,7 +372,17 @@ sn1_pci_unmap_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int
}
}
/*
/**
* sn_pci_map_single - map a single region for DMA
* @hwdev: device to map for
* @ptr: kernel virtual address of the region to map
* @size: size of the region
* @direction: DMA direction
*
* Map the region pointed to by @ptr for DMA and return the
* DMA address. Also known as platform_pci_map_single() by
* the IA64 machvec code.
*
* We map this to the one step pciio_dmamap_trans interface rather than
* We map this to the one step pciio_dmamap_trans interface rather than
* the two step pciio_dmamap_alloc/pciio_dmamap_addr because we have
* the two step pciio_dmamap_alloc/pciio_dmamap_addr because we have
* no way of saving the dmamap handle from the alloc to later free
* no way of saving the dmamap handle from the alloc to later free
...
...
arch/ia64/sn/kernel/misctest.c
View file @
76f0f1f3
...
@@ -75,7 +75,7 @@ sgi_mcatest(void)
...
@@ -75,7 +75,7 @@ sgi_mcatest(void)
if
(
mcatest
==
5
)
{
if
(
mcatest
==
5
)
{
int
zzzspec
(
long
);
int
zzzspec
(
long
);
int
i
;
int
i
;
long
flags
,
dcr
,
res
,
val
,
addr
=
0xff00000000UL
;
long
psr
,
dcr
,
res
,
val
,
addr
=
0xff00000000UL
;
dcr
=
ia64_get_dcr
();
dcr
=
ia64_get_dcr
();
for
(
i
=
0
;
i
<
5
;
i
++
)
{
for
(
i
=
0
;
i
<
5
;
i
++
)
{
...
@@ -87,11 +87,11 @@ sgi_mcatest(void)
...
@@ -87,11 +87,11 @@ sgi_mcatest(void)
ia64_set_dcr
(
dcr
);
ia64_set_dcr
(
dcr
);
res
=
ia64_sn_probe_io_slot
(
0xff00000000UL
,
8
,
&
val
);
res
=
ia64_sn_probe_io_slot
(
0xff00000000UL
,
8
,
&
val
);
printk
(
"zzzspec: probe %ld, 0x%lx
\n
"
,
res
,
val
);
printk
(
"zzzspec: probe %ld, 0x%lx
\n
"
,
res
,
val
);
ia64_clear_ic
(
flags
);
psr
=
ia64_clear_ic
(
);
ia64_itc
(
0x2
,
0xe00000ff00000000UL
,
ia64_itc
(
0x2
,
0xe00000ff00000000UL
,
pte_val
(
pfn_pte
(
0xff00000000UL
>>
PAGE_SHIFT
,
pte_val
(
pfn_pte
(
0xff00000000UL
>>
PAGE_SHIFT
,
__pgprot
(
__DIRTY_BITS
|
_PAGE_PL_0
|
_PAGE_AR_RW
))),
_PAGE_SIZE_256M
);
__pgprot
(
__DIRTY_BITS
|
_PAGE_PL_0
|
_PAGE_AR_RW
))),
_PAGE_SIZE_256M
);
local_irq_restore
(
flags
);
ia64_set_psr
(
psr
);
ia64_srlz_i
();
ia64_srlz_i
();
}
}
...
...
arch/ia64/vmlinux.lds.S
View file @
76f0f1f3
...
@@ -41,7 +41,8 @@ SECTIONS
...
@@ -41,7 +41,8 @@ SECTIONS
/
*
Read
-
only
data
*/
/
*
Read
-
only
data
*/
__gp
=
ALIGN
(
16
)
+
0x200000
; /* gp must be 16-byte aligned for exc. table */
.
=
ALIGN
(
16
)
;
__gp
=
.
+
0x200000
; /* gp must be 16-byte aligned for exc. table */
/
*
Global
data
*/
/
*
Global
data
*/
_data
=
.
;
_data
=
.
;
...
...
include/asm-ia64/efi.h
View file @
76f0f1f3
...
@@ -7,9 +7,9 @@
...
@@ -7,9 +7,9 @@
*
*
* Copyright (C) 1999 VA Linux Systems
* Copyright (C) 1999 VA Linux Systems
* Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
* Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
* Copyright (C) 1999 Hewlett-Packard Co.
* Copyright (C) 1999
, 2002
Hewlett-Packard Co.
*
Copyright (C) 1999
David Mosberger-Tang <davidm@hpl.hp.com>
*
David Mosberger-Tang <davidm@hpl.hp.com>
*
Copyright (C) 1999
Stephane Eranian <eranian@hpl.hp.com>
*
Stephane Eranian <eranian@hpl.hp.com>
*/
*/
#include <linux/init.h>
#include <linux/init.h>
#include <linux/string.h>
#include <linux/string.h>
...
@@ -258,8 +258,9 @@ extern void efi_map_pal_code (void);
...
@@ -258,8 +258,9 @@ extern void efi_map_pal_code (void);
extern
void
efi_memmap_walk
(
efi_freemem_callback_t
callback
,
void
*
arg
);
extern
void
efi_memmap_walk
(
efi_freemem_callback_t
callback
,
void
*
arg
);
extern
void
efi_gettimeofday
(
struct
timeval
*
tv
);
extern
void
efi_gettimeofday
(
struct
timeval
*
tv
);
extern
void
efi_enter_virtual_mode
(
void
);
/* switch EFI to virtual mode, if possible */
extern
void
efi_enter_virtual_mode
(
void
);
/* switch EFI to virtual mode, if possible */
extern
u64
efi_get_iobase
(
void
);
extern
u64
efi_get_iobase
(
void
);
extern
u32
efi_mem_type
(
u64
phys_addr
);
extern
u32
efi_mem_type
(
unsigned
long
phys_addr
);
extern
u64
efi_mem_attributes
(
unsigned
long
phys_addr
);
/*
/*
* Variable Attributes
* Variable Attributes
...
...
include/asm-ia64/elf.h
View file @
76f0f1f3
...
@@ -38,7 +38,7 @@
...
@@ -38,7 +38,7 @@
* the way of the program that it will "exec", and that there is
* the way of the program that it will "exec", and that there is
* sufficient room for the brk.
* sufficient room for the brk.
*/
*/
#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x
1
000000)
#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x
800
000000)
/*
/*
...
...
include/asm-ia64/kregs.h
View file @
76f0f1f3
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
#define _ASM_IA64_KREGS_H
#define _ASM_IA64_KREGS_H
/*
/*
* Copyright (C) 2001 Hewlett-Packard Co
* Copyright (C) 2001
-2002
Hewlett-Packard Co
*
Copyright (C) 2001
David Mosberger-Tang <davidm@hpl.hp.com>
*
David Mosberger-Tang <davidm@hpl.hp.com>
*/
*/
/*
/*
* This file defines the kernel register usage convention used by Linux/ia64.
* This file defines the kernel register usage convention used by Linux/ia64.
...
@@ -31,4 +31,121 @@
...
@@ -31,4 +31,121 @@
#define IA64_TR_PERCPU_DATA 1
/* dtr1: percpu data */
#define IA64_TR_PERCPU_DATA 1
/* dtr1: percpu data */
#define IA64_TR_CURRENT_STACK 2
/* dtr2: maps kernel's memory- & register-stacks */
#define IA64_TR_CURRENT_STACK 2
/* dtr2: maps kernel's memory- & register-stacks */
/* Processor status register bits: */
#define IA64_PSR_BE_BIT 1
#define IA64_PSR_UP_BIT 2
#define IA64_PSR_AC_BIT 3
#define IA64_PSR_MFL_BIT 4
#define IA64_PSR_MFH_BIT 5
#define IA64_PSR_IC_BIT 13
#define IA64_PSR_I_BIT 14
#define IA64_PSR_PK_BIT 15
#define IA64_PSR_DT_BIT 17
#define IA64_PSR_DFL_BIT 18
#define IA64_PSR_DFH_BIT 19
#define IA64_PSR_SP_BIT 20
#define IA64_PSR_PP_BIT 21
#define IA64_PSR_DI_BIT 22
#define IA64_PSR_SI_BIT 23
#define IA64_PSR_DB_BIT 24
#define IA64_PSR_LP_BIT 25
#define IA64_PSR_TB_BIT 26
#define IA64_PSR_RT_BIT 27
/* The following are not affected by save_flags()/restore_flags(): */
#define IA64_PSR_CPL0_BIT 32
#define IA64_PSR_CPL1_BIT 33
#define IA64_PSR_IS_BIT 34
#define IA64_PSR_MC_BIT 35
#define IA64_PSR_IT_BIT 36
#define IA64_PSR_ID_BIT 37
#define IA64_PSR_DA_BIT 38
#define IA64_PSR_DD_BIT 39
#define IA64_PSR_SS_BIT 40
#define IA64_PSR_RI_BIT 41
#define IA64_PSR_ED_BIT 43
#define IA64_PSR_BN_BIT 44
#define IA64_PSR_BE (__IA64_UL(1) << IA64_PSR_BE_BIT)
#define IA64_PSR_UP (__IA64_UL(1) << IA64_PSR_UP_BIT)
#define IA64_PSR_AC (__IA64_UL(1) << IA64_PSR_AC_BIT)
#define IA64_PSR_MFL (__IA64_UL(1) << IA64_PSR_MFL_BIT)
#define IA64_PSR_MFH (__IA64_UL(1) << IA64_PSR_MFH_BIT)
#define IA64_PSR_IC (__IA64_UL(1) << IA64_PSR_IC_BIT)
#define IA64_PSR_I (__IA64_UL(1) << IA64_PSR_I_BIT)
#define IA64_PSR_PK (__IA64_UL(1) << IA64_PSR_PK_BIT)
#define IA64_PSR_DT (__IA64_UL(1) << IA64_PSR_DT_BIT)
#define IA64_PSR_DFL (__IA64_UL(1) << IA64_PSR_DFL_BIT)
#define IA64_PSR_DFH (__IA64_UL(1) << IA64_PSR_DFH_BIT)
#define IA64_PSR_SP (__IA64_UL(1) << IA64_PSR_SP_BIT)
#define IA64_PSR_PP (__IA64_UL(1) << IA64_PSR_PP_BIT)
#define IA64_PSR_DI (__IA64_UL(1) << IA64_PSR_DI_BIT)
#define IA64_PSR_SI (__IA64_UL(1) << IA64_PSR_SI_BIT)
#define IA64_PSR_DB (__IA64_UL(1) << IA64_PSR_DB_BIT)
#define IA64_PSR_LP (__IA64_UL(1) << IA64_PSR_LP_BIT)
#define IA64_PSR_TB (__IA64_UL(1) << IA64_PSR_TB_BIT)
#define IA64_PSR_RT (__IA64_UL(1) << IA64_PSR_RT_BIT)
/* The following are not affected by save_flags()/restore_flags(): */
#define IA64_PSR_IS (__IA64_UL(1) << IA64_PSR_IS_BIT)
#define IA64_PSR_MC (__IA64_UL(1) << IA64_PSR_MC_BIT)
#define IA64_PSR_IT (__IA64_UL(1) << IA64_PSR_IT_BIT)
#define IA64_PSR_ID (__IA64_UL(1) << IA64_PSR_ID_BIT)
#define IA64_PSR_DA (__IA64_UL(1) << IA64_PSR_DA_BIT)
#define IA64_PSR_DD (__IA64_UL(1) << IA64_PSR_DD_BIT)
#define IA64_PSR_SS (__IA64_UL(1) << IA64_PSR_SS_BIT)
#define IA64_PSR_RI (__IA64_UL(3) << IA64_PSR_RI_BIT)
#define IA64_PSR_ED (__IA64_UL(1) << IA64_PSR_ED_BIT)
#define IA64_PSR_BN (__IA64_UL(1) << IA64_PSR_BN_BIT)
/* User mask bits: */
#define IA64_PSR_UM (IA64_PSR_BE | IA64_PSR_UP | IA64_PSR_AC | IA64_PSR_MFL | IA64_PSR_MFH)
/* Default Control Register */
#define IA64_DCR_PP_BIT 0
/* privileged performance monitor default */
#define IA64_DCR_BE_BIT 1
/* big-endian default */
#define IA64_DCR_LC_BIT 2
/* ia32 lock-check enable */
#define IA64_DCR_DM_BIT 8
/* defer TLB miss faults */
#define IA64_DCR_DP_BIT 9
/* defer page-not-present faults */
#define IA64_DCR_DK_BIT 10
/* defer key miss faults */
#define IA64_DCR_DX_BIT 11
/* defer key permission faults */
#define IA64_DCR_DR_BIT 12
/* defer access right faults */
#define IA64_DCR_DA_BIT 13
/* defer access bit faults */
#define IA64_DCR_DD_BIT 14
/* defer debug faults */
#define IA64_DCR_PP (__IA64_UL(1) << IA64_DCR_PP_BIT)
#define IA64_DCR_BE (__IA64_UL(1) << IA64_DCR_BE_BIT)
#define IA64_DCR_LC (__IA64_UL(1) << IA64_DCR_LC_BIT)
#define IA64_DCR_DM (__IA64_UL(1) << IA64_DCR_DM_BIT)
#define IA64_DCR_DP (__IA64_UL(1) << IA64_DCR_DP_BIT)
#define IA64_DCR_DK (__IA64_UL(1) << IA64_DCR_DK_BIT)
#define IA64_DCR_DX (__IA64_UL(1) << IA64_DCR_DX_BIT)
#define IA64_DCR_DR (__IA64_UL(1) << IA64_DCR_DR_BIT)
#define IA64_DCR_DA (__IA64_UL(1) << IA64_DCR_DA_BIT)
#define IA64_DCR_DD (__IA64_UL(1) << IA64_DCR_DD_BIT)
/* Interrupt Status Register */
#define IA64_ISR_X_BIT 32
/* execute access */
#define IA64_ISR_W_BIT 33
/* write access */
#define IA64_ISR_R_BIT 34
/* read access */
#define IA64_ISR_NA_BIT 35
/* non-access */
#define IA64_ISR_SP_BIT 36
/* speculative load exception */
#define IA64_ISR_RS_BIT 37
/* mandatory register-stack exception */
#define IA64_ISR_IR_BIT 38
/* invalid register frame exception */
#define IA64_ISR_CODE_MASK 0xf
#define IA64_ISR_X (__IA64_UL(1) << IA64_ISR_X_BIT)
#define IA64_ISR_W (__IA64_UL(1) << IA64_ISR_W_BIT)
#define IA64_ISR_R (__IA64_UL(1) << IA64_ISR_R_BIT)
#define IA64_ISR_NA (__IA64_UL(1) << IA64_ISR_NA_BIT)
#define IA64_ISR_SP (__IA64_UL(1) << IA64_ISR_SP_BIT)
#define IA64_ISR_RS (__IA64_UL(1) << IA64_ISR_RS_BIT)
#define IA64_ISR_IR (__IA64_UL(1) << IA64_ISR_IR_BIT)
/* ISR code field for non-access instructions */
#define IA64_ISR_CODE_TPA 0
#define IA64_ISR_CODE_FC 1
#define IA64_ISR_CODE_PROBE 2
#define IA64_ISR_CODE_TAK 3
#define IA64_ISR_CODE_LFETCH 4
#define IA64_ISR_CODE_PROBEF 5
#endif
/* _ASM_IA64_kREGS_H */
#endif
/* _ASM_IA64_kREGS_H */
include/asm-ia64/machvec.h
View file @
76f0f1f3
...
@@ -18,6 +18,7 @@ struct pci_dev;
...
@@ -18,6 +18,7 @@ struct pci_dev;
struct
pt_regs
;
struct
pt_regs
;
struct
scatterlist
;
struct
scatterlist
;
struct
irq_desc
;
struct
irq_desc
;
struct
page
;
typedef
void
ia64_mv_setup_t
(
char
**
);
typedef
void
ia64_mv_setup_t
(
char
**
);
typedef
void
ia64_mv_cpu_init_t
(
void
);
typedef
void
ia64_mv_cpu_init_t
(
void
);
...
@@ -45,6 +46,8 @@ typedef void ia64_mv_pci_unmap_sg (struct pci_dev *, struct scatterlist *, int,
...
@@ -45,6 +46,8 @@ typedef void ia64_mv_pci_unmap_sg (struct pci_dev *, struct scatterlist *, int,
typedef
void
ia64_mv_pci_dma_sync_single
(
struct
pci_dev
*
,
dma_addr_t
,
size_t
,
int
);
typedef
void
ia64_mv_pci_dma_sync_single
(
struct
pci_dev
*
,
dma_addr_t
,
size_t
,
int
);
typedef
void
ia64_mv_pci_dma_sync_sg
(
struct
pci_dev
*
,
struct
scatterlist
*
,
int
,
int
);
typedef
void
ia64_mv_pci_dma_sync_sg
(
struct
pci_dev
*
,
struct
scatterlist
*
,
int
,
int
);
typedef
unsigned
long
ia64_mv_pci_dma_address
(
struct
scatterlist
*
);
typedef
unsigned
long
ia64_mv_pci_dma_address
(
struct
scatterlist
*
);
typedef
int
ia64_mv_pci_dma_supported
(
struct
pci_dev
*
,
u64
);
/*
/*
* WARNING: The legacy I/O space is _architected_. Platforms are
* WARNING: The legacy I/O space is _architected_. Platforms are
* expected to follow this architected model (see Section 10.7 in the
* expected to follow this architected model (see Section 10.7 in the
...
@@ -101,6 +104,7 @@ extern void machvec_noop (void);
...
@@ -101,6 +104,7 @@ extern void machvec_noop (void);
# define platform_pci_dma_sync_single ia64_mv.sync_single
# define platform_pci_dma_sync_single ia64_mv.sync_single
# define platform_pci_dma_sync_sg ia64_mv.sync_sg
# define platform_pci_dma_sync_sg ia64_mv.sync_sg
# define platform_pci_dma_address ia64_mv.dma_address
# define platform_pci_dma_address ia64_mv.dma_address
# define platform_pci_dma_supported ia64_mv.dma_supported
# define platform_irq_desc ia64_mv.irq_desc
# define platform_irq_desc ia64_mv.irq_desc
# define platform_irq_to_vector ia64_mv.irq_to_vector
# define platform_irq_to_vector ia64_mv.irq_to_vector
# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq
# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq
...
@@ -136,6 +140,7 @@ struct ia64_machine_vector {
...
@@ -136,6 +140,7 @@ struct ia64_machine_vector {
ia64_mv_pci_dma_sync_single
*
sync_single
;
ia64_mv_pci_dma_sync_single
*
sync_single
;
ia64_mv_pci_dma_sync_sg
*
sync_sg
;
ia64_mv_pci_dma_sync_sg
*
sync_sg
;
ia64_mv_pci_dma_address
*
dma_address
;
ia64_mv_pci_dma_address
*
dma_address
;
ia64_mv_pci_dma_supported
*
dma_supported
;
ia64_mv_irq_desc
*
irq_desc
;
ia64_mv_irq_desc
*
irq_desc
;
ia64_mv_irq_to_vector
*
irq_to_vector
;
ia64_mv_irq_to_vector
*
irq_to_vector
;
ia64_mv_local_vector_to_irq
*
local_vector_to_irq
;
ia64_mv_local_vector_to_irq
*
local_vector_to_irq
;
...
@@ -172,6 +177,7 @@ struct ia64_machine_vector {
...
@@ -172,6 +177,7 @@ struct ia64_machine_vector {
platform_pci_dma_sync_single, \
platform_pci_dma_sync_single, \
platform_pci_dma_sync_sg, \
platform_pci_dma_sync_sg, \
platform_pci_dma_address, \
platform_pci_dma_address, \
platform_pci_dma_supported, \
platform_irq_desc, \
platform_irq_desc, \
platform_irq_to_vector, \
platform_irq_to_vector, \
platform_local_vector_to_irq, \
platform_local_vector_to_irq, \
...
@@ -269,6 +275,9 @@ extern ia64_mv_pci_dma_address swiotlb_dma_address;
...
@@ -269,6 +275,9 @@ extern ia64_mv_pci_dma_address swiotlb_dma_address;
#ifndef platform_pci_dma_address
#ifndef platform_pci_dma_address
# define platform_pci_dma_address swiotlb_dma_address
# define platform_pci_dma_address swiotlb_dma_address
#endif
#endif
#ifndef platform_pci_dma_supported
# define platform_pci_dma_supported swiotlb_pci_dma_supported
#endif
#ifndef platform_irq_desc
#ifndef platform_irq_desc
# define platform_irq_desc __ia64_irq_desc
# define platform_irq_desc __ia64_irq_desc
#endif
#endif
...
...
include/asm-ia64/machvec_hpzx1.h
View file @
76f0f1f3
...
@@ -11,6 +11,7 @@ extern ia64_mv_pci_unmap_single sba_unmap_single;
...
@@ -11,6 +11,7 @@ extern ia64_mv_pci_unmap_single sba_unmap_single;
extern
ia64_mv_pci_map_sg
sba_map_sg
;
extern
ia64_mv_pci_map_sg
sba_map_sg
;
extern
ia64_mv_pci_unmap_sg
sba_unmap_sg
;
extern
ia64_mv_pci_unmap_sg
sba_unmap_sg
;
extern
ia64_mv_pci_dma_address
sba_dma_address
;
extern
ia64_mv_pci_dma_address
sba_dma_address
;
extern
ia64_mv_pci_dma_supported
sba_dma_supported
;
/*
/*
* This stuff has dual use!
* This stuff has dual use!
...
@@ -33,42 +34,6 @@ extern ia64_mv_pci_dma_address sba_dma_address;
...
@@ -33,42 +34,6 @@ extern ia64_mv_pci_dma_address sba_dma_address;
#define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop)
#define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop)
#define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop)
#define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop)
#define platform_pci_dma_address sba_dma_address
#define platform_pci_dma_address sba_dma_address
#define platform_pci_dma_supported sba_dma_supported
#endif
/* _ASM_IA64_MACHVEC_HPZX1_h */
#ifndef _ASM_IA64_MACHVEC_HPZX1_h
#define _ASM_IA64_MACHVEC_HPZX1_h
extern
ia64_mv_setup_t
dig_setup
;
extern
ia64_mv_pci_fixup_t
hpzx1_pci_fixup
;
extern
ia64_mv_map_nr_t
map_nr_dense
;
extern
ia64_mv_pci_alloc_consistent
sba_alloc_consistent
;
extern
ia64_mv_pci_free_consistent
sba_free_consistent
;
extern
ia64_mv_pci_map_single
sba_map_single
;
extern
ia64_mv_pci_unmap_single
sba_unmap_single
;
extern
ia64_mv_pci_map_sg
sba_map_sg
;
extern
ia64_mv_pci_unmap_sg
sba_unmap_sg
;
extern
ia64_mv_pci_dma_address
sba_dma_address
;
/*
* This stuff has dual use!
*
* For a generic kernel, the macros are used to initialize the
* platform's machvec structure. When compiling a non-generic kernel,
* the macros are used directly.
*/
#define platform_name "hpzx1"
#define platform_setup dig_setup
#define platform_pci_fixup hpzx1_pci_fixup
#define platform_map_nr map_nr_dense
#define platform_pci_dma_init ((ia64_mv_pci_dma_init *) machvec_noop)
#define platform_pci_alloc_consistent sba_alloc_consistent
#define platform_pci_free_consistent sba_free_consistent
#define platform_pci_map_single sba_map_single
#define platform_pci_unmap_single sba_unmap_single
#define platform_pci_map_sg sba_map_sg
#define platform_pci_unmap_sg sba_unmap_sg
#define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop)
#define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop)
#define platform_pci_dma_address sba_dma_address
#endif
/* _ASM_IA64_MACHVEC_HPZX1_h */
#endif
/* _ASM_IA64_MACHVEC_HPZX1_h */
include/asm-ia64/offsets.h
View file @
76f0f1f3
...
@@ -106,6 +106,7 @@
...
@@ -106,6 +106,7 @@
#define IA64_SWITCH_STACK_AR_RNAT_OFFSET 536
/* 0x218 */
#define IA64_SWITCH_STACK_AR_RNAT_OFFSET 536
/* 0x218 */
#define IA64_SWITCH_STACK_AR_BSPSTORE_OFFSET 544
/* 0x220 */
#define IA64_SWITCH_STACK_AR_BSPSTORE_OFFSET 544
/* 0x220 */
#define IA64_SWITCH_STACK_PR_OFFSET 552
/* 0x228 */
#define IA64_SWITCH_STACK_PR_OFFSET 552
/* 0x228 */
#define IA64_SIGCONTEXT_IP_OFFSET 40
/* 0x28 */
#define IA64_SIGCONTEXT_AR_BSP_OFFSET 72
/* 0x48 */
#define IA64_SIGCONTEXT_AR_BSP_OFFSET 72
/* 0x48 */
#define IA64_SIGCONTEXT_AR_FPSR_OFFSET 104
/* 0x68 */
#define IA64_SIGCONTEXT_AR_FPSR_OFFSET 104
/* 0x68 */
#define IA64_SIGCONTEXT_AR_RNAT_OFFSET 80
/* 0x50 */
#define IA64_SIGCONTEXT_AR_RNAT_OFFSET 80
/* 0x50 */
...
...
include/asm-ia64/pci.h
View file @
76f0f1f3
...
@@ -58,6 +58,7 @@ pcibios_penalize_isa_irq (int irq)
...
@@ -58,6 +58,7 @@ pcibios_penalize_isa_irq (int irq)
#define pci_dma_sync_single platform_pci_dma_sync_single
#define pci_dma_sync_single platform_pci_dma_sync_single
#define pci_dma_sync_sg platform_pci_dma_sync_sg
#define pci_dma_sync_sg platform_pci_dma_sync_sg
#define sg_dma_address platform_pci_dma_address
#define sg_dma_address platform_pci_dma_address
#define pci_dma_supported platform_pci_dma_supported
/* pci_unmap_{single,page} is not a nop, thus... */
/* pci_unmap_{single,page} is not a nop, thus... */
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
...
@@ -73,17 +74,6 @@ pcibios_penalize_isa_irq (int irq)
...
@@ -73,17 +74,6 @@ pcibios_penalize_isa_irq (int irq)
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
(((PTR)->LEN_NAME) = (VAL))
(((PTR)->LEN_NAME) = (VAL))
/*
* Return whether the given PCI device DMA address mask can be supported properly. For
* example, if your device can only drive the low 24-bits during PCI bus mastering, then
* you would pass 0x00ffffff as the mask to this function.
*/
static
inline
int
pci_dma_supported
(
struct
pci_dev
*
hwdev
,
u64
mask
)
{
return
1
;
}
#define pci_map_page(dev,pg,off,size,dir) \
#define pci_map_page(dev,pg,off,size,dir) \
pci_map_single((dev), page_address(pg) + (off), (size), (dir))
pci_map_single((dev), page_address(pg) + (off), (size), (dir))
#define pci_unmap_page(dev,dma_addr,size,dir) \
#define pci_unmap_page(dev,dma_addr,size,dir) \
...
...
include/asm-ia64/processor.h
View file @
76f0f1f3
...
@@ -55,123 +55,6 @@
...
@@ -55,123 +55,6 @@
#define MCA_bus 0
#define MCA_bus 0
#define MCA_bus__is_a_macro
/* for versions in ksyms.c */
#define MCA_bus__is_a_macro
/* for versions in ksyms.c */
/* Processor status register bits: */
#define IA64_PSR_BE_BIT 1
#define IA64_PSR_UP_BIT 2
#define IA64_PSR_AC_BIT 3
#define IA64_PSR_MFL_BIT 4
#define IA64_PSR_MFH_BIT 5
#define IA64_PSR_IC_BIT 13
#define IA64_PSR_I_BIT 14
#define IA64_PSR_PK_BIT 15
#define IA64_PSR_DT_BIT 17
#define IA64_PSR_DFL_BIT 18
#define IA64_PSR_DFH_BIT 19
#define IA64_PSR_SP_BIT 20
#define IA64_PSR_PP_BIT 21
#define IA64_PSR_DI_BIT 22
#define IA64_PSR_SI_BIT 23
#define IA64_PSR_DB_BIT 24
#define IA64_PSR_LP_BIT 25
#define IA64_PSR_TB_BIT 26
#define IA64_PSR_RT_BIT 27
/* The following are not affected by save_flags()/restore_flags(): */
#define IA64_PSR_CPL0_BIT 32
#define IA64_PSR_CPL1_BIT 33
#define IA64_PSR_IS_BIT 34
#define IA64_PSR_MC_BIT 35
#define IA64_PSR_IT_BIT 36
#define IA64_PSR_ID_BIT 37
#define IA64_PSR_DA_BIT 38
#define IA64_PSR_DD_BIT 39
#define IA64_PSR_SS_BIT 40
#define IA64_PSR_RI_BIT 41
#define IA64_PSR_ED_BIT 43
#define IA64_PSR_BN_BIT 44
#define IA64_PSR_BE (__IA64_UL(1) << IA64_PSR_BE_BIT)
#define IA64_PSR_UP (__IA64_UL(1) << IA64_PSR_UP_BIT)
#define IA64_PSR_AC (__IA64_UL(1) << IA64_PSR_AC_BIT)
#define IA64_PSR_MFL (__IA64_UL(1) << IA64_PSR_MFL_BIT)
#define IA64_PSR_MFH (__IA64_UL(1) << IA64_PSR_MFH_BIT)
#define IA64_PSR_IC (__IA64_UL(1) << IA64_PSR_IC_BIT)
#define IA64_PSR_I (__IA64_UL(1) << IA64_PSR_I_BIT)
#define IA64_PSR_PK (__IA64_UL(1) << IA64_PSR_PK_BIT)
#define IA64_PSR_DT (__IA64_UL(1) << IA64_PSR_DT_BIT)
#define IA64_PSR_DFL (__IA64_UL(1) << IA64_PSR_DFL_BIT)
#define IA64_PSR_DFH (__IA64_UL(1) << IA64_PSR_DFH_BIT)
#define IA64_PSR_SP (__IA64_UL(1) << IA64_PSR_SP_BIT)
#define IA64_PSR_PP (__IA64_UL(1) << IA64_PSR_PP_BIT)
#define IA64_PSR_DI (__IA64_UL(1) << IA64_PSR_DI_BIT)
#define IA64_PSR_SI (__IA64_UL(1) << IA64_PSR_SI_BIT)
#define IA64_PSR_DB (__IA64_UL(1) << IA64_PSR_DB_BIT)
#define IA64_PSR_LP (__IA64_UL(1) << IA64_PSR_LP_BIT)
#define IA64_PSR_TB (__IA64_UL(1) << IA64_PSR_TB_BIT)
#define IA64_PSR_RT (__IA64_UL(1) << IA64_PSR_RT_BIT)
/* The following are not affected by save_flags()/restore_flags(): */
#define IA64_PSR_IS (__IA64_UL(1) << IA64_PSR_IS_BIT)
#define IA64_PSR_MC (__IA64_UL(1) << IA64_PSR_MC_BIT)
#define IA64_PSR_IT (__IA64_UL(1) << IA64_PSR_IT_BIT)
#define IA64_PSR_ID (__IA64_UL(1) << IA64_PSR_ID_BIT)
#define IA64_PSR_DA (__IA64_UL(1) << IA64_PSR_DA_BIT)
#define IA64_PSR_DD (__IA64_UL(1) << IA64_PSR_DD_BIT)
#define IA64_PSR_SS (__IA64_UL(1) << IA64_PSR_SS_BIT)
#define IA64_PSR_RI (__IA64_UL(3) << IA64_PSR_RI_BIT)
#define IA64_PSR_ED (__IA64_UL(1) << IA64_PSR_ED_BIT)
#define IA64_PSR_BN (__IA64_UL(1) << IA64_PSR_BN_BIT)
/* User mask bits: */
#define IA64_PSR_UM (IA64_PSR_BE | IA64_PSR_UP | IA64_PSR_AC | IA64_PSR_MFL | IA64_PSR_MFH)
/* Default Control Register */
#define IA64_DCR_PP_BIT 0
/* privileged performance monitor default */
#define IA64_DCR_BE_BIT 1
/* big-endian default */
#define IA64_DCR_LC_BIT 2
/* ia32 lock-check enable */
#define IA64_DCR_DM_BIT 8
/* defer TLB miss faults */
#define IA64_DCR_DP_BIT 9
/* defer page-not-present faults */
#define IA64_DCR_DK_BIT 10
/* defer key miss faults */
#define IA64_DCR_DX_BIT 11
/* defer key permission faults */
#define IA64_DCR_DR_BIT 12
/* defer access right faults */
#define IA64_DCR_DA_BIT 13
/* defer access bit faults */
#define IA64_DCR_DD_BIT 14
/* defer debug faults */
#define IA64_DCR_PP (__IA64_UL(1) << IA64_DCR_PP_BIT)
#define IA64_DCR_BE (__IA64_UL(1) << IA64_DCR_BE_BIT)
#define IA64_DCR_LC (__IA64_UL(1) << IA64_DCR_LC_BIT)
#define IA64_DCR_DM (__IA64_UL(1) << IA64_DCR_DM_BIT)
#define IA64_DCR_DP (__IA64_UL(1) << IA64_DCR_DP_BIT)
#define IA64_DCR_DK (__IA64_UL(1) << IA64_DCR_DK_BIT)
#define IA64_DCR_DX (__IA64_UL(1) << IA64_DCR_DX_BIT)
#define IA64_DCR_DR (__IA64_UL(1) << IA64_DCR_DR_BIT)
#define IA64_DCR_DA (__IA64_UL(1) << IA64_DCR_DA_BIT)
#define IA64_DCR_DD (__IA64_UL(1) << IA64_DCR_DD_BIT)
/* Interrupt Status Register */
#define IA64_ISR_X_BIT 32
/* execute access */
#define IA64_ISR_W_BIT 33
/* write access */
#define IA64_ISR_R_BIT 34
/* read access */
#define IA64_ISR_NA_BIT 35
/* non-access */
#define IA64_ISR_SP_BIT 36
/* speculative load exception */
#define IA64_ISR_RS_BIT 37
/* mandatory register-stack exception */
#define IA64_ISR_IR_BIT 38
/* invalid register frame exception */
#define IA64_ISR_CODE_MASK 0xf
#define IA64_ISR_X (__IA64_UL(1) << IA64_ISR_X_BIT)
#define IA64_ISR_W (__IA64_UL(1) << IA64_ISR_W_BIT)
#define IA64_ISR_R (__IA64_UL(1) << IA64_ISR_R_BIT)
#define IA64_ISR_NA (__IA64_UL(1) << IA64_ISR_NA_BIT)
#define IA64_ISR_SP (__IA64_UL(1) << IA64_ISR_SP_BIT)
#define IA64_ISR_RS (__IA64_UL(1) << IA64_ISR_RS_BIT)
#define IA64_ISR_IR (__IA64_UL(1) << IA64_ISR_IR_BIT)
/* ISR code field for non-access instructions */
#define IA64_ISR_CODE_TPA 0
#define IA64_ISR_CODE_FC 1
#define IA64_ISR_CODE_PROBE 2
#define IA64_ISR_CODE_TAK 3
#define IA64_ISR_CODE_LFETCH 4
#define IA64_ISR_CODE_PROBEF 5
#define IA64_THREAD_FPH_VALID (__IA64_UL(1) << 0)
/* floating-point high state valid? */
#define IA64_THREAD_FPH_VALID (__IA64_UL(1) << 0)
/* floating-point high state valid? */
#define IA64_THREAD_DBG_VALID (__IA64_UL(1) << 1)
/* debug registers valid? */
#define IA64_THREAD_DBG_VALID (__IA64_UL(1) << 1)
/* debug registers valid? */
#define IA64_THREAD_PM_VALID (__IA64_UL(1) << 2)
/* performance registers valid? */
#define IA64_THREAD_PM_VALID (__IA64_UL(1) << 2)
/* performance registers valid? */
...
@@ -632,14 +515,22 @@ ia64_invala (void)
...
@@ -632,14 +515,22 @@ ia64_invala (void)
asm
volatile
(
"invala"
:::
"memory"
);
asm
volatile
(
"invala"
:::
"memory"
);
}
}
static
inline
__u64
ia64_clear_ic
(
void
)
{
__u64
psr
;
asm
volatile
(
"mov %0=psr;; rsm psr.i | psr.ic;; srlz.i;;"
:
"=r"
(
psr
)
::
"memory"
);
return
psr
;
}
/*
/*
* Save the processor status flags in FLAGS and then clear the interrupt collection and
* Restore the psr.
* interrupt enable bits. Don't trigger any mandatory RSE references while this bit is
* off!
*/
*/
#define ia64_clear_ic(flags) \
static
inline
void
asm volatile ("mov %0=psr;; rsm psr.i | psr.ic;; srlz.i;;" \
ia64_set_psr
(
__u64
psr
)
: "=r"(flags) :: "memory");
{
asm
volatile
(
";; mov psr.l=%0;; srlz.d"
::
"r"
(
psr
)
:
"memory"
);
}
/*
/*
* Insert a translation into an instruction and/or data translation
* Insert a translation into an instruction and/or data translation
...
...
include/asm-ia64/system.h
View file @
76f0f1f3
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
*/
*/
#include <linux/config.h>
#include <linux/config.h>
#include <asm/kregs.h>
#include <asm/page.h>
#include <asm/page.h>
#define KERNEL_START (PAGE_OFFSET + 68*1024*1024)
#define KERNEL_START (PAGE_OFFSET + 68*1024*1024)
...
@@ -30,7 +31,7 @@ struct pci_vector_struct {
...
@@ -30,7 +31,7 @@ struct pci_vector_struct {
__u16
bus
;
/* PCI Bus number */
__u16
bus
;
/* PCI Bus number */
__u32
pci_id
;
/* ACPI split 16 bits device, 16 bits function (see section 6.1.1) */
__u32
pci_id
;
/* ACPI split 16 bits device, 16 bits function (see section 6.1.1) */
__u8
pin
;
/* PCI PIN (0 = A, 1 = B, 2 = C, 3 = D) */
__u8
pin
;
/* PCI PIN (0 = A, 1 = B, 2 = C, 3 = D) */
__u
8
irq
;
/* IRQ assigned */
__u
32
irq
;
/* IRQ assigned */
};
};
extern
struct
ia64_boot_param
{
extern
struct
ia64_boot_param
{
...
@@ -135,16 +136,21 @@ do { \
...
@@ -135,16 +136,21 @@ do { \
} \
} \
} while (0)
} while (0)
# define local_irq_restore(x) \
# define local_irq_restore(x) \
do { \
do { \
unsigned long ip, old_psr, psr = (x); \
unsigned long ip, old_psr, psr = (x); \
\
\
__asm__ __volatile__ (";;mov %0=psr; mov psr.l=%1;; srlz.d" \
__asm__ __volatile__ ("mov %0=psr;" \
: "=&r" (old_psr) : "r" (psr) : "memory"); \
"cmp.ne p6,p7=%1,r0;;" \
if ((old_psr & (1UL << 14)) && !(psr & (1UL << 14))) { \
"(p6) ssm psr.i;" \
__asm__ ("mov %0=ip" : "=r"(ip)); \
"(p7) rsm psr.i;;" \
last_cli_ip = ip; \
"srlz.d" \
} \
: "=&r" (old_psr) : "r"((psr) & IA64_PSR_I) \
: "p6", "p7", "memory"); \
if ((old_psr & IA64_PSR_I) && !(psr & IA64_PSR_I)) { \
__asm__ ("mov %0=ip" : "=r"(ip)); \
last_cli_ip = ip; \
} \
} while (0)
} while (0)
#else
/* !CONFIG_IA64_DEBUG_IRQ */
#else
/* !CONFIG_IA64_DEBUG_IRQ */
...
@@ -153,8 +159,12 @@ do { \
...
@@ -153,8 +159,12 @@ do { \
: "=r" (x) :: "memory")
: "=r" (x) :: "memory")
# define local_irq_disable() __asm__ __volatile__ (";; rsm psr.i;;" ::: "memory")
# define local_irq_disable() __asm__ __volatile__ (";; rsm psr.i;;" ::: "memory")
/* (potentially) setting psr.i requires data serialization: */
/* (potentially) setting psr.i requires data serialization: */
# define local_irq_restore(x) __asm__ __volatile__ (";; mov psr.l=%0;; srlz.d" \
# define local_irq_restore(x) __asm__ __volatile__ ("cmp.ne p6,p7=%0,r0;;" \
:: "r" (x) : "memory")
"(p6) ssm psr.i;" \
"(p7) rsm psr.i;;" \
"srlz.d" \
:: "r"((x) & IA64_PSR_I) \
: "p6", "p7", "memory")
#endif
/* !CONFIG_IA64_DEBUG_IRQ */
#endif
/* !CONFIG_IA64_DEBUG_IRQ */
#define local_irq_enable() __asm__ __volatile__ (";; ssm psr.i;; srlz.d" ::: "memory")
#define local_irq_enable() __asm__ __volatile__ (";; ssm psr.i;; srlz.d" ::: "memory")
...
...
include/asm-ia64/unistd.h
View file @
76f0f1f3
...
@@ -222,6 +222,7 @@
...
@@ -222,6 +222,7 @@
#define __NR_futex 1230
#define __NR_futex 1230
#define __NR_sched_setaffinity 1231
#define __NR_sched_setaffinity 1231
#define __NR_sched_getaffinity 1232
#define __NR_sched_getaffinity 1232
#define __NR_security 1233
#if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
#if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
...
...
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