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
ef0eaa13
Commit
ef0eaa13
authored
Nov 01, 2005
by
Steve French
Browse files
Options
Browse Files
Download
Plain Diff
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
parents
53b2ec55
df70b17f
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
212 additions
and
129 deletions
+212
-129
arch/i386/Kconfig
arch/i386/Kconfig
+0
-5
arch/i386/kernel/apic.c
arch/i386/kernel/apic.c
+16
-61
arch/i386/kernel/i8259.c
arch/i386/kernel/i8259.c
+0
-4
arch/i386/kernel/io_apic.c
arch/i386/kernel/io_apic.c
+1
-5
arch/i386/kernel/smpboot.c
arch/i386/kernel/smpboot.c
+52
-16
arch/i386/kernel/time.c
arch/i386/kernel/time.c
+1
-11
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Kconfig
+2
-2
drivers/input/mouse/Kconfig
drivers/input/mouse/Kconfig
+1
-1
drivers/scsi/ide-scsi.c
drivers/scsi/ide-scsi.c
+32
-12
drivers/usb/host/pci-quirks.c
drivers/usb/host/pci-quirks.c
+23
-0
fs/fs-writeback.c
fs/fs-writeback.c
+1
-1
fs/ntfs/file.c
fs/ntfs/file.c
+9
-8
include/asm-i386/apic.h
include/asm-i386/apic.h
+1
-2
include/asm-i386/hw_irq.h
include/asm-i386/hw_irq.h
+0
-1
include/asm-i386/mach-default/smpboot_hooks.h
include/asm-i386/mach-default/smpboot_hooks.h
+15
-0
include/asm-i386/mach-visws/smpboot_hooks.h
include/asm-i386/mach-visws/smpboot_hooks.h
+7
-0
include/sound/emu10k1.h
include/sound/emu10k1.h
+1
-0
init/main.c
init/main.c
+11
-0
sound/pci/emu10k1/emu10k1_main.c
sound/pci/emu10k1/emu10k1_main.c
+39
-0
No files found.
arch/i386/Kconfig
View file @
ef0eaa13
...
...
@@ -1042,8 +1042,3 @@ config X86_TRAMPOLINE
bool
depends on X86_SMP || (X86_VOYAGER && SMP)
default y
config PC
bool
depends on X86 && !EMBEDDED
default y
arch/i386/kernel/apic.c
View file @
ef0eaa13
...
...
@@ -803,7 +803,6 @@ static int __init detect_init_APIC (void)
void
__init
init_apic_mappings
(
void
)
{
unsigned
int
orig_apicid
;
unsigned
long
apic_phys
;
/*
...
...
@@ -825,11 +824,8 @@ void __init init_apic_mappings(void)
* Fetch the APIC ID of the BSP in case we have a
* default configuration (or the MP table is broken).
*/
orig_apicid
=
boot_cpu_physical_apicid
;
boot_cpu_physical_apicid
=
GET_APIC_ID
(
apic_read
(
APIC_ID
));
if
((
orig_apicid
!=
-
1U
)
&&
(
orig_apicid
!=
boot_cpu_physical_apicid
))
printk
(
KERN_WARNING
"Boot APIC ID in local APIC unexpected (%d vs %d)"
,
orig_apicid
,
boot_cpu_physical_apicid
);
if
(
boot_cpu_physical_apicid
==
-
1U
)
boot_cpu_physical_apicid
=
GET_APIC_ID
(
apic_read
(
APIC_ID
));
#ifdef CONFIG_X86_IO_APIC
{
...
...
@@ -1259,81 +1255,40 @@ fastcall void smp_error_interrupt(struct pt_regs *regs)
}
/*
* This initializes the IO-APIC and APIC hardware.
* This initializes the IO-APIC and APIC hardware if this is
* a UP kernel.
*/
int
__init
APIC_init
(
void
)
int
__init
APIC_init
_uniprocessor
(
void
)
{
if
(
enable_local_apic
<
0
)
{
printk
(
KERN_INFO
"APIC disabled
\n
"
);
return
-
1
;
}
if
(
enable_local_apic
<
0
)
clear_bit
(
X86_FEATURE_APIC
,
boot_cpu_data
.
x86_capability
);
/* See if we have a SMP configuration or have forced enabled
* the local apic.
*/
if
(
!
smp_found_config
&&
!
acpi_lapic
&&
!
cpu_has_apic
)
{
enable_local_apic
=
-
1
;
if
(
!
smp_found_config
&&
!
cpu_has_apic
)
return
-
1
;
}
/*
* Complain if the BIOS pretends there is an apic.
* Then get out because we don't have an a local apic.
* Complain if the BIOS pretends there is one.
*/
if
(
!
cpu_has_apic
&&
APIC_INTEGRATED
(
apic_version
[
boot_cpu_physical_apicid
]))
{
printk
(
KERN_ERR
"BIOS bug, local APIC #%d not detected!...
\n
"
,
boot_cpu_physical_apicid
);
printk
(
KERN_ERR
"... forcing use of dummy APIC emulation. (tell your hw vendor)
\n
"
);
enable_local_apic
=
-
1
;
return
-
1
;
}
verify_local_APIC
();
/*
* Should not be necessary because the MP table should list the boot
* CPU too, but we do it for the sake of robustness anyway.
* Makes no sense to do this check in clustered apic mode, so skip it
*/
if
(
!
check_phys_apicid_present
(
boot_cpu_physical_apicid
))
{
printk
(
"weird, boot CPU (#%d) not listed by the BIOS.
\n
"
,
boot_cpu_physical_apicid
);
physid_set
(
boot_cpu_physical_apicid
,
phys_cpu_present_map
);
}
/*
* Switch from PIC to APIC mode.
*/
connect_bsp_APIC
();
setup_local_APIC
();
#ifdef CONFIG_X86_IO_APIC
/*
* Now start the IO-APICs
*/
if
(
smp_found_config
&&
!
skip_ioapic_setup
&&
nr_ioapics
)
setup_IO_APIC
();
#endif
return
0
;
}
phys_cpu_present_map
=
physid_mask_of_physid
(
boot_cpu_physical_apicid
);
void
__init
APIC_late_time_init
(
void
)
{
/* Improve our loops per jiffy estimate */
loops_per_jiffy
=
((
1000
+
HZ
-
1
)
/
HZ
)
*
cpu_khz
;
boot_cpu_data
.
loops_per_jiffy
=
loops_per_jiffy
;
cpu_data
[
0
].
loops_per_jiffy
=
loops_per_jiffy
;
/* setup_apic_nmi_watchdog doesn't work properly before cpu_khz is
* initialized. So redo it here to ensure the boot cpu is setup
* properly.
*/
if
(
nmi_watchdog
==
NMI_LOCAL_APIC
)
setup_apic_nmi_watchdog
();
setup_local_APIC
();
#ifdef CONFIG_X86_IO_APIC
if
(
smp_found_config
&&
!
skip_ioapic_setup
&&
nr_ioapics
)
IO_APIC_late_time_init
();
if
(
smp_found_config
)
if
(
!
skip_ioapic_setup
&&
nr_ioapics
)
setup_IO_APIC
();
#endif
setup_boot_APIC_clock
();
return
0
;
}
arch/i386/kernel/i8259.c
View file @
ef0eaa13
...
...
@@ -435,8 +435,4 @@ void __init init_IRQ(void)
setup_irq
(
FPU_IRQ
,
&
fpu_irq
);
irq_ctx_init
(
smp_processor_id
());
#ifdef CONFIG_X86_LOCAL_APIC
APIC_init
();
#endif
}
arch/i386/kernel/io_apic.c
View file @
ef0eaa13
...
...
@@ -2387,15 +2387,11 @@ void __init setup_IO_APIC(void)
sync_Arb_IDs
();
setup_IO_APIC_irqs
();
init_IO_APIC_traps
();
check_timer
();
if
(
!
acpi_ioapic
)
print_IO_APIC
();
}
void
__init
IO_APIC_late_time_init
(
void
)
{
check_timer
();
}
/*
* Called after all the initialization is done. If we didnt find any
* APIC bugs then we can allow the modify fast path
...
...
arch/i386/kernel/smpboot.c
View file @
ef0eaa13
...
...
@@ -1078,16 +1078,6 @@ void *xquad_portio;
EXPORT_SYMBOL
(
xquad_portio
);
#endif
/*
* Fall back to non SMP mode after errors.
*
*/
static
__init
void
disable_smp
(
void
)
{
cpu_set
(
0
,
cpu_sibling_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
}
static
void
__init
smp_boot_cpus
(
unsigned
int
max_cpus
)
{
int
apicid
,
cpu
,
bit
,
kicked
;
...
...
@@ -1100,6 +1090,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk
(
"CPU%d: "
,
0
);
print_cpu_info
(
&
cpu_data
[
0
]);
boot_cpu_physical_apicid
=
GET_APIC_ID
(
apic_read
(
APIC_ID
));
boot_cpu_logical_apicid
=
logical_smp_processor_id
();
x86_cpu_to_apicid
[
0
]
=
boot_cpu_physical_apicid
;
...
...
@@ -1111,27 +1102,68 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
cpus_clear
(
cpu_core_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
map_cpu_to_logical_apicid
();
/*
* If we couldn't find an SMP configuration at boot time,
* get out of here now!
*/
if
(
!
smp_found_config
&&
!
acpi_lapic
)
{
printk
(
KERN_NOTICE
"SMP motherboard not detected.
\n
"
);
disable_smp
();
smpboot_clear_io_apic_irqs
();
phys_cpu_present_map
=
physid_mask_of_physid
(
0
);
if
(
APIC_init_uniprocessor
())
printk
(
KERN_NOTICE
"Local APIC not detected."
" Using dummy APIC emulation.
\n
"
);
map_cpu_to_logical_apicid
();
cpu_set
(
0
,
cpu_sibling_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
return
;
}
/*
* Should not be necessary because the MP table should list the boot
* CPU too, but we do it for the sake of robustness anyway.
* Makes no sense to do this check in clustered apic mode, so skip it
*/
if
(
!
check_phys_apicid_present
(
boot_cpu_physical_apicid
))
{
printk
(
"weird, boot CPU (#%d) not listed by the BIOS.
\n
"
,
boot_cpu_physical_apicid
);
physid_set
(
hard_smp_processor_id
(),
phys_cpu_present_map
);
}
/*
* If we couldn't find a local APIC, then get out of here now!
*/
if
(
APIC_INTEGRATED
(
apic_version
[
boot_cpu_physical_apicid
])
&&
!
cpu_has_apic
)
{
printk
(
KERN_ERR
"BIOS bug, local APIC #%d not detected!...
\n
"
,
boot_cpu_physical_apicid
);
printk
(
KERN_ERR
"... forcing use of dummy APIC emulation. (tell your hw vendor)
\n
"
);
smpboot_clear_io_apic_irqs
();
phys_cpu_present_map
=
physid_mask_of_physid
(
0
);
cpu_set
(
0
,
cpu_sibling_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
return
;
}
verify_local_APIC
();
/*
* If SMP should be disabled, then really disable it!
*/
if
(
!
max_cpus
||
(
enable_local_apic
<
0
))
{
printk
(
KERN_INFO
"SMP mode deactivated.
\n
"
);
disable_smp
();
if
(
!
max_cpus
)
{
smp_found_config
=
0
;
printk
(
KERN_INFO
"SMP mode deactivated, forcing use of dummy APIC emulation.
\n
"
);
smpboot_clear_io_apic_irqs
();
phys_cpu_present_map
=
physid_mask_of_physid
(
0
);
cpu_set
(
0
,
cpu_sibling_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
return
;
}
connect_bsp_APIC
();
setup_local_APIC
();
map_cpu_to_logical_apicid
();
setup_portio_remap
();
/*
...
...
@@ -1212,6 +1244,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
cpu_set
(
0
,
cpu_sibling_map
[
0
]);
cpu_set
(
0
,
cpu_core_map
[
0
]);
smpboot_setup_io_apic
();
setup_boot_APIC_clock
();
/*
* Synchronize the TSC with the AP
*/
...
...
arch/i386/kernel/time.c
View file @
ef0eaa13
...
...
@@ -440,8 +440,8 @@ static int time_init_device(void)
device_initcall
(
time_init_device
);
extern
void
(
*
late_time_init
)(
void
);
#ifdef CONFIG_HPET_TIMER
extern
void
(
*
late_time_init
)(
void
);
/* Duplicate of time_init() below, with hpet_enable part added */
static
void
__init
hpet_time_init
(
void
)
{
...
...
@@ -458,11 +458,6 @@ static void __init hpet_time_init(void)
printk
(
KERN_INFO
"Using %s for high-res timesource
\n
"
,
cur_timer
->
name
);
time_init_hook
();
#ifdef CONFIG_X86_LOCAL_APIC
if
(
enable_local_apic
>=
0
)
APIC_late_time_init
();
#endif
}
#endif
...
...
@@ -487,9 +482,4 @@ void __init time_init(void)
printk
(
KERN_INFO
"Using %s for high-res timesource
\n
"
,
cur_timer
->
name
);
time_init_hook
();
#ifdef CONFIG_X86_LOCAL_APIC
if
(
enable_local_apic
>=
0
)
late_time_init
=
APIC_late_time_init
;
#endif
}
drivers/input/keyboard/Kconfig
View file @
ef0eaa13
...
...
@@ -13,11 +13,11 @@ menuconfig INPUT_KEYBOARD
if INPUT_KEYBOARD
config KEYBOARD_ATKBD
tristate "AT keyboard" if !PC
tristate "AT keyboard" if !
X86_
PC
default y
select SERIO
select SERIO_LIBPS2
select SERIO_I8042 if PC
select SERIO_I8042 if
X86_
PC
select SERIO_GSCPS2 if GSC
help
Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
...
...
drivers/input/mouse/Kconfig
View file @
ef0eaa13
...
...
@@ -17,7 +17,7 @@ config MOUSE_PS2
default y
select SERIO
select SERIO_LIBPS2
select SERIO_I8042 if PC
select SERIO_I8042 if
X86_
PC
select SERIO_GSCPS2 if GSC
---help---
Say Y here if you have a PS/2 mouse connected to your system. This
...
...
drivers/scsi/ide-scsi.c
View file @
ef0eaa13
...
...
@@ -180,12 +180,22 @@ static void idescsi_input_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsigne
return
;
}
count
=
min
(
pc
->
sg
->
length
-
pc
->
b_count
,
bcount
);
buf
=
kmap_atomic
(
pc
->
sg
->
page
,
KM_IRQ0
);
drive
->
hwif
->
atapi_input_bytes
(
drive
,
buf
+
pc
->
b_count
+
pc
->
sg
->
offset
,
count
);
kunmap_atomic
(
buf
,
KM_IRQ0
);
bcount
-=
count
;
pc
->
b_count
+=
count
;
if
(
PageHighMem
(
pc
->
sg
->
page
))
{
unsigned
long
flags
;
local_irq_save
(
flags
);
buf
=
kmap_atomic
(
pc
->
sg
->
page
,
KM_IRQ0
)
+
pc
->
sg
->
offset
;
drive
->
hwif
->
atapi_input_bytes
(
drive
,
buf
+
pc
->
b_count
,
count
);
kunmap_atomic
(
buf
-
pc
->
sg
->
offset
,
KM_IRQ0
);
local_irq_restore
(
flags
);
}
else
{
buf
=
page_address
(
pc
->
sg
->
page
)
+
pc
->
sg
->
offset
;
drive
->
hwif
->
atapi_input_bytes
(
drive
,
buf
+
pc
->
b_count
,
count
);
}
bcount
-=
count
;
pc
->
b_count
+=
count
;
if
(
pc
->
b_count
==
pc
->
sg
->
length
)
{
pc
->
sg
++
;
pc
->
b_count
=
0
;
...
...
@@ -205,12 +215,22 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
return
;
}
count
=
min
(
pc
->
sg
->
length
-
pc
->
b_count
,
bcount
);
buf
=
kmap_atomic
(
pc
->
sg
->
page
,
KM_IRQ0
);
drive
->
hwif
->
atapi_output_bytes
(
drive
,
buf
+
pc
->
b_count
+
pc
->
sg
->
offset
,
count
);
kunmap_atomic
(
buf
,
KM_IRQ0
);
bcount
-=
count
;
pc
->
b_count
+=
count
;
if
(
PageHighMem
(
pc
->
sg
->
page
))
{
unsigned
long
flags
;
local_irq_save
(
flags
);
buf
=
kmap_atomic
(
pc
->
sg
->
page
,
KM_IRQ0
)
+
pc
->
sg
->
offset
;
drive
->
hwif
->
atapi_output_bytes
(
drive
,
buf
+
pc
->
b_count
,
count
);
kunmap_atomic
(
buf
-
pc
->
sg
->
offset
,
KM_IRQ0
);
local_irq_restore
(
flags
);
}
else
{
buf
=
page_address
(
pc
->
sg
->
page
)
+
pc
->
sg
->
offset
;
drive
->
hwif
->
atapi_output_bytes
(
drive
,
buf
+
pc
->
b_count
,
count
);
}
bcount
-=
count
;
pc
->
b_count
+=
count
;
if
(
pc
->
b_count
==
pc
->
sg
->
length
)
{
pc
->
sg
++
;
pc
->
b_count
=
0
;
...
...
drivers/usb/host/pci-quirks.c
View file @
ef0eaa13
...
...
@@ -138,11 +138,23 @@ int uhci_check_and_reset_hc(struct pci_dev *pdev, unsigned long base)
}
EXPORT_SYMBOL_GPL
(
uhci_check_and_reset_hc
);
static
inline
int
io_type_enabled
(
struct
pci_dev
*
pdev
,
unsigned
int
mask
)
{
u16
cmd
;
return
!
pci_read_config_word
(
pdev
,
PCI_COMMAND
,
&
cmd
)
&&
(
cmd
&
mask
);
}
#define pio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_IO)
#define mmio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_MEMORY)
static
void
__devinit
quirk_usb_handoff_uhci
(
struct
pci_dev
*
pdev
)
{
unsigned
long
base
=
0
;
int
i
;
if
(
!
pio_enabled
(
pdev
))
return
;
for
(
i
=
0
;
i
<
PCI_ROM_RESOURCE
;
i
++
)
if
((
pci_resource_flags
(
pdev
,
i
)
&
IORESOURCE_IO
))
{
base
=
pci_resource_start
(
pdev
,
i
);
...
...
@@ -153,12 +165,20 @@ static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
uhci_check_and_reset_hc
(
pdev
,
base
);
}
static
int
__devinit
mmio_resource_enabled
(
struct
pci_dev
*
pdev
,
int
idx
)
{
return
pci_resource_start
(
pdev
,
idx
)
&&
mmio_enabled
(
pdev
);
}
static
void
__devinit
quirk_usb_handoff_ohci
(
struct
pci_dev
*
pdev
)
{
void
__iomem
*
base
;
int
wait_time
;
u32
control
;
if
(
!
mmio_resource_enabled
(
pdev
,
0
))
return
;
base
=
ioremap_nocache
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
));
if
(
base
==
NULL
)
return
;
...
...
@@ -201,6 +221,9 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev)
u32
hcc_params
,
val
,
temp
;
u8
cap_length
;
if
(
!
mmio_resource_enabled
(
pdev
,
0
))
return
;
base
=
ioremap_nocache
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
));
if
(
base
==
NULL
)
return
;
...
...
fs/fs-writeback.c
View file @
ef0eaa13
...
...
@@ -247,7 +247,7 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
wait_queue_head_t
*
wqh
;
if
(
!
atomic_read
(
&
inode
->
i_count
))
WARN_ON
(
!
(
inode
->
i_state
&
I_WILL_FREE
));
WARN_ON
(
!
(
inode
->
i_state
&
(
I_WILL_FREE
|
I_FREEING
)
));
else
WARN_ON
(
inode
->
i_state
&
I_WILL_FREE
);
...
...
fs/ntfs/file.c
View file @
ef0eaa13
...
...
@@ -668,10 +668,10 @@ static int ntfs_prepare_pages_for_non_resident_write(struct page **pages,
* to, we need to read it in before the write,
* i.e. now.
*/
if
(
!
buffer_uptodate
(
bh
)
&&
((
bh_pos
<
pos
&&
bh_end
>
pos
)
||
(
bh_
end
>
end
&&
bh_end
>
end
))
)
{
if
(
!
buffer_uptodate
(
bh
)
&&
bh_pos
<
end
&&
bh_end
>
pos
&&
(
bh_
pos
<
pos
||
bh_end
>
end
))
{
/*
* If the buffer is fully or partially
* within the initialized size, do an
...
...
@@ -784,10 +784,11 @@ static int ntfs_prepare_pages_for_non_resident_write(struct page **pages,
blocksize_bits
);
cdelta
=
0
;
/*
* If the number of remaining clusters in the
* @pages is smaller or equal to the number of
* cached clusters, unlock the runlist as the
* map cache will be used from now on.
* If the number of remaining clusters touched
* by the write is smaller or equal to the
* number of cached clusters, unlock the
* runlist as the map cache will be used from
* now on.
*/
if
(
likely
(
vcn
+
vcn_len
>=
cend
))
{
if
(
rl_write_locked
)
{
...
...
include/asm-i386/apic.h
View file @
ef0eaa13
...
...
@@ -118,8 +118,7 @@ extern void release_lapic_nmi(void);
extern
void
disable_timer_nmi_watchdog
(
void
);
extern
void
enable_timer_nmi_watchdog
(
void
);
extern
void
nmi_watchdog_tick
(
struct
pt_regs
*
regs
);
extern
int
APIC_init
(
void
);
extern
void
APIC_late_time_init
(
void
);
extern
int
APIC_init_uniprocessor
(
void
);
extern
void
disable_APIC_timer
(
void
);
extern
void
enable_APIC_timer
(
void
);
...
...
include/asm-i386/hw_irq.h
View file @
ef0eaa13
...
...
@@ -55,7 +55,6 @@ void init_8259A(int aeoi);
void
FASTCALL
(
send_IPI_self
(
int
vector
));
void
init_VISWS_APIC_irqs
(
void
);
void
setup_IO_APIC
(
void
);
void
IO_APIC_late_time_init
(
void
);
void
disable_IO_APIC
(
void
);
void
print_IO_APIC
(
void
);
int
IO_APIC_get_PCI_irq_vector
(
int
bus
,
int
slot
,
int
fn
);
...
...
include/asm-i386/mach-default/smpboot_hooks.h
View file @
ef0eaa13
/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws
* which needs to alter them. */
static
inline
void
smpboot_clear_io_apic_irqs
(
void
)
{
io_apic_irqs
=
0
;
}
static
inline
void
smpboot_setup_warm_reset_vector
(
unsigned
long
start_eip
)
{
CMOS_WRITE
(
0xa
,
0xf
);
...
...
@@ -27,3 +32,13 @@ static inline void smpboot_restore_warm_reset_vector(void)
*
((
volatile
long
*
)
phys_to_virt
(
0x467
))
=
0
;
}
static
inline
void
smpboot_setup_io_apic
(
void
)
{
/*
* Here we can be sure that there is an IO-APIC in the system. Let's
* go and set it up:
*/
if
(
!
skip_ioapic_setup
&&
nr_ioapics
)
setup_IO_APIC
();
}
include/asm-i386/mach-visws/smpboot_hooks.h
View file @
ef0eaa13
...
...
@@ -11,7 +11,14 @@ static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
/* for visws do nothing for any of these */
static
inline
void
smpboot_clear_io_apic_irqs
(
void
)
{
}
static
inline
void
smpboot_restore_warm_reset_vector
(
void
)
{
}
static
inline
void
smpboot_setup_io_apic
(
void
)
{
}
include/sound/emu10k1.h
View file @
ef0eaa13
...
...
@@ -1055,6 +1055,7 @@ typedef struct {
unsigned
char
emu10k2_chip
;
/* Audigy 1 or Audigy 2. */
unsigned
char
ca0102_chip
;
/* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */
unsigned
char
ca0108_chip
;
/* Audigy 2 Value */
unsigned
char
ca_cardbus_chip
;
/* Audigy 2 ZS Notebook */
unsigned
char
ca0151_chip
;
/* P16V */
unsigned
char
spk71
;
/* Has 7.1 speakers */
unsigned
char
sblive51
;
/* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
...
...
init/main.c
View file @
ef0eaa13
...
...
@@ -64,6 +64,10 @@
#endif
#endif
#ifdef CONFIG_X86_LOCAL_APIC
#include <asm/smp.h>
#endif
/*
* Versions of gcc older than that listed below may actually compile
* and link okay, but the end product can have subtle run time bugs.
...
...
@@ -310,7 +314,14 @@ extern void setup_arch(char **);
#ifndef CONFIG_SMP
#ifdef CONFIG_X86_LOCAL_APIC
static
void
__init
smp_init
(
void
)
{
APIC_init_uniprocessor
();
}
#else
#define smp_init() do { } while (0)
#endif
static
inline
void
setup_per_cpu_areas
(
void
)
{
}
static
inline
void
smp_prepare_cpus
(
unsigned
int
maxcpus
)
{
}
...
...
sound/pci/emu10k1/emu10k1_main.c
View file @
ef0eaa13
...
...
@@ -579,6 +579,30 @@ static int __devinit snd_emu10k1_ecard_init(emu10k1_t * emu)
return
0
;
}
static
int
__devinit
snd_emu10k1_cardbus_init
(
emu10k1_t
*
emu
)
{
unsigned
long
special_port
;
unsigned
int
value
;
/* Special initialisation routine
* before the rest of the IO-Ports become active.
*/
special_port
=
emu
->
port
+
0x38
;
value
=
inl
(
special_port
);
outl
(
0x00d00000
,
special_port
);
value
=
inl
(
special_port
);
outl
(
0x00d00001
,
special_port
);
value
=
inl
(
special_port
);
outl
(
0x00d0005f
,
special_port
);
value
=
inl
(
special_port
);
outl
(
0x00d0007f
,
special_port
);
value
=
inl
(
special_port
);
outl
(
0x0090007f
,
special_port
);
value
=
inl
(
special_port
);
return
0
;
}
/*
* Create the EMU10K1 instance
*/
...
...
@@ -624,6 +648,16 @@ static emu_chip_details_t emu_chip_details[] = {
.
ca0108_chip
=
1
,
.
spk71
=
1
,
.
ac97_chip
=
1
}
,
/* Audigy 2 ZS Notebook Cardbus card.*/
/* Tested by James@superbug.co.uk 30th October 2005 */
/* Not working yet, but progressing. */
{.
vendor
=
0x1102
,
.
device
=
0x0008
,
.
subsystem
=
0x20011102
,
.
driver
=
"Audigy2"
,
.
name
=
"Audigy 2 ZS Notebook [SB0530]"
,
.
id
=
"Audigy2"
,
.
emu10k2_chip
=
1
,
.
ca0108_chip
=
1
,
.
ca_cardbus_chip
=
1
,
.
spk71
=
1
}
,
{.
vendor
=
0x1102
,
.
device
=
0x0008
,
.
driver
=
"Audigy2"
,
.
name
=
"Audigy 2 Value [Unknown]"
,
.
id
=
"Audigy2"
,
...
...
@@ -1011,6 +1045,11 @@ int __devinit snd_emu10k1_create(snd_card_t * card,
snd_emu10k1_free
(
emu
);
return
err
;
}
}
else
if
(
emu
->
card_capabilities
->
ca_cardbus_chip
)
{
if
((
err
=
snd_emu10k1_cardbus_init
(
emu
))
<
0
)
{
snd_emu10k1_free
(
emu
);
return
err
;
}
}
else
{
/* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
does not support this, it shouldn't do any harm */
...
...
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