mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-29 18:11:05 +00:00
A new extended subcommand code (1) is being added to handle hash
testing.
The new subcommand handler keeps track of multiple sha1 and sha256
contexts the host might want to exercise. The number of available
contexts is limited by the amount of available free memory.
One of four hash operations could be requested by the host: 'Start',
'Continue', 'Finish' - when hashing a single stream over multiple
extended command messages, and 'Single' when the entire message to be
hashed is included in one extended command payload.
The command payload had the following format:
* field | size | note
* ===================================================================
* mode | 1 | 0 - start, 1 - cont., 2 - finish, 3 - single
* hash_mode | 1 | 0 - sha1, 1 - sha256
* handle | 1 | seassion handle, ignored in 'single' mode
* text_len | 2 | size of the text to process, big endian
* text | text_len | text to hash
As soon as the first 'Start' message is encountered, the handler tries
to allocate shared memory to keep track of the test contexts, the
amount of available memory determines how many contexts the handler
can support concurrently.
As soon as the last 'Finish' command is encountered, the handler
returns the shared memory to the 'heap'.
BRANCH=none
BUG=chrome-os-partner:43025
TEST=after adding the host side implementation and fixing a couple of
bugs, hash tests pass (see upcoming patches).
Change-Id: Iae18552d6220d670d1c6f32294f0af1a8d0d5c90
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/314692
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
70 lines
2.2 KiB
C
70 lines
2.2 KiB
C
/* Copyright 2015 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef __EC_INCLUDE_EXTENSION_H
|
|
#define __EC_INCLUDE_EXTENSION_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "common.h"
|
|
|
|
/*
|
|
* Type of function handling extension commands.
|
|
*
|
|
* @param buffer As input points to the input data to be processed, as
|
|
* output stores data, processing result.
|
|
* @param command_size Number of bytes of input data
|
|
* @param response_size On input - max size of the buffer, on output - actual
|
|
* number of data returned by the handler.
|
|
*/
|
|
typedef void (*extension_handler)(void *buffer,
|
|
size_t command_size,
|
|
size_t *response_size);
|
|
/*
|
|
* Find handler for an extension command.
|
|
*
|
|
* @param command_code Code associated with a extension command handler.
|
|
* @param buffer Data to be processd by the handler, the same space
|
|
* is used for data returned by the handler.
|
|
* @command_size Size of the input data.
|
|
* @param size On input - max size of the buffer, on output - actual number of
|
|
* data returned by the handler. A single byte return
|
|
* usually indicates an error and contains the error code.
|
|
*/
|
|
void extension_route_command(uint16_t command_code,
|
|
void *buffer,
|
|
size_t command_size,
|
|
size_t *size);
|
|
|
|
struct extension_command {
|
|
uint16_t command_code;
|
|
extension_handler handler;
|
|
} __packed;
|
|
|
|
/* Values for different extension subcommands. */
|
|
enum {
|
|
EXTENSION_AES = 0,
|
|
EXTENSION_HASH = 1,
|
|
};
|
|
|
|
|
|
/* Error codes reported by extension commands. */
|
|
enum {
|
|
/* EXTENSION_HASH error codes */
|
|
/* Attempt to start a session on an active handle. */
|
|
EXC_HASH_DUPLICATED_HANDLE = 1,
|
|
EXC_HASH_TOO_MANY_HANDLES = 2, /* No room to allocate a new context. */
|
|
/* Continuation/finish on unknown context. */
|
|
EXC_HASH_UNKNOWN_CONTEXT = 3
|
|
};
|
|
|
|
#define DECLARE_EXTENSION_COMMAND(code, handler) \
|
|
const struct extension_command __keep __extension_cmd_##code \
|
|
__attribute__((section(".rodata.extensioncmds"))) \
|
|
= {code, handler}
|
|
|
|
#endif /* __EC_INCLUDE_EXTENSION_H */
|