summaryrefslogtreecommitdiffstats
path: root/sys/dev/ipmi
Commit message (Collapse)AuthorAgeFilesLines
* Merge r257421 from head:glebius2013-11-141-0/+3
| | | | | | | Provide a crutch that prevents watchdog to interrupt dumping on a box with IPMI enabled. Approved by: re (kib)
* Change the cap_rights_t type from uint64_t to a structure that we can extendpjd2013-09-051-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in the future in a backward compatible (API and ABI) way. The cap_rights_t represents capability rights. We used to use one bit to represent one right, but we are running out of spare bits. Currently the new structure provides place for 114 rights (so 50 more than the previous cap_rights_t), but it is possible to grow the structure to hold at least 285 rights, although we can make it even larger if 285 rights won't be enough. The structure definition looks like this: struct cap_rights { uint64_t cr_rights[CAP_RIGHTS_VERSION + 2]; }; The initial CAP_RIGHTS_VERSION is 0. The top two bits in the first element of the cr_rights[] array contain total number of elements in the array - 2. This means if those two bits are equal to 0, we have 2 array elements. The top two bits in all remaining array elements should be 0. The next five bits in all array elements contain array index. Only one bit is used and bit position in this five-bits range defines array index. This means there can be at most five array elements in the future. To define new right the CAPRIGHT() macro must be used. The macro takes two arguments - an array index and a bit to set, eg. #define CAP_PDKILL CAPRIGHT(1, 0x0000000000000800ULL) We still support aliases that combine few rights, but the rights have to belong to the same array element, eg: #define CAP_LOOKUP CAPRIGHT(0, 0x0000000000000400ULL) #define CAP_FCHMOD CAPRIGHT(0, 0x0000000000002000ULL) #define CAP_FCHMODAT (CAP_FCHMOD | CAP_LOOKUP) There is new API to manage the new cap_rights_t structure: cap_rights_t *cap_rights_init(cap_rights_t *rights, ...); void cap_rights_set(cap_rights_t *rights, ...); void cap_rights_clear(cap_rights_t *rights, ...); bool cap_rights_is_set(const cap_rights_t *rights, ...); bool cap_rights_is_valid(const cap_rights_t *rights); void cap_rights_merge(cap_rights_t *dst, const cap_rights_t *src); void cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src); bool cap_rights_contains(const cap_rights_t *big, const cap_rights_t *little); Capability rights to the cap_rights_init(), cap_rights_set(), cap_rights_clear() and cap_rights_is_set() functions are provided by separating them with commas, eg: cap_rights_t rights; cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_FSTAT); There is no need to terminate the list of rights, as those functions are actually macros that take care of the termination, eg: #define cap_rights_set(rights, ...) \ __cap_rights_set((rights), __VA_ARGS__, 0ULL) void __cap_rights_set(cap_rights_t *rights, ...); Thanks to using one bit as an array index we can assert in those functions that there are no two rights belonging to different array elements provided together. For example this is illegal and will be detected, because CAP_LOOKUP belongs to element 0 and CAP_PDKILL to element 1: cap_rights_init(&rights, CAP_LOOKUP | CAP_PDKILL); Providing several rights that belongs to the same array's element this way is correct, but is not advised. It should only be used for aliases definition. This commit also breaks compatibility with some existing Capsicum system calls, but I see no other way to do that. This should be fine as Capsicum is still experimental and this change is not going to 9.x. Sponsored by: The FreeBSD Foundation
* Check for ipmi_attached in ipmi_isa_probe as a suggested alternative tosbruno2013-07-301-8/+8
| | | | | | | | ipmi_isa_attach. This keeps unintended but harmless noise about "ipmi1" from appearing in the boot up sequence. Submitted by: jbh@ (suggested by) Sponsored by: Yahoo! Inc.
* empirical testing showed that 3 seconds is just too slow for GET_DEVICE_IDsbruno2013-07-301-1/+1
| | | | | | | | | to return on newer Dell hardware. Bump to 6 second timeouts until someone has a better idea on how to handle this Reviewed by: jhb@ MFC after: 2 weeks Sponsored by: Yahoo! Inc.
* After discussions, revert svn r253708.sbruno2013-07-302-10/+11
| | | | | | | Changelog for 253708 was completely wrong and the code implemented something non-standard for the wrong reasons. Sponsored by: Yahoo! Inc.
* At some point after stable/7 the ACPI and ISA interfaces to the IPMI controllersbruno2013-07-272-11/+10
| | | | | | | | | | | | | | | | | | | | | | | | no longer have the parent in the device tree. This causes the identify function in ipmi_isa.c to attempt to probe and poke at the ISA IPMI interface Move the check for ipmi_attached out of the ipmi_isa_attach function and into the ipmi_isa_identify function. Remove the check of the device tree for ipmi devices attached. This probing appears to make Broadcom management firmware on Dell machines crash and emit NMI EISA warnings at various times requiring power cycles of the machines to restore. Bump MAX_TIMEOUT to 6 seconds as a hack for super slow IPMI interfaces that need longer to respond to our intial probes on startup. Tested on Dell R410, R510, R815, HP DL160G6 This is MFC candidate for 9.2R Reviewed by: peter MFC after: 2 weeks Sponsored by: Yahoo! Inc.
* Unlock IPMI sc while performing requests via KCS and SMIC interfaces.melifaro2013-03-252-0/+4
| | | | | | | | | It is already done in SSIF interface code. This reduces contention/spinning reported by many users. PR: kern/172166 Submitted by: Eric van Gyzen <eric at vangyzen.net> MFC after: 2 weeks
* - Re-shuffle the <machine/pc/bios.h> headers to move all kernel-specificjhb2012-09-281-39/+10
| | | | | | | | | | | bits under #ifdef _KERNEL but leave definitions for various structures defined by standards ($PIR table, SMAP entries, etc.) available to userland. - Consolidate duplicate SMBIOS table structure definitions in ipmi(4) and smbios(4) in <machine/pc/bios.h> and make them available to userland. MFC after: 2 weeks
* Don't try to stop the IPMI watchdog timer if it is not running.jhb2012-08-072-3/+5
| | | | | | | | | | | Starting or stopping the IPMI watchdog is rather expensive with the current implementation as all IPMI requests are bounced via thread. This is not viable during shutdown or dumps, and this avoids headache in the common case that the watchdog is not enabled. The IPMI watchdog should probably be reworked to not use a separate thread to fix this in the case when the watchdog timer is enabled. MFC after: 2 weeks
* Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs.ed2011-11-071-1/+2
| | | | | | The SYSCTL_NODE macro defines a list that stores all child-elements of that node. If there's no SYSCTL_DECL macro anywhere else, there's no reason why it shouldn't be static.
* Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs.ed2011-11-071-1/+1
| | | | This means that their use is restricted to a single C file.
* Second-to-last commit implementing Capsicum capabilities in the FreeBSDrwatson2011-08-111-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | kernel for FreeBSD 9.0: Add a new capability mask argument to fget(9) and friends, allowing system call code to declare what capabilities are required when an integer file descriptor is converted into an in-kernel struct file *. With options CAPABILITIES compiled into the kernel, this enforces capability protection; without, this change is effectively a no-op. Some cases require special handling, such as mmap(2), which must preserve information about the maximum rights at the time of mapping in the memory map so that they can later be enforced in mprotect(2) -- this is done by narrowing the rights in the existing max_protection field used for similar purposes with file permissions. In namei(9), we assert that the code is not reached from within capability mode, as we're not yet ready to enforce namespace capabilities there. This will follow in a later commit. Update two capability names: CAP_EVENT and CAP_KEVENT become CAP_POST_KEVENT and CAP_POLL_KEVENT to more accurately indicate what they represent. Approved by: re (bz) Submitted by: jonathan Sponsored by: Google Inc
* Fixed firmware revision decoding:ru2011-04-141-2/+2
| | | | | | | | - the major is 7-bit binary encoded - the minor is BCD encoded PR: kern/151586 MFC after: 3 days
* Fix test for double-nul characters that terminate the string table atjhb2010-07-291-1/+1
| | | | | | | the end of each SMBIOS/DMI structure. Submitted by: Dmitrij Tejblum @ yandex.ru MFC after: 3 days
* Rework the SMBIOS table walker to make it operate like other table walkersjhb2010-07-141-49/+33
| | | | | | | | | | | | | | | | | | and remove a buffer overflow: - Remove the array of per-type dispatch functions. Instead, pass each structure to a single callback. The callback should check the type of each table entry to take appropriate action. This matches the behavior of other table walkers such as for the MP Table and MADT. - Don't attempt to save an array of string pointers for each structure entry. Instead, just skip the strings. If this code is reused to provide a generic SMBIOS table walker in the future we could provide a method that looks up a specific string N for a given structure record instead of pre-populating an array of pointers. This fixes a buffer overflow for structure entries with more than 20 strings. PR: kern/148546 Reported by: Spencer Minear @ McAfee MFC after: 3 days
* - Fixed incorrect watchdog timeout setting: MSB of a 2-byteru2009-12-181-9/+20
| | | | | | | | | | | | | | | | | | | | | value is obtained by dividing it by 256, not by 2550; also, one second is 10^9 nanoseconds, not 1800000000 nanoseconds. - Due to rounding error, setting watchdog to a really small timeout (<1 sec) was turning the watchdog off. It should set the watchdog to a small timeout instead. - Implemented error checking in ipmi_wd_event(), as required by watchdog(9). PR: kern/130512 Submitted by: Dmitrij Tejblum - Additionally, check that the timeout value is within the supported range, and if it's too large, act as required by watchdog(9). MFC after: 3 days
* Import ACPICA 20090521.jkim2009-06-051-1/+2
|
* Add stuff to support upcoming BMC/IPMI flashing of newer Dell machineambrisko2009-03-261-0/+113
| | | | | | | | | | | | | | | | | | | | via the Linux tool. - Add Linux shim to ipmi(4) - Create a partitions file to linprocfs to make Linux fdisk see disks. This file is dynamic so we can see disks come and go. - Convert msdosfs to vfat in mtab since Linux uses that for msdosfs. - In the Linux mount path convert vfat passed in to msdosfs so Linux mount works on FreeBSD. Note that tasting works so that if da0 is a msdos file system /compat/linux/bin/mount /dev/da0 /mnt works. - fix a 64it bug for l_off_t. Grabing sh, mount, fdisk, df from Linux, creating a symlink of mtab to /compat/linux/etc/mtab and then some careful unpacking of the Linux bmc update tool and hacking makes it work on newer Dell boxes. Note, probably if you can't figure out how to do this, then you probably shouldn't be doing it :-)
* Don't right-adjust the SMBus slave address for SSIF IPMI BMCs enumeratedjhb2009-02-031-1/+1
| | | | | via ACPI either. This is somewhat academic since we don't currently support such devices though.
* - Change ichsmb(4) to follow the format of all the other smbus controllersjhb2009-02-031-2/+2
| | | | | | | | | | | | | for slave addressing by using left-adjusted slave addresses (i.e. xxxxxxx0b). - Require the low bit of the slave address to always be zero in smb(4) to help catch broken applications. - Adjust some code in the IPMI driver to not convert the slave address for SSIF to a right-adjusted address. I (or possibly ambrisko@) added this in the past to (unknowingly) work around the bug in ichsmb(4). Submitted by: Andriy Gapon <avg of icyb.net.ua> (1,2) MFC after: 1 month
* Fix typo where the code was missing the "IPMICTL_RECEIVE_MSG_32" conditionobrien2008-11-141-1/+1
| | | | test.
* Remove hack attempt at using devfs cloning for per-file descriptor storage.jhb2008-08-282-134/+37
| | | | | | | | Use the much simpler cdevpriv for per-fd state and enable it. This allows multiple opens of /dev/ipmi0 (e.g. using ipmitool while ipmievd is running in the background). MFC after: 1 week
* - Tweak an error message.jhb2008-08-281-3/+3
| | | | | | | - Fix a buglet where && was used instead of & to test if OBF was set in a couple of places. MFC after: 1 week
* Rename the kthread_xxx (e.g. kthread_create()) callsjulian2007-10-203-6/+6
| | | | | | | | | | | to kproc_xxx as they actually make whole processes. Thos makes way for us to add REAL kthread_create() and friends that actually make theads. it turns out that most of these calls actually end up being moved back to the thread version when it's added. but we need to make this cosmetic change first. I'd LOVE to do this rename in 7.0 so that we can eventually MFC the new kthread_xxx() calls.
* Add support to the ipmi, isa attachment to attempt to read ipmiambrisko2007-07-161-2/+79
| | | | | | | | | | | | config info. from device.hints. Some machines have ipmi controllers that do not have attachment info in either PCI, SMBIOS or ACPI. This idea was hacked together by me and then done properly by jhb. Submitted by: jhb Reviewed by: jhb (man page) Approved by: re (Ken Smith) MFC after: 1 week
* Update __FreeBSD_version check for MFC of pmap_mapbios().jhb2007-05-021-1/+1
|
* Add constants for the fields in a BAR. Also, add two new macrosjhb2007-03-311-5/+2
| | | | | | | PCI_BAR_(IO|MEM)() that return true if the passed in value from a BAR is for an IO or memory BAR, respectively. Reviewed by: imp
* - Add missing constants for subclasses.jhb2007-03-311-4/+4
| | | | - Add a few progif constants as well.
* Revisit the watchdogs: Resetting the error to EINVAL after failing to set then_hibma2007-03-271-2/+0
| | | | | | | | watchdog might hide the succesful arming of an earlier one. Accept that on failing to arm any watchdog (because of non-supported timeouts) EOPNOTSUPP is returned instead of the more appropriate EINVAL. MFC after: 3 days
* Use pause() rather than tsleep() on stack variables and function pointers.jhb2007-02-271-4/+4
|
* o break newbus api: add a new argument of type driver_filter_t topiso2007-02-231-1/+1
| | | | | | | | | | | | | bus_setup_intr() o add an int return code to all fast handlers o retire INTR_FAST/IH_FAST For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current Reviewed by: many Approved by: re@
* Align the interfaces for the various watchdogs and make the interfacen_hibma2006-12-151-17/+8
| | | | | | | | | | | | | | | | | | | | | | | | | behave as expected. Also: - Return an error if WD_PASSIVE is passed in to the ioctl as only WD_ACTIVE is implemented at the moment. See sys/watchdog.h for an explanation of the difference between WD_ACTIVE and WD_PASSIVE. - Remove the I_HAVE_TOTALLY_LOST_MY_SENSE_OF_HUMOR define. If you've lost your sense of humor, than don't add a define. Specific changes: i80321_wdog.c Don't roll your own passive watchdog tickle as this would defeat the purpose of an active (userland) watchdog tickle. ichwd.c / ipmi.c: WD_ACTIVE means active patting of the watchdog by a userland process, not whether the watchdog is active. See sys/watchdog.h. kern_clock.c: (software watchdog) Remove a check for WD_ACTIVE as this does not make sense here. This reverts r1.181.
* Fix some edge cases in detach() as well as a memory leak if we fail tojhb2006-12-061-2/+8
| | | | | | | talk to the BMC. Reported by: Alexander Logvinov : ports at logvinov_com MFC after: 1 week
* ipmi_polled_enqueue_request() is already called with the lock held, justjhb2006-10-121-2/+2
| | | | | | | | assert it rather than recursing. Reported by: mjacob Pointy hat: jhb MFC after: 3 days
* The IPMI spec is ambiguous (or rather, it contradicts itself) about whetherjhb2006-10-051-4/+4
| | | | | | | | | | | or not the OS has to wait for RX_RDY or TX_RDY to be set before the OS sets the control code in the control/status register. Looking at the interface design, it seems that RX_RDY and TX_RDY are probably there to protect access to the data register and have nothing to do with the control/status register. Nevertheless, try to take what I think is the more conservative approach and always wait for the appropriate [TR]X_RDY flag to be set before writing any of the WR_NEXT, WR_END, RD_START, or RD_NEXT control codes to the control/status register.
* Add detailed debugging printf's for SMIC under SMIC_DEBUG.jhb2006-10-051-2/+50
|
* Oops, don't toss the last character read during an SMIC transaction withjhb2006-10-051-2/+0
| | | | | | at least 1 data byte beyond the completion code. Tested by: Terry Kennedy <terry at tmk dot com>
* Fix a memory leak in ipmi_unload().jhb2006-09-261-1/+3
| | | | | CID: 1542 Found by: Coverity Prevent
* Map pmap_{un,}mapbios() to pmap_{un,}mapdev() on 6.x and earlier.jhb2006-09-221-0/+5
|
* Update the ipmi(4) driver:jhb2006-09-2210-1395/+3074
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Split out the communication protocols into their own files and use a couple of function pointers in the softc that the commuication protocols setup in their own attach routine. - Add support for the SSIF interface (talking to IPMI over SMBus). - Add an ACPI attachment. - Add a PCI attachment that attaches to devices with the IPMI interface subclass. - Split the ISA attachment out into its own file: ipmi_isa.c. - Change the code to probe the SMBIOS table for an IPMI entry to just use pmap_mapbios() to map the table in rather than trying to setup a fake resource on an isa device and then activating the resource to map in the table. - Make bus attachments leaner by adding attach functions for each communication interface (ipmi_kcs_attach(), ipmi_smic_attach(), etc.) that setup per-interface data. - Formalize the model used by the driver to handle requests by adding an explicit struct ipmi_request object that holds the state of a given request and reply for the entire lifetime of the request. By bundling the request into an object, it is easier to add retry logic to the various communication backends (as well as eventually support BT mode which uses a slightly different message format than KCS, SMIC, and SSIF). - Add a per-softc lock and remove D_NEEDGIANT as the driver is now MPSAFE. - Add 32-bit compatibility ioctl shims so you can use a 32-bit ipmitool on FreeBSD/amd64. - Add ipmi(4) to i386 and amd64 NOTES. Submitted by: ambrisko (large portions of 2 and 3) Sponsored by: IronPort Systems, Yahoo! MFC after: 6 days
* Since DELAY() was moved, most <machine/clock.h> #includes have beenphk2006-05-161-1/+0
| | | | unnecessary.
* Don't conflict with the DEBUG define.ambrisko2006-02-131-1/+1
|
* Add an OpenIPMI mostly compatible driver. This driver was developedambrisko2006-02-104-0/+2081
to work with ipmitools. It works with other tools that have an OpenIPMI driver interface. The port will need to get updated to used this. I have not implemented the IPMB mode yet so ioctl's for that don't really do much otherwise it should work like the OpenIPMI version. The ipmi.h definitions was derived from the ipmitool header file. The bus attachments are done for smbios and pci/smbios. Differences in bus probe order for modules/static are delt with. ACPI attachment should be done. This drivers registers with the watchdod(4) interface Work to do: - BT interface - IPMB mode This has been tested on Dell PE2850, PE2650 & PE850 with i386 & amd64 kernel. I will link this into the build on next week. Tom Rhodes, helped me with the man page. Sponsored by: IronPort Systems Inc. Inspired from: ipmitool & Linux
OpenPOWER on IntegriCloud