[haiku-commits] haiku: hrev47836 - src/add-ons/kernel/drivers/display

  • From: fredrik.holmqvist@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 7 Sep 2014 21:20:55 +0200 (CEST)

hrev47836 adds 1 changeset to branch 'master'
old head: f1d7e394e407b28268735bfbf6e781b052d0b7a7
new head: 95b67793813941d6ca785a68f6cca08193fd789d
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=95b6779+%5Ef1d7e39

----------------------------------------------------------------------------

95b6779: Format code, add display device base.
  
  Still very much work in progress.

                         [ Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev47836
Commit:      95b67793813941d6ca785a68f6cca08193fd789d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=95b6779
Author:      Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>
Date:        Sun Sep  7 19:14:30 2014 UTC

----------------------------------------------------------------------------

3 files changed, 166 insertions(+), 26 deletions(-)
src/add-ons/kernel/drivers/display/Jamfile       |   1 +
src/add-ons/kernel/drivers/display/display.cpp   | 130 +++++++++++++++++++
.../kernel/drivers/display/display_adapter.cpp   |  61 +++++----

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/drivers/display/Jamfile 
b/src/add-ons/kernel/drivers/display/Jamfile
index ee3fd1a..ab85df1 100644
--- a/src/add-ons/kernel/drivers/display/Jamfile
+++ b/src/add-ons/kernel/drivers/display/Jamfile
@@ -3,6 +3,7 @@ SubDir HAIKU_TOP src add-ons kernel drivers display ;
 UsePrivateHeaders kernel ;
 
 KernelAddon display_adapter :
+       display.cpp
        display_adapter.cpp
        ;
 
diff --git a/src/add-ons/kernel/drivers/display/display.cpp 
b/src/add-ons/kernel/drivers/display/display.cpp
new file mode 100644
index 0000000..668b911
--- /dev/null
+++ b/src/add-ons/kernel/drivers/display/display.cpp
@@ -0,0 +1,130 @@
+#include <KernelExport.h>
+#include <Drivers.h>
+#include <Errors.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ACPI.h>
+
+
+#define DISPLAY_DEVICE_MODULE_NAME "drivers/display/display/device_v1"
+
+
+extern device_manager_info *gDeviceManager;
+extern acpi_module_info *gAcpi;
+
+
+typedef struct acpi_ns_device_info {
+       device_node *node;
+       acpi_handle acpi_device;
+} display_device_info;
+
+
+static status_t
+display_open(void *_cookie, const char* path, int flags, void** cookie)
+{
+       display_device_info *device = (display_device_info *)_cookie;
+       *cookie = device;
+       return B_OK;
+}
+
+
+static status_t
+display_read(void *_cookie, off_t position, void *buf, size_t* num_bytes)
+{
+       return B_ERROR;
+}
+
+
+static status_t
+display_write(void* cookie, off_t position, const void* buffer,
+       size_t* num_bytes)
+{
+       *num_bytes = 0;
+       return B_ERROR;
+}
+
+
+static status_t
+display_control(void* cookie, uint32 op, void* arg, size_t len)
+{      return B_ERROR;
+}
+
+
+static status_t
+display_close(void* cookie)
+{
+       return B_OK;
+}
+
+
+static status_t
+display_free(void* cookie)
+{
+       display_device_info *device = (display_device_info *)cookie;
+       return B_OK;
+}
+
+
+//     #pragma mark - device module API
+
+
+static status_t
+display_init(void *_cookie, void **cookie)
+{
+       device_node *node = (device_node *)_cookie;
+
+       display_device_info *device = 
+               (display_device_info *)calloc(1, sizeof(*device));
+
+       if (device == NULL)
+               return B_NO_MEMORY;
+
+       device->node = node;
+
+       const char *path;
+       if (gDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path,
+                       false) != B_OK
+               || gAcpi->get_handle(NULL, path, &device->acpi_device) != B_OK) 
{
+               dprintf("%s: failed to get acpi node.\n", __func__);
+               free(device);
+               return B_ERROR;
+       }
+
+       *cookie = device;
+       return B_OK;
+}
+
+
+static void
+display_uninit(void *_cookie)
+{
+       display_device_info *device = (display_device_info *)_cookie;
+       free(device);
+}
+
+
+struct device_module_info display_device_module = {
+       {
+               DISPLAY_DEVICE_MODULE_NAME,
+               0,
+               NULL
+       },
+
+       display_init,
+       display_uninit,
+       NULL,
+
+       display_open,
+       display_close,
+       display_free,
+       display_read,
+       display_write,
+       NULL,
+       display_control,
+
+       NULL,
+       NULL
+};
diff --git a/src/add-ons/kernel/drivers/display/display_adapter.cpp 
b/src/add-ons/kernel/drivers/display/display_adapter.cpp
index de3821e..499fcac 100644
--- a/src/add-ons/kernel/drivers/display/display_adapter.cpp
+++ b/src/add-ons/kernel/drivers/display/display_adapter.cpp
@@ -10,13 +10,10 @@
 
 
 #define DISPLAYADAPTER_MODULE_NAME "drivers/display/display_adapter/driver_v1"
