diff --git a/include/linux/tegra_gr_comm.h b/include/linux/tegra_gr_comm.h new file mode 100644 index 00000000..4c53ed68 --- /dev/null +++ b/include/linux/tegra_gr_comm.h @@ -0,0 +1,95 @@ +/* + * Tegra Graphics Virtualization Communication Framework + * + * Copyright (c) 2013-2014, NVIDIA Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __TEGRA_GR_COMM_H +#define __TEGRA_GR_COMM_H + +#include + +enum { + TEGRA_GR_COMM_CTX_CLIENT = 0, + TEGRA_GR_COMM_CTX_SERVER +}; + +#define TEGRA_GR_COMM_ID_SELF (0xFF) + +#ifdef CONFIG_TEGRA_GR_VIRTUALIZATION +int tegra_gr_comm_init(struct platform_device *pdev, u32 virt_ctx, u32 elems, + const size_t *queue_sizes, u32 queue_start, u32 num_queues); +void tegra_gr_comm_deinit(u32 virt_ctx, u32 queue_start, u32 num_queues); +int tegra_gr_comm_send(u32 virt_ctx, u32 peer, u32 index, void *data, + size_t size); +int tegra_gr_comm_recv(u32 virt_ctx, u32 index, void **handle, void **data, + size_t *size, u32 *sender); +int tegra_gr_comm_sendrecv(u32 virt_ctx, u32 peer, u32 index, void **handle, + void **data, size_t *size); +void tegra_gr_comm_release(void *handle); +u32 tegra_gr_comm_get_server_vmid(void); +void *tegra_gr_comm_oob_get_ptr(u32 virt_ctx, u32 peer, u32 index, + void **ptr, size_t *size); +void tegra_gr_comm_oob_put_ptr(void *handle); +#else +static inline int tegra_gr_comm_init(struct platform_device *pdev, + u32 virt_ctx, u32 elems, + const size_t *queue_sizes, u32 queue_start, + u32 num_queues) +{ + return -ENOSYS; +} + +static inline void tegra_gr_comm_deinit(u32 virt_ctx, u32 queue_start, + u32 num_queues) +{ +} + +static inline int tegra_gr_comm_send(u32 virt_ctx, u32 peer, u32 index, + void *data, size_t size) +{ + return -ENOSYS; +} + +static inline int tegra_gr_comm_recv(u32 virt_ctx, u32 index, void **handle, + void **data, size_t *size, u32 *sender) +{ + return -ENOSYS; +} + +static inline int tegra_gr_comm_sendrecv(u32 virt_ctx, u32 peer, u32 index, + void **handle, void **data, + size_t *size) +{ + return -ENOSYS; +} + +static inline void tegra_gr_comm_release(void *handle) {} + +static inline u32 tegra_gr_comm_get_server_vmid(void) +{ + return 0; +} + +static inline void *tegra_gr_comm_oob_get_ptr(u32 virt_ctx, u32 peer, + u32 index, void **ptr, size_t *size) +{ + return NULL; +} + +static inline void tegra_gr_comm_oob_put_ptr(void *handle) {} +#endif + +#endif