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
This commit is contained in:
parent
60c763ed52
commit
d6bbc5de66
2 changed files with 54 additions and 17 deletions
|
|
@ -22,9 +22,16 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__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 {
|
struct sync_fence_info_data {
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
@ -41,6 +48,48 @@ struct sync_pt_info {
|
||||||
uint8_t driver_data[0];
|
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 */
|
/* timeout in msecs */
|
||||||
int sync_wait(int fd, int timeout);
|
int sync_wait(int fd, int timeout);
|
||||||
int sync_merge(const char *name, int fd1, int fd2);
|
int sync_merge(const char *name, int fd1, int fd2);
|
||||||
|
|
|
||||||
|
|
@ -27,18 +27,6 @@
|
||||||
|
|
||||||
#include <sync/sync.h>
|
#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 {
|
struct sw_sync_create_fence_data {
|
||||||
__u32 value;
|
__u32 value;
|
||||||
|
|
@ -54,18 +42,18 @@ int sync_wait(int fd, int timeout)
|
||||||
{
|
{
|
||||||
__s32 to = 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)
|
int sync_merge(const char *name, int fd1, int fd2)
|
||||||
{
|
{
|
||||||
struct sync_merge_data data;
|
struct sync_legacy_merge_data data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
data.fd2 = fd2;
|
data.fd2 = fd2;
|
||||||
strlcpy(data.name, name, sizeof(data.name));
|
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)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
@ -82,7 +70,7 @@ struct sync_fence_info_data *sync_fence_info(int fd)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
info->len = 4096;
|
info->len = 4096;
|
||||||
err = ioctl(fd, SYNC_IOC_FENCE_INFO, info);
|
err = ioctl(fd, SYNC_IOC_LEGACY_FENCE_INFO, info);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
free(info);
|
free(info);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue