1310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales/*
2310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * Copyright (C) 2015 The Android Open Source Project
3310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales *
4310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * Licensed under the Apache License, Version 2.0 (the "License");
5310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * you may not use this file except in compliance with the License.
6310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * You may obtain a copy of the License at
7310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales *
8310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales *      http://www.apache.org/licenses/LICENSE-2.0
9310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales *
10310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * Unless required by applicable law or agreed to in writing, software
11310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * distributed under the License is distributed on an "AS IS" BASIS,
12310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * See the License for the specific language governing permissions and
14310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales * limitations under the License.
15310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales */
16310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
17310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales#include <hardware/hardware.h>
18310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
19310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales#include <string.h>
20310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales#include <errno.h>
21310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales#include <stdlib.h>
22310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
23310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales#include "trusty_gatekeeper.h"
24310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
25310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Moralesusing gatekeeper::TrustyGateKeeperDevice;
26310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
27310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Moralesstatic int trusty_gatekeeper_open(const hw_module_t *module, const char *name,
28310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        hw_device_t **device) {
29310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
30310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    if (strcmp(name, HARDWARE_GATEKEEPER) != 0) {
31310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        return -EINVAL;
32310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    }
33310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
34310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    TrustyGateKeeperDevice *gatekeeper = new TrustyGateKeeperDevice(module);
35310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    if (gatekeeper == NULL) return -ENOMEM;
36310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    *device = gatekeeper->hw_device();
37310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
38310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    return 0;
39310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales}
40310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
41310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Moralesstatic struct hw_module_methods_t gatekeeper_module_methods = {
42310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    .open = trusty_gatekeeper_open,
43310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales};
44310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales
45310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Moralesstruct gatekeeper_module HAL_MODULE_INFO_SYM __attribute__((visibility("default"))) = {
46310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    .common = {
47310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .tag = HARDWARE_MODULE_TAG,
48310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .module_api_version = GATEKEEPER_MODULE_API_VERSION_0_1,
49310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .hal_api_version = HARDWARE_HAL_API_VERSION,
50310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .id = GATEKEEPER_HARDWARE_MODULE_ID,
51310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .name = "Trusty GateKeeper HAL",
52310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .author = "The Android Open Source Project",
53310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .methods = &gatekeeper_module_methods,
54310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .dso = 0,
55310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales        .reserved = {}
56310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales    },
57310dcffbe0c57b686f459c9961ae7b03a1c86a93Andres Morales};
58