mineswefi.git
io.h

/* mineswefi - uefi minesweeper
* Copyright (C) 2025 ArcNyxx <olive@arcnyxx.net>
* see LICENCE file for licensing information */
#ifndef EFI_IO_H
#define EFI_IO_H
#include <stdbool.h>
typedef struct efi_key {
uint16_t scancode;
int16_t ch;
} efi_key_t;
typedef struct efi_text_input efi_text_input_t;
struct efi_text_input {
uint64_t (*reset)(efi_text_input_t *this, bool ext);
uint64_t (*read)(efi_text_input_t *this, efi_key_t *key);
void *wait;
};
typedef struct efi_text_output efi_text_output_t;
struct efi_text_output {
uint64_t (*reset)(efi_text_output_t *this, bool ext);
uint64_t (*print)(efi_text_output_t *this, const uint16_t *str);
uint64_t (*test)(efi_text_output_t *this, const uint16_t *str);
uint64_t (*getmode)(efi_text_output_t *this, uint64_t mode,
uint64_t *cols, uint64_t *rows);
uint64_t (*setmode)(efi_text_output_t *this, uint64_t mode);
uint64_t (*setattr)(efi_text_output_t *this, uint64_t attr);
uint64_t (*clear)(efi_text_output_t *this);
uint64_t (*movecur)(efi_text_output_t *this,
uint64_t col, uint64_t row);
uint64_t (*showcur)(efi_text_output_t *this, bool visible);
};
typedef struct efi_pointer_state {
int32_t x, y, z;
bool left, right;
} efi_pointer_state_t;
typedef struct efi_pointer efi_pointer_t;
struct efi_pointer {
uint64_t (*reset)(efi_pointer_t *this, bool ext);
uint64_t (*query)(efi_pointer_t *this, efi_pointer_state_t *state);
void *wait;
struct {
uint64_t x, y, z;
bool left, right;
} mode;
};
typedef enum efi_pixel_format {
EFI_PIXEL_FORMAT_RGB,
EFI_PIXEL_FORMAT_BGR,
EFI_PIXEL_FORMAT_BIT_MASK,
EFI_PIXEL_FORMAT_BLT_ONLY
} efi_pixel_format_t;
typedef struct efi_pixel_bitmask {
uint32_t r, g, b, reserved;
} efi_pixel_bitmask_t;
typedef struct efi_graphics_info {
uint32_t version;
uint32_t hres;
uint32_t vres;
efi_pixel_format_t format;
efi_pixel_bitmask_t info;
uint32_t hlen;
} efi_graphics_info_t;
typedef struct efi_graphics_mode {
uint32_t modes;
uint32_t mode;
efi_graphics_info_t *info;
uint64_t info_size;
void *buffer;
uint64_t buffer_size;
} efi_graphics_mode_t;
typedef struct efi_pixel {
uint8_t b, g, r, reserved;
} efi_pixel_t;
typedef enum efi_graphics_op {
EFI_GRAPHICS_OP_BUFFER_TO_SCREEN,
EFI_GRAPHICS_OP_SCREEN_TO_BUFFER,
EFI_GRAPHICS_OP_BUFFER_OFFSET_TO_SCREEN,
EFI_GRAPHICS_OP_SCREEN_TO_SCREEN
} efi_graphics_op_t;
typedef struct efi_graphics efi_graphics_t;
struct efi_graphics {
uint64_t (*query)(efi_graphics_t *this, uint32_t mode,
uint64_t *size, efi_graphics_mode_t **info);
uint64_t (*set)(efi_graphics_t *this, uint32_t mode);
uint64_t (*draw)(efi_graphics_t *this, efi_pixel_t *buf,
efi_graphics_op_t op, uint64_t srcx, uint64_t srcy,
uint64_t destx, uint64_t desty, uint64_t width,
uint64_t height, uint64_t delta);
void *mode;
};
#endif /* EFI_IO_H */