blob: 30795b10852ef615716cb45621d58d6203a26cd1 [file] [log] [blame] [edit]
/*
* Copyright (C) 2024 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.
*/
#pragma once
#include <lib/tipc/tipc.h>
#include <trusty_ipc.h>
#include "block_device_tipc.h"
#include "ipc.h"
#include "tipc_ns.h"
/**
* struct client_port_context
* @tr_state: Pointer to the backing filesystem.
* @client_ctx: Context for the port opened to clients.
*/
struct client_port_context {
struct fs* tr_state;
struct ipc_port_context client_ctx;
};
/**
* struct storage_tipc_service
* @fs_rpmb: Client port for TP.
* @fs_rpmb_boot: Client port for TDEA.
* @fs_tdp: Client port for TDP. If $HAS_FS_TDP is undefined, aliases TP.
* Only initialized and available if ns is available.
* @fs_nsp: Client port for NSP. If $HAS_FS_NSP is undefined, aliases TDP.
* Only initialized and available if ns is available.
* @fs_ns: Client port for TD. Only initialized and available if ns is
* available.
*/
struct storage_tipc_service {
struct client_port_context fs_rpmb;
struct client_port_context fs_rpmb_boot;
struct client_port_context fs_tdp;
struct client_port_context fs_nsp;
struct client_port_context fs_ns;
};
/**
* storage_tipc_service_init() - Initialize a &struct storage_tipc_service
*
* Opens tipc ports through which clients can make changes to storage.
*
* @self: Out param. Will contain the newly initialized &struct
* storage_tipc_service.
* @ctx: &struct block_device_tipc containing the filesystems backing the
* client ports.
* @hset: Handle set to handle incoming messages on the client ports.
*/
int storage_tipc_service_init(struct storage_tipc_service* self,
struct block_device_tipc* ctx,
struct tipc_hset* hset);
/**
* storage_tipc_service_destroy() - Deinitialize a &struct storage_tipc_service
*
* Closes all tipc client ports that were opened by storage_tipc_service_init().
*
* @self: The &struct storage_tipc_service to destroy. The backing memory is not
* freed.
* @ctx: The &struct block_device_tipc used to init @self.
*/
void storage_tipc_service_destroy(struct storage_tipc_service* self,
struct block_device_tipc* ctx);