+#define DISPLAYADAPTER_DEVICE_MODULE_NAME \
+       "drivers/display/display_adapter/device_v1"
 
-#define DISPLAYADAPTER_DEVICE_MODULE_NAME 
"drivers/display/display_adapter/device_v1"
-
-/* Base Namespace devices are published to */
 #define DISPLAYADAPTER_BASENAME "display/display_adapter/%d"
-
-// name of pnp generator of path ids
 #define DISPLAYADAPTER_PATHID_GENERATOR "display_adapter/path_id"
 
 
@@ -28,8 +25,9 @@
 #define OS_BRIGHTNESS_CONTROL (1 << 2)
 #define BIOS_BRIGHTNESS_CONTROL (0 << 2)
 
-static device_manager_info *sDeviceManager;
-static acpi_module_info *sAcpi;
+
+device_manager_info *gDeviceManager = NULL;
+acpi_module_info *gAcpi = NULL;
 
 
 typedef struct acpi_ns_device_info {
@@ -60,9 +58,11 @@ displayadapter_init_device(void *_cookie, void **cookie)
                return B_NO_MEMORY;
 
        device->node = node;
-       if (sDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path, 
false)
-                       != B_OK || sAcpi->get_handle(NULL, path, 
&device->acpi_device) != B_OK) {
+       if (gDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path,
+                       false) != B_OK
+               || gAcpi->get_handle(NULL, path, &device->acpi_device) != B_OK) 
{
                dprintf("%s: failed to get acpi node.\n", __func__);
+               free(device);
                return B_ERROR;
        }
 
@@ -70,8 +70,8 @@ displayadapter_init_device(void *_cookie, void **cookie)
        argument.integer.integer = BIOS_DISPLAY_SWITCH | 
BIOS_BRIGHTNESS_CONTROL;
        arguments.count = 1;
        arguments.pointer = &argument;
-       if (sAcpi->evaluate_object(&device->acpi_device, "_DOS", &arguments, 
NULL, 0)
-                       != B_OK)
+       if (gAcpi->evaluate_object(&device->acpi_device, "_DOS", &arguments, 
NULL,
+                       0) != B_OK)
                dprintf("%s: failed to set _DOS %s\n", __func__, path);
 
        dprintf("%s: done.\n", __func__);
@@ -105,7 +105,8 @@ displayadapter_read(void* _cookie, off_t position, void 
*buf, size_t* num_bytes)
 
 
 static status_t
-displayadapter_write(void* cookie, off_t position, const void* buffer, size_t* 
num_bytes)
+displayadapter_write(void* cookie, off_t position, const void* buffer,
+       size_t* num_bytes)
 {
        return B_ERROR;
 }
@@ -148,27 +149,29 @@ displayadapter_support(device_node *parent)
        uint32 device_type;
 
        // make sure parent is really the ACPI bus manager
