1*4882a593Smuzhiyun #ifndef __ION_UTILS_H 2*4882a593Smuzhiyun #define __ION_UTILS_H 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #include "ion.h" 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #define SOCKET_NAME "ion_socket" 7*4882a593Smuzhiyun #define ION_DEVICE "/dev/ion" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define ION_BUFFER_LEN 4096 10*4882a593Smuzhiyun #define MAX_HEAP_COUNT ION_HEAP_TYPE_CUSTOM 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct socket_info { 13*4882a593Smuzhiyun int sockfd; 14*4882a593Smuzhiyun int datafd; 15*4882a593Smuzhiyun unsigned long buflen; 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct ion_buffer_info { 19*4882a593Smuzhiyun int ionfd; 20*4882a593Smuzhiyun int buffd; 21*4882a593Smuzhiyun unsigned int heap_type; 22*4882a593Smuzhiyun unsigned int flag_type; 23*4882a593Smuzhiyun unsigned long heap_size; 24*4882a593Smuzhiyun unsigned long buflen; 25*4882a593Smuzhiyun unsigned char *buffer; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* This is used to fill the data into the mapped buffer */ 30*4882a593Smuzhiyun void write_buffer(void *buffer, unsigned long len); 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* This is used to read the data from the exported buffer */ 33*4882a593Smuzhiyun void read_buffer(void *buffer, unsigned long len); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* This is used to create an ION buffer FD for the kernel buffer 36*4882a593Smuzhiyun * So you can export this same buffer to others in the form of FD 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun int ion_export_buffer_fd(struct ion_buffer_info *ion_info); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* This is used to import or map an exported FD. 41*4882a593Smuzhiyun * So we point to same buffer without making a copy. Hence zero-copy. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun int ion_import_buffer_fd(struct ion_buffer_info *ion_info); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* This is used to close all references for the ION client */ 46*4882a593Smuzhiyun void ion_close_buffer_fd(struct ion_buffer_info *ion_info); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* This is used to send FD to another process using socket IPC */ 49*4882a593Smuzhiyun int socket_send_fd(struct socket_info *skinfo); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* This is used to receive FD from another process using socket IPC */ 52*4882a593Smuzhiyun int socket_receive_fd(struct socket_info *skinfo); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #endif 56