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_win.h 22 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
4 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
3 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  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_WIN_MMPA_WIN_H
  17. #define MMPA_WIN_MMPA_WIN_H
  18. #ifdef __cplusplus
  19. #if __cplusplus
  20. extern "C" {
  21. #endif // __cpluscplus
  22. #endif // __cpluscplus
  23. #ifdef MMPA_DLL
  24. #define MMPA_DLL_API __declspec(dllexport)
  25. #else
  26. #define MMPA_DLL_API __declspec(dllimport)
  27. #endif
  28. #define MMPA_MACINFO_DEFAULT_SIZE 18
  29. #define MMPA_CPUDESC_DEFAULT_SIZE 64
  30. #pragma section(".CRT$XCU", long, read)
  31. #pragma section(".CRT$XPU", long, read)
  32. typedef HANDLE mmMutex_t;
  33. typedef HANDLE mmThread;
  34. typedef HANDLE mmProcess;
  35. typedef HANDLE mmPollHandle;
  36. typedef HANDLE mmPipeHandle;
  37. typedef HANDLE mmFileHandle;
  38. typedef HANDLE mmCompletionHandle;
  39. typedef HANDLE mmFd_t;
  40. typedef CRITICAL_SECTION mmMutexFC;
  41. typedef CONDITION_VARIABLE mmCond;
  42. typedef VOID *(*userProcFunc)(VOID *pulArg);
  43. typedef struct {
  44. userProcFunc procFunc;
  45. VOID *pulArg;
  46. } mmUserBlock_t;
  47. typedef DWORD mmThreadKey;
  48. typedef SYSTEMTIME mmSystemTime_t;
  49. typedef HANDLE mmSem_t;
  50. typedef SOCKET mmSockHandle;
  51. typedef SRWLOCK mmRWLock_t;
  52. typedef struct sockaddr mmSockAddr;
  53. typedef int mmSocklen_t;
  54. typedef int mmSemTimeout_t;
  55. typedef long mmAtomicType;
  56. typedef long long mmAtomicType64;
  57. typedef DWORD mmExitCode;
  58. typedef DWORD mmErrorMsg;
  59. typedef int mmKey_t;
  60. typedef HANDLE mmMsgid;
  61. typedef long int mmOfft_t;
  62. typedef int mmPid_t;
  63. typedef INT32 mmSsize_t;
  64. typedef int mmSize; // size
  65. typedef size_t mmSize_t;
  66. typedef VOID mmshmId_ds;
  67. typedef long long MM_LONG;
  68. typedef enum {
  69. DT_DIR = FILE_ATTRIBUTE_DIRECTORY,
  70. } mmDtype;
  71. typedef struct {
  72. unsigned char d_type;
  73. char d_name[MAX_PATH]; // file name
  74. } mmDirent;
  75. typedef struct {
  76. unsigned long d_type;
  77. char d_name[MAX_PATH]; // file name
  78. } mmDirent2;
  79. typedef int (*mmFilter)(const mmDirent *entry);
  80. typedef int (*mmFilter2)(const mmDirent2 *entry);
  81. typedef int (*mmSort)(const mmDirent **a, const mmDirent **b);
  82. typedef int (*mmSort2)(const mmDirent2 **a, const mmDirent2 **b);
  83. typedef struct {
  84. VOID *sendBuf;
  85. INT32 sendLen;
  86. } mmIovSegment;
  87. typedef PVOID mmInAddr;
  88. typedef enum {
  89. pollTypeRead = 1, // pipeline reading
  90. pollTypeRecv, // socket receive
  91. pollTypeIoctl, // ioctl read
  92. } mmPollType;
  93. typedef struct {
  94. HANDLE completionHandle;
  95. mmPollType overlapType;
  96. OVERLAPPED oa;
  97. } mmComPletionKey, *pmmComPletionKey;
  98. typedef struct {
  99. VOID *priv; // User defined private content
  100. mmPollHandle bufHandle; // Value of handle corresponding to buf
  101. mmPollType bufType; // Data types polled to
  102. VOID *buf;
  103. UINT32 bufLen;
  104. UINT32 bufRes;
  105. } mmPollData, *pmmPollData;
  106. typedef VOID (*mmPollBack)(pmmPollData);
  107. typedef struct {
  108. mmPollHandle handle; // The file descriptor or handle of poll is required
  109. mmPollType pollType; // Operation type requiring poll,read or recv or ioctl
  110. INT32 ioctlCode; // IOCTL operation code, dedicated to IOCTL
  111. mmComPletionKey completionKey; // The default value is blank, which will be used in windows to receive the data with
  112. // different handle
  113. } mmPollfd;
  114. typedef struct {
  115. OVERLAPPED oa;
  116. HANDLE completionHandle;
  117. WSABUF DataBuf;
  118. } PRE_IO_DATA, *PPRE_IO_DATA;
  119. typedef OVERLAPPED mmOverLap;
  120. typedef struct {
  121. UINT32 createFlag;
  122. INT32 oaFlag; // Overlap operation is supported if it is not 0
  123. } mmCreateFlag;
  124. typedef struct {
  125. VOID *inbuf;
  126. INT32 inbufLen;
  127. VOID *outbuf;
  128. INT32 outbufLen;
  129. mmOverLap *oa;
  130. } mmIoctlBuf;
  131. typedef struct {
  132. HANDLE timerQueue;
  133. HANDLE timerHandle;
  134. } mmTimerHandle;
  135. typedef struct {
  136. LONG tv_sec;
  137. LONG tv_usec;
  138. } mmTimeval;
  139. typedef struct {
  140. INT32 tz_minuteswest; // How many minutes is it different from Greenwich
  141. INT32 tz_dsttime; // DST correction type
  142. } mmTimezone;
  143. typedef struct {
  144. MM_LONG tv_sec;
  145. MM_LONG tv_nsec;
  146. } mmTimespec;
  147. typedef mmTimerHandle mmTimer;
  148. #define mmTLS __declspec(thread)
  149. typedef struct stat mmStat_t;
  150. typedef struct _stat64 mmStat64_t;
  151. typedef int mmMode_t;
  152. typedef int MODE;
  153. typedef struct {
  154. const char *name;
  155. int has_arg;
  156. int *flag;
  157. int val;
  158. } mmStructOption;
  159. typedef struct {
  160. ULONGLONG totalSize;
  161. ULONGLONG freeSize;
  162. ULONGLONG availSize;
  163. } mmDiskSize;
  164. typedef struct {
  165. const char *dli_fname;
  166. void *dli_fbase;
  167. const char *dli_sname;
  168. void *dli_saddr;
  169. size_t dli_size; /* ELF only */
  170. int dli_bind; /* ELF only */
  171. int dli_type;
  172. } mmDlInfo;
  173. typedef struct {
  174. char addr[MMPA_MACINFO_DEFAULT_SIZE]; // ex:aa-bb-cc-dd-ee-ff\0
  175. } mmMacInfo;
  176. typedef struct {
  177. char arch[MMPA_CPUDESC_DEFAULT_SIZE];
  178. char manufacturer[MMPA_CPUDESC_DEFAULT_SIZE]; // vendor
  179. char version[MMPA_CPUDESC_DEFAULT_SIZE]; // modelname
  180. INT32 frequency; // cpu frequency
  181. INT32 maxFrequency; // max speed
  182. INT32 ncores; // cpu cores
  183. INT32 nthreads; // cpu thread count
  184. INT32 ncounts; // logical cpu nums
  185. } mmCpuDesc;
  186. typedef struct {
  187. char **argv;
  188. INT32 argvCount;
  189. char **envp;
  190. INT32 envpCount;
  191. } mmArgvEnv;
  192. // Windows currently does not support properties other than thread separation properties
  193. typedef struct {
  194. INT32 detachFlag; // Thread detach property: 0 do not detach 1 detach
  195. INT32 priorityFlag;
  196. INT32 priority;
  197. INT32 policyFlag;
  198. INT32 policy;
  199. INT32 stackFlag;
  200. UINT32 stackSize;
  201. } mmThreadAttr;
  202. typedef VOID (*mmPf)(VOID);
  203. #define mm_no_argument 0
  204. #define mm_required_argument 1
  205. #define mm_optional_argument 2
  206. #define M_FILE_RDONLY GENERIC_READ
  207. #define M_FILE_WRONLY GENERIC_WRITE
  208. #define M_FILE_RDWR (GENERIC_READ | GENERIC_WRITE)
  209. #define M_FILE_CREAT OPEN_ALWAYS
  210. #define M_RDONLY _O_RDONLY
  211. #define M_WRONLY _O_WRONLY
  212. #define M_RDWR _O_RDWR
  213. #define M_IRWXU _O_RDWR
  214. #define M_CREAT _O_CREAT
  215. #define M_BINARY _O_BINARY
  216. #define M_TRUNC _O_TRUNC
  217. #define M_APPEND _O_APPEND
  218. #define M_IREAD _S_IREAD
  219. #define M_IRUSR _S_IREAD
  220. #define M_IWRITE _S_IWRITE
  221. #define M_IWUSR _S_IWRITE
  222. #define M_IXUSR 0
  223. #define M_IN_CREATE FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME
  224. #define M_IN_CLOSE_WRITE FILE_NOTIFY_CHANGE_LAST_WRITE
  225. #define M_IN_IGNORED FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME
  226. #define M_OUT_CREATE 0x00000100
  227. #define M_OUT_CLOSE_WRITE 0x00000008
  228. #define M_OUT_IGNORED 0x00008000
  229. #define M_OUT_ISDIR 0x40000000
  230. #define M_MSG_CREAT 1
  231. #define M_MSG_EXCL 2
  232. #define M_MSG_NOWAIT 3
  233. #define M_WAIT_NOHANG 1
  234. #define M_WAIT_UNTRACED 2
  235. #define M_UMASK_USRREAD _S_IREAD
  236. #define M_UMASK_GRPREAD _S_IREAD
  237. #define M_UMASK_OTHREAD _S_IREAD
  238. #define M_UMASK_USRWRITE _S_IWRITE
  239. #define M_UMASK_GRPWRITE _S_IWRITE
  240. #define M_UMASK_OTHWRITE _S_IWRITE
  241. #define M_UMASK_USREXEC 0
  242. #define M_UMASK_GRPEXEC 0
  243. #define M_UMASK_OTHEXEC 0
  244. #define DT_UNKNOWN 0
  245. #define DT_FIFO 1
  246. #define DT_CHR 2
  247. #define DT_BLK 6
  248. #define DT_REG 8
  249. #define DT_LNK 10
  250. #define DT_SOCK 12
  251. #define DT_WHT 14
  252. #define MM_DT_DIR 16
  253. #define MM_DT_REG 32
  254. #define mmConstructor(x) __declspec(allocate(".CRT$XCU")) mmPf con = x
  255. #define mmDestructor(x) __declspec(allocate(".CRT$XPU")) mmPf de = x
  256. #define MMPA_PRINT_ERROR ((opterr) && (*options != ':'))
  257. #define MMPA_FLAG_PERMUTE 0x01 // permute non-options to the end of argv
  258. #define MMPA_FLAG_ALLARGS 0x02 // treat non-options as args to option "-1"
  259. #define MMPA_FLAG_LONGONLY 0x04 // operate as getopt_long_only
  260. // return values
  261. #define MMPA_BADCH (INT32)'?'
  262. #define MMPA_BADARG ((*options == ':') ? (INT32)':' : (INT32)'?')
  263. #define MMPA_INORDER (INT32)1
  264. #define MMPA_NO_ARGUMENT 0
  265. #define MMPA_REQUIRED_ARGUMENT 1
  266. #define MMPA_OPTIONAL_ARGUMENT 2
  267. #define MMPA_EMSG ""
  268. #define MMPA_MAX_PATH MAX_PATH
  269. #define M_NAME_MAX _MAX_FNAME
  270. #define M_F_OK 0
  271. #define M_X_OK 1
  272. #define M_W_OK 2
  273. #define M_R_OK 4
  274. #define MMPA_STDIN stdin
  275. #define MMPA_STDOUT stdout
  276. #define MMPA_STDERR stderr
  277. #define MMPA_RTLD_NOW 0
  278. #define MMPA_RTLD_GLOBAL 0
  279. #define MMPA_RTLD_LAZY 0
  280. #define MMPA_RTLD_NODELETE 0
  281. #define MMPA_DL_EXT_NAME ".dll"
  282. #define __attribute__(v)
  283. MMPA_FUNC_VISIBILITY INT32 mmCreateTask(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  284. MMPA_FUNC_VISIBILITY INT32 mmJoinTask(mmThread *threadHandle);
  285. MMPA_FUNC_VISIBILITY INT32 mmMutexInit(mmMutex_t *mutex);
  286. MMPA_FUNC_VISIBILITY INT32 mmMutexLock(mmMutex_t *mutex);
  287. MMPA_FUNC_VISIBILITY INT32 mmMutexTryLock(mmMutex_t *mutex);
  288. MMPA_FUNC_VISIBILITY INT32 mmMutexUnLock(mmMutex_t *mutex);
  289. MMPA_FUNC_VISIBILITY INT32 mmMutexDestroy(mmMutex_t *mutex);
  290. MMPA_FUNC_VISIBILITY INT32 mmCondInit(mmCond *cond);
  291. MMPA_FUNC_VISIBILITY INT32 mmCondLockInit(mmMutexFC *mutex);
  292. MMPA_FUNC_VISIBILITY INT32 mmCondLock(mmMutexFC *mutex);
  293. MMPA_FUNC_VISIBILITY INT32 mmCondUnLock(mmMutexFC *mutex);
  294. MMPA_FUNC_VISIBILITY INT32 mmCondLockDestroy(mmMutexFC *mutex);
  295. MMPA_FUNC_VISIBILITY INT32 mmRWLockInit(mmRWLock_t *rwLock);
  296. MMPA_FUNC_VISIBILITY INT32 mmRWLockRDLock(mmRWLock_t *rwLock);
  297. MMPA_FUNC_VISIBILITY INT32 mmRWLockTryRDLock(mmRWLock_t *rwLock);
  298. MMPA_FUNC_VISIBILITY INT32 mmRWLockWRLock(mmRWLock_t *rwLock);
  299. MMPA_FUNC_VISIBILITY INT32 mmRWLockTryWRLock(mmRWLock_t *rwLock);
  300. MMPA_FUNC_VISIBILITY INT32 mmRDLockUnLock(mmRWLock_t *rwLock);
  301. MMPA_FUNC_VISIBILITY INT32 mmWRLockUnLock(mmRWLock_t *rwLock);
  302. MMPA_FUNC_VISIBILITY INT32 mmRWLockDestroy(mmRWLock_t *rwLock);
  303. MMPA_FUNC_VISIBILITY INT32 mmCondWait(mmCond *cond, mmMutexFC *mutex);
  304. MMPA_FUNC_VISIBILITY INT32 mmCondTimedWait(mmCond *cond, mmMutexFC *mutex, UINT32 milliSecond);
  305. MMPA_FUNC_VISIBILITY INT32 mmCondNotify(mmCond *cond);
  306. MMPA_FUNC_VISIBILITY INT32 mmCondNotifyAll(mmCond *cond);
  307. MMPA_FUNC_VISIBILITY INT32 mmCondDestroy(mmCond *cond);
  308. MMPA_FUNC_VISIBILITY INT32 mmGetPid(VOID);
  309. MMPA_FUNC_VISIBILITY INT32 mmGetTid(VOID);
  310. MMPA_FUNC_VISIBILITY INT32 mmGetPidHandle(mmProcess *processHandle);
  311. MMPA_FUNC_VISIBILITY INT32 mmGetLocalTime(mmSystemTime_t *sysTime);
  312. MMPA_FUNC_VISIBILITY INT32 mmGetSystemTime(mmSystemTime_t *sysTime);
  313. MMPA_FUNC_VISIBILITY INT32 mmSemInit(mmSem_t *sem, UINT32 value);
  314. MMPA_FUNC_VISIBILITY INT32 mmSemWait(mmSem_t *sem);
  315. MMPA_FUNC_VISIBILITY INT32 mmSemPost(mmSem_t *sem);
  316. MMPA_FUNC_VISIBILITY INT32 mmSemDestroy(mmSem_t *sem);
  317. MMPA_FUNC_VISIBILITY INT32 mmOpen(const CHAR *pathName, INT32 flags);
  318. MMPA_FUNC_VISIBILITY INT32 mmOpen2(const CHAR *pathName, INT32 flags, MODE mode);
  319. MMPA_FUNC_VISIBILITY FILE *mmPopen(CHAR *command, CHAR *type);
  320. MMPA_FUNC_VISIBILITY INT32 mmClose(INT32 fd);
  321. MMPA_FUNC_VISIBILITY INT32 mmPclose(FILE *stream);
  322. MMPA_FUNC_VISIBILITY mmSsize_t mmWrite(INT32 fd, VOID *buf, UINT32 bufLen);
  323. MMPA_FUNC_VISIBILITY mmSsize_t mmRead(INT32 fd, VOID *buf, UINT32 bufLen);
  324. MMPA_FUNC_VISIBILITY mmSockHandle mmSocket(INT32 sockFamily, INT32 type, INT32 protocol);
  325. MMPA_FUNC_VISIBILITY INT32 mmBind(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  326. MMPA_FUNC_VISIBILITY INT32 mmListen(mmSockHandle sockFd, INT32 backLog);
  327. MMPA_FUNC_VISIBILITY mmSockHandle mmAccept(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t *addrLen);
  328. MMPA_FUNC_VISIBILITY INT32 mmConnect(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  329. MMPA_FUNC_VISIBILITY INT32 mmCloseSocket(mmSockHandle sockFd);
  330. MMPA_FUNC_VISIBILITY mmSsize_t mmSocketRecv(mmSockHandle sockFd, VOID *recvBuf, INT32 recvLen, INT32 recvFlag);
  331. MMPA_FUNC_VISIBILITY mmSsize_t mmSocketSend(mmSockHandle sockFd, VOID *sendBuf, INT32 sendLen, INT32 sendFlag);
  332. MMPA_FUNC_VISIBILITY INT32 mmSocketSendTo(mmSockHandle sockFd,
  333. VOID *sendMsg,
  334. INT32 sendLen,
  335. UINT32 sendFlag,
  336. const mmSockAddr* addr,
  337. INT32 tolen);
  338. MMPA_FUNC_VISIBILITY mmSsize_t mmSocketRecvFrom(mmSockHandle sockFd,
  339. VOID *recvBuf,
  340. mmSize recvLen,
  341. UINT32 recvFlag,
  342. mmSockAddr* addr,
  343. mmSocklen_t *FromLen);
  344. MMPA_FUNC_VISIBILITY INT32 mmSAStartup(VOID);
  345. MMPA_FUNC_VISIBILITY INT32 mmSACleanup(VOID);
  346. MMPA_FUNC_VISIBILITY VOID *mmDlopen(const CHAR *fileName, INT mode);
  347. MMPA_FUNC_VISIBILITY INT32 mmDladdr(VOID *addr, mmDlInfo *info);
  348. MMPA_FUNC_VISIBILITY VOID *mmDlsym(VOID *handle, const CHAR *fileName);
  349. MMPA_FUNC_VISIBILITY INT32 mmDlclose(VOID *handle);
  350. MMPA_FUNC_VISIBILITY CHAR *mmDlerror(VOID);
  351. MMPA_FUNC_VISIBILITY INT32
  352. mmCreateAndSetTimer(mmTimer *timerHandle, mmUserBlock_t *timerBlock, UINT milliSecond, UINT period);
  353. MMPA_FUNC_VISIBILITY INT32 mmDeleteTimer(mmTimer timerHandle);
  354. MMPA_FUNC_VISIBILITY INT32 mmStatGet(const CHAR *path, mmStat_t *buffer);
  355. MMPA_FUNC_VISIBILITY INT32 mmStat64Get(const CHAR *path, mmStat64_t *buffer);
  356. MMPA_FUNC_VISIBILITY INT32 mmFStatGet(INT32 fd, mmStat_t *buffer);
  357. MMPA_FUNC_VISIBILITY INT32 mmMkdir(const CHAR *pathName, mmMode_t mode);
  358. MMPA_FUNC_VISIBILITY INT32 mmSleep(UINT32 milliSecond);
  359. MMPA_FUNC_VISIBILITY INT32 mmCreateTaskWithAttr(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  360. MMPA_FUNC_VISIBILITY INT32 mmGetProcessPrio(mmProcess pid);
  361. MMPA_FUNC_VISIBILITY INT32 mmSetProcessPrio(mmProcess pid, INT32 processPrio);
  362. MMPA_FUNC_VISIBILITY INT32 mmGetThreadPrio(mmThread *threadHandle);
  363. MMPA_FUNC_VISIBILITY INT32 mmSetThreadPrio(mmThread *threadHandle, INT32 threadPrio);
  364. MMPA_FUNC_VISIBILITY INT32 mmAccess(const CHAR *pathName);
  365. MMPA_FUNC_VISIBILITY INT32 mmAccess2(const CHAR *pathName, INT32 mode);
  366. MMPA_FUNC_VISIBILITY INT32 mmRmdir(const CHAR *pathName);
  367. MMPA_FUNC_VISIBILITY INT32 mmIoctl(mmProcess fd, INT32 ioctlCode, mmIoctlBuf *bufPtr);
  368. MMPA_FUNC_VISIBILITY INT32 mmSemTimedWait(mmSem_t *sem, INT32 timeout);
  369. MMPA_FUNC_VISIBILITY mmSsize_t mmWritev(mmSockHandle fd, mmIovSegment *iov, INT32 iovcnt);
  370. MMPA_FUNC_VISIBILITY VOID mmMb();
  371. MMPA_FUNC_VISIBILITY INT32 mmInetAton(const CHAR *addrStr, mmInAddr *addr);
  372. MMPA_FUNC_VISIBILITY mmProcess mmOpenFile(const CHAR *fileName, UINT32 access, mmCreateFlag fileFlag);
  373. MMPA_FUNC_VISIBILITY mmSsize_t mmReadFile(mmProcess fileId, VOID *buffer, INT32 len);
  374. MMPA_FUNC_VISIBILITY mmSsize_t mmWriteFile(mmProcess fileId, VOID *buffer, INT32 len);
  375. MMPA_FUNC_VISIBILITY INT32 mmCloseFile(mmProcess fileId);
  376. MMPA_FUNC_VISIBILITY mmAtomicType mmSetData(mmAtomicType *ptr, mmAtomicType value);
  377. MMPA_FUNC_VISIBILITY mmAtomicType mmValueInc(mmAtomicType *ptr, mmAtomicType value);
  378. MMPA_FUNC_VISIBILITY mmAtomicType mmValueSub(mmAtomicType *ptr, mmAtomicType value);
  379. MMPA_FUNC_VISIBILITY mmAtomicType64 mmSetData64(mmAtomicType64 *ptr, mmAtomicType64 value);
  380. MMPA_FUNC_VISIBILITY mmAtomicType64 mmValueInc64(mmAtomicType64 *ptr, mmAtomicType64 value);
  381. MMPA_FUNC_VISIBILITY mmAtomicType64 mmValueSub64(mmAtomicType64 *ptr, mmAtomicType64 value);
  382. MMPA_FUNC_VISIBILITY INT32 mmCreateTaskWithDetach(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  383. MMPA_FUNC_VISIBILITY INT32 mmCreateNamedPipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  384. MMPA_FUNC_VISIBILITY INT32 mmOpenNamePipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  385. MMPA_FUNC_VISIBILITY VOID mmCloseNamedPipe(mmPipeHandle namedPipe[]);
  386. MMPA_FUNC_VISIBILITY INT32 mmCreatePipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  387. MMPA_FUNC_VISIBILITY INT32 mmOpenPipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  388. MMPA_FUNC_VISIBILITY VOID mmClosePipe(mmPipeHandle pipe[], UINT32 pipeCount);
  389. MMPA_FUNC_VISIBILITY mmCompletionHandle mmCreateCompletionPort();
  390. MMPA_FUNC_VISIBILITY VOID mmCloseCompletionPort(mmCompletionHandle handle);
  391. MMPA_FUNC_VISIBILITY INT32 mmPoll(mmPollfd *fds, INT32 fdCount, INT32 timeout, mmCompletionHandle handleIOCP,
  392. pmmPollData polledData, mmPollBack pollBack);
  393. MMPA_FUNC_VISIBILITY INT32 mmGetErrorCode();
  394. MMPA_FUNC_VISIBILITY CHAR *mmGetErrorFormatMessage(mmErrorMsg errnum, CHAR *buf, mmSize size);
  395. MMPA_FUNC_VISIBILITY INT32 mmGetTimeOfDay(mmTimeval *timeVal, mmTimezone *timeZone);
  396. MMPA_FUNC_VISIBILITY mmTimespec mmGetTickCount();
  397. MMPA_FUNC_VISIBILITY INT32 mmGetRealPath(CHAR *path, CHAR *realPath);
  398. MMPA_FUNC_VISIBILITY INT32 mmRealPath(const CHAR *path, CHAR *realPath, INT32 realPathLen);
  399. MMPA_FUNC_VISIBILITY INT32 mmDup2(INT32 oldFd, INT32 newFd);
  400. MMPA_FUNC_VISIBILITY INT32 mmDup(INT32 fd);
  401. MMPA_FUNC_VISIBILITY INT32 mmUnlink(const CHAR *filename);
  402. MMPA_FUNC_VISIBILITY INT32 mmChmod(const CHAR *filename, INT32 mode);
  403. MMPA_FUNC_VISIBILITY INT32 mmFileno(FILE *stream);
  404. MMPA_FUNC_VISIBILITY INT32 mmScandir(const CHAR *path, mmDirent ***entryList, mmFilter filterFunc, mmSort sort);
  405. MMPA_FUNC_VISIBILITY INT32 mmScandir2(const CHAR *path, mmDirent2 ***entryList, mmFilter2 filterFunc, mmSort2 sort);
  406. MMPA_FUNC_VISIBILITY VOID mmScandirFree(mmDirent **entryList, INT32 count);
  407. MMPA_FUNC_VISIBILITY VOID mmScandirFree2(mmDirent2 **entryList, INT32 count);
  408. MMPA_FUNC_VISIBILITY mmMsgid mmMsgCreate(mmKey_t key, INT32 msgFlag);
  409. MMPA_FUNC_VISIBILITY mmMsgid mmMsgOpen(mmKey_t key, INT32 msgFlag);
  410. MMPA_FUNC_VISIBILITY INT32 mmMsgRcv(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  411. MMPA_FUNC_VISIBILITY INT32 mmMsgSnd(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  412. MMPA_FUNC_VISIBILITY INT32 mmMsgClose(mmMsgid msqid);
  413. MMPA_FUNC_VISIBILITY INT32 mmLocalTimeR(const time_t *timep, struct tm *result);
  414. MMPA_FUNC_VISIBILITY INT32 mmGetOptErr();
  415. MMPA_FUNC_VISIBILITY VOID mmSetOptErr(INT32 mmOptErr);
  416. MMPA_FUNC_VISIBILITY INT32 mmGetOptInd();
  417. MMPA_FUNC_VISIBILITY VOID mmSetOptInd(INT32 mmOptInd);
  418. MMPA_FUNC_VISIBILITY INT32 mmGetOptOpt();
  419. MMPA_FUNC_VISIBILITY VOID mmSetOpOpt(INT32 mmOptOpt);
  420. MMPA_FUNC_VISIBILITY CHAR *mmGetOptArg();
  421. MMPA_FUNC_VISIBILITY VOID mmSetOptArg(CHAR *mmOptArg);
  422. MMPA_FUNC_VISIBILITY INT32 mmGetOpt(INT32 argc, char *const *argv, const char *opts);
  423. MMPA_FUNC_VISIBILITY INT32
  424. mmGetOptLong(INT32 argc, CHAR *const *argv, const CHAR *opts, const mmStructOption *longopts, INT32 *longindex);
  425. MMPA_FUNC_VISIBILITY LONG mmLseek(INT32 fd, INT64 offset, INT32 seekFlag);
  426. MMPA_FUNC_VISIBILITY INT32 mmFtruncate(mmProcess fd, UINT32 length);
  427. MMPA_FUNC_VISIBILITY INT32 mmTlsCreate(mmThreadKey *key, VOID (*destructor)(VOID *));
  428. MMPA_FUNC_VISIBILITY INT32 mmTlsSet(mmThreadKey key, const VOID *value);
  429. MMPA_FUNC_VISIBILITY VOID *mmTlsGet(mmThreadKey key);
  430. MMPA_FUNC_VISIBILITY INT32 mmTlsDelete(mmThreadKey key);
  431. MMPA_FUNC_VISIBILITY INT32 mmGetOsType();
  432. MMPA_FUNC_VISIBILITY INT32 mmFsync(mmProcess fd);
  433. MMPA_FUNC_VISIBILITY INT32 mmFsync2(INT32 fd);
  434. MMPA_FUNC_VISIBILITY INT32 mmChdir(const CHAR *path);
  435. MMPA_FUNC_VISIBILITY INT32 mmUmask(INT32 pmode);
  436. MMPA_FUNC_VISIBILITY INT32 mmWaitPid(mmProcess pid, INT32 *status, INT32 options);
  437. MMPA_FUNC_VISIBILITY INT32 mmGetCwd(CHAR *buffer, INT32 maxLen);
  438. MMPA_FUNC_VISIBILITY CHAR *mmStrTokR(CHAR *str, const CHAR *delim, CHAR **saveptr);
  439. MMPA_FUNC_VISIBILITY INT32 mmGetEnv(const CHAR *name, CHAR *value, UINT32 len);
  440. MMPA_FUNC_VISIBILITY INT32 mmSetEnv(const CHAR *name, const CHAR *value, INT32 overwrite);
  441. MMPA_FUNC_VISIBILITY CHAR *mmDirName(CHAR *path);
  442. MMPA_FUNC_VISIBILITY CHAR *mmBaseName(CHAR *path);
  443. MMPA_FUNC_VISIBILITY INT32 mmGetDiskFreeSpace(const char *path, mmDiskSize *diskSize);
  444. MMPA_FUNC_VISIBILITY INT32 mmSetThreadName(mmThread *threadHandle, const CHAR *name);
  445. MMPA_FUNC_VISIBILITY INT32 mmGetThreadName(mmThread *threadHandle, CHAR *name, INT32 size);
  446. /*
  447. * Function: set the thread name of the currently executing thread - internal call of thread, which is not supported
  448. * under Windows temporarily, and is null.
  449. * Input: name: the thread name to be set
  450. * The input parameter error returns EN_INVALID_PARAM, the execution success returns EN_OK, and the
  451. * execution failure returns EN_ERROR
  452. */
  453. MMPA_FUNC_VISIBILITY INT32 mmSetCurrentThreadName(const CHAR *name);
  454. /*
  455. * Function: Get the thread name of the currently executing thread - thread body call, not supported under windows, null
  456. * implementation.
  457. * Input:name:The name of the thread to get, and the cache is allocated by the user,size>=MMPA_THREADNAME_SIZE.
  458. * The input parameter error returns EN_INVALID_PARAM, the execution success returns
  459. * EN_OK, and the execution failure returns EN_ERROR
  460. */
  461. MMPA_FUNC_VISIBILITY INT32 mmGetCurrentThreadName(CHAR *name, INT32 size);
  462. MMPA_FUNC_VISIBILITY INT32 mmGetFileSize(const CHAR *fileName, ULONGLONG *length);
  463. MMPA_FUNC_VISIBILITY INT32 mmIsDir(const CHAR *fileName);
  464. MMPA_FUNC_VISIBILITY INT32 mmGetOsName(CHAR *name, INT32 nameSize);
  465. MMPA_FUNC_VISIBILITY INT32 mmGetOsVersion(CHAR *versionInfo, INT32 versionLength);
  466. MMPA_FUNC_VISIBILITY INT32 mmGetMac(mmMacInfo **list, INT32 *count);
  467. MMPA_FUNC_VISIBILITY INT32 mmGetMacFree(mmMacInfo *list, INT32 count);
  468. MMPA_FUNC_VISIBILITY INT32 mmGetCpuInfo(mmCpuDesc **cpuInfo, INT32 *count);
  469. MMPA_FUNC_VISIBILITY INT32 mmCpuInfoFree(mmCpuDesc *cpuInfo, INT32 count);
  470. MMPA_FUNC_VISIBILITY INT32
  471. mmCreateProcess(const CHAR *fileName, const mmArgvEnv *env, const char *stdoutRedirectFile, mmProcess *id);
  472. MMPA_FUNC_VISIBILITY INT32
  473. mmCreateTaskWithThreadAttr(mmThread *threadHandle, const mmUserBlock_t *funcBlock, const mmThreadAttr *threadAttr);
  474. MMPA_FUNC_VISIBILITY mmFileHandle mmShmOpen(const CHAR *name, INT32 oflag, mmMode_t mode);
  475. MMPA_FUNC_VISIBILITY INT32 mmShmUnlink(const CHAR *name);
  476. MMPA_FUNC_VISIBILITY VOID *mmMmap(mmFd_t fd, mmSize_t size, mmOfft_t offset, mmFd_t *extra, INT32 prot, INT32 flags);
  477. MMPA_FUNC_VISIBILITY INT32 mmMunMap(VOID *data, mmSize_t size, mmFd_t *extra);
  478. MMPA_FUNC_VISIBILITY mmSize mmGetPageSize();
  479. MMPA_FUNC_VISIBILITY VOID *mmAlignMalloc(mmSize mallocSize, mmSize alignSize);
  480. MMPA_FUNC_VISIBILITY VOID mmAlignFree(VOID *addr);
  481. #ifdef __cplusplus
  482. #if __cplusplus
  483. }
  484. #endif /* __cpluscplus */
  485. #endif // __cpluscplus
  486. #endif // MMPA_WIN_MMPA_WIN_H_

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