cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

stratix10-svc-client.h (7064B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2017-2018, Intel Corporation
      4 */
      5
      6#ifndef __STRATIX10_SVC_CLIENT_H
      7#define __STRATIX10_SVC_CLIENT_H
      8
      9/*
     10 * Service layer driver supports client names
     11 *
     12 * fpga: for FPGA configuration
     13 * rsu: for remote status update
     14 */
     15#define SVC_CLIENT_FPGA			"fpga"
     16#define SVC_CLIENT_RSU			"rsu"
     17
     18/*
     19 * Status of the sent command, in bit number
     20 *
     21 * SVC_STATUS_OK:
     22 * Secure firmware accepts the request issued by one of service clients.
     23 *
     24 * SVC_STATUS_BUFFER_SUBMITTED:
     25 * Service client successfully submits data buffer to secure firmware.
     26 *
     27 * SVC_STATUS_BUFFER_DONE:
     28 * Secure firmware completes data process, ready to accept the
     29 * next WRITE transaction.
     30 *
     31 * SVC_STATUS_COMPLETED:
     32 * Secure firmware completes service request successfully. In case of
     33 * FPGA configuration, FPGA should be in user mode.
     34 *
     35 * SVC_COMMAND_STATUS_BUSY:
     36 * Service request is still in process.
     37 *
     38 * SVC_COMMAND_STATUS_ERROR:
     39 * Error encountered during the process of the service request.
     40 *
     41 * SVC_STATUS_NO_SUPPORT:
     42 * Secure firmware doesn't support requested features such as RSU retry
     43 * or RSU notify.
     44 */
     45#define SVC_STATUS_OK			0
     46#define SVC_STATUS_BUFFER_SUBMITTED	1
     47#define SVC_STATUS_BUFFER_DONE		2
     48#define SVC_STATUS_COMPLETED		3
     49#define SVC_STATUS_BUSY			4
     50#define SVC_STATUS_ERROR		5
     51#define SVC_STATUS_NO_SUPPORT		6
     52
     53/*
     54 * Flag bit for COMMAND_RECONFIG
     55 *
     56 * COMMAND_RECONFIG_FLAG_PARTIAL:
     57 * Set to FPGA configuration type (full or partial).
     58 */
     59#define COMMAND_RECONFIG_FLAG_PARTIAL	0
     60
     61/*
     62 * Timeout settings for service clients:
     63 * timeout value used in Stratix10 FPGA manager driver.
     64 * timeout value used in RSU driver
     65 */
     66#define SVC_RECONFIG_REQUEST_TIMEOUT_MS         300
     67#define SVC_RECONFIG_BUFFER_TIMEOUT_MS          720
     68#define SVC_RSU_REQUEST_TIMEOUT_MS              300
     69
     70struct stratix10_svc_chan;
     71
     72/**
     73 * enum stratix10_svc_command_code - supported service commands
     74 *
     75 * @COMMAND_NOOP: do 'dummy' request for integration/debug/trouble-shooting
     76 *
     77 * @COMMAND_RECONFIG: ask for FPGA configuration preparation, return status
     78 * is SVC_STATUS_OK
     79 *
     80 * @COMMAND_RECONFIG_DATA_SUBMIT: submit buffer(s) of bit-stream data for the
     81 * FPGA configuration, return status is SVC_STATUS_SUBMITTED or SVC_STATUS_ERROR
     82 *
     83 * @COMMAND_RECONFIG_DATA_CLAIM: check the status of the configuration, return
     84 * status is SVC_STATUS_COMPLETED, or SVC_STATUS_BUSY, or SVC_STATUS_ERROR
     85 *
     86 * @COMMAND_RECONFIG_STATUS: check the status of the configuration, return
     87 * status is SVC_STATUS_COMPLETED, or SVC_STATUS_BUSY, or SVC_STATUS_ERROR
     88 *
     89 * @COMMAND_RSU_STATUS: request remote system update boot log, return status
     90 * is log data or SVC_STATUS_RSU_ERROR
     91 *
     92 * @COMMAND_RSU_UPDATE: set the offset of the bitstream to boot after reboot,
     93 * return status is SVC_STATUS_OK or SVC_STATUS_ERROR
     94 *
     95 * @COMMAND_RSU_NOTIFY: report the status of hard processor system
     96 * software to firmware, return status is SVC_STATUS_OK or
     97 * SVC_STATUS_ERROR
     98 *
     99 * @COMMAND_RSU_RETRY: query firmware for the current image's retry counter,
    100 * return status is SVC_STATUS_OK or SVC_STATUS_ERROR
    101 *
    102 * @COMMAND_RSU_MAX_RETRY: query firmware for the max retry value,
    103 * return status is SVC_STATUS_OK or SVC_STATUS_ERROR
    104 *
    105 * @COMMAND_RSU_DCMF_VERSION: query firmware for the DCMF version, return status
    106 * is SVC_STATUS_OK or SVC_STATUS_ERROR
    107 *
    108 * @COMMAND_FIRMWARE_VERSION: query running firmware version, return status
    109 * is SVC_STATUS_OK or SVC_STATUS_ERROR
    110 */
    111enum stratix10_svc_command_code {
    112	COMMAND_NOOP = 0,
    113	COMMAND_RECONFIG,
    114	COMMAND_RECONFIG_DATA_SUBMIT,
    115	COMMAND_RECONFIG_DATA_CLAIM,
    116	COMMAND_RECONFIG_STATUS,
    117	COMMAND_RSU_STATUS,
    118	COMMAND_RSU_UPDATE,
    119	COMMAND_RSU_NOTIFY,
    120	COMMAND_RSU_RETRY,
    121	COMMAND_RSU_MAX_RETRY,
    122	COMMAND_RSU_DCMF_VERSION,
    123	COMMAND_FIRMWARE_VERSION,
    124};
    125
    126/**
    127 * struct stratix10_svc_client_msg - message sent by client to service
    128 * @payload: starting address of data need be processed
    129 * @payload_length: data size in bytes
    130 * @command: service command
    131 * @arg: args to be passed via registers and not physically mapped buffers
    132 */
    133struct stratix10_svc_client_msg {
    134	void *payload;
    135	size_t payload_length;
    136	enum stratix10_svc_command_code command;
    137	u64 arg[3];
    138};
    139
    140/**
    141 * struct stratix10_svc_command_config_type - config type
    142 * @flags: flag bit for the type of FPGA configuration
    143 */
    144struct stratix10_svc_command_config_type {
    145	u32 flags;
    146};
    147
    148/**
    149 * struct stratix10_svc_cb_data - callback data structure from service layer
    150 * @status: the status of sent command
    151 * @kaddr1: address of 1st completed data block
    152 * @kaddr2: address of 2nd completed data block
    153 * @kaddr3: address of 3rd completed data block
    154 */
    155struct stratix10_svc_cb_data {
    156	u32 status;
    157	void *kaddr1;
    158	void *kaddr2;
    159	void *kaddr3;
    160};
    161
    162/**
    163 * struct stratix10_svc_client - service client structure
    164 * @dev: the client device
    165 * @receive_cb: callback to provide service client the received data
    166 * @priv: client private data
    167 */
    168struct stratix10_svc_client {
    169	struct device *dev;
    170	void (*receive_cb)(struct stratix10_svc_client *client,
    171			   struct stratix10_svc_cb_data *cb_data);
    172	void *priv;
    173};
    174
    175/**
    176 * stratix10_svc_request_channel_byname() - request service channel
    177 * @client: identity of the client requesting the channel
    178 * @name: supporting client name defined above
    179 *
    180 * Return: a pointer to channel assigned to the client on success,
    181 * or ERR_PTR() on error.
    182 */
    183struct stratix10_svc_chan
    184*stratix10_svc_request_channel_byname(struct stratix10_svc_client *client,
    185	const char *name);
    186
    187/**
    188 * stratix10_svc_free_channel() - free service channel.
    189 * @chan: service channel to be freed
    190 */
    191void stratix10_svc_free_channel(struct stratix10_svc_chan *chan);
    192
    193/**
    194 * stratix10_svc_allocate_memory() - allocate the momory
    195 * @chan: service channel assigned to the client
    196 * @size: number of bytes client requests
    197 *
    198 * Service layer allocates the requested number of bytes from the memory
    199 * pool for the client.
    200 *
    201 * Return: the starting address of allocated memory on success, or
    202 * ERR_PTR() on error.
    203 */
    204void *stratix10_svc_allocate_memory(struct stratix10_svc_chan *chan,
    205				    size_t size);
    206
    207/**
    208 * stratix10_svc_free_memory() - free allocated memory
    209 * @chan: service channel assigned to the client
    210 * @kaddr: starting address of memory to be free back to pool
    211 */
    212void stratix10_svc_free_memory(struct stratix10_svc_chan *chan, void *kaddr);
    213
    214/**
    215 * stratix10_svc_send() - send a message to the remote
    216 * @chan: service channel assigned to the client
    217 * @msg: message data to be sent, in the format of
    218 * struct stratix10_svc_client_msg
    219 *
    220 * Return: 0 for success, -ENOMEM or -ENOBUFS on error.
    221 */
    222int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg);
    223
    224/**
    225 * stratix10_svc_done() - complete service request
    226 * @chan: service channel assigned to the client
    227 *
    228 * This function is used by service client to inform service layer that
    229 * client's service requests are completed, or there is an error in the
    230 * request process.
    231 */
    232void stratix10_svc_done(struct stratix10_svc_chan *chan);
    233#endif
    234