Ticket #6350: early-acpi-support.diff

File early-acpi-support.diff, 5.6 KB (added by kallisti5, 10 years ago)

Final patch, basic ACPI node support

  • src/apps/devices/Device.cpp

     
    3232    "Satellite communications controller",  // 0x0f
    3333    "Encryption controller",                // 0x10
    3434    "Signal processing controller",         // 0x11
    35     "Computer"                              // 0x12 (added later)
     35    "Computer",                             // 0x12 (added later)
     36    "ACPI controller"           // 0x13 (added later)
    3637};
    3738
    3839
  • src/apps/devices/DeviceACPI.h

     
     1/*
     2 * Copyright 2008-2010 Haiku Inc. All rights reserved.
     3 * Distributed under the terms of the MIT License.
     4 *
     5 * Authors:
     6 *      Alexander von Gluck (kallisti5)
     7 */
     8#ifndef DEVICEACPI_H
     9#define DEVICEACPI_H
     10
     11
     12#include "Device.h"
     13
     14
     15class DeviceACPI : public Device {
     16public:
     17                        DeviceACPI(Device* parent);
     18    virtual             ~DeviceACPI();
     19    virtual Attributes  GetBusAttributes();
     20    virtual BString     GetBusStrings();
     21    virtual void        InitFromAttributes();
     22   
     23    virtual BString     GetBusTabName()
     24                            { return "ACPI Information"; }
     25
     26private:
     27    uint16              fClassBaseId;
     28    uint16              fClassSubId;
     29    uint16              fClassApiId;
     30    uint16              fVendorId;
     31    uint16              fDeviceId;
     32    uint16              fSubsystemVendorId;
     33    uint16              fSubSystemId;
     34};
     35
     36#endif /* DEVICEACPI_H */
  • src/apps/devices/Device.h

     
    2424    BUS_ISA = 1,
    2525    BUS_PCI,
    2626    BUS_SCSI,
     27    BUS_ACPI,
    2728    BUS_NONE
    2829} BusType;
    2930
     
    4546typedef enum {
    4647    CAT_NONE = 0,
    4748    CAT_BUS = 6,
    48     CAT_COMPUTER = 0x12
     49    CAT_COMPUTER = 0x12,
     50    CAT_ACPI = 0x13
    4951} Category;
    5052
    5153
  • src/apps/devices/DevicesView.cpp

     
    277277    // Determine what type of device it is and create it
    278278    for (unsigned int i = 0; i < attributes.size(); i++) {
    279279        // Devices Root
    280         if (attributes[i].fName == "device/pretty name"
     280        if (attributes[i].fName == B_DEVICE_PRETTY_NAME
    281281                && attributes[i].fValue == "Devices Root") {
    282282            newDevice = new Device(parent, BUS_NONE, CAT_COMPUTER, "Computer");
    283283            break;
    284284        }
    285285
     286        // ACPI Controller
     287        if (attributes[i].fName == B_DEVICE_PRETTY_NAME
     288                && attributes[i].fValue == "ACPI") {
     289            newDevice = new Device(parent, BUS_ACPI, CAT_BUS, "ACPI Controller");
     290            break;
     291        }
     292
    286293        // PCI bus
    287         if (attributes[i].fName == "device/pretty name"
     294        if (attributes[i].fName == B_DEVICE_PRETTY_NAME
    288295                && attributes[i].fValue == "PCI") {
    289296            newDevice = new Device(parent, BUS_PCI, CAT_BUS, "PCI bus");
    290297            break;
    291298        }
    292299
    293300        // ISA bus
    294         if (attributes[i].fName == "device/bus"
     301        if (attributes[i].fName == B_DEVICE_BUS
    295302                && attributes[i].fValue == "isa") {
    296303            newDevice = new Device(parent, BUS_ISA, CAT_BUS, "ISA bus");
    297304            break;
     
    303310            newDevice = new DevicePCI(parent);
    304311            break;
    305312        }
     313
     314        // ACPI device
     315        // TODO: This should be a its own device object like DevicePCI above (DeviceACPI? DeviceIO?)
     316        // For now they are under COMPUTER to clean up the "Unknown Device" category.
     317        if (attributes[i].fName == B_DEVICE_BUS
     318                && attributes[i].fValue == "acpi") {
     319            //newDevice = new Device(parent, BUS_ACPI, CAT_COMPUTER, "ACPI Node");
     320            newDevice = new DeviceACPI(parent);
     321            break;
     322        }
    306323    }
    307324
    308325    if (newDevice == NULL) {
  • src/apps/devices/DevicesView.h

     
    2626
    2727#include "Device.h"
    2828#include "DevicePCI.h"
     29#include "DeviceACPI.h"
    2930#include "PropertyList.h"
    3031#include "PropertyListPlain.h"
    3132
  • src/apps/devices/Jamfile

     
    6565    DevicesView.cpp
    6666    dm_wrapper.c
    6767    DevicePCI.cpp
     68    DeviceACPI.cpp
    6869    Device.cpp
    6970    PropertyList.cpp
    7071    PropertyListPlain.cpp
  • src/apps/devices/DeviceACPI.cpp

     
     1/*
     2 * Copyright 2008-2010 Haiku Inc. All rights reserved.
     3 * Distributed under the terms of the MIT License.
     4 *
     5 * Authors:
     6 *      Alexander von Gluck (kallisti5)
     7 */
     8
     9
     10#include <sstream>
     11#include <stdlib.h>
     12
     13#include "DeviceACPI.h"
     14
     15
     16DeviceACPI::DeviceACPI(Device* parent)
     17    :
     18    Device(parent),
     19    fClassBaseId(0),
     20    fClassSubId(0),
     21    fClassApiId(0),
     22    fVendorId(0),
     23    fDeviceId(0),
     24    fSubsystemVendorId(0),
     25    fSubSystemId(0)
     26{
     27}
     28
     29
     30DeviceACPI::~DeviceACPI()
     31{
     32}
     33
     34
     35void
     36DeviceACPI::InitFromAttributes()
     37{
     38    SetAttribute("Device name", "ACPI node");
     39    SetAttribute("Manufacturer", "Not implimented");
     40    fCategory = (Category)CAT_ACPI;
     41
     42    BString outlineName;
     43    outlineName = "ACPI node";
     44    SetText(outlineName.String());
     45}
     46
     47
     48Attributes
     49DeviceACPI::GetBusAttributes()
     50{
     51    Attributes attributes;
     52    attributes.push_back(GetAttribute("device/bus"));
     53    attributes.push_back(GetAttribute("acpi/path"));
     54    attributes.push_back(GetAttribute("acpi/type"));
     55    return attributes;
     56}
     57
     58
     59BString
     60DeviceACPI::GetBusStrings()
     61{
     62    BString str;
     63    str << "Class Info:\t\t\t\t: " << fAttributeMap["Class Info"];
     64    return str;
     65}