Copy Handle stuff from Atari.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38922 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2010-10-10 11:20:55 +00:00
parent 4ae92968ab
commit 9c720d59e3
2 changed files with 166 additions and 0 deletions
@@ -0,0 +1,117 @@
/*
* Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <SupportDefs.h>
#include <platform/openfirmware/openfirmware.h>
#include <util/kernel_cpp.h>
#include "Handle.h"
#include "toscalls.h"
/*
* (X)BIOS supports char and block devices with a separate namespace
* for char devs handle is {DEV_PRINTER, ... DEV_CONSOLE, ...}
* for block devs handle is either:
* - the partition number {0=A:, 2=C:...} in logical mode.
* - the drive number {0=A:, 1=B:, 2=ACSI-0, 10=SCSI-0, ...}
* in phys mode (RW_NOTRANSLATE).
* BlockHandle is in devices.cpp
*
* XXX: handle network devices ? not sure how TOS net extensions do this
* not sure it'll ever be supported anyway.
* XXX: BIOSDrive/BIOSHandle : public BlockHandle ?
*/
Handle::Handle(int handle)
:
fHandle(handle)
{
}
Handle::Handle(void)
:
fHandle(-1)
{
}
Handle::~Handle()
{
}
void
Handle::SetHandle(int handle)
{
fHandle = handle;
}
ssize_t
Handle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
{
return B_ERROR;
}
ssize_t
Handle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize)
{
return B_ERROR;
}
off_t
Handle::Size() const
{
// ToDo: fix this!
return 1024LL * 1024 * 1024 * 1024;
// 1024 GB
}
// #pragma mark -
CharHandle::CharHandle(int handle)
: Handle(handle)
{
}
CharHandle::CharHandle(void)
: Handle()
{
}
CharHandle::~CharHandle()
{
}
ssize_t
CharHandle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
{
char *string = (char *)buffer;
int i;
return bufferSize;
}
ssize_t
CharHandle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize)
{
const char *string = (const char *)buffer;
int i;
return bufferSize;
}
@@ -0,0 +1,49 @@
/*
* Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef HANDLE_H
#define HANDLE_H
#include <boot/vfs.h>
#ifdef __cplusplus
class Handle : public ConsoleNode {
public:
Handle(int handle);
Handle();
virtual ~Handle();
void SetHandle(int handle);
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
virtual off_t Size() const;
protected:
int fHandle;
};
/* character devices */
class CharHandle : public Handle {
public:
CharHandle(int handle);
CharHandle();
virtual ~CharHandle();
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
protected:
};
/* block devices */
/* cf. devices.cpp */
#endif /* __cplusplus */
#endif /* HANDLE_H */