Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86, apic: merge genapic.h into apic.h

Impact: cleanup

Reduce the number of include files to worry about.
Also, most of the users of APIC facilities had to
include genapic.h already, which embedded apic.h,
so the distinction was meaningless.

[ include apic.h from genapic.h for compatibility. ]

Signed-off-by: Ingo Molnar <mingo@elte.hu>

+311 -317
+311 -5
arch/x86/include/asm/apic.h
··· 1 1 #ifndef _ASM_X86_APIC_H 2 2 #define _ASM_X86_APIC_H 3 3 4 - #include <linux/pm.h> 4 + #include <linux/cpumask.h> 5 5 #include <linux/delay.h> 6 + #include <linux/pm.h> 6 7 7 8 #include <asm/alternative.h> 8 - #include <asm/fixmap.h> 9 - #include <asm/apicdef.h> 10 - #include <asm/processor.h> 11 - #include <asm/system.h> 12 9 #include <asm/cpufeature.h> 10 + #include <asm/processor.h> 11 + #include <asm/apicdef.h> 12 + #include <asm/atomic.h> 13 + #include <asm/fixmap.h> 14 + #include <asm/mpspec.h> 15 + #include <asm/system.h> 13 16 #include <asm/msr.h> 14 17 15 18 #define ARCH_APICTIMER_STOPS_ON_C3 1 ··· 237 234 #else 238 235 239 236 #endif 237 + 238 + /* 239 + * Copyright 2004 James Cleverdon, IBM. 240 + * Subject to the GNU Public License, v.2 241 + * 242 + * Generic APIC sub-arch data struct. 243 + * 244 + * Hacked for x86-64 by James Cleverdon from i386 architecture code by 245 + * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and 246 + * James Cleverdon. 247 + */ 248 + struct genapic { 249 + char *name; 250 + 251 + int (*probe)(void); 252 + int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); 253 + int (*apic_id_registered)(void); 254 + 255 + u32 irq_delivery_mode; 256 + u32 irq_dest_mode; 257 + 258 + const struct cpumask *(*target_cpus)(void); 259 + 260 + int disable_esr; 261 + 262 + int dest_logical; 263 + unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid); 264 + unsigned long (*check_apicid_present)(int apicid); 265 + 266 + void (*vector_allocation_domain)(int cpu, struct cpumask *retmask); 267 + void (*init_apic_ldr)(void); 268 + 269 + physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); 270 + 271 + void (*setup_apic_routing)(void); 272 + int (*multi_timer_check)(int apic, int irq); 273 + int (*apicid_to_node)(int logical_apicid); 274 + int (*cpu_to_logical_apicid)(int cpu); 275 + int (*cpu_present_to_apicid)(int mps_cpu); 276 + physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); 277 + void (*setup_portio_remap)(void); 278 + int (*check_phys_apicid_present)(int boot_cpu_physical_apicid); 279 + void (*enable_apic_mode)(void); 280 + int (*phys_pkg_id)(int cpuid_apic, int index_msb); 281 + 282 + /* 283 + * When one of the next two hooks returns 1 the genapic 284 + * is switched to this. Essentially they are additional 285 + * probe functions: 286 + */ 287 + int (*mps_oem_check)(struct mpc_table *mpc, char *oem, char *productid); 288 + 289 + unsigned int (*get_apic_id)(unsigned long x); 290 + unsigned long (*set_apic_id)(unsigned int id); 291 + unsigned long apic_id_mask; 292 + 293 + unsigned int (*cpu_mask_to_apicid)(const struct cpumask *cpumask); 294 + unsigned int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask, 295 + const struct cpumask *andmask); 296 + 297 + /* ipi */ 298 + void (*send_IPI_mask)(const struct cpumask *mask, int vector); 299 + void (*send_IPI_mask_allbutself)(const struct cpumask *mask, 300 + int vector); 301 + void (*send_IPI_allbutself)(int vector); 302 + void (*send_IPI_all)(int vector); 303 + void (*send_IPI_self)(int vector); 304 + 305 + /* wakeup_secondary_cpu */ 306 + int (*wakeup_cpu)(int apicid, unsigned long start_eip); 307 + 308 + int trampoline_phys_low; 309 + int trampoline_phys_high; 310 + 311 + void (*wait_for_init_deassert)(atomic_t *deassert); 312 + void (*smp_callin_clear_local_apic)(void); 313 + void (*store_NMI_vector)(unsigned short *high, unsigned short *low); 314 + void (*inquire_remote_apic)(int apicid); 315 + 316 + /* apic ops */ 317 + u32 (*read)(u32 reg); 318 + void (*write)(u32 reg, u32 v); 319 + u64 (*icr_read)(void); 320 + void (*icr_write)(u32 low, u32 high); 321 + void (*wait_icr_idle)(void); 322 + u32 (*safe_wait_icr_idle)(void); 323 + }; 324 + 325 + extern struct genapic *apic; 326 + 327 + static inline u32 apic_read(u32 reg) 328 + { 329 + return apic->read(reg); 330 + } 331 + 332 + static inline void apic_write(u32 reg, u32 val) 333 + { 334 + apic->write(reg, val); 335 + } 336 + 337 + static inline u64 apic_icr_read(void) 338 + { 339 + return apic->icr_read(); 340 + } 341 + 342 + static inline void apic_icr_write(u32 low, u32 high) 343 + { 344 + apic->icr_write(low, high); 345 + } 346 + 347 + static inline void apic_wait_icr_idle(void) 348 + { 349 + apic->wait_icr_idle(); 350 + } 351 + 352 + static inline u32 safe_apic_wait_icr_idle(void) 353 + { 354 + return apic->safe_wait_icr_idle(); 355 + } 356 + 357 + 358 + static inline void ack_APIC_irq(void) 359 + { 360 + /* 361 + * ack_APIC_irq() actually gets compiled as a single instruction 362 + * ... yummie. 363 + */ 364 + 365 + /* Docs say use 0 for future compatibility */ 366 + apic_write(APIC_EOI, 0); 367 + } 368 + 369 + static inline unsigned default_get_apic_id(unsigned long x) 370 + { 371 + unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR)); 372 + 373 + if (APIC_XAPIC(ver)) 374 + return (x >> 24) & 0xFF; 375 + else 376 + return (x >> 24) & 0x0F; 377 + } 378 + 379 + /* 380 + * Warm reset vector default position: 381 + */ 382 + #define DEFAULT_TRAMPOLINE_PHYS_LOW 0x467 383 + #define DEFAULT_TRAMPOLINE_PHYS_HIGH 0x469 384 + 385 + #ifdef CONFIG_X86_32 386 + extern void es7000_update_genapic_to_cluster(void); 387 + #else 388 + extern struct genapic apic_flat; 389 + extern struct genapic apic_physflat; 390 + extern struct genapic apic_x2apic_cluster; 391 + extern struct genapic apic_x2apic_phys; 392 + extern int default_acpi_madt_oem_check(char *, char *); 393 + 394 + extern void apic_send_IPI_self(int vector); 395 + 396 + extern struct genapic apic_x2apic_uv_x; 397 + DECLARE_PER_CPU(int, x2apic_extra_bits); 398 + 399 + extern int default_cpu_present_to_apicid(int mps_cpu); 400 + extern int default_check_phys_apicid_present(int boot_cpu_physical_apicid); 401 + #endif 402 + 403 + static inline void default_wait_for_init_deassert(atomic_t *deassert) 404 + { 405 + while (!atomic_read(deassert)) 406 + cpu_relax(); 407 + return; 408 + } 409 + 410 + extern void generic_bigsmp_probe(void); 411 + 412 + 413 + #ifdef CONFIG_X86_LOCAL_APIC 414 + 415 + #include <asm/smp.h> 416 + 417 + #define APIC_DFR_VALUE (APIC_DFR_FLAT) 418 + 419 + static inline const struct cpumask *default_target_cpus(void) 420 + { 421 + #ifdef CONFIG_SMP 422 + return cpu_online_mask; 423 + #else 424 + return cpumask_of(0); 425 + #endif 426 + } 427 + 428 + DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); 429 + 430 + 431 + static inline unsigned int read_apic_id(void) 432 + { 433 + unsigned int reg; 434 + 435 + reg = apic_read(APIC_ID); 436 + 437 + return apic->get_apic_id(reg); 438 + } 439 + 440 + extern void default_setup_apic_routing(void); 441 + 442 + #ifdef CONFIG_X86_32 443 + /* 444 + * Set up the logical destination ID. 445 + * 446 + * Intel recommends to set DFR, LDR and TPR before enabling 447 + * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel 448 + * document number 292116). So here it goes... 449 + */ 450 + extern void default_init_apic_ldr(void); 451 + 452 + static inline int default_apic_id_registered(void) 453 + { 454 + return physid_isset(read_apic_id(), phys_cpu_present_map); 455 + } 456 + 457 + static inline unsigned int 458 + default_cpu_mask_to_apicid(const struct cpumask *cpumask) 459 + { 460 + return cpumask_bits(cpumask)[0]; 461 + } 462 + 463 + static inline unsigned int 464 + default_cpu_mask_to_apicid_and(const struct cpumask *cpumask, 465 + const struct cpumask *andmask) 466 + { 467 + unsigned long mask1 = cpumask_bits(cpumask)[0]; 468 + unsigned long mask2 = cpumask_bits(andmask)[0]; 469 + unsigned long mask3 = cpumask_bits(cpu_online_mask)[0]; 470 + 471 + return (unsigned int)(mask1 & mask2 & mask3); 472 + } 473 + 474 + static inline int default_phys_pkg_id(int cpuid_apic, int index_msb) 475 + { 476 + return cpuid_apic >> index_msb; 477 + } 478 + 479 + extern int default_apicid_to_node(int logical_apicid); 480 + 481 + #endif 482 + 483 + static inline unsigned long default_check_apicid_used(physid_mask_t bitmap, int apicid) 484 + { 485 + return physid_isset(apicid, bitmap); 486 + } 487 + 488 + static inline unsigned long default_check_apicid_present(int bit) 489 + { 490 + return physid_isset(bit, phys_cpu_present_map); 491 + } 492 + 493 + static inline physid_mask_t default_ioapic_phys_id_map(physid_mask_t phys_map) 494 + { 495 + return phys_map; 496 + } 497 + 498 + /* Mapping from cpu number to logical apicid */ 499 + static inline int default_cpu_to_logical_apicid(int cpu) 500 + { 501 + return 1 << cpu; 502 + } 503 + 504 + static inline int __default_cpu_present_to_apicid(int mps_cpu) 505 + { 506 + if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu)) 507 + return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu); 508 + else 509 + return BAD_APICID; 510 + } 511 + 512 + static inline int 513 + __default_check_phys_apicid_present(int boot_cpu_physical_apicid) 514 + { 515 + return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); 516 + } 517 + 518 + #ifdef CONFIG_X86_32 519 + static inline int default_cpu_present_to_apicid(int mps_cpu) 520 + { 521 + return __default_cpu_present_to_apicid(mps_cpu); 522 + } 523 + 524 + static inline int 525 + default_check_phys_apicid_present(int boot_cpu_physical_apicid) 526 + { 527 + return __default_check_phys_apicid_present(boot_cpu_physical_apicid); 528 + } 529 + #else 530 + extern int default_cpu_present_to_apicid(int mps_cpu); 531 + extern int default_check_phys_apicid_present(int boot_cpu_physical_apicid); 532 + #endif 533 + 534 + static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) 535 + { 536 + return physid_mask_of_physid(phys_apicid); 537 + } 538 + 539 + #endif /* CONFIG_X86_LOCAL_APIC */ 240 540 241 541 #endif /* _ASM_X86_APIC_H */
-312
arch/x86/include/asm/genapic.h
··· 1 - #ifndef _ASM_X86_GENAPIC_H 2 - #define _ASM_X86_GENAPIC_H 3 - 4 - #include <linux/cpumask.h> 5 - 6 - #include <asm/mpspec.h> 7 - #include <asm/atomic.h> 8 1 #include <asm/apic.h> 9 - 10 - /* 11 - * Copyright 2004 James Cleverdon, IBM. 12 - * Subject to the GNU Public License, v.2 13 - * 14 - * Generic APIC sub-arch data struct. 15 - * 16 - * Hacked for x86-64 by James Cleverdon from i386 architecture code by 17 - * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and 18 - * James Cleverdon. 19 - */ 20 - struct genapic { 21 - char *name; 22 - 23 - int (*probe)(void); 24 - int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); 25 - int (*apic_id_registered)(void); 26 - 27 - u32 irq_delivery_mode; 28 - u32 irq_dest_mode; 29 - 30 - const struct cpumask *(*target_cpus)(void); 31 - 32 - int disable_esr; 33 - 34 - int dest_logical; 35 - unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid); 36 - unsigned long (*check_apicid_present)(int apicid); 37 - 38 - void (*vector_allocation_domain)(int cpu, struct cpumask *retmask); 39 - void (*init_apic_ldr)(void); 40 - 41 - physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); 42 - 43 - void (*setup_apic_routing)(void); 44 - int (*multi_timer_check)(int apic, int irq); 45 - int (*apicid_to_node)(int logical_apicid); 46 - int (*cpu_to_logical_apicid)(int cpu); 47 - int (*cpu_present_to_apicid)(int mps_cpu); 48 - physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); 49 - void (*setup_portio_remap)(void); 50 - int (*check_phys_apicid_present)(int boot_cpu_physical_apicid); 51 - void (*enable_apic_mode)(void); 52 - int (*phys_pkg_id)(int cpuid_apic, int index_msb); 53 - 54 - /* 55 - * When one of the next two hooks returns 1 the genapic 56 - * is switched to this. Essentially they are additional 57 - * probe functions: 58 - */ 59 - int (*mps_oem_check)(struct mpc_table *mpc, char *oem, char *productid); 60 - 61 - unsigned int (*get_apic_id)(unsigned long x); 62 - unsigned long (*set_apic_id)(unsigned int id); 63 - unsigned long apic_id_mask; 64 - 65 - unsigned int (*cpu_mask_to_apicid)(const struct cpumask *cpumask); 66 - unsigned int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask, 67 - const struct cpumask *andmask); 68 - 69 - /* ipi */ 70 - void (*send_IPI_mask)(const struct cpumask *mask, int vector); 71 - void (*send_IPI_mask_allbutself)(const struct cpumask *mask, 72 - int vector); 73 - void (*send_IPI_allbutself)(int vector); 74 - void (*send_IPI_all)(int vector); 75 - void (*send_IPI_self)(int vector); 76 - 77 - /* wakeup_secondary_cpu */ 78 - int (*wakeup_cpu)(int apicid, unsigned long start_eip); 79 - 80 - int trampoline_phys_low; 81 - int trampoline_phys_high; 82 - 83 - void (*wait_for_init_deassert)(atomic_t *deassert); 84 - void (*smp_callin_clear_local_apic)(void); 85 - void (*store_NMI_vector)(unsigned short *high, unsigned short *low); 86 - void (*inquire_remote_apic)(int apicid); 87 - 88 - /* apic ops */ 89 - u32 (*read)(u32 reg); 90 - void (*write)(u32 reg, u32 v); 91 - u64 (*icr_read)(void); 92 - void (*icr_write)(u32 low, u32 high); 93 - void (*wait_icr_idle)(void); 94 - u32 (*safe_wait_icr_idle)(void); 95 - }; 96 - 97 - extern struct genapic *apic; 98 - 99 - static inline u32 apic_read(u32 reg) 100 - { 101 - return apic->read(reg); 102 - } 103 - 104 - static inline void apic_write(u32 reg, u32 val) 105 - { 106 - apic->write(reg, val); 107 - } 108 - 109 - static inline u64 apic_icr_read(void) 110 - { 111 - return apic->icr_read(); 112 - } 113 - 114 - static inline void apic_icr_write(u32 low, u32 high) 115 - { 116 - apic->icr_write(low, high); 117 - } 118 - 119 - static inline void apic_wait_icr_idle(void) 120 - { 121 - apic->wait_icr_idle(); 122 - } 123 - 124 - static inline u32 safe_apic_wait_icr_idle(void) 125 - { 126 - return apic->safe_wait_icr_idle(); 127 - } 128 - 129 - 130 - static inline void ack_APIC_irq(void) 131 - { 132 - /* 133 - * ack_APIC_irq() actually gets compiled as a single instruction 134 - * ... yummie. 135 - */ 136 - 137 - /* Docs say use 0 for future compatibility */ 138 - apic_write(APIC_EOI, 0); 139 - } 140 - 141 - static inline unsigned default_get_apic_id(unsigned long x) 142 - { 143 - unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR)); 144 - 145 - if (APIC_XAPIC(ver)) 146 - return (x >> 24) & 0xFF; 147 - else 148 - return (x >> 24) & 0x0F; 149 - } 150 - 151 - /* 152 - * Warm reset vector default position: 153 - */ 154 - #define DEFAULT_TRAMPOLINE_PHYS_LOW 0x467 155 - #define DEFAULT_TRAMPOLINE_PHYS_HIGH 0x469 156 - 157 - #ifdef CONFIG_X86_32 158 - extern void es7000_update_genapic_to_cluster(void); 159 - #else 160 - extern struct genapic apic_flat; 161 - extern struct genapic apic_physflat; 162 - extern struct genapic apic_x2apic_cluster; 163 - extern struct genapic apic_x2apic_phys; 164 - extern int default_acpi_madt_oem_check(char *, char *); 165 - 166 - extern void apic_send_IPI_self(int vector); 167 - 168 - extern struct genapic apic_x2apic_uv_x; 169 - DECLARE_PER_CPU(int, x2apic_extra_bits); 170 - 171 - extern int default_cpu_present_to_apicid(int mps_cpu); 172 - extern int default_check_phys_apicid_present(int boot_cpu_physical_apicid); 173 - #endif 174 - 175 - static inline void default_wait_for_init_deassert(atomic_t *deassert) 176 - { 177 - while (!atomic_read(deassert)) 178 - cpu_relax(); 179 - return; 180 - } 181 - 182 - extern void generic_bigsmp_probe(void); 183 - 184 - 185 - #ifdef CONFIG_X86_LOCAL_APIC 186 - 187 - #include <asm/smp.h> 188 - 189 - #define APIC_DFR_VALUE (APIC_DFR_FLAT) 190 - 191 - static inline const struct cpumask *default_target_cpus(void) 192 - { 193 - #ifdef CONFIG_SMP 194 - return cpu_online_mask; 195 - #else 196 - return cpumask_of(0); 197 - #endif 198 - } 199 - 200 - DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); 201 - 202 - 203 - static inline unsigned int read_apic_id(void) 204 - { 205 - unsigned int reg; 206 - 207 - reg = apic_read(APIC_ID); 208 - 209 - return apic->get_apic_id(reg); 210 - } 211 - 212 - extern void default_setup_apic_routing(void); 213 - 214 - #ifdef CONFIG_X86_32 215 - /* 216 - * Set up the logical destination ID. 217 - * 218 - * Intel recommends to set DFR, LDR and TPR before enabling 219 - * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel 220 - * document number 292116). So here it goes... 221 - */ 222 - extern void default_init_apic_ldr(void); 223 - 224 - static inline int default_apic_id_registered(void) 225 - { 226 - return physid_isset(read_apic_id(), phys_cpu_present_map); 227 - } 228 - 229 - static inline unsigned int 230 - default_cpu_mask_to_apicid(const struct cpumask *cpumask) 231 - { 232 - return cpumask_bits(cpumask)[0]; 233 - } 234 - 235 - static inline unsigned int 236 - default_cpu_mask_to_apicid_and(const struct cpumask *cpumask, 237 - const struct cpumask *andmask) 238 - { 239 - unsigned long mask1 = cpumask_bits(cpumask)[0]; 240 - unsigned long mask2 = cpumask_bits(andmask)[0]; 241 - unsigned long mask3 = cpumask_bits(cpu_online_mask)[0]; 242 - 243 - return (unsigned int)(mask1 & mask2 & mask3); 244 - } 245 - 246 - static inline int default_phys_pkg_id(int cpuid_apic, int index_msb) 247 - { 248 - return cpuid_apic >> index_msb; 249 - } 250 - 251 - extern int default_apicid_to_node(int logical_apicid); 252 - 253 - #endif 254 - 255 - static inline unsigned long default_check_apicid_used(physid_mask_t bitmap, int apicid) 256 - { 257 - return physid_isset(apicid, bitmap); 258 - } 259 - 260 - static inline unsigned long default_check_apicid_present(int bit) 261 - { 262 - return physid_isset(bit, phys_cpu_present_map); 263 - } 264 - 265 - static inline physid_mask_t default_ioapic_phys_id_map(physid_mask_t phys_map) 266 - { 267 - return phys_map; 268 - } 269 - 270 - /* Mapping from cpu number to logical apicid */ 271 - static inline int default_cpu_to_logical_apicid(int cpu) 272 - { 273 - return 1 << cpu; 274 - } 275 - 276 - static inline int __default_cpu_present_to_apicid(int mps_cpu) 277 - { 278 - if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu)) 279 - return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu); 280 - else 281 - return BAD_APICID; 282 - } 283 - 284 - static inline int 285 - __default_check_phys_apicid_present(int boot_cpu_physical_apicid) 286 - { 287 - return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); 288 - } 289 - 290 - #ifdef CONFIG_X86_32 291 - static inline int default_cpu_present_to_apicid(int mps_cpu) 292 - { 293 - return __default_cpu_present_to_apicid(mps_cpu); 294 - } 295 - 296 - static inline int 297 - default_check_phys_apicid_present(int boot_cpu_physical_apicid) 298 - { 299 - return __default_check_phys_apicid_present(boot_cpu_physical_apicid); 300 - } 301 - #else 302 - extern int default_cpu_present_to_apicid(int mps_cpu); 303 - extern int default_check_phys_apicid_present(int boot_cpu_physical_apicid); 304 - #endif 305 - 306 - static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) 307 - { 308 - return physid_mask_of_physid(phys_apicid); 309 - } 310 - 311 - #endif /* CONFIG_X86_LOCAL_APIC */ 312 - 313 - #endif /* _ASM_X86_GENAPIC_64_H */