-       if (sDeviceManager->get_attr_string(parent, B_DEVICE_BUS, &bus, false))
+       if (gDeviceManager->get_attr_string(parent, B_DEVICE_BUS, &bus, false))
                return -1;
 
        if (strcmp(bus, "acpi"))
                return 0.0;
 
-       if (sDeviceManager->get_attr_string(parent, ACPI_DEVICE_PATH_ITEM, 
&path, false) != B_OK)
+       if (gDeviceManager->get_attr_string(parent, ACPI_DEVICE_PATH_ITEM, 
&path,
+                       false) != B_OK)
                return 0.0;
 
        // check whether it's really a device
-       if (sDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM, 
&device_type, false) != B_OK
+       if (gDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM,
+                       &device_type, false) != B_OK
                || device_type != ACPI_TYPE_DEVICE) {
                return 0.0;
        }
 
 
-       if (sAcpi->get_handle(NULL, path, &handle) != B_OK)
+       if (gAcpi->get_handle(NULL, path, &handle) != B_OK)
                return 0.0;
 
-       if (sAcpi->get_handle(handle, "_DOD", &method) != B_OK ||
-               sAcpi->get_handle(handle, "_DOS", &method) != B_OK) {// ||
+       if (gAcpi->get_handle(handle, "_DOD", &method) != B_OK ||
+               gAcpi->get_handle(handle, "_DOS", &method) != B_OK) {// ||
 //             sAcpi->get_type(method, &dosType) != B_OK ||
 //             dosType != ACPI_TYPE_METHOD) {
                return 0.0;
@@ -183,12 +186,13 @@ static status_t
 displayadapter_register_device(device_node *node)
 {
        device_attr attrs[] = {
-               { B_DEVICE_PRETTY_NAME, B_STRING_TYPE, { string: "Display 
Controls" }},
+               { B_DEVICE_PRETTY_NAME, B_STRING_TYPE, { string: "Display 
Adapter" }},
                { B_DEVICE_FLAGS, B_UINT32_TYPE, { ui32: B_KEEP_DRIVER_LOADED 
}},
                { NULL }
        };
 
-       return sDeviceManager->register_node(node, DISPLAYADAPTER_MODULE_NAME, 
attrs, NULL, NULL);
+       return gDeviceManager->register_node(node, DISPLAYADAPTER_MODULE_NAME,
+               attrs, NULL, NULL);
 }
 
 
@@ -213,21 +217,21 @@ displayadapter_register_child_devices(void *_cookie)
        int path_id;
        char name[128];
 
-       path_id = sDeviceManager->create_id(DISPLAYADAPTER_PATHID_GENERATOR);
+       path_id = gDeviceManager->create_id(DISPLAYADAPTER_PATHID_GENERATOR);
        if (path_id < 0) {
-               dprintf("displayadapter_register_child_devices: couldn't create 
a path_id\n");
+               dprintf("displayadapter_register_child_devices: error creating 
path\n");
                return B_ERROR;
        }
 
        snprintf(name, sizeof(name), DISPLAYADAPTER_BASENAME, path_id);
-
-       return sDeviceManager->publish_device(node, name, 
DISPLAYADAPTER_DEVICE_MODULE_NAME);
+       return gDeviceManager->publish_device(node, name,
+               DISPLAYADAPTER_DEVICE_MODULE_NAME);
 }
 
 
 module_dependency module_dependencies[] = {
-       { B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&sDeviceManager },
-       { B_ACPI_MODULE_NAME, (module_info **)&sAcpi},
+       { B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&gDeviceManager },
+       { B_ACPI_MODULE_NAME, (module_info **)&gAcpi},
        {}
 };
 
@@ -272,8 +276,13 @@ struct device_module_info displayadapter_device_module = {
        NULL
 };
 
+
+extern struct device_module_info display_device_module;
+
+
 module_info *modules[] = {
        (module_info *)&displayadapter_driver_module,
        (module_info *)&displayadapter_device_module,
+       (module_info *)&display_device_module,
        NULL
 };


Other related posts:

  • » [haiku-commits] haiku: hrev47836 - src/add-ons/kernel/drivers/display - fredrik . holmqvist