diff --git a/build/jam/packages/Haiku b/build/jam/packages/Haiku index 7704c442db..0f99e9e24e 100644 --- a/build/jam/packages/Haiku +++ b/build/jam/packages/Haiku @@ -161,7 +161,6 @@ AddDriversToPackage : null tty usb_modeswitch - zero ; AddDriversToPackage audio hmulti : $(SYSTEM_ADD_ONS_DRIVERS_AUDIO) ; diff --git a/build/jam/packages/HaikuBootstrap b/build/jam/packages/HaikuBootstrap index f34b94d50a..6aec08ac92 100644 --- a/build/jam/packages/HaikuBootstrap +++ b/build/jam/packages/HaikuBootstrap @@ -106,7 +106,6 @@ AddDriversToPackage : null random tty - zero ; AddDriversToPackage audio hmulti : $(SYSTEM_ADD_ONS_DRIVERS_AUDIO) ; diff --git a/src/add-ons/kernel/drivers/common/Jamfile b/src/add-ons/kernel/drivers/common/Jamfile index c1618a9470..d47f560cc7 100644 --- a/src/add-ons/kernel/drivers/common/Jamfile +++ b/src/add-ons/kernel/drivers/common/Jamfile @@ -7,11 +7,7 @@ KernelAddon dprintf : ; KernelAddon null : - null.c - ; - -KernelAddon zero : - zero.c + null.cpp ; KernelAddon console : diff --git a/src/add-ons/kernel/drivers/common/null.c b/src/add-ons/kernel/drivers/common/null.cpp similarity index 57% rename from src/add-ons/kernel/drivers/common/null.c rename to src/add-ons/kernel/drivers/common/null.cpp index 29f8cb1995..ddb92fd356 100644 --- a/src/add-ons/kernel/drivers/common/null.c +++ b/src/add-ons/kernel/drivers/common/null.cpp @@ -8,10 +8,13 @@ #include +#include #include -#define DEVICE_NAME "null" +#define DEVICE_NAME_FULL "full" +#define DEVICE_NAME_NULL "null" +#define DEVICE_NAME_ZERO "zero" int32 api_version = B_CUR_DRIVER_API_VERSION; @@ -53,6 +56,16 @@ null_read(void *cookie, off_t pos, void *buffer, size_t *_length) } +static status_t +zero_read(void *cookie, off_t pos, void *buffer, size_t *_length) +{ + if (user_memset(buffer, 0, *_length) < B_OK) + return B_BAD_ADDRESS; + + return B_OK; +} + + static status_t null_write(void *cookie, off_t pos, const void *buffer, size_t *_length) { @@ -60,6 +73,13 @@ null_write(void *cookie, off_t pos, const void *buffer, size_t *_length) } +static status_t +full_write(void *cookie, off_t pos, const void *buffer, size_t *_length) +{ + return B_DEVICE_FULL; +} + + // #pragma mark - @@ -74,7 +94,9 @@ const char ** publish_devices(void) { static const char *devices[] = { - DEVICE_NAME, + DEVICE_NAME_FULL, + DEVICE_NAME_NULL, + DEVICE_NAME_ZERO, NULL }; @@ -85,24 +107,40 @@ publish_devices(void) device_hooks * find_device(const char *name) { - static device_hooks hooks = { + static device_hooks fullHooks = { + &null_open, + &null_close, + &null_freecookie, + &null_ioctl, + &null_read, + &full_write, + }; + + static device_hooks nullHooks = { &null_open, &null_close, &null_freecookie, &null_ioctl, &null_read, &null_write, - /* Leave select/deselect/readv/writev undefined. The kernel will - * use its own default implementation. The basic hooks above this - * line MUST be defined, however. */ - NULL, - NULL, - NULL, - NULL }; - if (!strcmp(name, DEVICE_NAME)) - return &hooks; + static device_hooks zeroHooks = { + &null_open, + &null_close, + &null_freecookie, + &null_ioctl, + &zero_read, + &null_write, + }; + + + if (strcmp(name, DEVICE_NAME_FULL) == 0) + return &fullHooks; + if (strcmp(name, DEVICE_NAME_NULL) == 0) + return &nullHooks; + if (strcmp(name, DEVICE_NAME_ZERO) == 0) + return &zeroHooks; return NULL; } diff --git a/src/add-ons/kernel/drivers/common/zero.c b/src/add-ons/kernel/drivers/common/zero.c deleted file mode 100644 index fea72bc3ee..0000000000 --- a/src/add-ons/kernel/drivers/common/zero.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ - - -#include -#include - -#include - - -#define DEVICE_NAME "zero" - -int32 api_version = B_CUR_DRIVER_API_VERSION; - - -static status_t -zero_open(const char *name, uint32 flags, void **cookie) -{ - *cookie = NULL; - return B_OK; -} - - -static status_t -zero_close(void *cookie) -{ - return B_OK; -} - - -static status_t -zero_freecookie(void *cookie) -{ - return B_OK; -} - - -static status_t -zero_ioctl(void *cookie, uint32 op, void *buffer, size_t length) -{ - return EPERM; -} - - -static status_t -zero_read(void *cookie, off_t pos, void *buffer, size_t *_length) -{ - if (user_memset(buffer, 0, *_length) < B_OK) - return B_BAD_ADDRESS; - - return B_OK; -} - - -static status_t -zero_write(void *cookie, off_t pos, const void *buffer, size_t *_length) -{ - return B_OK; -} - - -// #pragma mark - - - -status_t -init_hardware(void) -{ - return B_OK; -} - - -const char ** -publish_devices(void) -{ - static const char *devices[] = { - DEVICE_NAME, - NULL - }; - - return devices; -} - - -device_hooks * -find_device(const char *name) -{ - static device_hooks hooks = { - &zero_open, - &zero_close, - &zero_freecookie, - &zero_ioctl, - &zero_read, - &zero_write, - /* Leave select/deselect/readv/writev undefined. The kernel will - * use its own default implementation. The basic hooks above this - * line MUST be defined, however. */ - NULL, - NULL, - NULL, - NULL - }; - - if (!strcmp(name, DEVICE_NAME)) - return &hooks; - - return NULL; -} - - -status_t -init_driver(void) -{ - return B_OK; -} - - -void -uninit_driver(void) -{ -} -