3 * - By John Hodge (thePowersGang)
6 * - /Devices/{null,zero,one}
14 int CoreDevs_Install(char **Arguments);
15 size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags);
16 size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags);
17 size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags);
18 size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags);
19 size_t CoreDevs_Read_FRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags);
20 size_t CoreDevs_Read_GRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags);
23 MODULE_DEFINE(0, 0x0100, CoreDevs, CoreDevs_Install, NULL, NULL);
24 tVFS_NodeType gCoreDevs_NT_Null = {
25 .TypeName = "CoreDevs-null",
26 .Flags = VFS_NODETYPEFLAG_STREAM,
27 .Read = CoreDevs_Read_Null,
28 .Write = CoreDevs_Write
30 tVFS_NodeType gCoreDevs_NT_Zero = {
31 .TypeName = "CoreDevs-zero",
32 .Flags = VFS_NODETYPEFLAG_STREAM,
33 .Read = CoreDevs_Read_Zero,
34 .Write = CoreDevs_Write
36 tVFS_NodeType gCoreDevs_NT_One = {
37 .TypeName = "CoreDevs-one",
38 .Flags = VFS_NODETYPEFLAG_STREAM,
39 .Read = CoreDevs_Read_One,
40 .Write = CoreDevs_Write
42 tVFS_NodeType gCoreDevs_NT_FRandom = {
43 .TypeName = "CoreDevs-frandom",
44 .Flags = VFS_NODETYPEFLAG_STREAM,
45 .Read = CoreDevs_Read_FRandom,
46 .Write = CoreDevs_Write
48 tVFS_NodeType gCoreDevs_NT_GRandom = {
49 .TypeName = "CoreDevs-grandom",
50 .Flags = VFS_NODETYPEFLAG_STREAM,
51 .Read = CoreDevs_Read_GRandom,
52 .Write = CoreDevs_Write
54 tDevFS_Driver gCoreDevs_Null = {
57 .Size = -1, .NumACLs = 1,
58 .ACLs = &gVFS_ACL_EveryoneRW,
59 .Type = &gCoreDevs_NT_Null
62 tDevFS_Driver gCoreDevs_Zero = {
65 .Size = -1, .NumACLs = 1,
66 .ACLs = &gVFS_ACL_EveryoneRW,
67 .Type = &gCoreDevs_NT_Zero
70 tDevFS_Driver gCoreDevs_One = {
73 .Size = -1, .NumACLs = 1,
74 .ACLs = &gVFS_ACL_EveryoneRW,
75 .Type = &gCoreDevs_NT_One
78 tDevFS_Driver gCoreDevs_FRandom = {
81 .Size = -1, .NumACLs = 1,
82 .ACLs = &gVFS_ACL_EveryoneRW,
83 .Type = &gCoreDevs_NT_FRandom,
87 tDevFS_Driver gCoreDevs_GRandom = {
90 .Size = -1, .NumACLs = 1,
91 .ACLs = &gVFS_ACL_EveryoneRW,
92 .Type = &gCoreDevs_NT_GRandom,
99 * \brief Installs the CoreDevs driver
101 int CoreDevs_Install(char **Options)
103 DevFS_AddDevice( &gCoreDevs_Null );
104 DevFS_AddDevice( &gCoreDevs_Zero );
105 DevFS_AddDevice( &gCoreDevs_One );
106 DevFS_AddDevice( &gCoreDevs_FRandom );
107 //DevFS_AddDevice( &gCoreDevs_GRandom );
108 return MODULE_ERR_OK;
111 size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags)
113 return Length; // Ignore
116 size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
118 memset(Buffer, 0, Length);
122 size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
126 for( rem = Length; rem --; ptr ++ )
131 size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
136 //! Fast random number generator
137 size_t CoreDevs_Read_FRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
139 Uint8 *cbuf = Buffer;
140 for( int i = 0; i < Length; i ++ )
145 size_t CoreDevs_Read_GRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
147 // TODO: VFS_IOFLAG_NOBLOCK
148 Log_Error("CoreDevs", "GRandom is unimplimented");