SayoriOS  0.3.3
dpm.h
1 #pragma once
2 
3 #include <common.h>
4 
5 #define DPM_ERROR_NO_MOUNT (-1)
6 #define DPM_ERROR_NOT_READY (-2)
7 #define DPM_ERROR_NO_READ (-3)
8 
9 // disk, offset_h, offset_l, size, buffer
10 // typedef int (*dpm_disk_rw_cmd)(size_t,size_t,size_t,void*);
11 typedef size_t (*dpm_disk_rw_cmd)(size_t,uint64_t,uint64_t,size_t,void*);
12 
13 typedef struct {
14  bool Ready;
15  char Name[128];
16  char FileSystem[64];
17  int Status;
18  size_t Size;
19  size_t Sectors;
20  size_t SectorSize;
21  int AddrMode;
22  char Serial[16];
23  void* Point;
24  void* Reserved;
25  dpm_disk_rw_cmd Read;
26  dpm_disk_rw_cmd Write;
27 } __attribute__((packed)) DPM_Disk;
28 
29 // TODO: Save model, manufacturer, serial number, firmware version in that dpm structure.
30 enum dpm_disk_type {
31  NONE,
32  MEMORY,
33  IDE_ATA,
34  IDE_ATAPI,
35  AHCI_SATA,
36  AHCI_SATAPI
37 };
38 
39 struct dpm_disk_info {
40  enum dpm_disk_type type;
41 };
42 
43 void* dpm_metadata_read(char Letter);
44 void dpm_metadata_write(char Letter, uint32_t Addr);
45 size_t dpm_read(char Letter, uint64_t high_offset, uint64_t low_offset, size_t Size, void *Buffer);
46 size_t dpm_write(char Letter, uint64_t high_offset, uint64_t low_offset, size_t Size, char* Buffer);
47 int dpm_reg(char Letter, char* Name, char* FS, int Status, size_t Size, size_t Sectors, size_t SectorSize, int AddrMode, char* Serial, void *Point);
48 DPM_Disk dpm_info(char Letter);
49 int dpm_unmount(char Letter, bool FreeReserved);
50 void dpm_LabelUpdate(char Letter, char* Label);
51 void dpm_fnc_write(char Letter, dpm_disk_rw_cmd Read, dpm_disk_rw_cmd Write);
52 int dpm_searchFreeIndex(int Index);
Основные определения ядра
struct registers __attribute__((packed))
Структура данных пакета от мыши
Definition: psf.h:19
size_t dpm_write(char Letter, uint64_t high_offset, uint64_t low_offset, size_t Size, char *Buffer)
[DPM] Запись данных на диск
Definition: dpm.c:123
void dpm_LabelUpdate(char Letter, char *Label)
Definition: dpm.c:241
int dpm_reg(char Letter, char *Name, char *FS, int Status, size_t Size, size_t Sectors, size_t SectorSize, int AddrMode, char *Serial, void *Point)
[DPM] Регистрация дискового раздела
Definition: dpm.c:187
size_t dpm_read(char Letter, uint64_t high_offset, uint64_t low_offset, size_t Size, void *Buffer)
[DPM] Считывание данных с диска
Definition: dpm.c:82
size_t Sectors
Кол-во секторов
Definition: dpm.h:19
bool Ready
Устройство подключено? (1 - да | 0 - нет)
Definition: dpm.h:14
dpm_disk_rw_cmd Read
Команда для чтения данных
Definition: dpm.h:25
void * Point
Точка входа в оперативной памяти
Definition: dpm.h:23
size_t Size
Размер диска (в байтах)
Definition: dpm.h:18
void * Reserved
Можно в ОЗУ дописать доп.данные если требуется.
Definition: dpm.h:24
int Status
Режим устройства (0 - не обслуживает | 1 - Чтение/Запись | 2 - Только чтение)
Definition: dpm.h:17
size_t SectorSize
Размер секторов
Definition: dpm.h:20
int AddrMode
Метод адрессации (0 - CHS | 1 - LBA | 2 - RAM | 3 - RW for FNC)
Definition: dpm.h:21
dpm_disk_rw_cmd Write
Команда для записи данных
Definition: dpm.h:26