mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] IPMI: per-channel command registration
This patch adds the ability to register for a command per-channel in the IPMI driver. If your BMC supports multiple channels, incoming messages can be useful to have the ability to register to receive commands on a specific channel instead the current behaviour of all channels. Signed-off-by: David Barksdale <amatus@ocgnet.org> Signed-off-by: Corey Minyard <minyard@acm.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
54f67f631d
commit
c69c31270c
4 changed files with 139 additions and 29 deletions
|
@ -148,6 +148,13 @@ struct ipmi_lan_addr
|
|||
#define IPMI_BMC_CHANNEL 0xf
|
||||
#define IPMI_NUM_CHANNELS 0x10
|
||||
|
||||
/*
|
||||
* Used to signify an "all channel" bitmask. This is more than the
|
||||
* actual number of channels because this is used in userland and
|
||||
* will cover us if the number of channels is extended.
|
||||
*/
|
||||
#define IPMI_CHAN_ALL (~0)
|
||||
|
||||
|
||||
/*
|
||||
* A raw IPMI message without any addressing. This covers both
|
||||
|
@ -350,18 +357,21 @@ int ipmi_request_supply_msgs(ipmi_user_t user,
|
|||
|
||||
/*
|
||||
* When commands come in to the SMS, the user can register to receive
|
||||
* them. Only one user can be listening on a specific netfn/cmd pair
|
||||
* them. Only one user can be listening on a specific netfn/cmd/chan tuple
|
||||
* at a time, you will get an EBUSY error if the command is already
|
||||
* registered. If a command is received that does not have a user
|
||||
* registered, the driver will automatically return the proper
|
||||
* error.
|
||||
* error. Channels are specified as a bitfield, use IPMI_CHAN_ALL to
|
||||
* mean all channels.
|
||||
*/
|
||||
int ipmi_register_for_cmd(ipmi_user_t user,
|
||||
unsigned char netfn,
|
||||
unsigned char cmd);
|
||||
unsigned char cmd,
|
||||
unsigned int chans);
|
||||
int ipmi_unregister_for_cmd(ipmi_user_t user,
|
||||
unsigned char netfn,
|
||||
unsigned char cmd);
|
||||
unsigned char cmd,
|
||||
unsigned int chans);
|
||||
|
||||
/*
|
||||
* Allow run-to-completion mode to be set for the interface of
|
||||
|
@ -571,6 +581,36 @@ struct ipmi_cmdspec
|
|||
#define IPMICTL_UNREGISTER_FOR_CMD _IOR(IPMI_IOC_MAGIC, 15, \
|
||||
struct ipmi_cmdspec)
|
||||
|
||||
/*
|
||||
* Register to get commands from other entities on specific channels.
|
||||
* This way, you can only listen on specific channels, or have messages
|
||||
* from some channels go to one place and other channels to someplace
|
||||
* else. The chans field is a bitmask, (1 << channel) for each channel.
|
||||
* It may be IPMI_CHAN_ALL for all channels.
|
||||
*/
|
||||
struct ipmi_cmdspec_chans
|
||||
{
|
||||
unsigned int netfn;
|
||||
unsigned int cmd;
|
||||
unsigned int chans;
|
||||
};
|
||||
|
||||
/*
|
||||
* Register to receive a specific command on specific channels. error values:
|
||||
* - EFAULT - an address supplied was invalid.
|
||||
* - EBUSY - One of the netfn/cmd/chans supplied was already in use.
|
||||
* - ENOMEM - could not allocate memory for the entry.
|
||||
*/
|
||||
#define IPMICTL_REGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 28, \
|
||||
struct ipmi_cmdspec_chans)
|
||||
/*
|
||||
* Unregister some netfn/cmd/chans. error values:
|
||||
* - EFAULT - an address supplied was invalid.
|
||||
* - ENOENT - None of the netfn/cmd/chans were found registered for this user.
|
||||
*/
|
||||
#define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29, \
|
||||
struct ipmi_cmdspec_chans)
|
||||
|
||||
/*
|
||||
* Set whether this interface receives events. Note that the first
|
||||
* user registered for events will get all pending events for the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue