mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
solid: partially deal with TODO related to CPU instructions
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
45463e8694
commit
8b050853e2
3 changed files with 31 additions and 7 deletions
|
@ -155,7 +155,7 @@ QString DevinfoDevice::product() const
|
||||||
return QLatin1String("Loopback device Interface");
|
return QLatin1String("Loopback device Interface");
|
||||||
}
|
}
|
||||||
} else if(queryDeviceInterface(Solid::DeviceInterface::Processor)) {
|
} else if(queryDeviceInterface(Solid::DeviceInterface::Processor)) {
|
||||||
QByteArray hwmodel = sysctlByName("hw.model");
|
const QByteArray hwmodel = DevinfoDevice::stringByName("hw.model");
|
||||||
return QString::fromLatin1(hwmodel.constData());
|
return QString::fromLatin1(hwmodel.constData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,18 +275,30 @@ QByteArray DevinfoDevice::deviceCtl(const char* field) const
|
||||||
sysctldevicename += '.';
|
sysctldevicename += '.';
|
||||||
sysctldevicename += field;
|
sysctldevicename += field;
|
||||||
|
|
||||||
return sysctlByName(sysctldevicename.constData());
|
return DevinfoDevice::stringByName(sysctldevicename.constData());
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DevinfoDevice::sysctlByName(const char* sysctlname) const
|
QByteArray DevinfoDevice::stringByName(const char* sysctlname)
|
||||||
{
|
{
|
||||||
size_t sysctlbuffsize = 200;
|
size_t sysctlbuffsize = 1024;
|
||||||
char sysctlbuff[sysctlbuffsize];
|
char sysctlbuff[sysctlbuffsize];
|
||||||
::memset(sysctlbuff, '\0', sysctlbuffsize * sizeof(char));
|
::memset(sysctlbuff, '\0', sysctlbuffsize * sizeof(char));
|
||||||
const int sysctlresult = ::sysctlbyname(sysctlname, sysctlbuff, &sysctlbuffsize, NULL, 0);
|
const int sysctlresult = ::sysctlbyname(sysctlname, sysctlbuff, &sysctlbuffsize, NULL, 0);
|
||||||
if (sysctlresult == -1) {
|
if (sysctlresult == -1) {
|
||||||
// qWarning() << "sysctlbyname" << sysctldevicename << "failed for" << devicename;
|
// qWarning() << "sysctlbyname failed" << sysctlname;
|
||||||
return QByteArray();
|
return QByteArray();
|
||||||
}
|
}
|
||||||
return QByteArray(sysctlbuff, sysctlbuffsize);
|
return QByteArray(sysctlbuff, sysctlbuffsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qlonglong DevinfoDevice::integerByName(const char* sysctlname)
|
||||||
|
{
|
||||||
|
size_t sysctlbuffsize = sizeof(qlonglong);
|
||||||
|
qlonglong sysctlbuff = 0;
|
||||||
|
const int sysctlresult = ::sysctlbyname(sysctlname, &sysctlbuff, &sysctlbuffsize, NULL, 0);
|
||||||
|
if (sysctlresult == -1) {
|
||||||
|
// qWarning() << "sysctlbyname failed" << sysctlname;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return sysctlbuff;
|
||||||
|
}
|
||||||
|
|
|
@ -68,7 +68,9 @@ public:
|
||||||
QByteArray deviceProperty(const DeviceProperty property) const;
|
QByteArray deviceProperty(const DeviceProperty property) const;
|
||||||
QByteArray devicePnP(const PnPInfo pnp) const;
|
QByteArray devicePnP(const PnPInfo pnp) const;
|
||||||
QByteArray deviceCtl(const char* field) const;
|
QByteArray deviceCtl(const char* field) const;
|
||||||
QByteArray sysctlByName(const char* sysctlname) const;
|
|
||||||
|
static QByteArray stringByName(const char* sysctlname);
|
||||||
|
static qlonglong integerByName(const char* sysctlname);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_device;
|
QString m_device;
|
||||||
|
|
|
@ -55,8 +55,18 @@ bool Processor::canChangeFrequency() const
|
||||||
|
|
||||||
Solid::Processor::InstructionSets Processor::instructionSets() const
|
Solid::Processor::InstructionSets Processor::instructionSets() const
|
||||||
{
|
{
|
||||||
// TODO:
|
// TODO: IntelSse2, IntelSse3, IntelSse4, Amd3DNow, AltiVec
|
||||||
|
|
||||||
Solid::Processor::InstructionSets cpuinstructions = Solid::Processor::NoExtensions;
|
Solid::Processor::InstructionSets cpuinstructions = Solid::Processor::NoExtensions;
|
||||||
|
|
||||||
|
const qlonglong instructionsse = DevinfoDevice::integerByName("hw.instruction_sse");
|
||||||
|
// qDebug() << Q_FUNC_INFO << instructionsse;
|
||||||
|
if (instructionsse == 1) {
|
||||||
|
// for reference: freebsd-src/sys/amd64/amd64/initcpu.c
|
||||||
|
cpuinstructions |= Solid::Processor::IntelMmx;
|
||||||
|
cpuinstructions |= Solid::Processor::IntelSse;
|
||||||
|
}
|
||||||
|
|
||||||
return cpuinstructions;
|
return cpuinstructions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue