X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fzero-one.c;h=fa2b502f3059a61feafc748311c2d1b7a82f1d39;hb=d8976435eade14e409b01e58850b75990ad9a4a7;hp=824f9276595ca34833a9139b379c8a519d178dda;hpb=d0b4559f2936f6d9f06be0f7c3c51527a480ec0d;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/zero-one.c b/KernelLand/Kernel/drv/zero-one.c index 824f9276..fa2b502f 100644 --- a/KernelLand/Kernel/drv/zero-one.c +++ b/KernelLand/Kernel/drv/zero-one.c @@ -12,10 +12,12 @@ // === PROTOTYPES === int CoreDevs_Install(char **Arguments); -size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer); -size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer); -size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer); -size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer); +size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags); +size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); +size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); +size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); +size_t CoreDevs_Read_FRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); +size_t CoreDevs_Read_GRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); // === GLOBALS === MODULE_DEFINE(0, 0x0100, CoreDevs, CoreDevs_Install, NULL, NULL); @@ -34,11 +36,20 @@ tVFS_NodeType gCoreDevs_NT_One = { .Read = CoreDevs_Read_One, .Write = CoreDevs_Write }; +tVFS_NodeType gCoreDevs_NT_FRandom = { + .TypeName = "CoreDevs-frandom", + .Read = CoreDevs_Read_FRandom, + .Write = CoreDevs_Write +}; +tVFS_NodeType gCoreDevs_NT_GRandom = { + .TypeName = "CoreDevs-grandom", + .Read = CoreDevs_Read_GRandom, + .Write = CoreDevs_Write +}; tDevFS_Driver gCoreDevs_Null = { NULL, "null", { - .Size = 0, - .NumACLs = 1, + .Size = 0, .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRW, .Type = &gCoreDevs_NT_Null } @@ -46,8 +57,7 @@ tDevFS_Driver gCoreDevs_Null = { tDevFS_Driver gCoreDevs_Zero = { NULL, "zero", { - .Size = 0, - .NumACLs = 1, + .Size = 0, .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRW, .Type = &gCoreDevs_NT_Zero } @@ -55,12 +65,29 @@ tDevFS_Driver gCoreDevs_Zero = { tDevFS_Driver gCoreDevs_One = { NULL, "one", { - .Size = 0, - .NumACLs = 1, + .Size = 0, .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRW, .Type = &gCoreDevs_NT_One } }; +tDevFS_Driver gCoreDevs_FRandom = { + NULL, "frandom", + { + .Size = 0, .NumACLs = 1, + .ACLs = &gVFS_ACL_EveryoneRW, + .Type = &gCoreDevs_NT_FRandom, + .DataAvaliable = 1 + } +}; +tDevFS_Driver gCoreDevs_GRandom = { + NULL, "grandom", + { + .Size = 0, .NumACLs = 1, + .ACLs = &gVFS_ACL_EveryoneRW, + .Type = &gCoreDevs_NT_GRandom, + .DataAvaliable = 1 + } +}; // === CODE === /** @@ -71,21 +98,23 @@ int CoreDevs_Install(char **Options) DevFS_AddDevice( &gCoreDevs_Null ); DevFS_AddDevice( &gCoreDevs_Zero ); DevFS_AddDevice( &gCoreDevs_One ); + DevFS_AddDevice( &gCoreDevs_FRandom ); + //DevFS_AddDevice( &gCoreDevs_GRandom ); return MODULE_ERR_OK; } -size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer) +size_t CoreDevs_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags) { return Length; // Ignore } -size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) +size_t CoreDevs_Read_Zero(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) { memset(Buffer, 0, Length); return Length; } -size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) +size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) { Uint8 *ptr = Buffer; size_t rem; @@ -94,8 +123,24 @@ size_t CoreDevs_Read_One (tVFS_Node *Node, off_t Offset, size_t Length, void *Bu return Length; } -size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) +size_t CoreDevs_Read_Null(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) { return 0; } +//! Fast random number generator +size_t CoreDevs_Read_FRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) +{ + Uint8 *cbuf = Buffer; + for( int i = 0; i < Length; i ++ ) + *cbuf++ = rand(); + return Length; +} + +size_t CoreDevs_Read_GRandom(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) +{ + // TODO: VFS_IOFLAG_NOBLOCK + Log_Error("CoreDevs", "GRandom is unimplimented"); + return -1; +} +