summaryrefslogtreecommitdiff
path: root/BraswellPlatformPkg/Flash/SpiDeviceDxe/SpiDeviceSmmComm.h
blob: ee2d0a42a465733e106a88aff82b39659e627fe9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/** @file
  SMM Communication formats for the SPI Device protocols.

  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>

  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef _SPI_DEVICE_SMM_COMM_H_
#define _SPI_DEVICE_SMM_COMM_H_

#include <Protocol/SmmSpiDevice.h>

//
// Define communication constants
//
#define SPI_DEV_FUNCTION_READ         1
#define SPI_DEV_FUNCTION_WRITE        2
#define SPI_DEV_FUNCTION_ERASE        3
#define SPI_DEV_FUNCTION_LOCK         4
#define SPI_DEV_FUNCTION_SET_RANGE    5
#define SPI_DEV_FUNCTION_LOCK_RANGES  6

//
// Generic SPI Device communication structure header.
//
typedef struct {
  UINTN       Function;
  EFI_STATUS  ReturnStatus;
  UINT8       Data[1];
} SMM_SPI_DEV_COMMUNICATE_FUNCTION_HEADER;

//
// Macros used to determine size of the headers without data size.
//
#define SMM_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
#define SMM_SPI_DEV_COMMUNICATE_FUNCTION_HEADER_SIZE  (OFFSET_OF (SMM_SPI_DEV_COMMUNICATE_FUNCTION_HEADER, Data))

//
// SPI Read, Write and Erase Data.  Erase will not have any extra data.
//
typedef struct {
  UINTN     Offset;
  UINTN     Size;
} SMM_SPI_DEV_READ_WRITE_ERASE_HEADER;

//
// SPI Lock
//
typedef struct {
  UINTN   Offset;
  UINTN   Size;
  BOOLEAN Lock;
} SMM_SPI_DEV_LOCK_HEADER;

//
// SPI Set Range
//
typedef struct {
  UINTN   Offset;
  UINTN   Size;
  BOOLEAN ReadLock;
  BOOLEAN WriteLock;
} SMM_SPI_DEV_SET_RANGE_HEADER;

#endif