145 lines
3.8 KiB
C
145 lines
3.8 KiB
C
/*
|
|
* <-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#ifndef _MC_KAPI_SESSION_H_
|
|
#define _MC_KAPI_SESSION_H_
|
|
|
|
#include "common.h"
|
|
|
|
#include <linux/list.h>
|
|
#include "connection.h"
|
|
|
|
|
|
struct bulk_buffer_descriptor {
|
|
void *virt_addr; /* The VA of the Bulk buffer */
|
|
uint32_t len; /* Length of the Bulk buffer */
|
|
uint32_t handle;
|
|
|
|
/* The physical address of the L2 table of the Bulk buffer*/
|
|
void *phys_addr_wsm_l2;
|
|
|
|
/* The list param for using the kernel lists*/
|
|
struct list_head list;
|
|
};
|
|
|
|
struct bulk_buffer_descriptor *bulk_buffer_descriptor_create(
|
|
void *virt_addr,
|
|
uint32_t len,
|
|
uint32_t handle,
|
|
void *phys_addr_wsm_l2
|
|
);
|
|
|
|
/*
|
|
* Session states.
|
|
* At the moment not used !!
|
|
*/
|
|
enum session_state {
|
|
SESSION_STATE_INITIAL,
|
|
SESSION_STATE_OPEN,
|
|
SESSION_STATE_TRUSTLET_DEAD
|
|
};
|
|
|
|
#define SESSION_ERR_NO 0 /* No session error */
|
|
|
|
/*
|
|
* Session information structure.
|
|
* The information structure is used to hold the state of the session, which
|
|
* will limit further actions for the session.
|
|
* Also the last error code will be stored till it's read.
|
|
*/
|
|
struct session_information {
|
|
enum session_state state; /* Session state */
|
|
int32_t last_error; /* Last error of session */
|
|
};
|
|
|
|
|
|
struct session {
|
|
struct mc_instance *instance;
|
|
|
|
/* Descriptors of additional bulk buffer of a session */
|
|
struct list_head bulk_buffer_descriptors;
|
|
|
|
/* Information about session */
|
|
struct session_information session_info;
|
|
|
|
uint32_t session_id;
|
|
struct connection *notification_connection;
|
|
|
|
/* The list param for using the kernel lists */
|
|
struct list_head list;
|
|
};
|
|
|
|
struct session *session_create(
|
|
uint32_t session_id,
|
|
void *instance,
|
|
struct connection *connection
|
|
);
|
|
|
|
void session_cleanup(struct session *session);
|
|
|
|
/*
|
|
* session_add_bulk_buf() - Add address information of additional bulk
|
|
* buffer memory to session and register virtual
|
|
* memory in kernel module
|
|
* @session: Session information structure
|
|
* @buf: The virtual address of bulk buffer.
|
|
* @len: Length of bulk buffer.
|
|
*
|
|
* The virtual address can only be added one time. If the virtual
|
|
* address already exist, NULL is returned.
|
|
*
|
|
* On success the actual Bulk buffer descriptor with all address information
|
|
* is returned, NULL if an error occurs.
|
|
*/
|
|
struct bulk_buffer_descriptor *session_add_bulk_buf(
|
|
struct session *session, void *buf, uint32_t len);
|
|
|
|
/*
|
|
* session_remove_bulk_buf() - Remove address information of additional bulk
|
|
* buffer memory from session and unregister
|
|
* virtual memory in kernel module
|
|
* @session: Session information structure
|
|
* @buf: The virtual address of the bulk buffer
|
|
*
|
|
* Returns true on success
|
|
*/
|
|
bool session_remove_bulk_buf(struct session *session, void *buf);
|
|
|
|
|
|
/*
|
|
* session_find_bulk_buf() - Find the handle of the bulk buffer for this
|
|
* session
|
|
*
|
|
* @session: Session information structure
|
|
* @buf: The virtual address of bulk buffer.
|
|
*
|
|
* On success the actual Bulk buffer handle is returned, 0
|
|
* if an error occurs.
|
|
*/
|
|
uint32_t session_find_bulk_buf(struct session *session, void *virt_addr);
|
|
|
|
/*
|
|
* session_set_error_info() - Set additional error information of the last
|
|
* error that occurred.
|
|
* @session: Session information structure
|
|
* @err: The actual error
|
|
*/
|
|
void session_set_error_info(struct session *session, int32_t err);
|
|
|
|
/*
|
|
* session_get_last_err() - Get additional error information of the last
|
|
* error that occurred.
|
|
* @session: Session information structure
|
|
*
|
|
* After request the information is set to SESSION_ERR_NO.
|
|
*
|
|
* Returns the last stored error code or SESSION_ERR_NO
|
|
*/
|
|
int32_t session_get_last_err(struct session *session);
|
|
|
|
#endif /* _MC_KAPI_SESSION_H_ */
|