14035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/* Copyright (c) 2011, The Linux Foundation. All rights reserved. 24035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 34035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * Redistribution and use in source and binary forms, with or without 44035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * modification, are permitted provided that the following conditions are 54035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * met: 64035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Redistributions of source code must retain the above copyright 74035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * notice, this list of conditions and the following disclaimer. 84035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Redistributions in binary form must reproduce the above 94035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * copyright notice, this list of conditions and the following 104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * disclaimer in the documentation and/or other materials provided 114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * with the distribution. 124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Neither the name of The Linux Foundation nor the names of its 134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * contributors may be used to endorse or promote products derived 144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * from this software without specific prior written permission. 154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin */ 294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <linux/stat.h> 304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <fcntl.h> 314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <linux/types.h> 334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "log_util.h" 354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "platform_lib_includes.h" 364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "loc_eng_dmn_conn_glue_msg.h" 374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "loc_eng_dmn_conn_handler.h" 384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 404035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgget 414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 424035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This function get a message queue 444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin q_path - name path of the message queue 464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mode - 474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 484035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 514035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin message queue id 534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 544035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgget(const char * q_path, int mode) 594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int msgqid; 614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid = loc_eng_dmn_conn_glue_pipeget(q_path, mode); 624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return msgqid; 634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 664035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgremove 674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 684035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin remove a message queue 704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin q_path - name path of the message queue 724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid - message queue id 734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 744035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 774035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success or negative value for failure 794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 804035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgremove(const char * q_path, int msgqid) 854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int result; 874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin result = loc_eng_dmn_conn_glue_piperemove(q_path, msgqid); 884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return result; 894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 924035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgsnd 934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 944035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Send a message 964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid - message queue id 984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgp - pointer to the message to be sent 994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgsz - size of the message 1004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1014035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 1024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 1034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1044035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 1054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin number of bytes sent out or negative value for failure 1064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1074035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 1084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 1094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 1114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgsnd(int msgqid, const void * msgp, size_t msgsz) 1124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 1134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int result; 1144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp; 1154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin pmsg->msgsz = msgsz; 1164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin result = loc_eng_dmn_conn_glue_pipewrite(msgqid, msgp, msgsz); 1184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (result != (int) msgsz) { 1194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) msgsz); 1204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1; 1214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 1224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return result; 1244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 1254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 1274035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgrcv 1284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1294035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 1304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin receive a message 1314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid - message queue id 1334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgp - pointer to the buffer to hold the message 1344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgsz - size of the buffer 1354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1364035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 1374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 1384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1394035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 1404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin number of bytes received or negative value for failure 1414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1424035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 1434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 1444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 1464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgrcv(int msgqid, void *msgp, size_t msgbufsz) 1474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 1484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int result; 1494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp; 1504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin result = loc_eng_dmn_conn_glue_piperead(msgqid, &(pmsg->msgsz), sizeof(pmsg->msgsz)); 1524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (result != sizeof(pmsg->msgsz)) { 1534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("%s:%d] pipe broken %d\n", __func__, __LINE__, result); 1544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1; 1554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 1564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (msgbufsz < pmsg->msgsz) { 1584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("%s:%d] msgbuf is too small %d < %d\n", __func__, __LINE__, (int) msgbufsz, (int) pmsg->msgsz); 1594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1; 1604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 1614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin result = loc_eng_dmn_conn_glue_piperead(msgqid, (uint8_t *) msgp + sizeof(pmsg->msgsz), pmsg->msgsz - sizeof(pmsg->msgsz)); 1634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (result != (int) (pmsg->msgsz - sizeof(pmsg->msgsz))) { 1644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) pmsg->msgsz); 1654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1; 1664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 1674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return pmsg->msgsz; 1694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 1704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 1724035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgunblock 1734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1744035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 1754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unblock a message queue 1764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid - message queue id 1784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1794035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 1804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 1814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1824035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 1834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 1844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1854035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 1864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 1874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 1894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgunblock(int msgqid) 1904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 1914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return loc_eng_dmn_conn_glue_pipeunblock(msgqid); 1924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 1934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 1954035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_dmn_conn_glue_msgflush 1964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1974035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 1984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin flush out the message in a queue 1994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin msgqid - message queue id 2014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2024035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 2034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 2044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2054035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 2064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin number of bytes that are flushed out. 2074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2084035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 2094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 2104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 2124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_dmn_conn_glue_msgflush(int msgqid) 2134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int length; 2154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char buf[128]; 2164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin do { 2184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin length = loc_eng_dmn_conn_glue_piperead(msgqid, buf, 128); 2194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("%s:%d] %s\n", __func__, __LINE__, buf); 2204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } while(length); 2214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return length; 2224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 224