76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
/* SPDX-FileCopyrightText: Mike Krinkin */
|
|
/* SPDX-License-Identifier: Unlicense */
|
|
|
|
#ifndef __EFI_FILE_PROTOCOL_H__
|
|
#define __EFI_FILE_PROTOCOL_H__
|
|
|
|
#include "types.h"
|
|
|
|
#define EFI_FILE_INFO_GUID \
|
|
{ 0x09576e92, 0x6d3f, 0x11d2, \
|
|
{ 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } }
|
|
|
|
// Open modes
|
|
static const uint64_t EFI_FILE_MODE_READ = 0x0000000000000001;
|
|
static const uint64_t EFI_FILE_MODE_WRITE = 0x0000000000000002;
|
|
static const uint64_t EFI_FILE_MODE_CREATE = 0x8000000000000000;
|
|
|
|
// File attributes
|
|
static const uint64_t EFI_FILE_READ_ONLY = 0x1;
|
|
static const uint64_t EFI_FILE_HIDDEN = 0x2;
|
|
static const uint64_t EFI_FILE_SYSTEM = 0x4;
|
|
static const uint64_t EFI_FILE_RESERVED = 0x8;
|
|
static const uint64_t EFI_FILE_DIRECTORY = 0x10;
|
|
static const uint64_t EFI_FILE_ARCHIVE = 0x20;
|
|
|
|
struct efi_file_info {
|
|
uint64_t size;
|
|
uint64_t file_size;
|
|
uint64_t physical_size;
|
|
struct efi_time create_time;
|
|
struct efi_time last_access_time;
|
|
struct efi_time modifiction_time;
|
|
uint64_t attribute;
|
|
// The efi_file_info structure is supposed to be a variable size structure,
|
|
// but it's really a pain to always dynamically allocate enough space for
|
|
// the structure, so I explicitly allocated some space in the structure, so
|
|
// we will be able to cover at least some simple cases without dynamic
|
|
// memory allocation.
|
|
uint16_t file_name[256];
|
|
};
|
|
|
|
struct efi_file_protocol {
|
|
uint64_t revision;
|
|
efi_status_t (*open)(
|
|
struct efi_file_protocol *,
|
|
struct efi_file_protocol **,
|
|
uint16_t *,
|
|
uint64_t,
|
|
uint64_t);
|
|
efi_status_t (*close)(struct efi_file_protocol *);
|
|
|
|
efi_status_t (*delete)(struct efi_file_protocol *);
|
|
|
|
efi_status_t (*read)(struct efi_file_protocol *, efi_uint_t *, void *);
|
|
|
|
efi_status_t (*write)(struct efi_file_protocol *, efi_uint_t *, void *);
|
|
|
|
efi_status_t (*get_position)(struct efi_file_protocol *, uint64_t *);
|
|
efi_status_t (*set_position)(struct efi_file_protocol *, uint64_t);
|
|
|
|
efi_status_t (*get_info)(
|
|
struct efi_file_protocol *, struct efi_guid *, efi_uint_t *, void *);
|
|
|
|
efi_status_t (*set_info)(
|
|
struct efi_file_protocol *, struct efi_guid *, efi_uint_t *, void *);
|
|
|
|
void (*unused7)();
|
|
void (*unused8)();
|
|
void (*unused9)();
|
|
void (*unused10)();
|
|
void (*unused11)();
|
|
};
|
|
|
|
#endif // __EFI_FILE_PROTOCOL_H__
|
|
|