OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [linux/] [ipc.c] - Rev 158

Go to most recent revision | Compare with Previous | Blame | View Log

/* libc/sys/linux/ipc.c - IPC semaphore and message queue functions */
 
/* Copyright 2002, Red Hat Inc. */
 
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <stdarg.h>
 
#include <machine/syscall.h>
 
#define IPC_64 0x100
 
#define IPCOP_semop	1
#define IPCOP_semget	2
#define IPCOP_semctl	3
#define IPCOP_msgsnd	11
#define IPCOP_msgrcv	12
#define IPCOP_msgget	13
#define IPCOP_msgctl	14
 
static _syscall5(int,ipc,int,op,int,arg1,int,arg2,int,arg3,void *,arg4);
 
int
semget (key_t key, int nsems, int semflgs)
{
  return __libc_ipc(IPCOP_semget, (int)key, nsems, semflgs, NULL);
}
 
int
semctl (int semid, int semnum, int cmd, ...)
{
  va_list va;
  union semun {
    int val;
    struct semid_ds *buf;
    unsigned short  *array;
  } arg;
 
  va_start (va, cmd);
 
  arg = va_arg (va, union semun);
 
  va_end (va);
 
  return __libc_ipc(IPCOP_semctl, semid, semnum, cmd | IPC_64, &arg);
}
 
int
semop (int semid, struct sembuf *sops, size_t nsems)
{
  return __libc_ipc(IPCOP_semop, semid, (int)nsems, 0, sops);
}
 
int
msgget (key_t key, int msgflg)
{
  return __libc_ipc(IPCOP_msgget, (int)key, msgflg, 0, NULL);
}
 
int
msgctl (int msqid, int cmd, struct msqid_ds *buf)
{
  return __libc_ipc(IPCOP_msgctl, msqid, cmd | IPC_64, 0, buf);
}
 
int
msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
{
  return __libc_ipc(IPCOP_msgsnd, msqid, (int)msgsz, msgflg, (void *)msgp);
}
 
int
msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
{
  /* last argument must contain multiple args */
  struct {
    void *msgp;
    long int msgtyp;
  } args;
 
  args.msgp = msgp;
  args.msgtyp = msgtyp;
 
  return (ssize_t)__libc_ipc(IPCOP_msgrcv, msqid, (int)msgsz, msgflg, &args);
}
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.