linux-uk-proxy.h (2609B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 */ 7 8 #ifndef __LINUX_UK_PROXY_H__ 9 #define __LINUX_UK_PROXY_H__ 10 11 #ifndef __KERNEL__ 12 #include <stdint.h> 13 #endif 14 15 /* Device Info */ 16 #define LUK_DEVICE_NAME "/dev/linux-uk-proxy" 17 #define LUK_DEVICE_MAJOR 125 18 #define LUK_DEVICE_MINOR 0 19 20 #define LUK_MAX_SERVICE_NAME 64 21 #define LUK_MAX_DATA_SIZE (5*1024) 22 23 /* Control structure passed to all ioctls */ 24 typedef struct { 25 uint32_t v; 26 } luk_ioctl_version_t; 27 28 typedef struct { 29 uint32_t q_size; 30 uint32_t flags; 31 } luk_ioctl_create_t; 32 33 typedef struct { 34 uint32_t flags; 35 } luk_ioctl_destroy_t; 36 37 typedef struct { 38 uint64_t data; 39 uint32_t len; 40 } luk_ioctl_recv_t; 41 42 typedef struct { 43 uint64_t data; 44 uint32_t len; 45 } luk_ioctl_send_t; 46 47 typedef struct { 48 char service[LUK_MAX_SERVICE_NAME]; 49 int rc; /* Operation Return Code */ 50 union { 51 luk_ioctl_version_t version; 52 luk_ioctl_create_t create; 53 luk_ioctl_destroy_t destroy; 54 luk_ioctl_recv_t recv; 55 luk_ioctl_send_t send; 56 } args; 57 } luk_ioctl_t; 58 59 /* Linux User/Kernel Proxy ioctls */ 60 #define LUK_MAGIC 'L' 61 62 #define LUK_VERSION _IO(LUK_MAGIC, 0) 63 #define LUK_SERVICE_CREATE _IO(LUK_MAGIC, 1) 64 #define LUK_SERVICE_DESTROY _IO(LUK_MAGIC, 2) 65 #define LUK_SERVICE_RECV _IO(LUK_MAGIC, 3) 66 #define LUK_SERVICE_SEND _IO(LUK_MAGIC, 4) 67 #define LUK_SERVICE_SUSPEND _IO(LUK_MAGIC, 5) 68 #define LUK_SERVICE_RESUME _IO(LUK_MAGIC, 6) 69 70 #ifdef __KERNEL__ 71 72 #include <linux/ioctl.h> 73 74 /* Kernel API */ 75 extern int linux_uk_proxy_service_create(const char *service, uint32_t q_size, uint32_t flags); 76 extern int linux_uk_proxy_send(const char *service, void *data, uint32_t len); 77 extern int linux_uk_proxy_recv(const char *service, void *data, uint32_t *len); 78 extern int linux_uk_proxy_service_destroy(const char *service); 79 80 #else 81 82 /* User API */ 83 extern int linux_uk_proxy_open(void); 84 extern int linux_uk_proxy_service_create(const char *service, uint32_t q_size, uint32_t flags); 85 extern int linux_uk_proxy_service_destroy(const char *service); 86 extern int linux_uk_proxy_send(const char *service, void *data, uint32_t len); 87 extern int linux_uk_proxy_recv(const char *service, void *data, uint32_t *len); 88 extern int linux_uk_proxy_suspend(const char *service); 89 extern int linux_uk_proxy_resume(const char *service); 90 extern int linux_uk_proxy_close(void); 91 92 #endif /* __KERNEL__ */ 93 94 #endif /* __LINUX_UK_PROXY_H__ */