diff options
author | yalei wang <wylandrea@gmail.com> | 2018-08-27 02:21:23 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@fd.io> | 2018-08-27 02:21:23 +0000 |
commit | 496c79e387313825c37b303b1c9fc123e34e6165 (patch) | |
tree | 466fbc34feba5c98cfb3dae535eb6f04e41886c0 /src/framework/mem/dmm_share.h | |
parent | ea6eab2f7fb9e849c719fa7374616cc1d6b736a3 (diff) | |
parent | b63ec47559ad7b90f348dd733b805d78d156893d (diff) |
Merge "Feat: add new share memory module"
Diffstat (limited to 'src/framework/mem/dmm_share.h')
-rw-r--r-- | src/framework/mem/dmm_share.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/framework/mem/dmm_share.h b/src/framework/mem/dmm_share.h new file mode 100644 index 0000000..0d0ff8f --- /dev/null +++ b/src/framework/mem/dmm_share.h @@ -0,0 +1,114 @@ +/* +* +* Copyright (c) 2018 Huawei Technologies Co.,Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at: +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +#ifndef _DMM_SHARE_H_ +#define _DMM_SHARE_H_ + +#define DMM_SHARE_PATH_MAX 100 + +enum dmm_share_type +{ + DMM_SHARE_HEAP, + DMM_SHARE_FSHM, + DMM_SHARE_HUGE, + + DMM_SHARE_ANY = -1 +}; + +struct dmm_share +{ + int type; /* share type enum dmm_share_type */ + pid_t pid; /* owner/creator pid */ + void *base; /* base logical address */ + size_t size; /* memory size */ + char path[DMM_SHARE_PATH_MAX]; /* share path */ +}; + +int dmm_heap_create (struct dmm_share *share); +int dmm_heap_delete (struct dmm_share *share); +int dmm_heap_attach (struct dmm_share *share); +int dmm_heap_detach (struct dmm_share *share); + +int dmm_fshm_create (struct dmm_share *share); +int dmm_fshm_delete (struct dmm_share *share); +int dmm_fshm_attach (struct dmm_share *share); +int dmm_fshm_detach (struct dmm_share *share); + +int dmm_huge_create (struct dmm_share *share); +int dmm_huge_delete (struct dmm_share *share); +int dmm_huge_attach (struct dmm_share *share); +int dmm_huge_detach (struct dmm_share *share); + +#define DMM_SHARE_DISPATCH(share, action) \ +({ \ + int _r; \ + switch (share->type) \ + { \ + case DMM_SHARE_HEAP: \ + _r = dmm_heap_##action(share); \ + break; \ + case DMM_SHARE_FSHM: \ + _r = dmm_fshm_##action(share); \ + break; \ + case DMM_SHARE_HUGE: \ + _r = dmm_huge_##action(share); \ + break; \ + default: \ + _r = -1; \ + } \ + _r; \ +}) + +/* create share memory +input: share->type, share->size, share->pid +output: share->base, share->path +*/ +inline static int +dmm_share_create (struct dmm_share *share) +{ + return DMM_SHARE_DISPATCH (share, create); +} + +/* delete share memory +input: share->type, share->base, share->size, share->path +*/ +inline static int +dmm_share_delete (struct dmm_share *share) +{ + return DMM_SHARE_DISPATCH (share, delete); +} + +/* attach share memory +input: share->type share->path [share->size] [share->base] +output: share->base, share->size +*/ +inline static int +dmm_share_attach (struct dmm_share *share) +{ + return DMM_SHARE_DISPATCH (share, attach); +} + +/* attach share memory +input: share->type share->size share->base +*/ +inline static int +dmm_share_detach (struct dmm_share *share) +{ + return DMM_SHARE_DISPATCH (share, detach); +} + +#undef DMM_SHARE_DISPATCH + +#endif /* #ifndef _DMM_SHARE_H_ */ |