You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mmpa_linux.h 19 kB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. /**
  2. * Copyright 2019-2020 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef MMPA_LINUX_MMPA_LINUX_H
  17. #define MMPA_LINUX_MMPA_LINUX_H
  18. #ifdef __cplusplus
  19. #if __cplusplus
  20. extern "C" {
  21. #endif // __cpluscplus
  22. #endif // __cpluscplus
  23. #define MMPA_MACINFO_DEFAULT_SIZE 18
  24. #define MMPA_CPUDESC_DEFAULT_SIZE 64
  25. typedef pthread_t mmThread;
  26. typedef pthread_mutex_t mmMutex_t;
  27. typedef pthread_cond_t mmCond;
  28. typedef pthread_mutex_t mmMutexFC;
  29. typedef pthread_rwlock_t mmRWLock_t;
  30. typedef signed int mmProcess;
  31. typedef int mmPollHandle;
  32. typedef int mmPipeHandle;
  33. typedef int mmFileHandle;
  34. typedef int mmComPletionKey;
  35. typedef int mmCompletionHandle;
  36. typedef int mmErrorMsg;
  37. typedef int mmFd_t;
  38. typedef VOID *mmExitCode;
  39. typedef key_t mmKey_t;
  40. typedef int mmMsgid;
  41. typedef struct dirent mmDirent;
  42. typedef struct shmid_ds mmshmId_ds;
  43. typedef int (*mmFilter)(const mmDirent *entry);
  44. typedef int (*mmSort)(const mmDirent **a, const mmDirent **b);
  45. typedef size_t mmSize_t;
  46. typedef off_t mmOfft_t;
  47. typedef pid_t mmPid_t;
  48. typedef VOID *(*userProcFunc)(VOID *pulArg);
  49. typedef struct {
  50. userProcFunc procFunc; // Callback function pointer
  51. VOID *pulArg; // Callback function parameters
  52. } mmUserBlock_t;
  53. typedef struct {
  54. const char *dli_fname;
  55. void *dli_fbase;
  56. const char *dli_sname;
  57. void *dli_saddr;
  58. size_t dli_size; /* ELF only */
  59. int dli_bind; /* ELF only */
  60. int dli_type;
  61. } mmDlInfo;
  62. typedef struct {
  63. int wSecond; // Seconds. [0-60] (1 leap second)
  64. int wMinute; // Minutes. [0-59]
  65. int wHour; // Hours. [0-23]
  66. int wDay; // Day. [1-31]
  67. int wMonth; // Month. [1-12]
  68. int wYear; // Year
  69. int wDayOfWeek; // Day of week. [0-6]
  70. int tm_yday; // Days in year.[0-365]
  71. int tm_isdst; // DST. [-1/0/1]
  72. long int wMilliseconds; // milliseconds
  73. } mmSystemTime_t;
  74. typedef sem_t mmSem_t;
  75. typedef struct sockaddr mmSockAddr;
  76. typedef socklen_t mmSocklen_t;
  77. typedef int mmSockHandle;
  78. typedef timer_t mmTimer;
  79. typedef pthread_key_t mmThreadKey;
  80. typedef int mmOverLap;
  81. typedef ssize_t mmSsize_t;
  82. typedef size_t mmSize; // size
  83. typedef struct {
  84. UINT32 createFlag;
  85. INT32 oaFlag;
  86. } mmCreateFlag;
  87. typedef struct {
  88. VOID *sendBuf;
  89. INT32 sendLen;
  90. } mmIovSegment;
  91. typedef struct in_addr mmInAddr;
  92. typedef struct {
  93. VOID *inbuf;
  94. INT32 inbufLen;
  95. VOID *outbuf;
  96. INT32 outbufLen;
  97. mmOverLap *oa;
  98. } mmIoctlBuf;
  99. typedef int mmAtomicType;
  100. typedef enum {
  101. pollTypeRead = 1, // pipe read
  102. pollTypeRecv, // socket recv
  103. pollTypeIoctl, // ioctl
  104. } mmPollType;
  105. typedef struct {
  106. mmPollHandle handle; // The file descriptor or handle of poll is required
  107. mmPollType pollType; // Operation type requiring poll
  108. // read or recv or ioctl
  109. INT32 ioctlCode; // IOCTL operation code, dedicated to IOCTL
  110. mmComPletionKey completionKey; // The default value is blank, which is used in windows
  111. // The data used to receive the difference between which handle is readable
  112. } mmPollfd;
  113. typedef struct {
  114. VOID *priv; // User defined private content
  115. mmPollHandle bufHandle; // Value of handle corresponding to buf
  116. mmPollType bufType; // Data types polled to
  117. VOID *buf; // Data used in poll
  118. UINT32 bufLen; // Data length used in poll
  119. UINT32 bufRes; // Actual return length
  120. } mmPollData, *pmmPollData;
  121. typedef VOID (*mmPollBack)(pmmPollData);
  122. typedef struct {
  123. INT32 tz_minuteswest; // How many minutes is it different from Greenwich
  124. INT32 tz_dsttime; // type of DST correction
  125. } mmTimezone;
  126. typedef struct {
  127. LONG tv_sec;
  128. LONG tv_usec;
  129. } mmTimeval;
  130. typedef struct {
  131. LONG tv_sec;
  132. LONG tv_nsec;
  133. } mmTimespec;
  134. typedef struct {
  135. ULONGLONG totalSize;
  136. ULONGLONG freeSize;
  137. ULONGLONG availSize;
  138. } mmDiskSize;
  139. #define mmTLS __thread
  140. typedef struct stat mmStat_t;
  141. typedef struct stat64 mmStat64_t;
  142. typedef mode_t mmMode_t;
  143. typedef struct option mmStructOption;
  144. typedef struct {
  145. char addr[MMPA_MACINFO_DEFAULT_SIZE]; // ex:aa-bb-cc-dd-ee-ff\0
  146. } mmMacInfo;
  147. typedef struct {
  148. char **argv;
  149. INT32 argvCount;
  150. char **envp;
  151. INT32 envpCount;
  152. } mmArgvEnv;
  153. typedef struct {
  154. char arch[MMPA_CPUDESC_DEFAULT_SIZE];
  155. char manufacturer[MMPA_CPUDESC_DEFAULT_SIZE]; // vendor
  156. char version[MMPA_CPUDESC_DEFAULT_SIZE]; // modelname
  157. INT32 frequency; // cpu frequency
  158. INT32 maxFrequency; // max speed
  159. INT32 ncores; // cpu cores
  160. INT32 nthreads; // cpu thread count
  161. INT32 ncounts; // logical cpu nums
  162. } mmCpuDesc;
  163. typedef mode_t MODE;
  164. typedef struct {
  165. INT32 detachFlag; // Determine whether to set separation property 0, not to separate 1
  166. INT32 priorityFlag; // Determine whether to set priority 0 and not set 1
  167. INT32 priority; // Priority value range to be set 1-99
  168. INT32 policyFlag; // Set scheduling policy or not 0 do not set 1 setting
  169. INT32 policy; // Scheduling policy value value
  170. // MMPA_THREAD_SCHED_RR
  171. // MMPA_THREAD_SCHED_OTHER
  172. // MMPA_THREAD_SCHED_FIFO
  173. INT32 stackFlag; // Set stack size or not: 0 does not set 1 setting
  174. UINT32 stackSize; // The stack size unit bytes to be set cannot be less than MMPA_THREAD_STACK_MIN
  175. } mmThreadAttr;
  176. #ifdef __ANDROID__
  177. #define S_IREAD S_IRUSR
  178. #define S_IWRITE S_IWUSR
  179. #endif
  180. #define M_FILE_RDONLY O_RDONLY
  181. #define M_FILE_WRONLY O_WRONLY
  182. #define M_FILE_RDWR O_RDWR
  183. #define M_FILE_CREAT O_CREAT
  184. #define M_RDONLY O_RDONLY
  185. #define M_WRONLY O_WRONLY
  186. #define M_RDWR O_RDWR
  187. #define M_CREAT O_CREAT
  188. #define M_BINARY O_RDONLY
  189. #define M_TRUNC O_TRUNC
  190. #define M_IRWXU S_IRWXU
  191. #define M_IN_CREATE IN_CREATE
  192. #define M_IN_CLOSE_WRITE IN_CLOSE_WRITE
  193. #define M_IN_IGNORED IN_IGNORED
  194. #define M_OUT_CREATE IN_CREATE
  195. #define M_OUT_CLOSE_WRITE IN_CLOSE_WRITE
  196. #define M_OUT_IGNORED IN_IGNORED
  197. #define M_OUT_ISDIR IN_ISDIR
  198. #define M_IREAD S_IREAD
  199. #define M_IRUSR S_IRUSR
  200. #define M_IWRITE S_IWRITE
  201. #define M_IWUSR S_IWUSR
  202. #define M_IXUSR S_IXUSR
  203. #define FDSIZE 64
  204. #define M_MSG_CREAT IPC_CREAT
  205. #define M_MSG_EXCL (IPC_CREAT | IPC_EXCL)
  206. #define M_MSG_NOWAIT IPC_NOWAIT
  207. #define M_WAIT_NOHANG WNOHANG // Non blocking waiting
  208. #define M_WAIT_UNTRACED \
  209. WUNTRACED // If the subprocess enters the suspended state, it will return immediately
  210. // But the end state of the subprocess is ignored
  211. #define M_UMASK_USRREAD S_IRUSR
  212. #define M_UMASK_GRPREAD S_IRGRP
  213. #define M_UMASK_OTHREAD S_IROTH
  214. #define M_UMASK_USRWRITE S_IWUSR
  215. #define M_UMASK_GRPWRITE S_IWGRP
  216. #define M_UMASK_OTHWRITE S_IWOTH
  217. #define M_UMASK_USREXEC S_IXUSR
  218. #define M_UMASK_GRPEXEC S_IXGRP
  219. #define M_UMASK_OTHEXEC S_IXOTH
  220. #define mmConstructor(x) __attribute__((constructor)) VOID x()
  221. #define mmDestructor(x) __attribute__((destructor)) VOID x()
  222. #define MMPA_NO_ARGUMENT 0
  223. #define MMPA_REQUIRED_ARGUMENT 1
  224. #define MMPA_OPTIONAL_ARGUMENT 2
  225. #define MMPA_MAX_PATH PATH_MAX
  226. #define M_NAME_MAX MAX_FNAME
  227. #define M_F_OK F_OK
  228. #define M_R_OK R_OK
  229. #define M_W_OK W_OK
  230. #define MMPA_STDIN STDIN_FILENO
  231. #define MMPA_STDOUT STDOUT_FILENO
  232. #define MMPA_STDERR STDERR_FILENO
  233. #define MMPA_RTLD_NOW RTLD_NOW
  234. #define MMPA_RTLD_GLOBAL RTLD_GLOBAL
  235. #define MMPA_RTLD_LAZY RTLD_LAZY
  236. #define MMPA_RTLD_NODELETE RTLD_NODELETE
  237. #define MMPA_DL_EXT_NAME ".so"
  238. extern INT32 mmCreateTask(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  239. extern INT32 mmJoinTask(mmThread *threadHandle);
  240. extern INT32 mmMutexInit(mmMutex_t *mutex);
  241. extern INT32 mmMutexLock(mmMutex_t *mutex);
  242. extern INT32 mmMutexTryLock(mmMutex_t *mutex);
  243. extern INT32 mmMutexUnLock(mmMutex_t *mutex);
  244. extern INT32 mmMutexDestroy(mmMutex_t *mutex);
  245. extern INT32 mmCondInit(mmCond *cond);
  246. extern INT32 mmCondLockInit(mmMutexFC *mutex);
  247. extern INT32 mmCondLock(mmMutexFC *mutex);
  248. extern INT32 mmCondUnLock(mmMutexFC *mutex);
  249. extern INT32 mmCondLockDestroy(mmMutexFC *mutex);
  250. extern INT32 mmRWLockInit(mmRWLock_t *rwLock);
  251. extern INT32 mmRWLockRDLock(mmRWLock_t *rwLock);
  252. extern INT32 mmRWLockTryRDLock(mmRWLock_t *rwLock);
  253. extern INT32 mmRWLockWRLock(mmRWLock_t *rwLock);
  254. extern INT32 mmRWLockTryWRLock(mmRWLock_t *rwLock);
  255. extern INT32 mmRDLockUnLock(mmRWLock_t *rwLock);
  256. extern INT32 mmWRLockUnLock(mmRWLock_t *rwLock);
  257. extern INT32 mmRWLockDestroy(mmRWLock_t *rwLock);
  258. extern INT32 mmCondWait(mmCond *cond, mmMutexFC *mutex);
  259. extern INT32 mmCondTimedWait(mmCond *cond, mmMutexFC *mutex, UINT32 milliSecond);
  260. extern INT32 mmCondNotify(mmCond *cond);
  261. extern INT32 mmCondNotifyAll(mmCond *cond);
  262. extern INT32 mmCondDestroy(mmCond *cond);
  263. extern INT32 mmGetPid();
  264. extern INT32 mmGetTid();
  265. extern INT32 mmGetPidHandle(mmProcess *processHandle);
  266. extern INT32 mmGetLocalTime(mmSystemTime_t *sysTime);
  267. extern INT32 mmGetSystemTime(mmSystemTime_t *sysTime);
  268. extern INT32 mmSemInit(mmSem_t *sem, UINT32 value);
  269. extern INT32 mmSemWait(mmSem_t *sem);
  270. extern INT32 mmSemPost(mmSem_t *sem);
  271. extern INT32 mmSemDestroy(mmSem_t *sem);
  272. extern INT32 mmOpen(const CHAR *pathName, INT32 flags);
  273. extern INT32 mmOpen2(const CHAR *pathName, INT32 flags, MODE mode);
  274. extern FILE *mmPopen(CHAR *command, CHAR *type);
  275. extern INT32 mmClose(INT32 fd);
  276. extern INT32 mmPclose(FILE *stream);
  277. extern mmSsize_t mmWrite(INT32 fd, VOID *buf, UINT32 bufLen);
  278. extern mmSsize_t mmRead(INT32 fd, VOID *buf, UINT32 bufLen);
  279. extern mmSockHandle mmSocket(INT32 sockFamily, INT32 type, INT32 protocol);
  280. extern INT32 mmBind(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  281. extern INT32 mmListen(mmSockHandle sockFd, INT32 backLog);
  282. extern mmSockHandle mmAccept(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t *addrLen);
  283. extern INT32 mmConnect(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  284. extern INT32 mmCloseSocket(mmSockHandle sockFd);
  285. extern mmSsize_t mmSocketSend(mmSockHandle sockFd, VOID *sendBuf, INT32 sendLen, INT32 sendFlag);
  286. extern mmSsize_t mmSocketRecv(mmSockHandle sockFd, VOID *recvBuf, INT32 recvLen, INT32 recvFlag);
  287. extern INT32 mmSocketSendTo(mmSockHandle sockFd,
  288. VOID *sendMsg,
  289. INT32 sendLen,
  290. UINT32 sendFlag,
  291. const mmSockAddr* addr,
  292. INT32 tolen);
  293. extern mmSsize_t mmSocketRecvFrom(mmSockHandle sockFd,
  294. VOID *recvBuf,
  295. mmSize recvLen,
  296. UINT32 recvFlag,
  297. mmSockAddr* addr,
  298. mmSocklen_t *FromLen);
  299. extern INT32 mmSAStartup();
  300. extern INT32 mmSACleanup();
  301. extern VOID *mmDlopen(const CHAR *fileName, INT32 mode);
  302. extern INT32 mmDladdr(VOID *addr, mmDlInfo *info);
  303. extern VOID *mmDlsym(VOID *handle, CHAR *funcName);
  304. extern INT32 mmDlclose(VOID *handle);
  305. extern CHAR *mmDlerror();
  306. extern INT32 mmCreateAndSetTimer(mmTimer *timerHandle, mmUserBlock_t *timerBlock, UINT milliSecond, UINT period);
  307. extern INT32 mmDeleteTimer(mmTimer timerHandle);
  308. extern INT32 mmStatGet(const CHAR *path, mmStat_t *buffer);
  309. extern INT32 mmStat64Get(const CHAR *path, mmStat64_t *buffer);
  310. extern INT32 mmFStatGet(INT32 fd, mmStat_t *buffer);
  311. extern INT32 mmMkdir(const CHAR *pathName, mmMode_t mode);
  312. extern INT32 mmSleep(UINT32 milliSecond);
  313. extern INT32 mmCreateTaskWithAttr(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  314. extern INT32 mmGetProcessPrio(mmProcess pid);
  315. extern INT32 mmSetProcessPrio(mmProcess pid, INT32 processPrio);
  316. extern INT32 mmGetThreadPrio(mmThread *threadHandle);
  317. extern INT32 mmSetThreadPrio(mmThread *threadHandle, INT32 threadPrio);
  318. extern INT32 mmAccess(const CHAR *pathName);
  319. extern INT32 mmAccess2(const CHAR *pathName, INT32 mode);
  320. extern INT32 mmRmdir(const CHAR *pathName);
  321. extern INT32 mmIoctl(mmProcess fd, INT32 ioctlCode, mmIoctlBuf *bufPtr);
  322. extern INT32 mmSemTimedWait(mmSem_t *sem, INT32 timeout);
  323. extern mmSsize_t mmWritev(mmProcess fd, mmIovSegment *iov, INT32 iovcnt);
  324. extern VOID mmMb();
  325. extern INT32 mmInetAton(const CHAR *addrStr, mmInAddr *addr);
  326. extern mmProcess mmOpenFile(const CHAR *fileName, UINT32 access, mmCreateFlag fileFlag);
  327. extern mmSsize_t mmReadFile(mmProcess fileId, VOID *buffer, INT32 len);
  328. extern mmSsize_t mmWriteFile(mmProcess fileId, VOID *buffer, INT32 len);
  329. extern INT32 mmCloseFile(mmProcess fileId);
  330. extern mmAtomicType mmSetData(mmAtomicType *ptr, mmAtomicType value);
  331. extern mmAtomicType mmValueInc(mmAtomicType *ptr, mmAtomicType value);
  332. extern mmAtomicType mmValueSub(mmAtomicType *ptr, mmAtomicType value);
  333. extern INT32 mmCreateTaskWithDetach(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  334. // The following 3 interfaces are to be deleted
  335. extern INT32 mmCreateNamedPipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  336. extern INT32 mmOpenNamePipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  337. extern VOID mmCloseNamedPipe(mmPipeHandle namedPipe[]);
  338. extern INT32 mmCreatePipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  339. extern INT32 mmOpenPipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  340. extern VOID mmClosePipe(mmPipeHandle pipe[], UINT32 pipeCount);
  341. // Poll related interface
  342. extern mmCompletionHandle mmCreateCompletionPort();
  343. extern VOID mmCloseCompletionPort(mmCompletionHandle handle);
  344. extern INT32 mmPoll(mmPollfd *fds, INT32 fdCount, INT32 timeout, mmCompletionHandle handleIOCP, pmmPollData polledData,
  345. mmPollBack pollBack);
  346. extern INT32 mmGetErrorCode();
  347. extern CHAR *mmGetErrorFormatMessage(mmErrorMsg errnum, CHAR *buf, mmSize size);
  348. extern INT32 mmGetTimeOfDay(mmTimeval *timeVal, mmTimezone *timeZone);
  349. extern mmTimespec mmGetTickCount();
  350. extern INT32 mmGetRealPath(CHAR *path, CHAR *realPath);
  351. extern INT32 mmRealPath(const CHAR *path, CHAR *realPath, INT32 realPathLen);
  352. extern INT32 mmDup2(INT32 oldFd, INT32 newFd);
  353. extern INT32 mmDup(INT32 fd);
  354. extern INT32 mmUnlink(const CHAR *filename);
  355. extern INT32 mmChmod(const CHAR *filename, INT32 mode);
  356. extern INT32 mmFileno(FILE *stream);
  357. extern INT32 mmScandir(const CHAR *path, mmDirent ***entryList, mmFilter filterFunc, mmSort sort);
  358. extern VOID mmScandirFree(mmDirent **entryList, INT32 count);
  359. extern mmMsgid mmMsgCreate(mmKey_t key, INT32 msgFlag);
  360. extern mmMsgid mmMsgOpen(mmKey_t key, INT32 msgFlag);
  361. extern INT32 mmMsgSnd(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  362. extern INT32 mmMsgRcv(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  363. extern INT32 mmMsgClose(mmMsgid msqid);
  364. extern INT32 mmLocalTimeR(const time_t *timep, struct tm *result);
  365. extern INT32 mmGetOpt(INT32 argc, char *const *argv, const char *opts);
  366. extern INT32 mmGetOptLong(INT32 argc, char *const *argv, const char *opts, const mmStructOption *longOpts,
  367. INT32 *longIndex);
  368. extern LONG mmLseek(INT32 fd, INT64 offset, INT32 seekFlag);
  369. extern INT32 mmFtruncate(mmProcess fd, UINT32 length);
  370. extern INT32 mmTlsCreate(mmThreadKey *key, VOID (*destructor)(VOID *));
  371. extern INT32 mmTlsSet(mmThreadKey key, const VOID *value);
  372. extern VOID *mmTlsGet(mmThreadKey key);
  373. extern INT32 mmTlsDelete(mmThreadKey key);
  374. extern INT32 mmGetOsType();
  375. extern INT32 mmFsync(mmProcess fd);
  376. extern INT32 mmFsync2(INT32 fd);
  377. extern INT32 mmChdir(const CHAR *path);
  378. extern INT32 mmUmask(INT32 pmode);
  379. extern INT32 mmThreadKill(mmThread id);
  380. extern INT32 mmWaitPid(mmProcess pid, INT32 *status, INT32 options);
  381. extern INT32 mmGetCwd(CHAR *buffer, INT32 maxLen);
  382. extern INT32 mmGetEnv(const CHAR *name, CHAR *value, UINT32 len);
  383. extern INT32 mmSetEnv(const CHAR *name, const CHAR *value, INT32 overwrite);
  384. extern CHAR *mmStrTokR(CHAR *str, const CHAR *delim, CHAR **saveptr);
  385. extern CHAR *mmDirName(CHAR *path);
  386. extern CHAR *mmBaseName(CHAR *path);
  387. extern INT32 mmGetDiskFreeSpace(const char *path, mmDiskSize *diskSize);
  388. /*
  389. * Function: set the thread name created by mmcreatetask
  390. * Input: pstThreadHandle: thread ID
  391. * name: thread name, the actual length of name must be < MMPA_THREADNAME_SIZE
  392. * The input parameter error returns EN_INVALID_PARAM, the execution success returns EN_OK, and the
  393. * execution failure returns EN_ERROR
  394. */
  395. extern INT32 mmSetThreadName(mmThread *threadHandle, const CHAR *name);
  396. /*
  397. * Function: get thread name
  398. * Input: pstThreadHandle: thread ID
  399. * size: Cache length of thread name
  400. * name:User allocated cache for thread name, Cache length must be >= MMPA_THREADNAME_SIZE
  401. * The input parameter error returns EN_INVALID_PARAM, the execution success returns EN_OK, and the
  402. * execution failure returns EN_ERROR
  403. */
  404. extern INT32 mmGetThreadName(mmThread *threadHandle, CHAR *name, INT32 size);
  405. /*
  406. * Function:Set the thread name of the currently executing thread - call inside the thread body
  407. * Input:name:Thread name to be set
  408. * The input parameter error returns EN_INVALID_PARAM, the execution success returns EN_OK, and the
  409. * execution failure returns EN_ERROR
  410. */
  411. extern INT32 mmSetCurrentThreadName(const CHAR *name);
  412. /*
  413. * Function:Get the thread name of the currently executing thread - in body call
  414. * Input:name:The name of the thread to get, and the cache is allocated by the user,size>=MMPA_THREADNAME_SIZE
  415. * The input parameter error returns EN_INVALID_PARAM, the execution success returns EN_OK, and the
  416. * execution failure returns EN_ERROR
  417. */
  418. extern INT32 mmGetCurrentThreadName(CHAR *name, INT32 size);
  419. extern INT32 mmGetFileSize(const CHAR *fileName, ULONGLONG *length);
  420. extern INT32 mmIsDir(const CHAR *fileName);
  421. extern INT32 mmGetOsName(CHAR *name, INT32 nameSize);
  422. extern INT32 mmGetOsVersion(CHAR *versionInfo, INT32 versionLength);
  423. extern INT32 mmGetMac(mmMacInfo **list, INT32 *count);
  424. extern INT32 mmGetMacFree(mmMacInfo *list, INT32 count);
  425. extern INT32 mmGetCpuInfo(mmCpuDesc **cpuInfo, INT32 *count);
  426. extern INT32 mmCpuInfoFree(mmCpuDesc *cpuInfo, INT32 count);
  427. extern INT32 mmCreateProcess(const CHAR *fileName, const mmArgvEnv *env, const char *stdoutRedirectFile, mmProcess *id);
  428. extern INT32 mmCreateTaskWithThreadAttr(mmThread *threadHandle, const mmUserBlock_t *funcBlock,
  429. const mmThreadAttr *threadAttr);
  430. extern mmFileHandle mmShmOpen(const CHAR *name, INT32 oflag, mmMode_t mode);
  431. extern INT32 mmShmUnlink(const CHAR *name);
  432. extern VOID *mmMmap(mmFd_t fd, mmSize_t size, mmOfft_t offset, mmFd_t *extra, INT32 prot, INT32 flags);
  433. extern INT32 mmMunMap(VOID *data, mmSize_t size, mmFd_t *extra);
  434. #define MMPA_DLL_API
  435. #ifdef __cplusplus
  436. #if __cplusplus
  437. }
  438. #endif /* __cpluscplus */
  439. #endif // __cpluscplus
  440. #endif // MMPA_LINUX_MMPA_LINUX_H_

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示