| /* |
| Copyright (c) 2014-2016 Intel Corporation. All Rights Reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| * Neither the name of Intel Corporation nor the names of its |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| |
| #ifndef OFFLOAD_ENV_H_INCLUDED |
| #define OFFLOAD_ENV_H_INCLUDED |
| |
| #include <list> |
| #include "offload_util.h" |
| |
| // data structure and routines to parse MIC user environment and pass to MIC |
| |
| enum MicEnvVarKind |
| { |
| c_no_mic, // not MIC env var |
| c_mic_var, // for <mic-prefix>_<var> |
| c_mic_card_var, // for <mic-prefix>_<card-number>_<var> |
| c_mic_card_env // for <mic-prefix>_<card-number>_ENV |
| }; |
| |
| struct DLL_LOCAL MicEnvVar { |
| public: |
| MicEnvVar() : prefix(0) {} |
| ~MicEnvVar(); |
| |
| void analyze_env_var(char *env_var_string); |
| char** create_environ_for_card(int card_num); |
| MicEnvVarKind get_env_var_kind( |
| char *env_var_string, |
| int *card_number, |
| char **env_var_name, |
| int *env_var_name_length, |
| char **env_var_def |
| ); |
| void add_env_var( |
| int card_number, |
| char *env_var_name, |
| int env_var_name_length, |
| char *env_var_def |
| ); |
| |
| void set_prefix(const char *pref) { |
| prefix = (pref && *pref != '\0') ? pref : 0; |
| } |
| |
| struct VarValue { |
| public: |
| char* env_var; |
| int length; |
| char* env_var_value; |
| |
| VarValue(char* var, int ln, char* value) |
| { |
| env_var = var; |
| length = ln; |
| env_var_value = value; |
| } |
| ~VarValue(); |
| }; |
| |
| struct CardEnvVars { |
| public: |
| |
| int card_number; |
| std::list<struct VarValue*> env_vars; |
| |
| CardEnvVars() { card_number = any_card; } |
| CardEnvVars(int num) { card_number = num; } |
| ~CardEnvVars(); |
| |
| void add_new_env_var(int number, char *env_var, int length, |
| char *env_var_value); |
| VarValue* find_var(char* env_var_name, int env_var_name_length); |
| }; |
| static const int any_card; |
| |
| private: |
| void mic_parse_env_var_list(int card_number, char *env_var_def); |
| CardEnvVars* get_card(int number); |
| |
| const char *prefix; |
| std::list<struct CardEnvVars *> card_spec_list; |
| CardEnvVars common_vars; |
| }; |
| |
| #endif // OFFLOAD_ENV_H_INCLUDED |