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