X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Ffifo.c;h=4d3595b767b6d8afc0cb3540c2cc5669d6870434;hb=ceae45d80582dcb433cd26dcd6aad1c17229779d;hp=2af45103f2b453286d17ac10ab66c45bc2af3bbb;hpb=e42035c38b65d428672b128f9ae253f81b2ced96;p=tpg%2Facess2.git diff --git a/Kernel/drv/fifo.c b/Kernel/drv/fifo.c index 2af45103..4d3595b7 100644 --- a/Kernel/drv/fifo.c +++ b/Kernel/drv/fifo.c @@ -31,11 +31,25 @@ tVFS_Node *FIFO_FindDir(tVFS_Node *Node, const char *Filename); void FIFO_Close(tVFS_Node *Node); int FIFO_Relink(tVFS_Node *Node, const char *OldName, const char *NewName); Uint64 FIFO_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); -Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); +Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const void *Buffer); tPipe *FIFO_Int_NewPipe(int Size, const char *Name); // === GLOBALS === MODULE_DEFINE(0, 0x0032, FIFO, FIFO_Install, NULL, NULL); +tVFS_NodeType gFIFO_DirNodeType = { + .TypeName = "FIFO Dir Node", + .ReadDir = FIFO_ReadDir, + .FindDir = FIFO_FindDir, + .MkNod = FIFO_MkNod, + .Relink = FIFO_Relink, + .IOCtl = FIFO_IOCtl +}; +tVFS_NodeType gFIFO_PipeNodeType = { + .TypeName = "FIFO Pipe Node", + .Read = FIFO_Read, + .Write = FIFO_Write, + .Close = FIFO_Close +}; tDevFS_Driver gFIFO_DriverInfo = { NULL, "fifo", { @@ -43,11 +57,7 @@ tDevFS_Driver gFIFO_DriverInfo = { .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRW, .Flags = VFS_FFLAG_DIRECTORY, - .ReadDir = FIFO_ReadDir, - .FindDir = FIFO_FindDir, - .MkNod = FIFO_MkNod, - .Relink = FIFO_Relink, - .IOCtl = FIFO_IOCtl + .Type = &gFIFO_DirNodeType } }; tVFS_Node gFIFO_AnonNode = { @@ -224,7 +234,7 @@ Uint64 FIFO_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) #if 0 len = Semaphore_Wait( &pipe->Semaphore, remaining ); #else - VFS_SelectNode(Node, VFS_SELECT_READ, NULL); + VFS_SelectNode(Node, VFS_SELECT_READ, NULL, "FIFO_Read"); // Read buffer // TODO: Rethink this, it might not work on buffer overflow if(pipe->WritePos - pipe->ReadPos < remaining) @@ -280,7 +290,7 @@ Uint64 FIFO_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) * \fn Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) * \brief Write to a fifo pipe */ -Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) +Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const void *Buffer) { tPipe *pipe = Node->ImplPtr; Uint len; @@ -295,7 +305,7 @@ Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) #if 0 len = Semaphore_Signal( &pipe->Semaphore, remaining ); #else - VFS_SelectNode(Node, VFS_SELECT_WRITE, NULL); + VFS_SelectNode(Node, VFS_SELECT_WRITE, NULL, "FIFO_Write"); if(pipe->ReadPos - pipe->WritePos < remaining) len = pipe->ReadPos - pipe->WritePos; else @@ -386,9 +396,7 @@ tPipe *FIFO_Int_NewPipe(int Size, const char *Name) ret->Node.CTime = ret->Node.MTime = ret->Node.ATime = now(); - ret->Node.Read = FIFO_Read; - ret->Node.Write = FIFO_Write; - ret->Node.Close = FIFO_Close; + ret->Node.Type = &gFIFO_PipeNodeType; return ret; }