valid flag is added

This commit is contained in:
Taku Shimosawa
2011-12-02 13:19:44 +09:00
parent 7999653a00
commit e42395e42a
4 changed files with 18 additions and 4 deletions

View File

@ -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 {

View File

@ -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) \

View File

@ -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 {

View File

@ -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");