123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden/*
223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Copyright (C) 2015 The Android Open Source Project
323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden *
423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Licensed under the Apache License, Version 2.0 (the "License");
523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * you may not use this file except in compliance with the License.
623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * You may obtain a copy of the License at
723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden *
823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden *      http://www.apache.org/licenses/LICENSE-2.0
923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden *
1023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Unless required by applicable law or agreed to in writing, software
1123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * distributed under the License is distributed on an "AS IS" BASIS,
1223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * See the License for the specific language governing permissions and
1423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * limitations under the License.
1523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden */
1623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
1723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#ifndef SYSTEM_KEYMASTER_OPERATION_TABLE_H
1823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#define SYSTEM_KEYMASTER_OPERATION_TABLE_H
1923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
20f38a002624126ca837865826f948edc9100d6e8aJanis Danisevskis#include <keymaster/UniquePtr.h>
2123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
2223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#include <hardware/keymaster_defs.h>
2323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
2423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdennamespace keymaster {
2523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
26e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willdenclass KeymasterContext;
2723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdenclass Operation;
2823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
2923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdenclass OperationTable {
3023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden  public:
315d5e42b081646208e134a96d0cb500e6b6e8f043Chih-Hung Hsieh    explicit OperationTable(size_t table_size) : table_size_(table_size) {}
3223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
3323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    struct Entry {
3423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden        Entry() {
3523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden            handle = 0;
3623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden            operation = NULL;
3723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden        };
3823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden        ~Entry();
3923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden        keymaster_operation_handle_t handle;
4023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden        Operation* operation;
4123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    };
4223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
43e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willden    keymaster_error_t Add(Operation* operation, const KeymasterContext& context,
44e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willden                          keymaster_operation_handle_t* op_handle);
4523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    Operation* Find(keymaster_operation_handle_t op_handle);
4623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    bool Delete(keymaster_operation_handle_t);
4723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
4823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden  private:
4923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    UniquePtr<Entry[]> table_;
5023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden    size_t table_size_;
5123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden};
5223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
5323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden}  // namespace keymaster
5423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden
5523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#endif  // SYSTEM_KEYMASTER_OPERATION_TABLE_H
56