XenevaOS
Loading...
Searching...
No Matches
vdisk.h
Go to the documentation of this file.
1
32/*
33 * Here, Aurora kernel, the virtual disk service registers
34 * each disk drives present in the system , for example
35 * a system might have two AHCI/SATA drives in two port connected
36 * and one NVMe drive, so there will be total three Virtaul Disk
37 * registered to each connected physical disk, and each
38 * physical disk will have number of partitions, and the maximum
39 * available partition should be 128 because GPT only supports
40 * 16 partitions
41 */
42
43#ifndef __VDISK_H__
44#define __VDISK_H__
45
46#include <stdint.h>
47#include <aurora.h>
48#include <Fs/vfs.h>
49#include <Fs/_FsGUIDs.h>
50
51
52#define MAX_VDISK_DEVICES 26
53#define MAX_PARTITION_PER_DISK 128
54
55struct _VDISK_;
56
57typedef int(*vdisk_read) (struct _VDISK_ *disk, uint64_t lba, uint32_t count ,uint64_t* buffer);
58typedef int(*vdisk_write) (struct _VDISK_ *disk, uint64_t lba, uint32_t count, uint64_t *buffer);
59/* driver-level write-cache flush (VIRTIO_BLK_T_FLUSH / ATA_CMD_CACHE_FLUSH
60 * type thing), left NULL by drivers that dont implement one yet. added at
61 * the end of AuVDisk so existing field offsets dont move, but every
62 * AuVDiskRegister() caller still has to get its struct from
63 * AuCreateVDisk() (kernel-side alloc+memset, so this field comes back
64 * NULL) instead of kmalloc'ing or declaring its own AuVDisk. otherwise a
65 * driver built against an older copy of this header leaves Flush
66 * uninitialized and AuVDiskFlushAll() jumps to garbage on shutdown --axiss */
67typedef int(*vdisk_flush) (struct _VDISK_ *disk);
68
69/* will needed in future */
77
78
79//#pragma pack(push,1)
80/* vdisk structures */
81typedef struct _VDISK_ {
82 char diskname[40];
83 char serialNumber[20];
84 char diskPath[32];
85 void* data;
89
90 //----------------------//
91 // partition specific //
92 //----------------------//
93 // Actually it should //
94 // look like : //
95 // AuPartition part[MAX_PARTITION_PER_DISK] //
99
100 /* for now only 1 partition
101 * is supported
102 */
105 /* mounted file system of
106 * the part
107 */
109
110 //----------------------//
111 // disk specific //
112 //=======================//
116 /* more device specific functions
117 * needs to be added like eject
118 */
120//#pragma pack(pop)
121
122#ifdef ARCH_X64
123#pragma pack(push,1)
124#endif
133#ifdef ARCH_X64
134#pragma pack(pop)
135#endif
136
137#ifdef ARCH_X64
138#pragma pack(push,1)
139#endif
146#ifdef ARCH_X64
147#pragma pack(pop)
148#endif
149
150
151
152
156extern void AuVDiskInitialise();
157
162
163
169
177
178
187AU_EXTERN AU_EXPORT size_t AuVDiskRead(AuVDisk *disk, uint64_t lba, uint32_t count, uint64_t* buffer);
188
197AU_EXTERN AU_EXPORT size_t AuVDiskWrite(AuVDisk* disk, uint64_t lba, uint32_t count, uint64_t* buffer);
198
206
213
219
228extern int AuGetVDiskInfo(uint8_t vdiskID, void* buffer);
229
238extern int AuGetVDiskPartitionInfo(uint8_t vdiskID, uint8_t partition_ID, void* buffer);
239
247
255AU_EXTERN AU_EXPORT AuVDisk* AuGetVDisk(int vdisk_idx);
256#endif
#define AU_EXTERN
Definition aurora.h:55
#define AU_EXPORT
Definition aurora.h:41
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
Definition Base.h:281
Definition vdisk.h:81
char diskPath[32]
Definition vdisk.h:84
uint64_t currentLBA
Definition vdisk.h:98
AuVFSNode * fsys
Definition vdisk.h:108
vdisk_flush Flush
Definition vdisk.h:115
char diskname[40]
Definition vdisk.h:82
uint64_t blockSize
Definition vdisk.h:87
void * data
Definition vdisk.h:85
uint8_t __VDiskID
Definition vdisk.h:88
uint8_t num_partition
Definition vdisk.h:96
vdisk_read Read
Definition vdisk.h:113
uint64_t max_blocks
Definition vdisk.h:86
char serialNumber[20]
Definition vdisk.h:83
GUID part_guid
Definition vdisk.h:103
GUID part_unique_guid
Definition vdisk.h:104
uint64_t startingLBA
Definition vdisk.h:97
vdisk_write Write
Definition vdisk.h:114
Definition vfs.h:98
Definition vdisk.h:70
GUID part_unique_guid
Definition vdisk.h:75
GUID part_guid
Definition vdisk.h:74
uint64_t maxBlocks
Definition vdisk.h:73
uint64_t startingLBA
Definition vdisk.h:71
uint64_t lastLBA
Definition vdisk.h:72
Definition vdisk.h:125
uint8_t vDiskID
Definition vdisk.h:128
uint64_t maxBlocks
Definition vdisk.h:130
char serialNumber[20]
Definition vdisk.h:127
uint64_t blocksSize
Definition vdisk.h:131
int num_partition
Definition vdisk.h:129
char diskname[40]
Definition vdisk.h:126
Definition vdisk.h:140
GUID uniqueGUID
Definition vdisk.h:143
uint64_t startingLBA
Definition vdisk.h:144
GUID partitionGUID
Definition vdisk.h:142
char mountedName[32]
Definition vdisk.h:141
int(* vdisk_read)(struct _VDISK_ *disk, uint64_t lba, uint32_t count, uint64_t *buffer)
Definition vdisk.h:57
AU_EXTERN AU_EXPORT size_t AuVDiskRead(AuVDisk *disk, uint64_t lba, uint32_t count, uint64_t *buffer)
AuVDiskRead – reads a disk block from registered disk.
Definition vdisk.cpp:114
AU_EXTERN AU_EXPORT int AuVDiskCreateStorageFile(char *output)
AuVDiskCreateStorageFile – creates a storage directory in device file system.
Definition vdisk.cpp:61
AU_EXTERN AU_EXPORT void AuVDiskRegister(AuVDisk *disk)
AuVDiskRegister – adds a vdisk service to the list.
Definition vdisk.cpp:205
int(* vdisk_flush)(struct _VDISK_ *disk)
Definition vdisk.h:67
struct _VDISK_ AuVDisk
AU_EXTERN AU_EXPORT AuVDisk * AuGetVDisk(int vdisk_idx)
AuGetVDisk – get a vdisk from the vdisk array.
Definition vdisk.cpp:308
struct _vdisk_info_ AuVDiskInfo
int AuGetVDiskPartitionInfo(uint8_t vdiskID, uint8_t partition_ID, void *buffer)
AuGetVDiskPartitionInfo – get partition information from desired virtual disk.
Definition vdisk.cpp:270
AU_EXTERN AU_EXPORT AuVDisk * AuCreateVDisk()
AuCreateVDisk – creates a vdisk and return to the caller.
Definition vdisk.cpp:101
int AuGetVDiskInfo(uint8_t vdiskID, void *buffer)
AuGetVDiskInfo – returns virtual disk information to application.
Definition vdisk.cpp:246
void AuVDiskInitialise()
AuVDiskInitialise – initialise the vdisk.
Definition vdisk.cpp:49
AU_EXTERN AU_EXPORT void AuVDiskDestroy(AuVDisk *vdisk)
AuVDiskDestroy – destroy's a vdisk.
Definition vdisk.cpp:224
int(* vdisk_write)(struct _VDISK_ *disk, uint64_t lba, uint32_t count, uint64_t *buffer)
Definition vdisk.h:58
AU_EXTERN AU_EXPORT void AuVDiskFlushAll()
AuVDiskFlushAll – flushes every registered disk's write cache; meant to be called before power-down/r...
Definition vdisk.c:164
AU_EXTERN AU_EXPORT int AuVDiskFlush(AuVDisk *disk)
AuVDiskFlush – flushes a single registered disk's write cache, if its driver provides one (no-op othe...
Definition vdisk.c:151
AU_EXTERN AU_EXPORT uint8_t AuVDiskGetIndex()
AuVDiskGetIndex – returns a vdisk index.
Definition vdisk.cpp:89
struct _au_partition_data_ AuPartitionData
struct _vdisk_partition_info_ AuVDiskPartitionInfo
AU_EXTERN AU_EXPORT size_t AuVDiskWrite(AuVDisk *disk, uint64_t lba, uint32_t count, uint64_t *buffer)
AuVDiskWrite – reads a disk block from registered disk.
Definition vdisk.cpp:128