/*
 *
 * Copyright (c) 2018 Google Inc.
 *
 * 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 <lib/fdio/directory.h>
#include <zircon/device/vfs.h>

#include "loader.h"

typedef VkResult(VKAPI_PTR *PFN_vkConnectToServiceAddr)(const char *pName, uint32_t handle);
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_vkInitializeConnectToServiceCallbackAddr)(PFN_vkConnectToServiceAddr);

VKAPI_ATTR static VkResult VKAPI_CALL loader_fdio_get_service(const char *pName, uint32_t handle) {
    // fdio_service_connect specifies READ+WRITE, which fails for read-only files
    zx_status_t status = fdio_open(pName, ZX_FS_RIGHT_READABLE, handle);
    if (status == ZX_OK) {
        return VK_SUCCESS;
    } else {
        loader_log(NULL, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0, "Failed to load service %s - error %d", pName, status);
        return VK_ERROR_INITIALIZATION_FAILED;
    }
}

void loader_initialize_icd_services(loader_platform_dl_handle handle) {
    PFN_vkInitializeConnectToServiceCallbackAddr fp_initialize_connect_to_service_callback_addr;

    // TODO(fxb/60206) - rename since this can be used for opening files
    fp_initialize_connect_to_service_callback_addr =
        loader_platform_get_proc_address(handle, "vk_icdInitializeConnectToServiceCallback");
    if (!fp_initialize_connect_to_service_callback_addr) {
        // ICD isn't required to expose this entrypoint.
        return;
    }

    fp_initialize_connect_to_service_callback_addr(&loader_fdio_get_service);
}
