9 enum Message { Request = 'r', Global_request = 'g', Debug = 'd' };
12 //---------------------------------------------------------------------------
15 //---------------------------------------------------------------------------
24 Ipi::Ipi() : _lcpu(~0)
31 _lcpu = current_cpu();
32 Pic::setup_ipi(_lcpu, Cpu::cpus.cpu(_lcpu).phys_id());
35 PUBLIC static inline NEEDS[<cstdio>]
41 PUBLIC static inline NEEDS[<cstdio>, "pic.h"]
43 Ipi::send(Message m, unsigned from_cpu, unsigned to_cpu)
45 printf("Sending IPI:%d to cpu%d\n", m, _lcpu);
46 Pic::send_ipi(_lcpu, m);
49 PUBLIC static inline NEEDS[<cstdio>, "cpu.h", "pic.h"]
51 Ipi::bcast(Message m, unsigned from_cpu)
53 printf("Bcast IPI:%d\n", m);
54 for (unsigned i = 0; i < Config::Max_num_cpus; ++i)
61 Ipi::gate(unsigned char data)
63 Message m = (Message)data;
67 case Global_request: return APIC_IRQ_BASE + 2;
68 case Request: return APIC_IRQ_BASE - 1;
69 case Debug: return APIC_IRQ_BASE - 2;
71 printf("Unknown request: %c(%d)\n", m, m);