Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6bbc5de authored by Gustavo Padovan's avatar Gustavo Padovan Committed by Dmitry Shmidt
Browse files

libsync: move kernel headers for sync ioctls to sync.h

This patch moves the legacy API to the internal sync.h header
and add documentation to it.

Test: Sync unit tests still passes.
Change-Id: I9b17eb23af30043b3df5fb9e857affad68ba8521
parent 60c763ed
Loading
Loading
Loading
Loading
+50 −1
Original line number Diff line number Diff line
@@ -22,9 +22,16 @@
#include <sys/cdefs.h>
#include <stdint.h>

#include <linux/types.h>

__BEGIN_DECLS

// XXX: These structs are copied from the header "linux/sync.h".
struct sync_legacy_merge_data {
 int32_t fd2;
 char name[32];
 int32_t fence;
};

struct sync_fence_info_data {
 uint32_t len;
 char name[32];
@@ -41,6 +48,48 @@ struct sync_pt_info {
 uint8_t driver_data[0];
};

#define SYNC_IOC_MAGIC		'>'

/**
 * DOC: SYNC_IOC_LEGACY_WAIT - wait for a fence to signal
 *
 * pass timeout in milliseconds.  Waits indefinitely timeout < 0.
 *
 * This is the legacy version of the Sync API before the de-stage that happened
 * on Linux kernel 4.7.
 */
#define SYNC_IOC_LEGACY_WAIT	_IOW(SYNC_IOC_MAGIC, 0, __s32)

/**
 * DOC: SYNC_IOC_MERGE - merge two fences
 *
 * Takes a struct sync_merge_data.  Creates a new fence containing copies of
 * the sync_pts in both the calling fd and sync_merge_data.fd2.  Returns the
 * new fence's fd in sync_merge_data.fence
 *
 * This is the legacy version of the Sync API before the de-stage that happened
 * on Linux kernel 4.7.
 */
#define SYNC_IOC_LEGACY_MERGE	_IOWR(SYNC_IOC_MAGIC, 1, \
	struct sync_legacy_merge_data)

/**
 * DOC: SYNC_IOC_LEGACY_FENCE_INFO - get detailed information on a fence
 *
 * Takes a struct sync_fence_info_data with extra space allocated for pt_info.
 * Caller should write the size of the buffer into len.  On return, len is
 * updated to reflect the total size of the sync_fence_info_data including
 * pt_info.
 *
 * pt_info is a buffer containing sync_pt_infos for every sync_pt in the fence.
 * To iterate over the sync_pt_infos, use the sync_pt_info.len field.
 *
 * This is the legacy version of the Sync API before the de-stage that happened
 * on Linux kernel 4.7.
 */
#define SYNC_IOC_LEGACY_FENCE_INFO	_IOWR(SYNC_IOC_MAGIC, 2,\
	struct sync_fence_info_data)

/* timeout in msecs */
int sync_wait(int fd, int timeout);
int sync_merge(const char *name, int fd1, int fd2);
+4 −16
Original line number Diff line number Diff line
@@ -27,18 +27,6 @@

#include <sync/sync.h>

// The sync code is undergoing a major change. Add enough in to get
// everything to compile wih the latest uapi headers.
struct sync_merge_data {
  int32_t fd2;
  char name[32];
  int32_t fence;
};

#define SYNC_IOC_MAGIC '>'
#define SYNC_IOC_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32)
#define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 1, struct sync_merge_data)
#define SYNC_IOC_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2, struct sync_fence_info_data)

struct sw_sync_create_fence_data {
  __u32 value;
@@ -54,18 +42,18 @@ int sync_wait(int fd, int timeout)
{
    __s32 to = timeout;

    return ioctl(fd, SYNC_IOC_WAIT, &to);
    return ioctl(fd, SYNC_IOC_LEGACY_WAIT, &to);
}

int sync_merge(const char *name, int fd1, int fd2)
{
    struct sync_merge_data data;
    struct sync_legacy_merge_data data;
    int err;

    data.fd2 = fd2;
    strlcpy(data.name, name, sizeof(data.name));

    err = ioctl(fd1, SYNC_IOC_MERGE, &data);
    err = ioctl(fd1, SYNC_IOC_LEGACY_MERGE, &data);
    if (err < 0)
        return err;

@@ -82,7 +70,7 @@ struct sync_fence_info_data *sync_fence_info(int fd)
        return NULL;

    info->len = 4096;
    err = ioctl(fd, SYNC_IOC_FENCE_INFO, info);
    err = ioctl(fd, SYNC_IOC_LEGACY_FENCE_INFO, info);
    if (err < 0) {
        free(info);
        return NULL;