1 /** @file
2   Disk IO protocol as defined in the UEFI 2.0 specification.
3 
4   The Disk IO protocol is used to convert block oriented devices into byte
5   oriented devices. The Disk IO protocol is intended to layer on top of the
6   Block IO protocol.
7 
8   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
9   SPDX-License-Identifier: BSD-2-Clause-Patent
10 
11 **/
12 
13 #ifndef __DISK_IO_H__
14 #define __DISK_IO_H__
15 
16 #define EFI_DISK_IO_PROTOCOL_GUID \
17   { \
18     0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
19   }
20 
21 ///
22 /// Protocol GUID name defined in EFI1.1.
23 ///
24 #define DISK_IO_PROTOCOL  EFI_DISK_IO_PROTOCOL_GUID
25 
26 typedef struct _EFI_DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL;
27 
28 ///
29 /// Protocol defined in EFI1.1.
30 ///
31 typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO;
32 
33 /**
34   Read BufferSize bytes from Offset into Buffer.
35 
36   @param  This                  Protocol instance pointer.
37   @param  MediaId               Id of the media, changes every time the media is replaced.
38   @param  Offset                The starting byte offset to read from
39   @param  BufferSize            Size of Buffer
40   @param  Buffer                Buffer containing read data
41 
42   @retval EFI_SUCCESS           The data was read correctly from the device.
43   @retval EFI_DEVICE_ERROR      The device reported an error while performing the read.
44   @retval EFI_NO_MEDIA          There is no media in the device.
45   @retval EFI_MEDIA_CHNAGED     The MediaId does not matched the current device.
46   @retval EFI_INVALID_PARAMETER The read request contains device addresses that are not
47                                 valid for the device.
48 
49 **/
50 typedef
51 EFI_STATUS
52 (EFIAPI *EFI_DISK_READ)(
53   IN EFI_DISK_IO_PROTOCOL         *This,
54   IN UINT32                       MediaId,
55   IN UINT64                       Offset,
56   IN UINTN                        BufferSize,
57   OUT VOID                        *Buffer
58   );
59 
60 /**
61   Writes a specified number of bytes to a device.
62 
63   @param  This       Indicates a pointer to the calling context.
64   @param  MediaId    ID of the medium to be written.
65   @param  Offset     The starting byte offset on the logical block I/O device to write.
66   @param  BufferSize The size in bytes of Buffer. The number of bytes to write to the device.
67   @param  Buffer     A pointer to the buffer containing the data to be written.
68 
69   @retval EFI_SUCCESS           The data was written correctly to the device.
70   @retval EFI_WRITE_PROTECTED   The device can not be written to.
71   @retval EFI_DEVICE_ERROR      The device reported an error while performing the write.
72   @retval EFI_NO_MEDIA          There is no media in the device.
73   @retval EFI_MEDIA_CHNAGED     The MediaId does not matched the current device.
74   @retval EFI_INVALID_PARAMETER The write request contains device addresses that are not
75                                  valid for the device.
76 
77 **/
78 typedef
79 EFI_STATUS
80 (EFIAPI *EFI_DISK_WRITE)(
81   IN EFI_DISK_IO_PROTOCOL         *This,
82   IN UINT32                       MediaId,
83   IN UINT64                       Offset,
84   IN UINTN                        BufferSize,
85   IN VOID                         *Buffer
86   );
87 
88 #define EFI_DISK_IO_PROTOCOL_REVISION  0x00010000
89 
90 ///
91 /// Revision defined in EFI1.1
92 ///
93 #define EFI_DISK_IO_INTERFACE_REVISION  EFI_DISK_IO_PROTOCOL_REVISION
94 
95 ///
96 /// This protocol is used to abstract Block I/O interfaces.
97 ///
98 struct _EFI_DISK_IO_PROTOCOL {
99   ///
100   /// The revision to which the disk I/O interface adheres. All future
101   /// revisions must be backwards compatible. If a future version is not
102   /// backwards compatible, it is not the same GUID.
103   ///
104   UINT64            Revision;
105   EFI_DISK_READ     ReadDisk;
106   EFI_DISK_WRITE    WriteDisk;
107 };
108 
109 extern EFI_GUID  gEfiDiskIoProtocolGuid;
110 
111 #endif
112