blob: 9f2972449db65b258e58bc300f159df916be47de [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef _LINUX_VIRTMAGMA_H
#define _LINUX_VIRTMAGMA_H
#include <asm/ioctl.h>
#include <linux/types.h>
#define VIRTMAGMA_IOCTL_BASE 'm'
#define VIRTMAGMA_IO(nr) _IO(VIRTMAGMA_IOCTL_BASE, nr)
#define VIRTMAGMA_IOR(nr, type) _IOR(VIRTMAGMA_IOCTL_BASE, nr, type)
#define VIRTMAGMA_IOW(nr, type) _IOW(VIRTMAGMA_IOCTL_BASE, nr, type)
#define VIRTMAGMA_IOWR(nr, type) _IOWR(VIRTMAGMA_IOCTL_BASE, nr, type)
#define VIRTMAGMA_MAKE_VERSION(major, minor, patch) \
(((major) << 24) | ((minor) << 12) | (patch))
#define VIRTMAGMA_GET_VERSION(version, major, minor, patch) \
((major = ((version) >> 24)), (minor = ((version) >> 12) & 0x3FF), \
(patch = (version)&0x3FF), (version))
#define VIRTMAGMA_HANDSHAKE_SEND 0x46434853
#define VIRTMAGMA_HANDSHAKE_RECV 0x474F4F47
#define VIRTMAGMA_VERSION VIRTMAGMA_MAKE_VERSION(0, 1, 0)
struct virtmagma_ioctl_args_handshake {
__u32 handshake_inout;
__u32 version_out;
};
struct virtmagma_ioctl_args_magma_command {
__u64 request_address;
__u64 request_size;
__u64 response_address;
__u64 response_size;
};
struct virtmagma_command_buffer {
__u64 command_buffer_size;
__u64 command_buffer;
__u64 resource_size;
__u64 resources;
__u64 semaphore_size;
__u64 semaphores;
};
struct virtmagma_create_image_wrapper {
uintptr_t create_info;
__u64 create_info_size;
};
struct virtmagma_get_image_info_wrapper {
uintptr_t image_info_out;
__u64 image_info_size;
};
#define VIRTMAGMA_IOCTL_HANDSHAKE \
VIRTMAGMA_IOWR(0x00, struct virtmagma_ioctl_args_handshake)
// Removed: VIRTMAGMA_IOCTL_GET_MMFD (0x01)
#define VIRTMAGMA_IOCTL_MAGMA_COMMAND \
VIRTMAGMA_IOWR(0x02, struct virtmagma_ioctl_args_magma_command)
#endif /* _LINUX_VIRTMAGMA_H */