1*4882a593SmuzhiyunWhat: /dev/wmi/dell-smbios 2*4882a593SmuzhiyunDate: November 2017 3*4882a593SmuzhiyunKernelVersion: 4.15 4*4882a593SmuzhiyunContact: "Mario Limonciello" <mario.limonciello@dell.com> 5*4882a593SmuzhiyunDescription: 6*4882a593Smuzhiyun Perform SMBIOS calls on supported Dell machines. 7*4882a593Smuzhiyun through the Dell ACPI-WMI interface. 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun IOCTL's and buffer formats are defined in: 10*4882a593Smuzhiyun <uapi/linux/wmi.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun 1) To perform an SMBIOS call from userspace, you'll need to 13*4882a593Smuzhiyun first determine the minimum size of the calling interface 14*4882a593Smuzhiyun buffer for your machine. 15*4882a593Smuzhiyun Platforms that contain larger buffers can return larger 16*4882a593Smuzhiyun objects from the system firmware. 17*4882a593Smuzhiyun Commonly this size is either 4k or 32k. 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun To determine the size of the buffer read() a u64 dword from 20*4882a593Smuzhiyun the WMI character device /dev/wmi/dell-smbios. 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun 2) After you've determined the minimum size of the calling 23*4882a593Smuzhiyun interface buffer, you can allocate a structure that represents 24*4882a593Smuzhiyun the structure documented above. 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun 3) In the 'length' object store the size of the buffer you 27*4882a593Smuzhiyun determined above and allocated. 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun 4) In this buffer object, prepare as necessary for the SMBIOS 30*4882a593Smuzhiyun call you're interested in. Typically SMBIOS buffers have 31*4882a593Smuzhiyun "class", "select", and "input" defined to values that coincide 32*4882a593Smuzhiyun with the data you are interested in. 33*4882a593Smuzhiyun Documenting class/select/input values is outside of the scope 34*4882a593Smuzhiyun of this documentation. Check with the libsmbios project for 35*4882a593Smuzhiyun further documentation on these values. 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun 6) Run the call by using ioctl() as described in the header. 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun 7) The output will be returned in the buffer object. 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun 8) Be sure to free up your allocated object. 42