ipmi
—
OpenIPMI compatible IPMI interface driver
device ipmi
To manually specify I/O attachment in
/boot/device.hints:
hint.ipmi.0.at="isa"
hint.ipmi.0.port="0xCA2"
hint.ipmi.0.spacing="8"
hint.ipmi.0.mode="KCS"
To manually specify memory attachment in
/boot/device.hints:
hint.ipmi.0.at="isa"
hint.ipmi.0.maddr="0xf0000000"
hint.ipmi.0.spacing="8"
hint.ipmi.0.mode="SMIC"
Meaning of spacing:
- 8
- 8 bit alignment
- 16
- 16 bit alignment
- 32
- 32 bit alignment
If the port and
spacing are not specified the interface type default
will be used. Only specify either the port for I/O
access or maddr for memory access.
The IPMI (Intelligent Platform Management Interface) is a standard for
monitoring system hardware by permitting generic code to detect and monitor
the sensors in a system. The IPMI standard offers watchdog support, an FRU
database, and other support extensions. It is currently being adopted by the
makers of many single board and embedded system manufacturers.
The ipmi
driver in
FreeBSD is heavily adopted from the standard and
Linux driver; however, not all features described in the standard are
supported.
The ipmi
driver implements the power
cycling option to
shutdown(8)
to implement power cycling of the system. The motherboard's BMC must support
the chassis device and the optional power cycle subcomand of the chassis
control command as described in section 28.3 of the IPMI standard. The
length of time the system is off will be at least one second, but may be
longer if the power cycle interval has been set (see section 28.9).
Sending and receiving messages through the ipmi
driver
requires the use of
ioctl(2).
The ioctls are used due to the complexity of data sent to and from the device.
The
ioctl(2)
command codes below are defined in
<sys/ipmi.h>
. The third
argument to
ioctl(2)
should be a pointer to the type indicated.
Currently the following ioctls are supported:
IPMICTL_RECEIVE_MSG
(struct ipmi_recv)
- Receive a message. Possible error values:
- [
EAGAIN
]
- No messages are in the process queue.
- [
EFAULT
]
- An address supplied was invalid.
- [
EMSGSIZE
]
- The address could not fit in the message buffer and will remain in the
buffer.
IPMICTL_RECEIVE_MSG_TRUNC
(struct ipmi_recv)
- Like
IPMICTL_RECEIVE_MSG
but if the message cannot
fit into the buffer, it will truncate the contents instead of leaving the
data in the buffer.
IPMICTL_SEND_COMMAND
(struct ipmi_req)
- Send a message to the interface. Possible error values:
- [
EFAULT
]
- An address supplied was invalid.
- [
ENOMEM
]
- Buffers could not be allowed for the command, out of memory.
IPMICTL_SET_MY_ADDRESS_CMD
(unsigned int)
- Set the slave address for source messages.
IPMICTL_GET_MY_ADDRESS_CMD
(unsigned int)
- Get the slave address for source messages.
IPMICTL_SET_MY_LUN_CMD
(unsigned int)
- Set the slave LUN for source messages.
IPMICTL_GET_MY_LUN_CMD
(unsigned int)
- Get the slave LUN for source messages.
IPMICTL_REGISTER_FOR_CMD
(struct ipmi_cmdspec)
- Register to receive a specific command. Possible error values:
- [
EFAULT
]
- An supplied address was invalid.
- [
EBUSY
]
- The network function/command is already in use.
- [
ENOMEM
]
- Could not allocate memory.
IPMICTL_UNREGISTER_FOR_CMD
(struct ipmi_cmdspec)
- Unregister to receive a specific command. Possible error values:
- [
EFAULT
]
- An address supplied was invalid.
- [
ENOENT
]
- The network function/command was not found.
IPMICTL_SET_GETS_EVENTS_CMD
(int)
- Set whether this interface receives events. Possible error values:
- [
EFAULT
]
- An address supplied was invalid.
The ipmi
driver first appeared in
FreeBSD 6.2.
Not all features of the MontaVista driver are supported.
Currently, IPMB and BT modes are not implemented.