14 #include <linux/errno.h>
17 #include <linux/string.h>
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/ctype.h>
41 id = ((x >> 24) & 0xffU) | ((value << 2) & 0x3f00U);
50 x = ((
id & 0xff
U) << 24);
54 static unsigned int read_xapic_id(
void)
59 static int numachip_apic_id_valid(
int apicid)
65 static int numachip_apic_id_registered(
void)
70 static int numachip_phys_pkg_id(
int initial_apic_id,
int index_msb)
72 return initial_apic_id >> index_msb;
75 static int __cpuinit numachip_wakeup_secondary(
int phys_apicid,
unsigned long start_rip)
79 int_gen.
s._destination_apic_id = phys_apicid;
80 int_gen.s._vector = 0;
87 int_gen.s._vector = start_rip >> 12;
95 static void numachip_send_IPI_one(
int cpu,
int vector)
100 int_gen.s._destination_apic_id =
apicid;
101 int_gen.s._vector =
vector;
103 int_gen.s._index = 0;
113 numachip_send_IPI_one(cpu, vector);
124 numachip_send_IPI_one(cpu, vector);
128 static void numachip_send_IPI_allbutself(
int vector)
135 numachip_send_IPI_one(cpu, vector);
139 static void numachip_send_IPI_all(
int vector)
141 numachip_send_IPI_mask(cpu_online_mask, vector);
144 static void numachip_send_IPI_self(
int vector)
149 static int __init numachip_probe(
void)
151 return apic == &apic_numachip;
154 static void __init map_csrs(
void)
156 printk(
KERN_INFO "NumaChip: Mapping local CSR space (%016llx - %016llx)\n",
160 printk(
KERN_INFO "NumaChip: Mapping global CSR space (%016llx - %016llx)\n",
174 static int __init numachip_system_init(
void)
178 if (!numachip_system)
192 static int numachip_acpi_madt_oem_check(
char *
oem_id,
char *oem_table_id)
194 if (!
strncmp(oem_id,
"NUMASC", 6)) {
204 .name =
"NumaConnect system",
205 .probe = numachip_probe,
206 .acpi_madt_oem_check = numachip_acpi_madt_oem_check,
207 .apic_id_valid = numachip_apic_id_valid,
208 .apic_id_registered = numachip_apic_id_registered,
213 .target_cpus = online_target_cpus,
216 .check_apicid_used =
NULL,
217 .check_apicid_present =
NULL,
219 .vector_allocation_domain = default_vector_allocation_domain,
222 .ioapic_phys_id_map =
NULL,
223 .setup_apic_routing =
NULL,
224 .multi_timer_check =
NULL,
225 .cpu_present_to_apicid = default_cpu_present_to_apicid,
226 .apicid_to_cpu_present =
NULL,
227 .setup_portio_remap =
NULL,
228 .check_phys_apicid_present = default_check_phys_apicid_present,
229 .enable_apic_mode =
NULL,
230 .phys_pkg_id = numachip_phys_pkg_id,
231 .mps_oem_check =
NULL,
235 .apic_id_mask = 0xff
U << 24,
239 .send_IPI_mask = numachip_send_IPI_mask,
240 .send_IPI_mask_allbutself = numachip_send_IPI_mask_allbutself,
241 .send_IPI_allbutself = numachip_send_IPI_allbutself,
242 .send_IPI_all = numachip_send_IPI_all,
243 .send_IPI_self = numachip_send_IPI_self,
245 .wakeup_secondary_cpu = numachip_wakeup_secondary,
248 .wait_for_init_deassert =
NULL,
249 .smp_callin_clear_local_apic =
NULL,
250 .inquire_remote_apic =
NULL,
252 .read = native_apic_mem_read,
253 .write = native_apic_mem_write,
254 .eoi_write = native_apic_mem_write,