Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
mariux64
/
linux
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
2
Pull requests
0
Actions
Projects
0
Wiki
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security
Insights
Files
f9fc589
Documentation
arch
alpha
arm
avr32
blackfin
cris
frv
h8300
ia64
m32r
m68k
m68knommu
mips
parisc
powerpc
ppc
s390
sh
sparc
sparc64
um
v850
x86
boot
configs
crypto
ia32
kernel
acpi
cpu
.gitignore
Makefile
Makefile_32
Makefile_64
alternative.c
aperture_64.c
apic_32.c
apic_64.c
apm_32.c
asm-offsets.c
asm-offsets_32.c
asm-offsets_64.c
audit_64.c
bootflag.c
bugs_64.c
cpuid.c
crash.c
crash_dump_32.c
crash_dump_64.c
doublefault_32.c
e820_32.c
e820_64.c
early-quirks.c
early_printk.c
efi_32.c
efi_stub_32.S
entry_32.S
entry_64.S
genapic_64.c
genapic_flat_64.c
geode_32.c
head64.c
head_32.S
head_64.S
hpet.c
i386_ksyms_32.c
i387_32.c
i387_64.c
i8237.c
i8253.c
i8259_32.c
i8259_64.c
init_task.c
io_apic_32.c
io_apic_64.c
io_delay.c
ioport_32.c
ioport_64.c
irq_32.c
irq_64.c
k8.c
kprobes_32.c
kprobes_64.c
ldt_32.c
ldt_64.c
machine_kexec_32.c
machine_kexec_64.c
mca_32.c
mfgpt_32.c
microcode.c
module_32.c
module_64.c
mpparse_32.c
mpparse_64.c
msr.c
nmi_32.c
nmi_64.c
numaq_32.c
paravirt_32.c
pci-calgary_64.c
pci-dma_32.c
pci-dma_64.c
pci-gart_64.c
pci-nommu_64.c
pci-swiotlb_64.c
pcspeaker.c
pmtimer_64.c
process_32.c
process_64.c
ptrace_32.c
ptrace_64.c
quirks.c
reboot_32.c
reboot_64.c
reboot_fixups_32.c
relocate_kernel_32.S
relocate_kernel_64.S
scx200_32.c
setup64.c
setup_32.c
setup_64.c
sigframe_32.h
signal_32.c
signal_64.c
smp_32.c
smp_64.c
smpboot_32.c
smpboot_64.c
smpcommon_32.c
srat_32.c
stacktrace.c
summit_32.c
suspend_64.c
suspend_asm_64.S
sys_i386_32.c
sys_x86_64.c
syscall_64.c
syscall_table_32.S
sysenter_32.c
tce_64.c
time_32.c
time_64.c
topology.c
trampoline_32.S
trampoline_64.S
traps_32.c
traps_64.c
tsc_32.c
tsc_64.c
tsc_sync.c
verify_cpu_64.S
vm86_32.c
vmi_32.c
vmiclock_32.c
vmlinux.lds.S
vmlinux_32.lds.S
vmlinux_64.lds.S
vsmp_64.c
vsyscall-int80_32.S
vsyscall-note_32.S
vsyscall-sigreturn_32.S
vsyscall-sysenter_32.S
vsyscall_32.S
vsyscall_32.lds.S
vsyscall_64.c
x8664_ksyms_64.c
lguest
lib
mach-default
mach-es7000
mach-generic
mach-visws
mach-voyager
math-emu
mm
oprofile
pci
power
vdso
video
xen
Kconfig
Kconfig.cpu
Kconfig.debug
Makefile
Makefile_32
Makefile_32.cpu
Makefile_64
xtensa
.gitignore
block
crypto
drivers
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
usr
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
MAINTAINERS
Makefile
README
REPORTING-BUGS
Breadcrumbs
linux
/
arch
/
x86
/
kernel
/
io_delay.c
Copy path
Blame
Blame
Latest commit
History
History
114 lines (104 loc) · 2.65 KB
Breadcrumbs
linux
/
arch
/
x86
/
kernel
/
io_delay.c
Top
File metadata and controls
Code
Blame
114 lines (104 loc) · 2.65 KB
Raw
/* * I/O delay strategies for inb_p/outb_p * * Allow for a DMI based override of port 0x80, needed for certain HP laptops * and possibly other systems. Also allow for the gradual elimination of * outb_p/inb_p API uses. */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/dmi.h> #include <asm/io.h> int io_delay_type __read_mostly = CONFIG_DEFAULT_IO_DELAY_TYPE; EXPORT_SYMBOL_GPL(io_delay_type); static int __initdata io_delay_override; /* * Paravirt wants native_io_delay to be a constant. */ void native_io_delay(void) { switch (io_delay_type) { default: case CONFIG_IO_DELAY_TYPE_0X80: asm volatile ("outb %al, $0x80"); break; case CONFIG_IO_DELAY_TYPE_0XED: asm volatile ("outb %al, $0xed"); break; case CONFIG_IO_DELAY_TYPE_UDELAY: /* * 2 usecs is an upper-bound for the outb delay but * note that udelay doesn't have the bus-level * side-effects that outb does, nor does udelay() have * precise timings during very early bootup (the delays * are shorter until calibrated): */ udelay(2); case CONFIG_IO_DELAY_TYPE_NONE: break; } } EXPORT_SYMBOL(native_io_delay); static int __init dmi_io_delay_0xed_port(const struct dmi_system_id *id) { if (io_delay_type == CONFIG_IO_DELAY_TYPE_0X80) { printk(KERN_NOTICE "%s: using 0xed I/O delay port\n", id->ident); io_delay_type = CONFIG_IO_DELAY_TYPE_0XED; } return 0; } /* * Quirk table for systems that misbehave (lock up, etc.) if port * 0x80 is used: */ static struct dmi_system_id __initdata io_delay_0xed_port_dmi_table[] = { { .callback = dmi_io_delay_0xed_port, .ident = "Compaq Presario V6000", .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), DMI_MATCH(DMI_BOARD_NAME, "30B7") } }, { .callback = dmi_io_delay_0xed_port, .ident = "HP Pavilion dv9000z", .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), DMI_MATCH(DMI_BOARD_NAME, "30B9") } }, { .callback = dmi_io_delay_0xed_port, .ident = "HP Pavilion tx1000", .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), DMI_MATCH(DMI_BOARD_NAME, "30BF") } }, { } }; void __init io_delay_init(void) { if (!io_delay_override) dmi_check_system(io_delay_0xed_port_dmi_table); } static int __init io_delay_param(char *s) { if (!strcmp(s, "0x80")) io_delay_type = CONFIG_IO_DELAY_TYPE_0X80; else if (!strcmp(s, "0xed")) io_delay_type = CONFIG_IO_DELAY_TYPE_0XED; else if (!strcmp(s, "udelay")) io_delay_type = CONFIG_IO_DELAY_TYPE_UDELAY; else if (!strcmp(s, "none")) io_delay_type = CONFIG_IO_DELAY_TYPE_NONE; else return -EINVAL; io_delay_override = 1; return 0; } early_param("io_delay", io_delay_param);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
You can’t perform that action at this time.