Blame include/ipmitool/ipmi_dcmi.h

Packit Service ed0f68
/*
Packit Service ed0f68
 * Copyright (C) 2008 Intel Corporation.
Packit Service ed0f68
 * All rights reserved
Packit Service ed0f68
 * 
Packit Service ed0f68
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit Service ed0f68
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
Packit Service ed0f68
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
Packit Service ed0f68
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
Packit Service ed0f68
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
Packit Service ed0f68
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
Packit Service ed0f68
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
Packit Service ed0f68
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
Packit Service ed0f68
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
Packit Service ed0f68
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
Packit Service ed0f68
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
Packit Service ed0f68
 *
Packit Service ed0f68
 */
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
#ifndef IPMI_DCMI_H
Packit Service ed0f68
#define IPMI_DCMI_H
Packit Service ed0f68
Packit Service ed0f68
#include <ipmitool/ipmi.h>
Packit Service ed0f68
Packit Service ed0f68
/* DCMI commands per DCMI 1.5 SPEC */
Packit Service ed0f68
Packit Service ed0f68
#define IPMI_DCMI                   0xDC  /* Group Extension Identification */
Packit Service ed0f68
#define IPMI_DCMI_COMPAT            0x01
Packit Service ed0f68
#define IPMI_DCMI_GETRED            0x02
Packit Service ed0f68
#define IPMI_DCMI_GETLMT            0x03
Packit Service ed0f68
#define IPMI_DCMI_SETLMT            0x04
Packit Service ed0f68
#define IPMI_DCMI_PWRACT            0x05
Packit Service ed0f68
#define IPMI_DCMI_GETASSET          0x06
Packit Service ed0f68
#define IPMI_DCMI_SETASSET          0x08
Packit Service ed0f68
#define IPMI_DCMI_GETMNGCTRLIDS     0x09
Packit Service ed0f68
#define IPMI_DCMI_SETMNGCTRLIDS     0x0A
Packit Service ed0f68
#define IPMI_DCMI_SETTERMALLIMIT    0x0B
Packit Service ed0f68
#define IPMI_DCMI_GETTERMALLIMIT    0x0C
Packit Service ed0f68
#define IPMI_DCMI_GETSNSR           0x07
Packit Service ed0f68
#define IPMI_DCMI_PWRMGT            0x08
Packit Service ed0f68
#define IPMI_DCMI_GETTEMPRED        0x10
Packit Service ed0f68
#define IPMI_DCMI_SETCONFPARAM      0x12
Packit Service ed0f68
#define IPMI_DCMI_GETCONFPARAM      0x13
Packit Service ed0f68
Packit Service ed0f68
#define IPMI_DCMI_CONFORM           0x0001
Packit Service ed0f68
#define IPMI_DCMI_1_1_CONFORM       0x0101
Packit Service ed0f68
#define IPMI_DCMI_1_5_CONFORM       0x0501
Packit Service ed0f68
Packit Service ed0f68
#define DCMI_MAX_BYTE_SIZE              0x10
Packit Service ed0f68
#define DCMI_MAX_BYTE_TEMP_READ_SIZE    0x08
Packit Service ed0f68
Packit Service ed0f68
#define GOOD_PWR_GLIMIT_CCODE(ccode) ((ccode = ((ccode == 0x80) ? 0 : ccode)))
Packit Service ed0f68
#define GOOD_ASSET_TAG_CCODE(ccode) ((ccode = (((ccode == 0x80) || (ccode == 0x81) || (ccode == 0x82) || (ccode == 0x83)) ? 0 : ccode)))
Packit Service ed0f68
Packit Service ed0f68
/* External Node Manager Configuration and Control Commands per spec 2.0 */
Packit Service ed0f68
Packit Service ed0f68
#define IPMI_NM_POLICY_CTL     0xC0
Packit Service ed0f68
#define IPMI_NM_SET_POLICY     0xC1
Packit Service ed0f68
#define IPMI_NM_GET_POLICY     0xC2
Packit Service ed0f68
#define IPMI_NM_SET_ALERT_TH   0xC3
Packit Service ed0f68
#define IPMI_NM_GET_ALERT_TH   0xC4
Packit Service ed0f68
#define IPMI_NM_SET_SUSPEND    0xC5
Packit Service ed0f68
#define IPMI_NM_GET_SUSPEND    0xC6
Packit Service ed0f68
#define IPMI_NM_RESET_STATS    0xC7
Packit Service ed0f68
#define IPMI_NM_GET_STATS      0xC8
Packit Service ed0f68
#define IPMI_NM_GET_CAP        0xC9
Packit Service ed0f68
#define IPMI_NM_GET_VERSION    0xCA
Packit Service ed0f68
#define IPMI_NM_SET_POWER      0xCB
Packit Service ed0f68
#define IPMI_NM_SET_ALERT_DS   0xCE
Packit Service ed0f68
#define IPMI_NM_GET_ALERT_DS   0xCF
Packit Service ed0f68
#define IPMI_NM_LIMITING       0xF2
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager Policy Control Flags */
Packit Service ed0f68
#define IPMI_NM_GLOBAL_ENABLE  0x01
Packit Service ed0f68
#define IPMI_NM_DOMAIN_ENABLE  0x02
Packit Service ed0f68
#define IPMI_NM_PER_POLICY_ENABLE  0x04
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager Set Policy Enable */
Packit Service ed0f68
#define IPMI_NM_POLICY_ENABLE  0x10
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager Policy Trigger Codes */
Packit Service ed0f68
#define IPMI_NM_NO_POLICY_TRIG 0x00
Packit Service ed0f68
#define IPMI_NM_TEMP_TRIGGER   0x01
Packit Service ed0f68
#define IPMI_NM_NO_READ_TRIG   0x02
Packit Service ed0f68
#define IPMI_NM_RESET_TRIGGER  0x03
Packit Service ed0f68
#define IPMI_NM_BOOT_TRIGGER   0x04
Packit Service ed0f68
Packit Service ed0f68
/* Policy Exception Actions flags */
Packit Service ed0f68
#define IPMI_NM_POLICY_ALERT  0x01
Packit Service ed0f68
#define IPMI_NM_POLICY_SHUT   0x02
Packit Service ed0f68
Packit Service ed0f68
/* Power Correction codes for Policy action */
Packit Service ed0f68
#define IPMI_NM_PWR_AUTO_CORR 0x00
Packit Service ed0f68
#define IPMI_NM_PWR_SOFT_CORR 0x01
Packit Service ed0f68
#define IPMI_NM_PWR_AGGR_CORR 0x02
Packit Service ed0f68
Packit Service ed0f68
/* Set Threshold message size */
Packit Service ed0f68
#define IPMI_NM_SET_THRESH_LEN 12
Packit Service ed0f68
Packit Service ed0f68
/* Number of Suspend Periods */
Packit Service ed0f68
#define IPMI_NM_SUSPEND_PERIOD_MAX 5
Packit Service ed0f68
Packit Service ed0f68
struct dcmi_cmd {
Packit Service ed0f68
    uint16_t val;
Packit Service ed0f68
    const char * str;
Packit Service ed0f68
    const char * desc;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the get limit command */
Packit Service ed0f68
struct power_limit {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint16_t reserved_1; /* second and third bytes are reserved */
Packit Service ed0f68
    uint8_t action; /* fourth byte is the exception action */
Packit Service ed0f68
    uint16_t limit; /* fifth through sixth byte are the power limit in watts */
Packit Service ed0f68
    uint32_t correction; /* seventh - 10th bytes are the correction period */
Packit Service ed0f68
    uint16_t reserved_2; /* 11th - 12th are reserved bytes */
Packit Service ed0f68
    uint16_t sample; /* 13th - 14th are sample period time */
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the reading command */
Packit Service ed0f68
struct power_reading {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint16_t curr_pwr;
Packit Service ed0f68
    uint16_t min_sample;
Packit Service ed0f68
    uint16_t max_sample;
Packit Service ed0f68
    uint16_t avg_pwr;
Packit Service ed0f68
    uint32_t time_stamp; /* time since epoch */
Packit Service ed0f68
    uint32_t sample;
Packit Service ed0f68
    uint8_t state;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the capabilites command */
Packit Service ed0f68
struct capabilities {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint16_t conformance;
Packit Service ed0f68
    uint8_t revision;
Packit Service ed0f68
    uint8_t data_byte1;
Packit Service ed0f68
    uint8_t data_byte2;
Packit Service ed0f68
    uint8_t data_byte3;
Packit Service ed0f68
    uint8_t data_byte4;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the sensor info command */
Packit Service ed0f68
struct sensor_info {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint8_t i_instances;
Packit Service ed0f68
    uint8_t i_records;
Packit Service ed0f68
    
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the get asset tag command */
Packit Service ed0f68
struct asset_tag {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint8_t length;
Packit Service ed0f68
    const char tag[16];
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the set asset tag command */
Packit Service ed0f68
struct set_asset_tag {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint8_t length;
Packit Service ed0f68
    const char tag[16];
Packit Service ed0f68
	uint8_t *data;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* make a struct for the return from the get thermal limit command */
Packit Service ed0f68
struct thermal_limit {
Packit Service ed0f68
    uint8_t grp_id; /* first byte: Group Extension ID */
Packit Service ed0f68
    uint8_t exceptionActions;
Packit Service ed0f68
    uint8_t tempLimit;
Packit Service ed0f68
    uint16_t exceptionTime;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
int ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char ** argv);
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager discover command */
Packit Service ed0f68
struct nm_discover {
Packit Service ed0f68
    uint8_t intel_id[3]; /* Always returns 000157 */
Packit Service ed0f68
    uint8_t nm_version;
Packit Service ed0f68
    uint8_t ipmi_version;
Packit Service ed0f68
    uint8_t patch_version;
Packit Service ed0f68
    uint8_t major_rev;
Packit Service ed0f68
    uint8_t minor_rev;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager get capabilites command */
Packit Service ed0f68
struct nm_capability {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  max_settings;
Packit Service ed0f68
    uint16_t max_value; /* max power/thermal/time after reset */
Packit Service ed0f68
    uint16_t min_value; /* min ""                             */
Packit Service ed0f68
    uint32_t min_corr;  /* min correction time inmillesecs */
Packit Service ed0f68
    uint32_t max_corr;
Packit Service ed0f68
    uint16_t min_stats;
Packit Service ed0f68
    uint16_t max_stats;
Packit Service ed0f68
    uint8_t  scope;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager get statistics command */
Packit Service ed0f68
struct nm_statistics {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint16_t curr_value;
Packit Service ed0f68
    uint16_t min_value;
Packit Service ed0f68
    uint16_t max_value;
Packit Service ed0f68
    uint16_t ave_value;
Packit Service ed0f68
    uint32_t time_stamp;
Packit Service ed0f68
    uint32_t stat_period;
Packit Service ed0f68
    uint8_t  id_state;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager set policy */
Packit Service ed0f68
struct nm_policy {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  domain;       /* 0:3 are domain, 4 = Policy enabled */
Packit Service ed0f68
    uint8_t  policy_id;
Packit Service ed0f68
    uint8_t  policy_type;  /* 0:3 trigger type 4 = action 5:6 correction */
Packit Service ed0f68
    uint8_t  policy_exception;   /* exception actions */
Packit Service ed0f68
    uint16_t policy_limits;
Packit Service ed0f68
    uint32_t corr_time;
Packit Service ed0f68
    uint16_t trigger_limit;
Packit Service ed0f68
    uint16_t stats_period;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Maager get policy */
Packit Service ed0f68
struct nm_get_policy {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  domain;       /* 0:3 are domain, 4 = Policy enabled */
Packit Service ed0f68
    uint8_t  policy_type;  /* 0:3 trigger type 4 = action 5:6 correction */
Packit Service ed0f68
    uint8_t  policy_exception;   /* exception actions */
Packit Service ed0f68
    uint16_t policy_limits;
Packit Service ed0f68
    uint32_t corr_time;
Packit Service ed0f68
    uint16_t trigger_limit;
Packit Service ed0f68
    uint16_t stats_period;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager set alert destination */
Packit Service ed0f68
struct nm_set_alert {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  chan;           /* 0:3 BMC chan, 4:6 reserved, bit 7=0 register alert reciever =1 invalidate */
Packit Service ed0f68
    uint8_t  dest;           /* lan destination */
Packit Service ed0f68
    uint8_t  string;         /* alert string selector  */
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager set alert threshold */
Packit Service ed0f68
struct nm_thresh {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  domain;       /* 0:3 are domain, 4 = Policy enabled */
Packit Service ed0f68
    uint8_t  policy_id;
Packit Service ed0f68
    uint8_t  count;
Packit Service ed0f68
    uint16_t thresholds[3];
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager suspend period struct */
Packit Service ed0f68
struct nm_period {
Packit Service ed0f68
    uint8_t  start;
Packit Service ed0f68
    uint8_t  stop;
Packit Service ed0f68
    uint8_t  repeat;
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
/* Node Manager set suspend period */
Packit Service ed0f68
struct nm_suspend {
Packit Service ed0f68
    uint8_t  intel_id[3];
Packit Service ed0f68
    uint8_t  domain;       /* 0:3 are domain, 4 = Policy enabled */
Packit Service ed0f68
    uint8_t  policy_id;
Packit Service ed0f68
    uint8_t  count;
Packit Service ed0f68
    struct nm_period period[IPMI_NM_SUSPEND_PERIOD_MAX];
Packit Service ed0f68
} __attribute__ ((packed));
Packit Service ed0f68
Packit Service ed0f68
int ipmi_nm_main(struct ipmi_intf * intf, int argc, char ** argv);
Packit Service ed0f68
#endif /*IPMI_DCMI_H*/