summaryrefslogtreecommitdiff
path: root/Include/Protocol/Mxm30.h
blob: a53b70e267c9184f61001fccda0a827e1c3fd956 (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
74
75
76
77
78
79
80
// {2EF1BA1A-C836-4a50-BF89-525FF29FF787}
#define MXM30_PEI_GUID \
    { 0x2ef1ba1a, 0xc836, 0x4a50, 0xbf, 0x89, 0x52, 0x5f, 0xf2, 0x9f, 0xf7, 0x87 }

// {4EA9D4FE-E6F6-410b-8037-0F98B5968B65}
#define MXM3_EFI_GUID \
  { 0x4EA9D4FE, 0xE6F6, 0x410B, 0x90, 0x37, 0x0f, 0x98, 0xB5, 0x96, 0x8B, 0x65 }

/////////////////////////////////////////////////////////////////////////////////////////
//////M X M  3.0  D E F I N I T I O N S /////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
#define EFI30_DataBlockID   MXM_REV_SUPPORTED 
//0x30;
//          the revision of the MXM software specification that is supported by the MXM module.
//          Format is binary coded decimal, for example: 0x30 = 3.0, etc.

#define EFI30_SupportFuncs  MXM_FUNC_SUPPORTED 
//0x3;
//          Bit 0 = `1' MxmReturnSpecLevel method is required
//          Bit 1 = `1' MxmReturnStucture is also required
//          Bit 2 = `1' OPTIONAL. if MxmSelectOutputDevice is supported, `0' if not
//          Bit 3 = `1' OPTIONAL. if MxmCheckOutputDevice is supported, `0' if not

typedef struct {
    CHAR8   Sig[4]; // "MXM_"
    UINT8   Ver;
    UINT8   Rev;
    UINT16  Len;
} MXM_STRUCT_HDR;

typedef EFI_STATUS (EFIAPI *MXM_RETURN_SPEC_LEVEL) (
    IN struct _MXM3_EFI_INTERFACE *This,
    IN EFI_HANDLE   ControllerHandle,
    IN OUT CHAR16   usStructSize,
    IN OUT CHAR8    *pucRevisionLevel,
    OUT UINTN       *puSupportFuncs
);

typedef EFI_STATUS (EFIAPI *MXM_RETURN_STRUCTURE)(
    IN struct _MXM3_EFI_INTERFACE *This,
    IN EFI_HANDLE    ControllerHandle,
    IN OUT CHAR16    *usStructSize,
    IN CHAR16        usDataBlockID,
    OUT CHAR8        **pMxmStruct
);

typedef EFI_STATUS (EFIAPI *MXM_SELECT_OUTPUT_DEVICE)(
    IN struct _MXM3_EFI_INTERFACE *This,
    IN EFI_HANDLE      ControllerHandle,
    IN OUT CHAR16      usStructSize,
    IN EFI_HANDLE      ChildHandle,
    IN CHAR8           ucOutputSetting
);

typedef EFI_STATUS (EFIAPI *MXM_CHECK_OUTPUT_DEVICE)(
    IN struct _MXM3_EFI_INTERFACE *This,
    IN EFI_HANDLE       ControllerHandle,
    IN OUT CHAR16       usStructSize,
    IN EFI_HANDLE       ChildHandle,
    OUT CHAR8           ucDisplayAvailable
);

typedef struct _MXM3_EFI_INTERFACE {
    MXM_RETURN_SPEC_LEVEL   MxmReturnSpecLevel;
    MXM_RETURN_STRUCTURE    MxmReturnStructure;
    MXM_SELECT_OUTPUT_DEVICE MxmSelectOutputDevice;
    MXM_CHECK_OUTPUT_DEVICE MxmCheckOutputDevice;
} MXM3_EFI_PROTOCOL;



EFI_STATUS 
LoadFile(
    IN EFI_GUID *Guid, 
    OUT VOID	**Buffer, 
    OUT UINTN	*BufferSize
    );

//#define		MXM_DRIVER_VERSION		0x001