valid flag is added
This commit is contained in:
@ -50,8 +50,9 @@ struct ikc_scd_init_param {
|
||||
};
|
||||
|
||||
struct syscall_request {
|
||||
unsigned long valid;
|
||||
unsigned long number;
|
||||
unsigned long args[5];
|
||||
unsigned long args[6];
|
||||
};
|
||||
|
||||
struct syscall_response {
|
||||
|
||||
@ -29,6 +29,7 @@ static void send_syscall(struct syscall_request *req)
|
||||
|
||||
memcpy_async_wait(&fin);
|
||||
|
||||
cpu_local_var(scp).request_va->valid = 1;
|
||||
*(unsigned int *)cpu_local_var(scp).doorbell_va = 1;
|
||||
|
||||
#ifdef SYSCALL_BY_IKC
|
||||
@ -68,6 +69,7 @@ long sys_brk(int n, aal_mc_user_context_t *ctx)
|
||||
|
||||
#define SYSCALL_DECLARE(name) long sys_##name(int n, aal_mc_user_context_t *ctx)
|
||||
#define SYSCALL_HEADER struct syscall_request request; \
|
||||
request.valid = 0; \
|
||||
request.number = n
|
||||
#define SYSCALL_ARG_D(n) request.args[n] = aal_mc_syscall_arg##n(ctx)
|
||||
#define SYSCALL_ARG_MO(n) \
|
||||
|
||||
@ -35,8 +35,9 @@ struct program_load_desc {
|
||||
};
|
||||
|
||||
struct syscall_request {
|
||||
unsigned long valid;
|
||||
unsigned long number;
|
||||
unsigned long args[5];
|
||||
unsigned long args[6];
|
||||
};
|
||||
|
||||
struct syscall_wait_desc {
|
||||
|
||||
@ -54,6 +54,9 @@ int mcctrl_ikc_set_recv_cpu(int cpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned long *mcctrl_doorbell_va;
|
||||
unsigned long mcctrl_doorbell_pa;
|
||||
|
||||
static void mcctrl_ikc_init(aal_os_t os, int cpu, unsigned long rphys)
|
||||
{
|
||||
struct ikc_scd_packet packet;
|
||||
@ -71,8 +74,8 @@ static void mcctrl_ikc_init(aal_os_t os, int cpu, unsigned long rphys)
|
||||
|
||||
pmc->param.request_va = (void *)__get_free_pages(GFP_KERNEL, 4);
|
||||
pmc->param.request_pa = virt_to_phys(pmc->param.request_va);
|
||||
pmc->param.doorbell_va = (void *)__get_free_page(GFP_KERNEL);
|
||||
pmc->param.doorbell_pa = virt_to_phys(pmc->param.doorbell_va);
|
||||
pmc->param.doorbell_va = mcctrl_doorbell_va;
|
||||
pmc->param.doorbell_pa = mcctrl_doorbell_pa;
|
||||
pmc->param.post_va = (void *)__get_free_page(GFP_KERNEL);
|
||||
pmc->param.post_pa = virt_to_phys(pmc->param.post_va);
|
||||
memset(pmc->param.doorbell_va, 0, PAGE_SIZE);
|
||||
@ -97,6 +100,10 @@ static void mcctrl_ikc_init(aal_os_t os, int cpu, unsigned long rphys)
|
||||
packet.ref = cpu;
|
||||
packet.arg = rphys;
|
||||
|
||||
printk("Request: %lx, Response: %lx, Doorbell: %lx\n",
|
||||
pmc->param.request_pa, pmc->param.response_rpa,
|
||||
pmc->param.doorbell_pa);
|
||||
|
||||
aal_ikc_send(pmc->c, &packet, 0);
|
||||
|
||||
iounmap(rpm);
|
||||
@ -138,6 +145,9 @@ int prepare_ikc_channels(aal_os_t os)
|
||||
{
|
||||
struct aal_cpu_info *info;
|
||||
|
||||
mcctrl_doorbell_va = (void *)__get_free_page(GFP_KERNEL);
|
||||
mcctrl_doorbell_pa = virt_to_phys(mcctrl_doorbell_va);
|
||||
|
||||
info = aal_os_get_cpu_info(os);
|
||||
if (!info) {
|
||||
printk("Error: cannot retrieve CPU info.\n");
|
||||
|
||||
Reference in New Issue
Block a user