39 #include <sys/ioctl.h> 40 #include <sys/sysmacros.h> 46 void *
mapmem(uint32_t base, uint32_t size,
const char *mem_dev) {
47 uint32_t pagemask = ~0UL ^ (getpagesize() - 1);
48 uint32_t offsetmask = getpagesize() - 1;
52 mem_fd = open(mem_dev, O_RDWR | O_SYNC);
54 perror(
"Can't open /dev/mem");
58 mem = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, base & pagemask);
59 if (mem == MAP_FAILED) {
60 perror(
"mmap error\n");
66 return (
char *)mem + (base & offsetmask);
70 uint32_t pagemask = ~0UL ^ (getpagesize() - 1);
71 uintptr_t baseaddr = (uintptr_t)addr & pagemask;
74 s = munmap((
void *)baseaddr, size);
76 perror(
"munmap error\n");
98 perror(
"ioctl_set_msg failed\n");
109 uint32_t
mem_alloc(
int file_desc, uint32_t size, uint32_t align, uint32_t flags) {
132 uint32_t
mem_free(
int file_desc, uint32_t handle) {
152 uint32_t
mem_lock(
int file_desc, uint32_t handle) {
186 p[0] = i *
sizeof(*p);
193 uint32_t
execute_code(
int file_desc, uint32_t code, uint32_t r0, uint32_t r1,
194 uint32_t r2, uint32_t r3, uint32_t r4, uint32_t r5) {
213 p[0] = i *
sizeof(*p);
233 p[0] = i *
sizeof(*p);
240 uint32_t
execute_qpu(
int file_desc, uint32_t num_qpus, uint32_t control,
241 uint32_t noflush, uint32_t timeout) {
256 p[0] = i *
sizeof(*p);
267 file_desc = open(
"/dev/vcio", 0);
268 if (file_desc >= 0) {
273 sprintf(filename,
"/tmp/mailbox-%d", getpid());
275 if (mknod(filename, S_IFCHR|0600, makedev(100, 0)) < 0) {
276 perror(
"Failed to create mailbox device\n");
279 file_desc = open(filename, 0);
281 perror(
"Can't open device file\n");
void mbox_close(int file_desc)
uint32_t mem_lock(int file_desc, uint32_t handle)
static int mbox_property(int file_desc, void *buf)
#define IOCTL_MBOX_PROPERTY
void * mapmem(uint32_t base, uint32_t size, const char *mem_dev)
void * unmapmem(void *addr, uint32_t size)
uint32_t mem_alloc(int file_desc, uint32_t size, uint32_t align, uint32_t flags)
uint32_t execute_code(int file_desc, uint32_t code, uint32_t r0, uint32_t r1, uint32_t r2, uint32_t r3, uint32_t r4, uint32_t r5)
uint32_t mem_unlock(int file_desc, uint32_t handle)
uint32_t execute_qpu(int file_desc, uint32_t num_qpus, uint32_t control, uint32_t noflush, uint32_t timeout)
uint32_t qpu_enable(int file_desc, uint32_t enable)
uint32_t mem_free(int file_desc, uint32_t handle)