Mercurial > hg > Game > Atoc
view tests/004_090809/004.c @ 0:42f240cc4bc6
From: 太田 篤志 <atoc@namikilab.tuat.ac.jp>
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Sep 2009 13:44:18 +0900 |
parents | |
children |
line wrap: on
line source
#include <stdio.h> #include <stdint.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <memory.h> #include "../../include/ioctl.h" #include "../../include/spe_process.h" uint64_t hoge[4] __attribute__((aligned(128))) = { 0x5c812625b0c98a84UL, 0xb0589ae8e319ca7bUL, 0xc797c3af5d2807eaUL, 0x7df3ed18fa5dc081UL }; volatile unsigned char a[1024] __attribute__((aligned(128))); int main(int argc, char *argv[]) { int fd; fd = open("/dev/spe_manager", O_RDWR); printf("fd: %d\n", fd); int fd_mmap; fd_mmap = open("./004", O_RDONLY); printf("fd_mmap: %d\n", fd_mmap); volatile void *mapped = mmap(NULL, 1024, PROT_READ, MAP_SHARED, fd_mmap, 0); printf("ADDR(mapped): 0x%016lx\n", (uint64_t)mapped); printf("ADDR(mapped): 0x%016lx\n", (uint64_t)a); memcpy(a, mapped, 1024); spe_process_context_write_data_t spe_write = { 0 }; // spe_write.pid = (int32_t)getpid(); spe_write.pgm_start = (uint64_t)a; spe_write.pgm_size = 1024; spe_write.arg = 0x5c812625b0c98a84UL; spe_process_context_read_data_t spe_read; lseek(fd, 0, SEEK_SET); write(fd, &spe_write, sizeof(spe_write)); ioctl(fd, SPE_MANAGER_IOCTL_START_PROCESS); do { lseek(fd, 0, SEEK_SET); read(fd, &spe_read, sizeof(spe_read)); } while (spe_read.status != SPE_PROCESS_CONTEXT_STATUS_NOT_RELEASED); printf("spe_read.ret: 0x%016lx\n", spe_read.ret); close(fd_mmap); close(fd); return 0; }