|  | /* | 
|  | * Copyright (C) 2022 The Android Open Source Project | 
|  | * | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | #include "TrustyStatus.h" | 
|  | #include "../RpcState.h" | 
|  |  | 
|  | namespace android { | 
|  |  | 
|  | status_t statusFromTrusty(int rc) { | 
|  | LOG_RPC_DETAIL("Trusty error: %d", rc); | 
|  | switch (rc) { | 
|  | case NO_ERROR: | 
|  | return OK; | 
|  | case ERR_NOT_FOUND: | 
|  | return NAME_NOT_FOUND; | 
|  | case ERR_NOT_READY: | 
|  | // We get this error if we try to perform an IPC operation when the | 
|  | // channel is not ready | 
|  | return INVALID_OPERATION; | 
|  | case ERR_NO_MSG: | 
|  | return WOULD_BLOCK; | 
|  | case ERR_NO_MEMORY: | 
|  | return NO_MEMORY; | 
|  | case ERR_INVALID_ARGS: | 
|  | return BAD_VALUE; | 
|  | case ERR_NOT_ENOUGH_BUFFER: | 
|  | return WOULD_BLOCK; | 
|  | case ERR_TIMED_OUT: | 
|  | return TIMED_OUT; | 
|  | case ERR_ALREADY_EXISTS: | 
|  | return ALREADY_EXISTS; | 
|  | case ERR_CHANNEL_CLOSED: | 
|  | return DEAD_OBJECT; | 
|  | case ERR_NOT_ALLOWED: | 
|  | return INVALID_OPERATION; | 
|  | case ERR_NOT_SUPPORTED: | 
|  | return INVALID_OPERATION; | 
|  | case ERR_TOO_BIG: | 
|  | return BAD_INDEX; | 
|  | case ERR_CMD_UNKNOWN: | 
|  | return UNKNOWN_TRANSACTION; | 
|  | case ERR_BAD_STATE: | 
|  | return INVALID_OPERATION; | 
|  | case ERR_BAD_LEN: | 
|  | return NOT_ENOUGH_DATA; | 
|  | case ERR_BAD_HANDLE: | 
|  | return BAD_VALUE; | 
|  | case ERR_ACCESS_DENIED: | 
|  | return PERMISSION_DENIED; | 
|  | default: | 
|  | return UNKNOWN_ERROR; | 
|  | } | 
|  | } | 
|  |  | 
|  | int statusToTrusty(status_t status) { | 
|  | switch (status) { | 
|  | case OK: | 
|  | return NO_ERROR; | 
|  | case NO_MEMORY: | 
|  | return ERR_NO_MEMORY; | 
|  | case INVALID_OPERATION: | 
|  | case BAD_VALUE: | 
|  | case BAD_TYPE: | 
|  | return ERR_NOT_VALID; | 
|  | case NAME_NOT_FOUND: | 
|  | return ERR_NOT_FOUND; | 
|  | case PERMISSION_DENIED: | 
|  | return ERR_ACCESS_DENIED; | 
|  | case NO_INIT: | 
|  | return ERR_NOT_CONFIGURED; | 
|  | case ALREADY_EXISTS: | 
|  | return ERR_ALREADY_EXISTS; | 
|  | case DEAD_OBJECT: | 
|  | return ERR_CHANNEL_CLOSED; | 
|  | case BAD_INDEX: | 
|  | return ERR_TOO_BIG; | 
|  | case NOT_ENOUGH_DATA: | 
|  | return ERR_BAD_LEN; | 
|  | case WOULD_BLOCK: | 
|  | return ERR_NO_MSG; | 
|  | case TIMED_OUT: | 
|  | return ERR_TIMED_OUT; | 
|  | case UNKNOWN_TRANSACTION: | 
|  | return ERR_CMD_UNKNOWN; | 
|  | case FDS_NOT_ALLOWED: | 
|  | return ERR_NOT_SUPPORTED; | 
|  | case UNEXPECTED_NULL: | 
|  | return ERR_NOT_VALID; | 
|  | default: | 
|  | return ERR_GENERIC; | 
|  | } | 
|  | } | 
|  |  | 
|  | } // namespace android |