diff options
Diffstat (limited to 'meta-facebook/meta-yosemite/recipes-yosemite/fblibs')
24 files changed, 0 insertions, 4894 deletions
diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/Makefile deleted file mode 100644 index 12cb085..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -lib: libbic.so - -libbic.so: bic.c - $(CC) $(CFLAGS) -fPIC -c -o bic.o bic.c - $(CC) -lipmb -shared -o libbic.so bic.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libbic.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.c deleted file mode 100644 index 4139b44..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.c +++ /dev/null @@ -1,755 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdint.h> -#include <fcntl.h> -#include <syslog.h> -#include "bic.h" - -#define FRUID_READ_COUNT_MAX 0x30 -#define FRUID_WRITE_COUNT_MAX 0x30 -#define CPLD_WRITE_COUNT_MAX 0x50 -#define SDR_READ_COUNT_MAX 0x1A -#define SIZE_SYS_GUID 16 -#define SIZE_IANA_ID 3 - -enum { - IPMB_BUS_SLOT1 = 3, - IPMB_BUS_SLOT2 = 1, - IPMB_BUS_SLOT3 = 7, - IPMB_BUS_SLOT4 = 5, -}; - -#pragma pack(push, 1) -typedef struct _sdr_rec_hdr_t { - uint16_t rec_id; - uint8_t ver; - uint8_t type; - uint8_t len; -} sdr_rec_hdr_t; -#pragma pack(pop) - -// Common IPMB Wrapper function - -static int -get_ipmb_bus_id(uint8_t slot_id) { - int bus_id; - - switch(slot_id) { - case 1: - bus_id = IPMB_BUS_SLOT1; - break; - case 2: - bus_id = IPMB_BUS_SLOT2; - break; - case 3: - bus_id = IPMB_BUS_SLOT3; - break; - case 4: - bus_id = IPMB_BUS_SLOT4; - break; - default: - bus_id = -1; - break; - } - - return bus_id; -} - -static int -bic_ipmb_wrapper(uint8_t slot_id, uint8_t netfn, uint8_t cmd, - uint8_t *txbuf, uint8_t txlen, - uint8_t *rxbuf, uint8_t *rxlen) { - ipmb_req_t *req; - ipmb_res_t *res; - uint8_t rbuf[MAX_IPMB_RES_LEN] = {0}; - uint8_t tbuf[MAX_IPMB_RES_LEN] = {0}; - uint8_t tlen = 0; - uint8_t rlen = 0; - int count = 0; - int i = 0; - int ret; - uint8_t bus_id; - - ret = get_ipmb_bus_id(slot_id); - if (ret < 0) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_ipmb_wrapper: Wrong Slot ID %d\n", slot_id); -#endif - return ret; - } - - bus_id = (uint8_t) ret; - - req = (ipmb_req_t*)tbuf; - - req->res_slave_addr = BRIDGE_SLAVE_ADDR << 1; - req->netfn_lun = netfn << LUN_OFFSET; - req->hdr_cksum = req->res_slave_addr + - req->netfn_lun; - req->hdr_cksum = ZERO_CKSUM_CONST - req->hdr_cksum; - - req->req_slave_addr = BMC_SLAVE_ADDR << 1; - req->seq_lun = 0x00; - req->cmd = cmd; - - //copy the data to be send - if (txlen) { - memcpy(req->data, txbuf, txlen); - } - - tlen = IPMB_HDR_SIZE + IPMI_REQ_HDR_SIZE + txlen; - - // Invoke IPMB library handler - lib_ipmb_handle(bus_id, tbuf, tlen, &rbuf, &rlen); - - if (rlen == 0) { -#ifdef DEBUG - syslog(LOG_DEBUG, "bic_ipmb_wrapper: Zero bytes received\n"); -#endif - return -1; - } - - // Handle IPMB response - res = (ipmb_res_t*) rbuf; - - if (res->cc) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_ipmb_wrapper: Completion Code: 0x%X\n", res->cc); -#endif - return -1; - } - - // copy the received data back to caller - *rxlen = rlen - IPMB_HDR_SIZE - IPMI_RESP_HDR_SIZE; - memcpy(rxbuf, res->data, *rxlen); - - return 0; -} - -// Get Device ID -int -bic_get_dev_id(uint8_t slot_id, ipmi_dev_id_t *dev_id) { - uint8_t rlen = 0; - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_APP_REQ, CMD_APP_GET_DEVICE_ID, NULL, 0, (uint8_t *) dev_id, &rlen); - - return ret; -} - -// Get GPIO value and configuration -int -bic_get_gpio(uint8_t slot_id, bic_gpio_t *gpio) { - uint8_t tbuf[3] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[7] = {0x00}; - uint8_t rlen = 0; - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_GET_GPIO, tbuf, 0x03, rbuf, &rlen); - - // Ignore first 3 bytes of IANA ID - memcpy((uint8_t*) gpio, &rbuf[3], 4); - - return ret; -} - -int -bic_get_gpio_config(uint8_t slot_id, uint8_t gpio, bic_gpio_config_t *gpio_config) { - uint8_t tbuf[7] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[4] = {0x00}; - uint8_t rlen = 0; - uint8_t tlen = 0; - uint32_t pin; - int ret; - - pin = 1 << gpio; - - tbuf[3] = pin & 0xFF; - tbuf[4] = (pin >> 8) & 0xFF; - tbuf[5] = (pin >> 16) & 0xFF; - tbuf[6] = (pin >> 24) & 0xFF; - - tlen = 7; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_GET_GPIO_CONFIG, tbuf, tlen, rbuf, &rlen); - - // Ignore IANA ID - *(uint8_t *) gpio_config = rbuf[3]; - - return ret; -} - -int -bic_set_gpio_config(uint8_t slot_id, uint8_t gpio, bic_gpio_config_t *gpio_config) { - uint8_t tbuf[8] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[4] = {0x00}; - uint8_t rlen = 0; - uint8_t tlen = 0; - uint32_t pin; - int ret; - - pin = 1 << gpio; - - tbuf[3] = pin & 0xFF; - tbuf[4] = (pin >> 8) & 0xFF; - tbuf[5] = (pin >> 16) & 0xFF; - tbuf[6] = (pin >> 24) & 0xFF; - tbuf[7] = (*(uint8_t *) gpio_config) & 0x1F; - - tlen = 8; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_SET_GPIO_CONFIG, - tbuf, tlen, rbuf, &rlen); - return ret; -} - -// Get BIC Configuration -int -bic_get_config(uint8_t slot_id, bic_config_t *cfg) { - uint8_t tbuf[3] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[4] = {0x00}; - uint8_t rlen = 0; - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_GET_CONFIG, - tbuf, 0x03, rbuf, &rlen); - // Ignore IANA ID - *(uint8_t *) cfg = rbuf[3]; - - return ret; -} - -// Set BIC Configuration -int -bic_set_config(uint8_t slot_id, bic_config_t *cfg) { - uint8_t tbuf[4] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rlen = 0; - uint8_t rbuf[4] = {0}; - int ret; - - tbuf[3] = *(uint8_t *) cfg; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_SET_CONFIG, - tbuf, 0x04, rbuf, &rlen); - return ret; -} - -// Read POST Buffer -int -bic_get_post_buf(uint8_t slot_id, uint8_t *buf, uint8_t *len) { - uint8_t tbuf[3] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[255] = {0x00}; - uint8_t rlen = 0; - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_GET_POST_BUF, tbuf, 0x03, rbuf, &rlen); - - //Ignore IANA ID - memcpy(buf, &rbuf[3], rlen-3); - - *len = rlen - 3; - - return ret; -} - -// Read Firwmare Versions of various components -int -bic_get_fw_ver(uint8_t slot_id, uint8_t comp, uint8_t *ver) { - uint8_t tbuf[4] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[16] = {0x00}; - uint8_t rlen = 0; - int ret; - - // Fill the component for which firmware is requested - tbuf[3] = comp; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_GET_FW_VER, tbuf, 0x04, rbuf, &rlen); - // fw version has to be between 2 and 5 bytes based on component - if (ret || (rlen < 2+SIZE_IANA_ID) || (rlen > 5+SIZE_IANA_ID)) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_get_fw_ver: ret: %d, rlen: %d\n", ret, rlen); -#endif - return -1; - } - - //Ignore IANA ID - memcpy(ver, &rbuf[3], rlen-3); - - return ret; -} - -// Update firmware for various components -static int -_update_fw(uint8_t slot_id, uint8_t target, uint32_t offset, uint16_t len, uint8_t *buf) { - uint8_t tbuf[256] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[16] = {0x00}; - uint8_t tlen = 0; - uint8_t rlen = 0; - int ret; - int retries = 3; - - // Fill the component for which firmware is requested - tbuf[3] = target; - - tbuf[4] = (offset) & 0xFF; - tbuf[5] = (offset >> 8) & 0xFF; - tbuf[6] = (offset >> 16) & 0xFF; - tbuf[7] = (offset >> 24) & 0xFF; - - tbuf[8] = len & 0xFF; - tbuf[9] = (len >> 8) & 0xFF; - - memcpy(&tbuf[10], buf, len); - - printf("_update_fw: target: %d, offset: %d, len: %d\n", target, offset, len); - - tlen = len + 10; - -bic_send: - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_UPDATE_FW, tbuf, tlen, rbuf, &rlen); - if ((ret) && (retries--)) { - sleep(1); - printf("_update_fw: retrying..\n"); - goto bic_send; - } - - return ret; -} - -int -bic_update_fw(uint8_t slot_id, uint8_t comp, char *path) { - int ret; - uint32_t offset; - uint16_t count; - uint8_t buf[256] = {0}; - uint8_t len = 0; - uint8_t target; - int fd; - - // Open the file exclusively for read - fd = open(path, O_RDONLY, 0666); - if (fd < 0) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_update_fw: open fails for path: %s\n", path); -#endif - goto error_exit; - } - - // Write chunks of CPLD binary data in a loop - offset = 0; - while (1) { - // Read from file - count = read(fd, buf, CPLD_WRITE_COUNT_MAX); - if (count <= 0) { - break; - } - - if (count == CPLD_WRITE_COUNT_MAX) { - target = comp; - } else { - target = comp | 0x80; - } - - // Write to the CPLD - ret = _update_fw(slot_id, target, offset, count, buf); - if (ret) { - break; - } - - // Update counter - offset += count; - } - -error_exit: - if (fd > 0 ) { - close(fd); - } - - return ret; -} - -int -bic_me_xmit(uint8_t slot_id, uint8_t *txbuf, uint8_t txlen, uint8_t *rxbuf, uint8_t *rxlen) { - uint8_t tbuf[256] = {0x15, 0xA0, 0x00}; // IANA ID - uint8_t rbuf[256] = {0x00}; - uint8_t rlen = 0; - uint8_t tlen = 0; - int ret; - - // Fill the interface number as ME - tbuf[3] = BIC_INTF_ME; - - // Fill the data to be sent - memcpy(&tbuf[4], txbuf, txlen); - - // Send data length includes IANA ID and interface number - tlen = txlen + 4; - - ret = bic_ipmb_wrapper(slot_id, NETFN_OEM_1S_REQ, CMD_OEM_1S_MSG_OUT, tbuf, tlen, rbuf, &rlen); - if (ret ) { - return -1; - } - - // Make sure the received interface number is same - if (rbuf[3] != tbuf[3]) { - return -1; - } - - // Copy the received data to caller skipping header - memcpy(rxbuf, &rbuf[7], rlen-7); - - *rxlen = rlen-7; - - return 0; -} - -// Read 1S server's FRUID -int -bic_get_fruid_info(uint8_t slot_id, uint8_t fru_id, ipmi_fruid_info_t *info) { - int ret; - uint8_t rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_GET_FRUID_INFO, &fru_id, 1, (uint8_t *) info, &rlen); - - return ret; -} - -static int -_read_fruid(uint8_t slot_id, uint8_t fru_id, uint32_t offset, uint8_t count, uint8_t *rbuf, uint8_t *rlen) { - int ret; - uint8_t tbuf[4] = {0}; - uint8_t tlen = 0; - - tbuf[0] = fru_id; - tbuf[1] = offset & 0xFF; - tbuf[2] = (offset >> 8) & 0xFF; - tbuf[3] = count; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_READ_FRUID_DATA, tbuf, 4, rbuf, rlen); - - return ret; -} - -int -bic_read_fruid(uint8_t slot_id, uint8_t fru_id, const char *path) { - int ret; - uint32_t nread; - uint32_t offset; - uint8_t count; - uint8_t rbuf[256] = {0}; - uint8_t rlen = 0; - int fd; - ipmi_fruid_info_t info; - - // Remove the file if exists already - unlink(path); - - // Open the file exclusively for write - fd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0666); - if (fd < 0) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_fruid: open fails for path: %s\n", path); -#endif - goto error_exit; - } - - // Read the FRUID information - ret = bic_get_fruid_info(slot_id, fru_id, &info); - if (ret) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_fruid: bic_read_fruid_info returns %d\n", ret); -#endif - goto error_exit; - } - - // Indicates the size of the FRUID - nread = (info.size_msb << 6) + (info.size_lsb); - - // Read chunks of FRUID binary data in a loop - offset = 0; - while (nread > 0) { - if (nread > FRUID_READ_COUNT_MAX) { - count = FRUID_READ_COUNT_MAX; - } else { - count = nread; - } - - ret = _read_fruid(slot_id, fru_id, offset, count, rbuf, &rlen); - if (ret) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_fruid: ipmb_wrapper fails\n"); -#endif - goto error_exit; - } - - // Ignore the first byte as it indicates length of response - write(fd, &rbuf[1], rlen-1); - - // Update offset - offset += (rlen-1); - nread -= (rlen-1); - } - -error_exit: - if (fd > 0 ) { - close(fd); - } - - return ret; -} - -static int -_write_fruid(uint8_t slot_id, uint8_t fru_id, uint32_t offset, uint8_t count, uint8_t *buf) { - int ret; - uint8_t tbuf[64] = {0}; - uint8_t rbuf[4] = {0}; - uint8_t tlen = 0; - uint8_t rlen = 0; - - tbuf[0] = fru_id; - tbuf[1] = offset & 0xFF; - tbuf[2] = (offset >> 8) & 0xFF; - - memcpy(&tbuf[3], buf, count); - tlen = count + 3; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_WRITE_FRUID_DATA, tbuf, tlen, rbuf, &rlen); - - if (ret) { - return ret; - } - - if (rbuf[0] != count) { - return -1; - } - - return ret; -} - -int -bic_write_fruid(uint8_t slot_id, uint8_t fru_id, const char *path) { - int ret; - uint32_t offset; - uint8_t count; - uint8_t buf[64] = {0}; - uint8_t len = 0; - int fd; - - // Open the file exclusively for read - fd = open(path, O_RDONLY, 0666); - if (fd < 0) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_write_fruid: open fails for path: %s\n", path); -#endif - goto error_exit; - } - - // Write chunks of FRUID binary data in a loop - offset = 0; - while (1) { - // Read from file - count = read(fd, buf, FRUID_WRITE_COUNT_MAX); - if (count <= 0) { - break; - } - - // Write to the FRUID - ret = _write_fruid(slot_id, fru_id, offset, count, buf); - if (ret) { - break; - } - - // Update counter - offset += count; - } - -error_exit: - if (fd > 0 ) { - close(fd); - } - - return ret; -} - -// Read System Event Log (SEL) -int -bic_get_sel_info(uint8_t slot_id, ipmi_sel_sdr_info_t *info) { - int ret; - uint8_t rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_GET_SEL_INFO, NULL, 0, (uint8_t *)info, &rlen); - - return ret; -} - -static int -_get_sel_rsv(uint8_t slot_id, uint16_t *rsv) { - int ret; - uint8_t rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_RSV_SEL, NULL, 0, (uint8_t *) rsv, &rlen); - return ret; -} - -int -bic_get_sel(uint8_t slot_id, ipmi_sel_sdr_req_t *req, ipmi_sel_sdr_res_t *res, uint8_t *rlen) { - - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_GET_SEL, (uint8_t *)req, sizeof(ipmi_sel_sdr_req_t), (uint8_t*)res, rlen); - - return ret; -} - -// Read Sensor Data Records (SDR) -int -bic_get_sdr_info(uint8_t slot_id, ipmi_sel_sdr_info_t *info) { - int ret; - uint8_t rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_GET_SDR_INFO, NULL, 0, (uint8_t *) info, &rlen); - - return ret; -} - -static int -_get_sdr_rsv(uint8_t slot_id, uint16_t *rsv) { - int ret; - uint8_t rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_RSV_SDR, NULL, 0, (uint8_t *) rsv, &rlen); - - return ret; -} - -static int -_get_sdr(uint8_t slot_id, ipmi_sel_sdr_req_t *req, ipmi_sel_sdr_res_t *res, uint8_t *rlen) { - int ret; - - ret = bic_ipmb_wrapper(slot_id, NETFN_STORAGE_REQ, CMD_STORAGE_GET_SDR, (uint8_t *)req, sizeof(ipmi_sel_sdr_req_t), (uint8_t*)res, rlen); - - return ret; -} - -int -bic_get_sdr(uint8_t slot_id, ipmi_sel_sdr_req_t *req, ipmi_sel_sdr_res_t *res, uint8_t *rlen) { - int ret; - uint8_t tbuf[MAX_IPMB_RES_LEN] = {0}; - uint8_t tlen; - uint8_t len; - ipmi_sel_sdr_res_t *tres; - sdr_rec_hdr_t *hdr; - - tres = (ipmi_sel_sdr_res_t *) tbuf; - - // Get SDR reservation ID for the given record - ret = _get_sdr_rsv(slot_id, &req->rsv_id); - if (ret) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_sdr: _get_sdr_rsv returns %d\n", ret); -#endif - return ret; - } - - // Initialize the response length to zero - *rlen = 0; - - // Read SDR Record Header - req->offset = 0; - req->nbytes = sizeof(sdr_rec_hdr_t); - - ret = _get_sdr(slot_id, req, tbuf, &tlen); - if (ret) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_sdr: _get_sdr returns %d\n", ret); -#endif - return ret; - } - - // Copy the next record id to response - res->next_rec_id = tres->next_rec_id; - - // Copy the header excluding first two bytes(next_rec_id) - memcpy(res->data, tres->data, tlen-2); - - // Update response length and offset for next request - *rlen += tlen-2; - req->offset = tlen-2; - - // Find length of data from header info - hdr = (sdr_rec_hdr_t *) tres->data; - len = hdr->len; - - // Keep reading chunks of SDR record in a loop - while (len > 0) { - if (len > SDR_READ_COUNT_MAX) { - req->nbytes = SDR_READ_COUNT_MAX; - } else { - req->nbytes = len; - } - - ret = _get_sdr(slot_id, req, tbuf, &tlen); - if (ret) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_sdr: _get_sdr returns %d\n", ret); -#endif - return ret; - } - - // Copy the data excluding the first two bytes(next_rec_id) - memcpy(&res->data[req->offset], tres->data, tlen-2); - - // Update response length, offset for next request, and remaining length - *rlen += tlen-2; - req->offset += tlen-2; - len -= tlen-2; - } - - return 0; -} - -int -bic_read_sensor(uint8_t slot_id, uint8_t sensor_num, ipmi_sensor_reading_t *sensor) { - int ret; - int rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_SENSOR_REQ, CMD_SENSOR_GET_SENSOR_READING, (uint8_t *)&sensor_num, 1, (uint8_t *)sensor, &rlen); - - return ret; -} - -int -bic_get_sys_guid(uint8_t slot_id, uint8_t *guid) { - int ret; - int rlen = 0; - - ret = bic_ipmb_wrapper(slot_id, NETFN_APP_REQ, CMD_APP_GET_SYSTEM_GUID, NULL, 0, guid, &rlen); - if (rlen != SIZE_SYS_GUID) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_get_sys_guid: returned rlen of %d\n"); -#endif - return -1; - } - - return ret; -} diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.h deleted file mode 100644 index 7110574..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/bic/bic.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __BIC_H__ -#define __BIC_H__ - -#include <openbmc/ipmi.h> -#include <openbmc/ipmb.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_GPIO_PINS 32 - -// GPIO PINS -enum { - PWRGOOD_CPU = 0x0, - PWRGD_PCH_PWROK, - PVDDR_VRHOT_N, - PVCCIN_VRHOT_N, - FM_FAST_PROCHOT_N, - PCHHOT_CPU_N, - FM_CPLD_CPU_DIMM_EVENT_CO_N, - FM_CPLD_BDXDE_THERMTRIP_N, - THERMTRIP_PCH_N, - FM_CPLD_FIVR_FAULT, - FM_BDXDE_CATERR_LVT3_N, - FM_BDXDE_ERR2_LVT3_N, - FM_BDXDE_ERR1_LVT3_N, - FM_BDXDE_ERR0_LVT3_N, - SLP_S4_N, - FM_NMI_EVENT_BMC_N, - FM_SMI_BMC_N, - RST_PLTRST_BMC_N, - FP_RST_BTN_BUF_N, - BMC_RST_BTN_OUT_N, - FM_BDE_POST_CMPLT_N, - FM_BDXDE_SLP3_N, - FM_PWR_LED_N, - PWRGD_PVCCIN, - SVR_ID0, - SVR_ID1, - SVR_ID2, - SVR_ID3, - BMC_READY_N, - RESERVED_29, - RESERVED_30, - RESERVED_31, -}; - -enum { - FW_CPLD = 1, - FW_BIC, - FW_ME, - FW_PVCCIN_VR, - FW_DDRAB_VR, - FW_P1V05_VR, - FW_PVCCGBE_VR, - FW_PVCCSCSUS_VR, -}; - -enum { - UPDATE_BIOS = 0, - UPDATE_CPLD, - UPDATE_BIC_BOOT -}; - -// Bridge IC Spec -typedef struct _bic_gpio_t { - uint32_t pwrgood_cpu:1; - uint32_t pwrgd_pch_pwrok:1; - uint32_t pvddr_vrhot_n:1; - uint32_t pvccin_vrhot_n:1; - uint32_t fm_fast_prochot_n:1; - uint32_t pchhot_cpu_n:1; - uint32_t fm_cpld_cpu_dimm_event_c0_n:1; - uint32_t fm_cpld_bdxde_thermtrip_n:1; - uint32_t thermtrip_pch_n:1; - uint32_t fm_cpld_fivr_fault:1; - uint32_t fm_bdxde_caterr_lvt3_n:1; - uint32_t fm_bdxde_err_lvt3_n:3; - uint32_t slp_s4_n:1; - uint32_t fm_nmi_event_bmc_n:1; - uint32_t fm_smi_bmc_n:1; - uint32_t rst_pltrst_bmc_n:1; - uint32_t fp_rst_btn_buf_n:1; - uint32_t bmc_rst_btn_out_n:1; - uint32_t fm_bde_post_cmplt_n:1; - uint32_t fm_bdxde_slp3_n:1; - uint32_t fm_pwr_led_n:1; - uint32_t pwrgd_pvccin:1; - uint32_t svr_id:4; - uint32_t bmc_ready_n:1; - uint32_t bmc_com_sw_n:1; - uint32_t rsvd:2; -} bic_gpio_t; - -typedef union _bic_gpio_u { - uint8_t gpio[4]; - bic_gpio_t bits; -} bic_gpio_u; - -typedef struct _bic_gpio_config_t { - uint8_t dir:1; - uint8_t ie:1; - uint8_t edge:1; - uint8_t trig:2; -} bic_gpio_config_t; - -typedef union _bic_gpio_config_u { - uint8_t config; - bic_gpio_config_t bits; -} bic_gpio_config_u; - -typedef struct _bic_config_t { - uint8_t sol:1; - uint8_t post:1; - uint8_t kcs:1; - uint8_t ipmb:1; - uint8_t rsvd:4; -} bic_config_t; - -typedef union _bic_config_u { - uint8_t config; - bic_config_t bits; -} bic_config_u; - -int bic_get_dev_id(uint8_t slot_id, ipmi_dev_id_t *id); - -int bic_get_bic_config(uint8_t slot_id, bic_config_t *cfg); -int bic_set_bic_config(uint8_t slot_id, bic_config_t *cfg); - -int bic_get_gpio(uint8_t slot_id, bic_gpio_t *gpio); -int bic_get_gpio_config(uint8_t slot_id, uint8_t gpio, bic_gpio_config_t *gpio_config); -int bic_set_gpio_config(uint8_t slot_id, uint8_t gpio, bic_gpio_config_t *gpio_config); -int bic_get_post_buf(uint8_t slot_id, uint8_t *buf, uint8_t *len); - -int bic_get_fruid_info(uint8_t slot_id, uint8_t fru_id, ipmi_fruid_info_t *info); -int bic_read_fruid(uint8_t slot_id, uint8_t fru_id, const char *path); -int bic_write_fruid(uint8_t slot_id, uint8_t fru_id, const char *path); - -int bic_get_sel_info(uint8_t slot_id, ipmi_sel_sdr_info_t *info); -int bic_get_sel_rsv(uint8_t slot_id, uint16_t *rsv); -int bic_get_sel(uint8_t slot_id, ipmi_sel_sdr_req_t *req, ipmi_sel_sdr_res_t *res, uint8_t *rlen); - -int bic_get_sdr_info(uint8_t slot_id, ipmi_sel_sdr_info_t *info); -int bic_get_sdr_rsv(uint8_t slot_id, uint16_t *rsv); -int bic_get_sdr(uint8_t slot_id, ipmi_sel_sdr_req_t *req, ipmi_sel_sdr_res_t *res, uint8_t *rlen); - -int bic_read_sensor(uint8_t slot_id, uint8_t sensor_num, ipmi_sensor_reading_t *sensor); - -int bic_get_sys_guid(uint8_t slot_id, uint8_t *guid); - -int bic_get_fw_ver(uint8_t slot_id, uint8_t comp, uint8_t *ver); - -int bic_update_fw(uint8_t slot_id, uint8_t comp, char *path); -int bic_me_xmit(uint8_t slot_id, uint8_t *txbuf, uint8_t txlen, uint8_t *rxbuf, uint8_t *rxlen); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __BIC_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/Makefile deleted file mode 100644 index c207a7d..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -lib: libpal.so - -libpal.so: pal.c - $(CC) $(CFLAGS) -fPIC -c -pthread -o pal.o pal.c - $(CC) -lbic -lyosemite_common -lyosemite_fruid -lyosemite_sensor -shared -o libpal.so pal.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libpal.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.c deleted file mode 100644 index ec0be12..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.c +++ /dev/null @@ -1,1953 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdint.h> -#include <stdbool.h> -#include <fcntl.h> -#include <errno.h> -#include <syslog.h> -#include <sys/mman.h> -#include <string.h> -#include <pthread.h> -#include "pal.h" - -#define BIT(value, index) ((value >> index) & 1) - -#define YOSEMITE_PLATFORM_NAME "Yosemite" -#define LAST_KEY "last_key" -#define YOSEMITE_MAX_NUM_SLOTS 4 -#define GPIO_VAL "/sys/class/gpio/gpio%d/value" -#define GPIO_DIR "/sys/class/gpio/gpio%d/direction" - -#define GPIO_HAND_SW_ID1 138 -#define GPIO_HAND_SW_ID2 139 -#define GPIO_HAND_SW_ID4 140 -#define GPIO_HAND_SW_ID8 141 - -#define GPIO_RST_BTN 144 -#define GPIO_PWR_BTN 24 - -#define GPIO_HB_LED 135 - -#define GPIO_USB_SW0 36 -#define GPIO_USB_SW1 37 -#define GPIO_USB_MUX_EN_N 147 - -#define GPIO_UART_SEL0 32 -#define GPIO_UART_SEL1 33 -#define GPIO_UART_SEL2 34 -#define GPIO_UART_RX 35 - -#define GPIO_POSTCODE_0 48 -#define GPIO_POSTCODE_1 49 -#define GPIO_POSTCODE_2 50 -#define GPIO_POSTCODE_3 51 -#define GPIO_POSTCODE_4 124 -#define GPIO_POSTCODE_5 125 -#define GPIO_POSTCODE_6 126 -#define GPIO_POSTCODE_7 127 - -#define GPIO_DBG_CARD_PRSNT 137 - -#define PAGE_SIZE 0x1000 -#define AST_SCU_BASE 0x1e6e2000 -#define PIN_CTRL1_OFFSET 0x80 -#define PIN_CTRL2_OFFSET 0x84 -#define AST_WDT_BASE 0x1e785000 -#define WDT_OFFSET 0x10 - -#define UART1_TXD (1 << 22) -#define UART2_TXD (1 << 30) -#define UART3_TXD (1 << 22) -#define UART4_TXD (1 << 30) - -#define DELAY_GRACEFUL_SHUTDOWN 1 -#define DELAY_POWER_OFF 6 -#define DELAY_POWER_CYCLE 10 -#define DELAY_12V_CYCLE 5 - -#define CRASHDUMP_BIN "/usr/local/bin/dump.sh" -#define CRASHDUMP_FILE "/mnt/data/crashdump_" -const static uint8_t gpio_rst_btn[] = { 0, 57, 56, 59, 58 }; -const static uint8_t gpio_led[] = { 0, 97, 96, 99, 98 }; -const static uint8_t gpio_id_led[] = { 0, 41, 40, 43, 42 }; -const static uint8_t gpio_prsnt[] = { 0, 61, 60, 63, 62 }; -const static uint8_t gpio_power[] = { 0, 27, 25, 31, 29 }; -const static uint8_t gpio_12v[] = { 0, 117, 116, 119, 118 }; -const char pal_fru_list[] = "all, slot1, slot2, slot3, slot4, spb, nic"; -const char pal_server_list[] = "slot1, slot2, slot3, slot4"; - -char * key_list[] = { -"pwr_server1_last_state", -"pwr_server2_last_state", -"pwr_server3_last_state", -"pwr_server4_last_state", -"sysfw_ver_slot1", -"sysfw_ver_slot2", -"sysfw_ver_slot3", -"sysfw_ver_slot4", -"identify_sled", -"identify_slot1", -"identify_slot2", -"identify_slot3", -"identify_slot4", -"timestamp_sled", -"slot1_por_cfg", -"slot2_por_cfg", -"slot3_por_cfg", -"slot4_por_cfg", -/* Add more Keys here */ -LAST_KEY /* This is the last key of the list */ -}; - -char * def_val_list[] = { - "on", /* pwr_server1_last_state */ - "on", /* pwr_server2_last_state */ - "on", /* pwr_server3_last_state */ - "on", /* pwr_server4_last_state */ - "0", /* sysfw_ver_slot1 */ - "0", /* sysfw_ver_slot2 */ - "0", /* sysfw_ver_slot3 */ - "0", /* sysfw_ver_slot4 */ - "off", /* identify_sled */ - "off", /* identify_slot1 */ - "off", /* identify_slot2 */ - "off", /* identify_slot3 */ - "off", /* identify_slot4 */ - "0", /* timestamp_sled */ - "on", /* slot1_por_cfg */ - "on", /* slot2_por_cfg */ - "on", /* slot3_por_cfg */ - "on", /* slot4_por_cfg */ - /* Add more def values for the correspoding keys*/ - LAST_KEY /* Same as last entry of the key_list */ -}; - -// Helper Functions -static int -read_device(const char *device, int *value) { - FILE *fp; - int rc; - - fp = fopen(device, "r"); - if (!fp) { - int err = errno; -#ifdef DEBUG - syslog(LOG_INFO, "failed to open device %s", device); -#endif - return err; - } - - rc = fscanf(fp, "%d", value); - fclose(fp); - if (rc != 1) { -#ifdef DEBUG - syslog(LOG_INFO, "failed to read device %s", device); -#endif - return ENOENT; - } else { - return 0; - } -} - -static int -write_device(const char *device, const char *value) { - FILE *fp; - int rc; - - fp = fopen(device, "w"); - if (!fp) { - int err = errno; -#ifdef DEBUG - syslog(LOG_INFO, "failed to open device for write %s", device); -#endif - return err; - } - - rc = fputs(value, fp); - fclose(fp); - - if (rc < 0) { -#ifdef DEBUG - syslog(LOG_INFO, "failed to write device %s", device); -#endif - return ENOENT; - } else { - return 0; - } -} - -// Power On the server in a given slot -static int -server_power_on(uint8_t slot_id) { - char vpath[64] = {0}; - - sprintf(vpath, GPIO_VAL, gpio_power[slot_id]); - - if (write_device(vpath, "1")) { - return -1; - } - - if (write_device(vpath, "0")) { - return -1; - } - - sleep(1); - - if (write_device(vpath, "1")) { - return -1; - } - - return 0; -} - -// Power Off the server in given slot -static int -server_power_off(uint8_t slot_id, bool gs_flag) { - char vpath[64] = {0}; - - if (slot_id < 1 || slot_id > 4) { - return -1; - } - - sprintf(vpath, GPIO_VAL, gpio_power[slot_id]); - - if (write_device(vpath, "1")) { - return -1; - } - - sleep(1); - - if (write_device(vpath, "0")) { - return -1; - } - - if (gs_flag) { - sleep(DELAY_GRACEFUL_SHUTDOWN); - } else { - sleep(DELAY_POWER_OFF); - } - - if (write_device(vpath, "1")) { - return -1; - } - - return 0; -} - -// Control 12V to the server in a given slot -static int -server_12v_on(uint8_t slot_id) { - char vpath[64] = {0}; - - if (slot_id < 1 || slot_id > 4) { - return -1; - } - - sprintf(vpath, GPIO_VAL, gpio_12v[slot_id]); - - if (write_device(vpath, "1")) { - return -1; - } - - return 0; -} - -// Turn off 12V for the server in given slot -static int -server_12v_off(uint8_t slot_id) { - char vpath[64] = {0}; - - if (slot_id < 1 || slot_id > 4) { - return -1; - } - - sprintf(vpath, GPIO_VAL, gpio_12v[slot_id]); - - if (write_device(vpath, "0")) { - return -1; - } - - return 0; -} - -// Debug Card's UART and BMC/SoL port share UART port and need to enable only -// one TXD i.e. either BMC's TXD or Debug Port's TXD. -static int -control_sol_txd(uint8_t slot) { - uint32_t scu_fd; - uint32_t ctrl; - void *scu_reg; - void *scu_pin_ctrl1; - void *scu_pin_ctrl2; - - scu_fd = open("/dev/mem", O_RDWR | O_SYNC ); - if (scu_fd < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "control_sol_txd: open fails\n"); -#endif - return -1; - } - - scu_reg = mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, scu_fd, - AST_SCU_BASE); - scu_pin_ctrl1 = (char*)scu_reg + PIN_CTRL1_OFFSET; - scu_pin_ctrl2 = (char*)scu_reg + PIN_CTRL2_OFFSET; - - switch(slot) { - case 1: - // Disable UART2's TXD and enable others - ctrl = *(volatile uint32_t*) scu_pin_ctrl2; - ctrl |= UART1_TXD; - ctrl &= (~UART2_TXD); //Disable - *(volatile uint32_t*) scu_pin_ctrl2 = ctrl; - - ctrl = *(volatile uint32_t*) scu_pin_ctrl1; - ctrl |= UART3_TXD | UART4_TXD; - *(volatile uint32_t*) scu_pin_ctrl1 = ctrl; - break; - case 2: - // Disable UART1's TXD and enable others - ctrl = *(volatile uint32_t*) scu_pin_ctrl2; - ctrl &= (~UART1_TXD); // Disable - ctrl |= UART2_TXD; - *(volatile uint32_t*) scu_pin_ctrl2 = ctrl; - - ctrl = *(volatile uint32_t*) scu_pin_ctrl1; - ctrl |= UART3_TXD | UART4_TXD; - *(volatile uint32_t*) scu_pin_ctrl1 = ctrl; - break; - case 3: - // Disable UART4's TXD and enable others - ctrl = *(volatile uint32_t*) scu_pin_ctrl2; - ctrl |= UART1_TXD | UART2_TXD; - *(volatile uint32_t*) scu_pin_ctrl2 = ctrl; - - ctrl = *(volatile uint32_t*) scu_pin_ctrl1; - ctrl |= UART3_TXD; - ctrl &= (~UART4_TXD); // Disable - *(volatile uint32_t*) scu_pin_ctrl1 = ctrl; - break; - case 4: - // Disable UART3's TXD and enable others - ctrl = *(volatile uint32_t*) scu_pin_ctrl2; - ctrl |= UART1_TXD | UART2_TXD; - *(volatile uint32_t*) scu_pin_ctrl2 = ctrl; - - ctrl = *(volatile uint32_t*) scu_pin_ctrl1; - ctrl &= (~UART3_TXD); // Disable - ctrl |= UART4_TXD; - *(volatile uint32_t*) scu_pin_ctrl1 = ctrl; - break; - default: - // Any other slots we need to enable all TXDs - ctrl = *(volatile uint32_t*) scu_pin_ctrl2; - ctrl |= UART1_TXD | UART2_TXD; - *(volatile uint32_t*) scu_pin_ctrl2 = ctrl; - - ctrl = *(volatile uint32_t*) scu_pin_ctrl1; - ctrl |= UART3_TXD | UART4_TXD; - *(volatile uint32_t*) scu_pin_ctrl1 = ctrl; - break; - } - - munmap(scu_reg, PAGE_SIZE); - close(scu_fd); - - return 0; -} - -// Display the given POST code using GPIO port -static int -pal_post_display(uint8_t status) { - char path[64] = {0}; - int ret; - char *val; - -#ifdef DEBUG - syslog(LOG_WARNING, "pal_post_display: status is %d\n", status); -#endif - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_0); - - if (BIT(status, 0)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_1); - if (BIT(status, 1)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_2); - if (BIT(status, 2)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_3); - if (BIT(status, 3)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_4); - if (BIT(status, 4)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_5); - if (BIT(status, 5)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_6); - if (BIT(status, 6)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - - sprintf(path, GPIO_VAL, GPIO_POSTCODE_7); - if (BIT(status, 7)) { - val = "1"; - } else { - val = "0"; - } - - ret = write_device(path, val); - if (ret) { - goto post_exit; - } - -post_exit: - if (ret) { -#ifdef DEBUG - syslog(LOG_WARNING, "write_device failed for %s\n", path); -#endif - return -1; - } else { - return 0; - } -} - -// Platform Abstraction Layer (PAL) Functions -int -pal_get_platform_name(char *name) { - strcpy(name, YOSEMITE_PLATFORM_NAME); - - return 0; -} - -int -pal_get_num_slots(uint8_t *num) { - *num = YOSEMITE_MAX_NUM_SLOTS; - - return 0; -} - -int -pal_is_server_prsnt(uint8_t slot_id, uint8_t *status) { - int val; - char path[64] = {0}; - - if (slot_id < 1 || slot_id > 4) { - return -1; - } - - sprintf(path, GPIO_VAL, gpio_prsnt[slot_id]); - - if (read_device(path, &val)) { - return -1; - } - - if (val == 0x0) { - *status = 1; - } else { - *status = 0; - } - - return 0; -} - -int -pal_is_debug_card_prsnt(uint8_t *status) { - int val; - char path[64] = {0}; - - sprintf(path, GPIO_VAL, GPIO_DBG_CARD_PRSNT); - - if (read_device(path, &val)) { - return -1; - } - - if (val == 0x0) { - *status = 1; - } else { - *status = 0; - } - - return 0; -} - -int -pal_get_server_power(uint8_t slot_id, uint8_t *status) { - int ret; - char value[MAX_VALUE_LEN]; - bic_gpio_t gpio; - - ret = bic_get_gpio(slot_id, &gpio); - if (ret) { - // Check for if the BIC is irresponsive due to 12V_OFF or 12V_CYCLE - pal_get_last_pwr_state(slot_id, value); - if (!(strcmp(value, "off"))) { - *status = SERVER_POWER_OFF; - return 0; - } else { - return ret; - } - } - - if (gpio.pwrgood_cpu) { - *status = SERVER_POWER_ON; - } else { - *status = SERVER_POWER_OFF; - } - - return 0; -} - -// Power Off, Power On, or Power Reset the server in given slot -int -pal_set_server_power(uint8_t slot_id, uint8_t cmd) { - uint8_t status; - bool gs_flag = false; - - if (slot_id < 1 || slot_id > 4) { - return -1; - } - - if (pal_get_server_power(slot_id, &status) < 0) { - return -1; - } - - switch(cmd) { - case SERVER_POWER_ON: - if (status == SERVER_POWER_ON) - return 1; - else - return server_power_on(slot_id); - break; - - case SERVER_POWER_OFF: - if (status == SERVER_POWER_OFF) - return 1; - else - return server_power_off(slot_id, gs_flag); - break; - - case SERVER_POWER_CYCLE: - if (status == SERVER_POWER_ON) { - if (server_power_off(slot_id, gs_flag)) - return -1; - - sleep(DELAY_POWER_CYCLE); - - return server_power_on(slot_id); - - } else if (status == SERVER_POWER_OFF) { - - return (server_power_on(slot_id)); - } - break; - - case SERVER_GRACEFUL_SHUTDOWN: - if (status == SERVER_POWER_OFF) - return 1; - else - gs_flag = true; - return server_power_off(slot_id, gs_flag); - break; - - case SERVER_12V_ON: - return server_12v_on(slot_id); - break; - - case SERVER_12V_OFF: - return server_12v_off(slot_id); - break; - - case SERVER_12V_CYCLE: - if (server_12v_off(slot_id)) { - return -1; - } - - sleep(DELAY_12V_CYCLE); - - return (server_12v_on(slot_id)); - default: - return -1; - } - - return 0; -} - -int -pal_sled_cycle(void) { - // Remove the adm1275 module as the HSC device is busy - system("rmmod adm1275"); - - // Send command to HSC power cycle - system("i2cset -y 10 0x40 0xd9 c"); - - return 0; -} - -// Read the Front Panel Hand Switch and return the position -int -pal_get_hand_sw(uint8_t *pos) { - char path[64] = {0}; - int id1, id2, id4, id8; - uint8_t loc; - // Read 4 GPIOs to read the current position - // id1: GPIOR2(138) - // id2: GPIOR3(139) - // id4: GPIOR4(140) - // id8: GPIOR5(141) - - // Read ID1 - sprintf(path, GPIO_VAL, GPIO_HAND_SW_ID1); - if (read_device(path, &id1)) { - return -1; - } - - // Read ID2 - sprintf(path, GPIO_VAL, GPIO_HAND_SW_ID2); - if (read_device(path, &id2)) { - return -1; - } - - // Read ID4 - sprintf(path, GPIO_VAL, GPIO_HAND_SW_ID4); - if (read_device(path, &id4)) { - return -1; - } - - // Read ID8 - sprintf(path, GPIO_VAL, GPIO_HAND_SW_ID8); - if (read_device(path, &id8)) { - return -1; - } - - loc = ((id8 << 3) | (id4 << 2) | (id2 << 1) | (id1)); - - switch(loc) { - case 0: - case 5: - *pos = HAND_SW_SERVER1; - break; - case 1: - case 6: - *pos = HAND_SW_SERVER2; - break; - case 2: - case 7: - *pos = HAND_SW_SERVER3; - break; - case 3: - case 8: - *pos = HAND_SW_SERVER4; - break; - default: - *pos = HAND_SW_BMC; - break; - } - - return 0; -} - -// Return the Front panel Power Button -int -pal_get_pwr_btn(uint8_t *status) { - char path[64] = {0}; - int val; - - sprintf(path, GPIO_VAL, GPIO_PWR_BTN); - if (read_device(path, &val)) { - return -1; - } - - if (val) { - *status = 0x0; - } else { - *status = 0x1; - } - - return 0; -} - -// Return the front panel's Reset Button status -int -pal_get_rst_btn(uint8_t *status) { - char path[64] = {0}; - int val; - - sprintf(path, GPIO_VAL, GPIO_RST_BTN); - if (read_device(path, &val)) { - return -1; - } - - if (val) { - *status = 0x0; - } else { - *status = 0x1; - } - - return 0; -} - -// Update the Reset button input to the server at given slot -int -pal_set_rst_btn(uint8_t slot, uint8_t status) { - char path[64] = {0}; - char *val; - - if (slot < 1 || slot > 4) { - return -1; - } - - if (status) { - val = "1"; - } else { - val = "0"; - } - - sprintf(path, GPIO_VAL, gpio_rst_btn[slot]); - if (write_device(path, val)) { - return -1; - } - - return 0; -} - -// Update the LED for the given slot with the status -int -pal_set_led(uint8_t slot, uint8_t status) { - char path[64] = {0}; - char *val; - - if (slot < 1 || slot > 4) { - return -1; - } - - if (status) { - val = "1"; - } else { - val = "0"; - } - - sprintf(path, GPIO_VAL, gpio_led[slot]); - if (write_device(path, val)) { - return -1; - } - - return 0; -} - -// Update Heartbeet LED -int -pal_set_hb_led(uint8_t status) { - char path[64] = {0}; - char *val; - - if (status) { - val = "1"; - } else { - val = "0"; - } - - sprintf(path, GPIO_VAL, GPIO_HB_LED); - if (write_device(path, val)) { - return -1; - } - - return 0; -} - -// Update the Identification LED for the given slot with the status -int -pal_set_id_led(uint8_t slot, uint8_t status) { - char path[64] = {0}; - char *val; - - if (slot < 1 || slot > 4) { - return -1; - } - - if (status) { - val = "1"; - } else { - val = "0"; - } - - sprintf(path, GPIO_VAL, gpio_id_led[slot]); - if (write_device(path, val)) { - return -1; - } - - return 0; -} - -static int -set_usb_mux(uint8_t state) { - int val; - char *new_state; - char path[64] = {0}; - - sprintf(path, GPIO_VAL, GPIO_USB_MUX_EN_N); - - if (read_device(path, &val)) { - return -1; - } - - // This GPIO Pin is active low - if (!val == state) - return 0; - - if (state) - new_state = "0"; - else - new_state = "1"; - - if (write_device(path, new_state) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "write_device failed for %s\n", path); -#endif - return -1; - } - - return 0; -} - -// Update the USB Mux to the server at given slot -int -pal_switch_usb_mux(uint8_t slot) { - char *gpio_sw0, *gpio_sw1; - char path[64] = {0}; - - // Based on the USB mux table in Schematics - switch(slot) { - case HAND_SW_SERVER1: - gpio_sw0 = "1"; - gpio_sw1 = "0"; - break; - case HAND_SW_SERVER2: - gpio_sw0 = "0"; - gpio_sw1 = "0"; - break; - case HAND_SW_SERVER3: - gpio_sw0 = "1"; - gpio_sw1 = "1"; - break; - case HAND_SW_SERVER4: - gpio_sw0 = "0"; - gpio_sw1 = "1"; - break; - case HAND_SW_BMC: - // Disable the USB MUX - if (set_usb_mux(USB_MUX_OFF) < 0) - return -1; - else - return 0; - default: - return 0; - } - - // Enable the USB MUX - if (set_usb_mux(USB_MUX_ON) < 0) - return -1; - - sprintf(path, GPIO_VAL, GPIO_USB_SW0); - if (write_device(path, gpio_sw0) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "write_device failed for %s\n", path); -#endif - return -1; - } - - sprintf(path, GPIO_VAL, GPIO_USB_SW1); - if (write_device(path, gpio_sw1) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "write_device failed for %s\n", path); -#endif - return -1; - } - - return 0; -} - -// Switch the UART mux to the given slot -int -pal_switch_uart_mux(uint8_t slot) { - char * gpio_uart_sel0; - char * gpio_uart_sel1; - char * gpio_uart_sel2; - char * gpio_uart_rx; - char path[64] = {0}; - int ret; - - // Refer the UART select table in schematic - switch(slot) { - case HAND_SW_SERVER1: - gpio_uart_sel2 = "0"; - gpio_uart_sel1 = "0"; - gpio_uart_sel0 = "1"; - gpio_uart_rx = "0"; - break; - case HAND_SW_SERVER2: - gpio_uart_sel2 = "0"; - gpio_uart_sel1 = "0"; - gpio_uart_sel0 = "0"; - gpio_uart_rx = "0"; - break; - case HAND_SW_SERVER3: - gpio_uart_sel2 = "0"; - gpio_uart_sel1 = "1"; - gpio_uart_sel0 = "1"; - gpio_uart_rx = "0"; - break; - case HAND_SW_SERVER4: - gpio_uart_sel2 = "0"; - gpio_uart_sel1 = "1"; - gpio_uart_sel0 = "0"; - gpio_uart_rx = "0"; - break; - default: - // for all other cases, assume BMC - gpio_uart_sel2 = "1"; - gpio_uart_sel1 = "0"; - gpio_uart_sel0 = "0"; - gpio_uart_rx = "1"; - break; - } - - // Diable TXD path from BMC to avoid conflict with SoL - ret = control_sol_txd(slot); - if (ret) { - goto uart_exit; - } - - // Enable Debug card path - sprintf(path, GPIO_VAL, GPIO_UART_SEL2); - ret = write_device(path, gpio_uart_sel2); - if (ret) { - goto uart_exit; - } - - sprintf(path, GPIO_VAL, GPIO_UART_SEL1); - ret = write_device(path, gpio_uart_sel1); - if (ret) { - goto uart_exit; - } - - sprintf(path, GPIO_VAL, GPIO_UART_SEL0); - ret = write_device(path, gpio_uart_sel0); - if (ret) { - goto uart_exit; - } - - sprintf(path, GPIO_VAL, GPIO_UART_RX); - ret = write_device(path, gpio_uart_rx); - if (ret) { - goto uart_exit; - } - -uart_exit: - if (ret) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_switch_uart_mux: write_device failed: %s\n", path); -#endif - return ret; - } else { - return 0; - } -} - -// Enable POST buffer for the server in given slot -int -pal_post_enable(uint8_t slot) { - int ret; - int i; - bic_config_t config = {0}; - bic_config_u *t = (bic_config_u *) &config; - - ret = bic_get_config(slot, &config); - if (ret) { -#ifdef DEBUG - syslog(LOG_WARNING, "post_enable: bic_get_config failed for fru: %d\n", slot); -#endif - return ret; - } - - t->bits.post = 1; - - ret = bic_set_config(slot, &config); - if (ret) { -#ifdef DEBUG - syslog(LOG_WARNING, "post_enable: bic_set_config failed\n"); -#endif - return ret; - } - - return 0; -} - -// Disable POST buffer for the server in given slot -int -pal_post_disable(uint8_t slot) { - int ret; - int i; - bic_config_t config = {0}; - bic_config_u *t = (bic_config_u *) &config; - - ret = bic_get_config(slot, &config); - if (ret) { - return ret; - } - - t->bits.post = 0; - - ret = bic_set_config(slot, &config); - if (ret) { - return ret; - } - - return 0; -} - -// Get the last post code of the given slot -int -pal_post_get_last(uint8_t slot, uint8_t *status) { - int ret; - uint8_t buf[MAX_IPMB_RES_LEN] = {0x0}; - uint8_t len; - int i; - - ret = bic_get_post_buf(slot, buf, &len); - if (ret) { - return ret; - } - - // The post buffer is LIFO and the first byte gives the latest post code - *status = buf[0]; - - return 0; -} - -// Handle the received post code, for now display it on debug card -int -pal_post_handle(uint8_t slot, uint8_t status) { - uint8_t prsnt, pos; - int ret; - - // Check for debug card presence - ret = pal_is_debug_card_prsnt(&prsnt); - if (ret) { - return ret; - } - - // No debug card present, return - if (!prsnt) { - return 0; - } - - // Get the hand switch position - ret = pal_get_hand_sw(&pos); - if (ret) { - return ret; - } - - // If the give server is not selected, return - if (pos != slot) { - return 0; - } - - // Display the post code in the debug card - ret = pal_post_display(status); - if (ret) { - return ret; - } - - return 0; -} - - -static int -read_kv(char *key, char *value) { - - FILE *fp; - int rc; - - fp = fopen(key, "r"); - if (!fp) { - int err = errno; -#ifdef DEBUG - syslog(LOG_WARNING, "read_kv: failed to open %s", key); -#endif - return err; - } - - rc = (int) fread(value, 1, MAX_VALUE_LEN, fp); - fclose(fp); - if (rc <= 0) { -#ifdef DEBUG - syslog(LOG_INFO, "read_kv: failed to read %s", key); -#endif - return ENOENT; - } else { - return 0; - } -} - -static int -write_kv(char *key, char *value) { - - FILE *fp; - int rc; - - fp = fopen(key, "w"); - if (!fp) { - int err = errno; -#ifdef DEBUG - syslog(LOG_WARNING, "write_kv: failed to open %s", key); -#endif - return err; - } - - rc = fwrite(value, 1, strlen(value), fp); - fclose(fp); - - if (rc < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "write_kv: failed to write to %s", key); -#endif - return ENOENT; - } else { - return 0; - } -} - -int -pal_get_fru_id(char *str, uint8_t *fru) { - - return yosemite_common_fru_id(str, fru); -} - -int -pal_get_fru_name(uint8_t fru, char *name) { - - return yosemite_common_fru_name(fru, name); -} - -int -pal_get_fru_sdr_path(uint8_t fru, char *path) { - return yosemite_sensor_sdr_path(fru, path); -} - -int -pal_get_fru_sensor_list(uint8_t fru, uint8_t **sensor_list, int *cnt) { - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - *sensor_list = (uint8_t *) bic_sensor_list; - *cnt = bic_sensor_cnt; - break; - case FRU_SPB: - *sensor_list = (uint8_t *) spb_sensor_list; - *cnt = spb_sensor_cnt; - break; - case FRU_NIC: - *sensor_list = (uint8_t *) nic_sensor_list; - *cnt = nic_sensor_cnt; - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "pal_get_fru_sensor_list: Wrong fru id %u", fru); -#endif - return -1; - } - return 0; -} - -int -pal_fruid_write(uint8_t fru, char *path) { - return bic_write_fruid(fru, 0, path); -} - -int -pal_sensor_sdr_init(uint8_t fru, sensor_info_t *sinfo) { - return yosemite_sensor_sdr_init(fru, sinfo); -} - -int -pal_sensor_read(uint8_t fru, uint8_t sensor_num, void *value) { - return yosemite_sensor_read(fru, sensor_num, value); -} - -int -pal_get_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, void *value) { - return yosemite_sensor_threshold(fru, sensor_num, thresh, value); -} - -int -pal_get_sensor_name(uint8_t fru, uint8_t sensor_num, char *name) { - return yosemite_sensor_name(fru, sensor_num, name); -} - -int -pal_get_sensor_units(uint8_t fru, uint8_t sensor_num, char *units) { - return yosemite_sensor_units(fru, sensor_num, units); -} - -int -pal_get_fruid_path(uint8_t fru, char *path) { - return yosemite_get_fruid_path(fru, path); -} - -int -pal_get_fruid_eeprom_path(uint8_t fru, char *path) { - return yosemite_get_fruid_eeprom_path(fru, path); -} - -int -pal_get_fruid_name(uint8_t fru, char *name) { - return yosemite_get_fruid_name(fru, name); -} - - -static int -get_key_value(char* key, char *value) { - - char kpath[64] = {0}; - - sprintf(kpath, KV_STORE, key); - - if (access(KV_STORE_PATH, F_OK) == -1) { - mkdir(KV_STORE_PATH, 0777); - } - - return read_kv(kpath, value); -} - -static int -set_key_value(char *key, char *value) { - - char kpath[64] = {0}; - - sprintf(kpath, KV_STORE, key); - - if (access(KV_STORE_PATH, F_OK) == -1) { - mkdir(KV_STORE_PATH, 0777); - } - - return write_kv(kpath, value); -} - -int -pal_get_key_value(char *key, char *value) { - - int ret; - int i; - - i = 0; - while(strcmp(key_list[i], LAST_KEY)) { - - if (!strcmp(key, key_list[i])) { - // Key is valid - if ((ret = get_key_value(key, value)) < 0 ) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_get_key_value: get_key_value failed. %d", ret); -#endif - return ret; - } - return ret; - } - i++; - } - - return -1; -} - -int -pal_set_def_key_value() { - - int ret; - int i; - char kpath[64] = {0}; - - i = 0; - while(strcmp(key_list[i], LAST_KEY)) { - - sprintf(kpath, KV_STORE, key_list[i]); - - if (access(kpath, F_OK) == -1) { - if ((ret = set_key_value(key_list[i], def_val_list[i])) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_set_def_key_value: set_key_value failed. %d", ret); -#endif - } - } - i++; - } - - return 0; -} - -int -pal_set_key_value(char *key, char *value) { - - int ret; - int i; - - i = 0; - while(strcmp(key_list[i], LAST_KEY)) { - - if (!strcmp(key, key_list[i])) { - // Key is valid - if ((ret = set_key_value(key, value)) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_set_key_value: set_key_value failed. %d", ret); -#endif - return ret; - } - return ret; - } - i++; - } - - return -1; -} - -int -pal_get_fru_devtty(uint8_t fru, char *devtty) { - - switch(fru) { - case FRU_SLOT1: - sprintf(devtty, "/dev/ttyS2"); - break; - case FRU_SLOT2: - sprintf(devtty, "/dev/ttyS1"); - break; - case FRU_SLOT3: - sprintf(devtty, "/dev/ttyS4"); - break; - case FRU_SLOT4: - sprintf(devtty, "/dev/ttyS3"); - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "pal_get_fru_devtty: Wrong fru id %u", fru); -#endif - return -1; - } - return 0; -} - -void -pal_dump_key_value(void) { - int i; - int ret; - - char value[MAX_VALUE_LEN] = {0x0}; - - while (strcmp(key_list[i], LAST_KEY)) { - printf("%s:", key_list[i]); - if (ret = get_key_value(key_list[i], value) < 0) { - printf("\n"); - } else { - printf("%s\n", value); - } - i++; - memset(value, 0, MAX_VALUE_LEN); - } -} - -int -pal_set_last_pwr_state(uint8_t fru, char *state) { - - int ret; - char key[MAX_KEY_LEN] = {0}; - - sprintf(key, "pwr_server%d_last_state", (int) fru); - - ret = pal_set_key_value(key, state); - if (ret < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_set_last_pwr_state: pal_set_key_value failed for " - "fru %u", fru); -#endif - } - return ret; -} - -int -pal_get_last_pwr_state(uint8_t fru, char *state) { - int ret; - char key[MAX_KEY_LEN] = {0}; - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - - sprintf(key, "pwr_server%d_last_state", (int) fru); - - ret = pal_get_key_value(key, state); - if (ret < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "pal_get_last_pwr_state: pal_get_key_value failed for " - "fru %u", fru); -#endif - } - return ret; - case FRU_SPB: - case FRU_NIC: - sprintf(state, "on"); - return 0; - } -} - -int -pal_get_sys_guid(uint8_t slot, char *guid) { - int ret; - - return bic_get_sys_guid(slot, guid); -} - -int -pal_set_sysfw_ver(uint8_t slot, uint8_t *ver) { - int i; - char key[MAX_KEY_LEN] = {0}; - char str[MAX_VALUE_LEN] = {0}; - char tstr[10] = {0}; - - sprintf(key, "sysfw_ver_slot%d", (int) slot); - - for (i = 0; i < SIZE_SYSFW_VER; i++) { - sprintf(tstr, "%02x", ver[i]); - strcat(str, tstr); - } - - return pal_set_key_value(key, str); -} - -int -pal_get_sysfw_ver(uint8_t slot, uint8_t *ver) { - int i; - int j = 0; - int ret; - int msb, lsb; - char key[MAX_KEY_LEN] = {0}; - char str[MAX_VALUE_LEN] = {0}; - char tstr[4] = {0}; - - sprintf(key, "sysfw_ver_slot%d", (int) slot); - - ret = pal_get_key_value(key, str); - if (ret) { - return ret; - } - - for (i = 0; i < 2*SIZE_SYSFW_VER; i += 2) { - sprintf(tstr, "%c\n", str[i]); - msb = strtol(tstr, NULL, 16); - - sprintf(tstr, "%c\n", str[i+1]); - lsb = strtol(tstr, NULL, 16); - ver[j++] = (msb << 4) | lsb; - } - - return 0; -} - -int -pal_is_bmc_por(void) { - uint32_t scu_fd; - uint32_t wdt; - void *scu_reg; - void *scu_wdt; - - scu_fd = open("/dev/mem", O_RDWR | O_SYNC ); - if (scu_fd < 0) { - return 0; - } - - scu_reg = mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, scu_fd, - AST_WDT_BASE); - scu_wdt = (char*)scu_reg + WDT_OFFSET; - - wdt = *(volatile uint32_t*) scu_wdt; - - munmap(scu_reg, PAGE_SIZE); - close(scu_fd); - - if (wdt & 0xff00) { - return 0; - } else { - return 1; - } -} - -int -pal_get_fru_discrete_list(uint8_t fru, uint8_t **sensor_list, int *cnt) { - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - *sensor_list = (uint8_t *) bic_discrete_list; - *cnt = bic_discrete_cnt; - break; - case FRU_SPB: - case FRU_NIC: - return -1; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "pal_get_fru_discrete_list: Wrong fru id %u", fru); -#endif - return -1; - } - return 0; -} - -static void -_print_sensor_discrete_log(uint8_t fru, uint8_t snr_num, char *snr_name, - uint8_t val, char *event) { - if (val) { - syslog(LOG_CRIT, "ASSERT: %s discrete - raised - FRU: %d, num: 0x%X," - " snr: %-16s val: %d", event, fru, snr_num, snr_name, val); - } else { - syslog(LOG_CRIT, "DEASSERT: %s discrete - settled - FRU: %d, num: 0x%X," - " snr: %-16s val: %d", event, fru, snr_num, snr_name, val); - } -} - -int -pal_sensor_discrete_check(uint8_t fru, uint8_t snr_num, char *snr_name, - uint8_t o_val, uint8_t n_val) { - - char name[32]; - bool valid = false; - uint8_t diff = o_val ^ n_val; - - if (GETBIT(diff, 0)) { - switch(snr_num) { - case BIC_SENSOR_SYSTEM_STATUS: - sprintf(name, "SOC_Thermal_Trip"); - valid = true; - break; - case BIC_SENSOR_VR_HOT: - sprintf(name, "SOC_VR_Hot"); - valid = true; - break; - case BIC_SENSOR_CPU_DIMM_HOT: - sprintf(name, "SOC_Hot"); - valid = true; - break; - } - if (valid) { - _print_sensor_discrete_log( fru, snr_num, snr_name, GETBIT(n_val, 0), name); - valid = false; - } - } - - if (GETBIT(diff, 1)) { - switch(snr_num) { - case BIC_SENSOR_SYSTEM_STATUS: - sprintf(name, "SOC_FIVR_Fault"); - valid = true; - break; - case BIC_SENSOR_VR_HOT: - sprintf(name, "SOC_DIMM_VR_Hot"); - valid = true; - break; - case BIC_SENSOR_CPU_DIMM_HOT: - sprintf(name, "SOC_MEMHOT"); - valid = true; - break; - } - if (valid) { - _print_sensor_discrete_log( fru, snr_num, snr_name, GETBIT(n_val, 1), name); - valid = false; - } - } - - if (GETBIT(diff, 2)) { - switch(snr_num) { - case BIC_SENSOR_SYSTEM_STATUS: - sprintf(name, "SOC_Throttle"); - valid = true; - break; - } - if (valid) { - _print_sensor_discrete_log( fru, snr_num, snr_name, GETBIT(n_val, 2), name); - valid = false; - } - } -} - -static int -pal_store_crashdump(uint8_t fru) { - - return yosemite_common_crashdump(fru); -} - -int -pal_sel_handler(uint8_t fru, uint8_t snr_num) { - - switch(snr_num) { - case CATERR: - pal_store_crashdump(fru); - break; - } - - return 0; -} - -int -pal_get_event_sensor_name(uint8_t fru, uint8_t snr_num, char *name) { - - switch(snr_num) { - case SYSTEM_EVENT: - sprintf(name, "SYSTEM_EVENT"); - break; - case THERM_THRESH_EVT: - sprintf(name, "THERM_THRESH_EVT"); - break; - case BUTTON: - sprintf(name, "BUTTON"); - break; - case POWER_STATE: - sprintf(name, "POWER_STATE"); - break; - case CRITICAL_IRQ: - sprintf(name, "CRITICAL_IRQ"); - break; - case POST_ERROR: - sprintf(name, "POST_ERROR"); - break; - case MACHINE_CHK_ERR: - sprintf(name, "MACHINE_CHK_ERR"); - break; - case PCIE_ERR: - sprintf(name, "PCIE_ERR"); - break; - case IIO_ERR: - sprintf(name, "IIO_ERR"); - break; - case MEMORY_ECC_ERR: - sprintf(name, "MEMORY_ECC_ERR"); - break; - case PROCHOT_EXT: - sprintf(name, "PROCHOT_EXT"); - break; - case PWR_ERR: - sprintf(name, "PWR_ERR"); - break; - case CATERR: - sprintf(name, "CATERR"); - break; - default: - sprintf(name, "unknown"); - break; - } - - return 0; -} - -int -pal_parse_sel(uint8_t fru, uint8_t snr_num, uint8_t *event_data, - char *error_log) { - - char *ed = event_data; - char temp_log[128] = {0}; - uint8_t temp; - - switch(snr_num) { - case SYSTEM_EVENT: - sprintf(error_log, "SYSTEM_EVENT"); - if (ed[0] == 0xE5) { - strcat(error_log, ": Cause of Time change"); - - if (ed[2] == 0x00) - strcat(error_log, ": NTP"); - else if (ed[2] == 0x01) - strcat(error_log, ": Host RTL"); - else if (ed[2] == 0x02) - strcat(error_log, ": Set SEL time cmd "); - else if (ed[2] == 0x03) - strcat(error_log, ": Set SEL time UTC offset cmd"); - else - strcat(error_log, ": Unknown"); - - if (ed[1] == 0x00) - strcat(error_log, ": First Time"); - else if(ed[1] == 0x80) - strcat(error_log, ": Second Time"); - - } - break; - - case THERM_THRESH_EVT: - sprintf(error_log, "THERM_THRESH_EVT"); - if (ed[0] == 0x1) - strcat(error_log, ": Limit Exceeded"); - else - strcat(error_log, ": Unknown"); - break; - - case BUTTON: - sprintf(error_log, "BUTTON"); - if (ed[0] == 0x0) - strcat(error_log, ": Power button pressed"); - else if (ed[0] == 0x2) - strcat(error_log, ": Reset button pressed"); - else - strcat(error_log, ": Unknown"); - break; - - case POWER_STATE: - sprintf(error_log, "POWER_STATE"); - if (ed[0] == 0x0) - strcat(error_log, ": Transition to Running"); - else if (ed[0] == 0x2) - strcat(error_log, ": Transition to Power Off"); - else - strcat(error_log, ": Unknown"); - break; - - case CRITICAL_IRQ: - sprintf(error_log, "CRITICAL_IRQ"); - if (ed[0] == 0x0) - strcat(error_log, ": Diagnostic Interrupt"); - else - strcat(error_log, ": Unknown"); - break; - - case POST_ERROR: - sprintf(error_log, "POST_ERROR"); - if ((ed[0] & 0x0F) == 0x0) - strcat(error_log, ": System Firmware Error"); - else - strcat(error_log, ": Unknown"); - if (((ed[0] >> 6) & 0x03) == 0x3) { - // TODO: Need to implement IPMI spec based Post Code - strcat(error_log, ": IPMI Post Code"); - } else if (((ed[0] >> 6) & 0x03) == 0x2) { - sprintf(temp_log, "OEM Post Code: 0x%X 0x%X", ed[2], ed[1]); - strcat(error_log, temp_log); - } - break; - - case MACHINE_CHK_ERR: - sprintf(error_log, "MACHINE_CHK_ERR"); - if ((ed[0] & 0x0F) == 0x0B) { - strcat(error_log, ": Uncorrectable"); - } else if ((ed[0] & 0x0F) == 0x0C) { - strcat(error_log, ": Correctable"); - } else { - strcat(error_log, ": Unknown"); - } - - sprintf(temp_log, "Machine Check bank Number - %d ", ed[1]); - strcat(error_log, temp_log); - sprintf(temp_log, "CPU - %d, Core - %d ", ed[2] >> 5, ed[2] & 0x1F); - strcat(error_log, temp_log); - - break; - - case PCIE_ERR: - sprintf(error_log, "PCIE_ERR"); - if ((ed[0] & 0xF) == 0x4) - strcat(error_log, ": PCI PERR"); - else if ((ed[0] & 0xF) == 0x5) - strcat(error_log, ": PCI SERR"); - else if ((ed[0] & 0xF) == 0x7) - strcat(error_log, ": Correctable"); - else if ((ed[0] & 0xF) == 0x8) - strcat(error_log, ": Uncorrectable"); - else if ((ed[0] & 0xF) == 0xA) - strcat(error_log, ": Bus Fatal"); - else - strcat(error_log, ": Unknown"); - break; - - case IIO_ERR: - sprintf(error_log, "IIO_ERR"); - if ((ed[0] & 0xF) == 0) { - - sprintf(temp_log, ": CPU - %d, Error ID - 0x%X", (ed[2] & 0xE0) >> 5, - ed[1]); - strcat(error_log, temp_log); - - temp = ed[2] & 0x7; - if (temp == 0x0) - strcat(error_log, ": IRP0"); - else if (temp == 0x1) - strcat(error_log, ": IRP1"); - else if (temp == 0x2) - strcat(error_log, ": IIO-Core"); - else if (temp == 0x3) - strcat(error_log, ": VT-d"); - else if (temp == 0x4) - strcat(error_log, ": Intel Quick Data"); - else if (temp == 0x5) - strcat(error_log, ": Misc"); - else - strcat(error_log, ": Reserved"); - } - break; - - case MEMORY_ECC_ERR: - sprintf(error_log, "MEMORY_ECC_ERR"); - if ((ed[0] & 0x0F) == 0x0) - strcat(error_log, ": Correctable"); - else if ((ed[0] & 0x0F) == 0x1) - strcat(error_log, ": Uncorrectable"); - else if ((ed[0] & 0x0F) == 0x5) - strcat(error_log, ": Correctable ECC error Logging Limit Reached"); - else - strcat(error_log, ": Unknown"); - - if (((ed[1] & 0xC) >> 2) == 0x0) { - /* All Info Valid */ - sprintf(temp_log, ": CPU# - %d, CHN# - %d, DIMM# - %d ", - (ed[2] & 0xE0) >> 5, (ed[2] & 0x18) >> 3, ed[2] & 0x7); - } else if (((ed[1] & 0xC) >> 2) == 0x1) { - /* DIMM info not valid */ - sprintf(temp_log, ": CPU# - %d, CHN# - %d", - (ed[2] & 0xE0) >> 5, (ed[2] & 0x18) >> 3); - } else if (((ed[1] & 0xC) >> 2) == 0x2) { - /* CHN info not valid */ - sprintf(temp_log, ": CPU# - %d, DIMM# - %d ", - (ed[2] & 0xE0) >> 5, ed[2] & 0x7); - } else if (((ed[1] & 0xC) >> 2) == 0x3) { - /* CPU info not valid */ - sprintf(temp_log, ": CHN# - %d, DIMM# - %d ", - (ed[2] & 0x18) >> 3, ed[2] & 0x7); - } - strcat(error_log, temp_log); - - break; - - case PROCHOT_EXT: - sprintf(error_log, "PROCHOT_EXT"); - if ((ed[0] & 0xF) == 0xA) - strcat(error_log, ": Processor Thermal Throttling Offset"); - else - strcat(error_log, ": Unknown"); - break; - - if ((ed[1] & 0x3) == 0x1) - strcat(error_log, ": External (VR)"); - else if ((ed[1] & 0x3) == 0x0) - strcat(error_log, ": Native"); - break; - - sprintf(temp_log, ": SOC ID - %d", (ed[2] & 0xE0) >> 5); - strcat(error_log, temp_log); - - case PWR_ERR: - sprintf(error_log, "PWR_ERR"); - if (ed[0] == 0x2) - strcat(error_log, ": PCH_PWROK failure"); - else - strcat(error_log, ": Unknown"); - break; - - case CATERR: - sprintf(error_log, "CATERR"); - if (ed[0] == 0x0) - strcat(error_log, ": IERR"); - else if (ed[0] == 0xB) - strcat(error_log, ": MCERR"); - else - strcat(error_log, ": Unknown"); - break; - - default: - sprintf(error_log, "unknown"); - break; - } - - return 0; -} diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.h deleted file mode 100644 index b3f542a..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/pal/pal.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __PAL_H__ -#define __PAL_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <facebook/bic.h> -#include <facebook/yosemite_common.h> -#include <facebook/yosemite_fruid.h> -#include <facebook/yosemite_sensor.h> - -#define MAX_KEY_LEN 64 -#define MAX_VALUE_LEN 64 - -#define KV_STORE "/mnt/data/kv_store/%s" -#define KV_STORE_PATH "/mnt/data/kv_store" - -#define SETBIT(x, y) (x | (1 << y)) -#define GETBIT(x, y) ((x & (1 << y)) > y) -#define CLEARBIT(x, y) (x & (~(1 << y))) -#define GETMASK(y) (1 << y) - -extern char * key_list[]; -extern const char pal_fru_list[]; -extern const char pal_server_list[]; - -enum { - LED_STATE_OFF, - LED_STATE_ON, -}; - -enum { - USB_MUX_OFF, - USB_MUX_ON, -}; - -enum { - SERVER_POWER_OFF, - SERVER_POWER_ON, - SERVER_POWER_CYCLE, - SERVER_GRACEFUL_SHUTDOWN, - SERVER_12V_OFF, - SERVER_12V_ON, - SERVER_12V_CYCLE, -}; - -enum { - HAND_SW_SERVER1 = 1, - HAND_SW_SERVER2, - HAND_SW_SERVER3, - HAND_SW_SERVER4, - HAND_SW_BMC -}; - -enum { - SYSTEM_EVENT = 0xE9, - THERM_THRESH_EVT = 0x7D, - BUTTON = 0xAA, - POWER_STATE = 0xAB, - CRITICAL_IRQ = 0xEA, - POST_ERROR = 0x2B, - MACHINE_CHK_ERR = 0x40, - PCIE_ERR = 0x41, - IIO_ERR = 0x43, - MEMORY_ECC_ERR = 0X63, - PROCHOT_EXT = 0X51, - PWR_ERR = 0X56, - CATERR= 0xEB, -}; - -int pal_get_platform_name(char *name); -int pal_get_num_slots(uint8_t *num); -int pal_is_server_prsnt(uint8_t slot_id, uint8_t *status); -int pal_get_server_power(uint8_t slot_id, uint8_t *status); -int pal_set_server_power(uint8_t slot_id, uint8_t cmd); -int pal_sled_cycle(void); -int pal_is_debug_card_prsnt(uint8_t *status); -int pal_get_hand_sw(uint8_t *pos); -int pal_switch_usb_mux(uint8_t slot); -int pal_switch_uart_mux(uint8_t slot); -int pal_post_enable(uint8_t slot); -int pal_post_disable(uint8_t slot); -int pal_post_get_last(uint8_t slot, uint8_t *post); -int pal_post_handle(uint8_t slot, uint8_t status); -int pal_get_pwr_btn(uint8_t *status); -int pal_get_rst_btn(uint8_t *status); -int pal_set_rst_btn(uint8_t slot, uint8_t status); -int pal_set_led(uint8_t slot, uint8_t status); -int pal_set_hb_led(uint8_t status); -int pal_set_id_led(uint8_t slot, uint8_t status); -int pal_get_fru_id(char *fru_str, uint8_t *fru); -int pal_get_fru_name(uint8_t fru, char *name); -int pal_get_fruid_path(uint8_t fru, char *path); -int pal_get_fruid_eeprom_path(uint8_t fru, char *path); -int pal_get_fruid_name(uint8_t fru, char *name); -int pal_get_fru_sdr_path(uint8_t fru, char *path); -int pal_get_sensor_units(uint8_t fru, uint8_t sensor_num, char *units); -int pal_get_fru_sensor_list(uint8_t fru, uint8_t **sensor_list, int *cnt); -int pal_get_fru_discrete_list(uint8_t fru, uint8_t **sensor_list, int *cnt); -int pal_sensor_sdr_init(uint8_t fru, sensor_info_t *sinfo); -int pal_sensor_read(uint8_t fru, uint8_t sensor_num, void *value); -int pal_get_sensor_name(uint8_t fru, uint8_t sensor_num, char *name); -int pal_get_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, - void *value); -int pal_get_key_value(char *key, char *value); -int pal_set_key_value(char *key, char *value); -int pal_set_def_key_value(); -void pal_dump_key_value(void); -int pal_get_fru_devtty(uint8_t fru, char *devtty); -int pal_get_last_pwr_state(uint8_t fru, char *state); -int pal_set_last_pwr_state(uint8_t fru, char *state); -int pal_get_sys_guid(uint8_t slot, char *guid); -int pal_set_sysfw_ver(uint8_t slot, uint8_t *ver); -int pal_get_sysfw_ver(uint8_t slot, uint8_t *ver); -int pal_fruid_write(uint8_t slot, char *path); -int pal_is_bmc_por(void); -int pal_sensor_discrete_check(uint8_t fru, uint8_t snr_num, char *snr_name, - uint8_t o_val, uint8_t n_val); -int pal_get_event_sensor_name(uint8_t fru, uint8_t snr_num, char *name); -int pal_parse_sel(uint8_t fru, uint8_t snr_num, uint8_t *event_data, - char *error_log); -int pal_sel_handler(uint8_t fru, uint8_t snr_num); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __PAL_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/Makefile deleted file mode 100644 index 40ea2a8..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -lib: libyosemite_common.so - -libyosemite_common.so: yosemite_common.c - $(CC) $(CFLAGS) -fPIC -pthread -c -o yosemite_common.o yosemite_common.c - $(CC) -lpthread -shared -o libyosemite_common.so yosemite_common.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libyosemite_common.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.c deleted file mode 100644 index c638809..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <stdbool.h> -#include <math.h> -#include <fcntl.h> -#include <errno.h> -#include <syslog.h> -#include <pthread.h> -#include <string.h> -#include "yosemite_common.h" - -#define CRASHDUMP_BIN "/usr/local/bin/dump.sh" -#define CRASHDUMP_FILE "/mnt/data/crashdump_" - -int -yosemite_common_fru_name(uint8_t fru, char *str) { - - switch(fru) { - case FRU_SLOT1: - sprintf(str, "slot1"); - break; - - case FRU_SLOT2: - sprintf(str, "slot2"); - break; - - case FRU_SLOT3: - sprintf(str, "slot3"); - break; - - case FRU_SLOT4: - sprintf(str, "slot4"); - break; - - case FRU_SPB: - sprintf(str, "spb"); - break; - - case FRU_NIC: - sprintf(str, "nic"); - break; - - default: -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_common_fru_id: Wrong fru id"); -#endif - return -1; - } - - return 0; -} - -int -yosemite_common_fru_id(char *str, uint8_t *fru) { - - if (!strcmp(str, "all")) { - *fru = FRU_ALL; - } else if (!strcmp(str, "slot1")) { - *fru = FRU_SLOT1; - } else if (!strcmp(str, "slot2")) { - *fru = FRU_SLOT2; - } else if (!strcmp(str, "slot3")) { - *fru = FRU_SLOT3; - } else if (!strcmp(str, "slot4")) { - *fru = FRU_SLOT4; - } else if (!strcmp(str, "spb")) { - *fru = FRU_SPB; - } else if (!strcmp(str, "nic")) { - *fru = FRU_NIC; - } else { -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_common_fru_id: Wrong fru id"); -#endif - return -1; - } - - return 0; -} - -void * -generate_dump(void *arg) { - - uint8_t fru = *(uint8_t *) arg; - char cmd[128]; - char fruname[16]; - - yosemite_common_fru_name(fru, fruname); - - // HEADER LINE for the dump - memset(cmd, 0, 128); - sprintf(cmd, "%s time > %s%s", CRASHDUMP_BIN, CRASHDUMP_FILE, fruname); - system(cmd); - - // COREID dump - memset(cmd, 0, 128); - sprintf(cmd, "%s %s 48 coreid >> %s%s", CRASHDUMP_BIN, fruname, - CRASHDUMP_FILE, fruname); - system(cmd); - - // MSR dump - memset(cmd, 0, 128); - sprintf(cmd, "%s %s 48 msr >> %s%s", CRASHDUMP_BIN, fruname, - CRASHDUMP_FILE, fruname); - system(cmd); - - syslog(LOG_CRIT, "Crashdump for FRU: %d is generated.", fru); -} - -int -yosemite_common_crashdump(uint8_t fru) { - - if (access(CRASHDUMP_BIN, F_OK) == -1) { - syslog(LOG_CRIT, "Crashdump for FRU: %d failed : " - "crashdump binary is not preset", fru); - return 0; - } - - pthread_t t_dump; - - if (pthread_create(&t_dump, NULL, generate_dump, (void*) &fru) < 0) { - syslog(LOG_WARNING, "pal_store_crashdump: pthread_create for" - " FRU %d failed\n", fru); - } - - syslog(LOG_INFO, "Crashdump for FRU: %d is being generated.", fru); - - return 0; -} diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.h deleted file mode 100644 index f2128ef..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_common/yosemite_common.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __YOSEMITE_COMMON_H__ -#define __YOSEMITE_COMMON_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_NUM_FRUS 6 -enum { - FRU_ALL = 0, - FRU_SLOT1 = 1, - FRU_SLOT2 = 2, - FRU_SLOT3 = 3, - FRU_SLOT4 = 4, - FRU_SPB = 5, - FRU_NIC = 6, -}; - -int yosemite_common_fru_name(uint8_t fru, char *str); -int yosemite_common_fru_id(char *str, uint8_t *fru); -int yosemite_common_crashdump(uint8_t fru); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __YOSEMITE_COMMON_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/Makefile deleted file mode 100644 index eda01dc..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -# -# This program file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program in a file named COPYING; if not, write to the -# Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301 USA - -lib: libyosemite_fruid.so - -libyosemite_fruid.so: yosemite_fruid.c - $(CC) $(CFLAGS) -fPIC -c -o yosemite_fruid.o yosemite_fruid.c - $(CC) -lyosemite_common -shared -o libyosemite_fruid.so yosemite_fruid.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libyosemite_fruid.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.c deleted file mode 100644 index d431d34..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <syslog.h> -#include "yosemite_fruid.h" - -/* Populate char path[] with the path to the fru's fruid binary dump */ -int -yosemite_get_fruid_path(uint8_t fru, char *path) { - char fname[16] = {0}; - - switch(fru) { - case FRU_SLOT1: - sprintf(fname, "slot1"); - break; - case FRU_SLOT2: - sprintf(fname, "slot2"); - break; - case FRU_SLOT3: - sprintf(fname, "slot3"); - break; - case FRU_SLOT4: - sprintf(fname, "slot4"); - break; - case FRU_SPB: - sprintf(fname, "spb"); - break; - case FRU_NIC: - sprintf(fname, "nic"); - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_get_fruid_path: wrong fruid"); -#endif - return -1; - } - - sprintf(path, YOSEMITE_FRU_PATH, fname); - return 0; -} - -int -yosemite_get_fruid_eeprom_path(uint8_t fru, char *path) { - char fname[16] = {0}; - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - return -1; - case FRU_SPB: - sprintf(path, "/sys/class/i2c-adapter/i2c-8/8-0051/eeprom"); - break; - case FRU_NIC: - sprintf(path, "/sys/class/i2c-adapter/i2c-12/12-0051/eeprom"); - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_get_fruid_eeprom_path: wrong fruid"); -#endif - return -1; - } - - return 0; -} - -/* Populate char name[] with the path to the fru's name */ -int -yosemite_get_fruid_name(uint8_t fru, char *name) { - - switch(fru) { - case FRU_SLOT1: - sprintf(name, "MonoLake Board 1"); - break; - case FRU_SLOT2: - sprintf(name, "MonoLake Board 2"); - break; - case FRU_SLOT3: - sprintf(name, "MonoLake Board 3"); - break; - case FRU_SLOT4: - sprintf(name, "MonoLake Board 4"); - break; - case FRU_SPB: - sprintf(name, "Side Plane Board"); - break; - case FRU_NIC: - sprintf(name, "CX4 NIC"); - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_get_fruid_name: wrong fruid"); -#endif - return -1; - } - return 0; -} diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.h deleted file mode 100644 index 78cdbe4..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_fruid/yosemite_fruid.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __YOSEMITE_FRUID_H__ -#define __YOSEMITE_FRUID_H__ - -#include <facebook/yosemite_common.h> - -#define YOSEMITE_FRU_PATH "/tmp/fruid_%s.bin" - -#ifdef __cplusplus -extern "C" { -#endif - -int yosemite_get_fruid_path(uint8_t fru, char *path); -int yosemite_get_fruid_eeprom_path(uint8_t fru, char *path); -int yosemite_get_fruid_name(uint8_t fru, char *name); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __YOSEMITE_FRUID_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/Makefile deleted file mode 100644 index 66c0005..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -# -# This program file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program in a file named COPYING; if not, write to the -# Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301 USA - -lib: libyosemite_gpio.so - -libyosemite_gpio.so: yosemite_gpio.c - $(CC) $(CFLAGS) -fPIC -c -o yosemite_gpio.o yosemite_gpio.c - $(CC) -shared -o libyosemite_gpio.so yosemite_gpio.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libyosemite_gpio.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.c deleted file mode 100644 index 4f22500..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <syslog.h> -#include "yosemite_gpio.h" - -// List of GPIO pins to be monitored -const uint8_t gpio_pin_list[] = { - PWRGOOD_CPU, - PWRGD_PCH_PWROK, - PVDDR_VRHOT_N, - PVCCIN_VRHOT_N, - FM_FAST_PROCHOT_N, - PCHHOT_CPU_N, - FM_CPLD_CPU_DIMM_EVENT_CO_N, - FM_CPLD_BDXDE_THERMTRIP_N, - THERMTRIP_PCH_N, - FM_CPLD_FIVR_FAULT, - FM_BDXDE_CATERR_LVT3_N, - FM_BDXDE_ERR2_LVT3_N, - FM_BDXDE_ERR1_LVT3_N, - FM_BDXDE_ERR0_LVT3_N, - //SLP_S4_N, - FM_NMI_EVENT_BMC_N, - FM_SMI_BMC_N, - RST_PLTRST_BMC_N, - FP_RST_BTN_BUF_N, - BMC_RST_BTN_OUT_N, - FM_BDE_POST_CMPLT_N, - //FM_BDXDE_SLP3_N, - //FM_PWR_LED_N, - PWRGD_PVCCIN, - //SVR_ID0, - //SVR_ID1, - //SVR_ID2, - //SVR_ID3, - //BMC_READY_N, - //RESERVED_29, - //RESERVED_30, - //RESERVED_31, -}; - -size_t gpio_pin_cnt = sizeof(gpio_pin_list)/sizeof(uint8_t); -const uint32_t gpio_ass_val = 0x0 | (1 << FM_CPLD_FIVR_FAULT); - -const char *gpio_pin_name[] = { - "PWRGOOD_CPU", - "PWRGD_PCH_PWROK", - "PVDDR_VRHOT_N", - "PVCCIN_VRHOT_N", - "FM_FAST_PROCHOT_N", - "PCHHOT_CPU_N", - "FM_CPLD_CPU_DIMM_EVENT_CO_N", - "FM_CPLD_BDXDE_THERMTRIP_N", - "THERMTRIP_PCH_N", - "FM_CPLD_FIVR_FAULT", - "FM_BDXDE_CATERR_LVT3_N", - "FM_BDXDE_ERR2_LVT3_N", - "FM_BDXDE_ERR1_LVT3_N", - "FM_BDXDE_ERR0_LVT3_N", - "SLP_S4_N", - "FM_NMI_EVENT_BMC_N", - "FM_SMI_BMC_N", - "RST_PLTRST_BMC_N", - "FP_RST_BTN_BUF_N", - "BMC_RST_BTN_OUT_N", - "FM_BDE_POST_CMPLT_N", - "FM_BDXDE_SLP3_N", - "FM_PWR_LED_N", - "PWRGD_PVCCIN", - "SVR_ID0", - "SVR_ID1", - "SVR_ID2", - "SVR_ID3", - "BMC_READY_N", - "RESERVED_29", - "RESERVED_30", - "RESERVED_31" -}; - -int -yosemite_get_gpio_name(uint8_t fru, uint8_t gpio, char *name) { - - //TODO: Add support for BMC GPIO pins - if (fru < 1 || fru > 4) { -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_get_gpio_name: Wrong fru %u", fru); -#endif - return -1; - } - - if (gpio < 0 || gpio > MAX_GPIO_PINS) { -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_get_gpio_name: Wrong gpio pin %u", gpio); -#endif - return -1; - } - - sprintf(name, "%s", gpio_pin_name[gpio]); - return 0; -} diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.h deleted file mode 100644 index 77808a8..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_gpio/yosemite_gpio.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __YOSEMITE_GPIO_H__ -#define __YOSEMITE_GPIO_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <facebook/bic.h> - -extern const uint8_t gpio_pin_list[]; -extern const char *gpio_pin_name[]; -extern const uint32_t gpio_ass_val; -extern size_t gpio_pin_cnt; - -int yosemite_get_gpio_name(uint8_t fru, uint8_t gpio, char *name); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __YOSEMITE_GPIO_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/Makefile b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/Makefile deleted file mode 100644 index dd013a9..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -lib: libyosemite_sensor.so - -libyosemite_sensor.so: yosemite_sensor.c - $(CC) $(CFLAGS) -fPIC -c -o yosemite_sensor.o yosemite_sensor.c - $(CC) -lm -lbic -lipmi -lipmb -lyosemite_common -shared -o libyosemite_sensor.so yosemite_sensor.o -lc - -.PHONY: clean - -clean: - rm -rf *.o libyosemite_sensor.so diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c deleted file mode 100644 index 9d075ce..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c +++ /dev/null @@ -1,883 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * This file contains code to support IPMI2.0 Specificaton available @ - * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <stdbool.h> -#include <math.h> -#include <string.h> -#include <fcntl.h> -#include <errno.h> -#include <syslog.h> -#include "yosemite_sensor.h" - -#define LARGEST_DEVICE_NAME 120 - -#define GPIO_VAL "/sys/class/gpio/gpio%d/value" - -#define I2C_BUS_9_DIR "/sys/class/i2c-adapter/i2c-9/" -#define I2C_BUS_10_DIR "/sys/class/i2c-adapter/i2c-10/" - -#define TACH_DIR "/sys/devices/platform/ast_pwm_tacho.0" -#define ADC_DIR "/sys/devices/platform/ast_adc.0" - -#define SP_INLET_TEMP_DEVICE I2C_BUS_9_DIR "9-004e" -#define SP_OUTLET_TEMP_DEVICE I2C_BUS_9_DIR "9-004f" -#define HSC_DEVICE I2C_BUS_10_DIR "10-0040" - -#define FAN_TACH_RPM "tacho%d_rpm" -#define ADC_VALUE "adc%d_value" -#define HSC_IN_VOLT "in1_input" -#define HSC_OUT_CURR "curr1_input" -#define HSC_TEMP "temp1_input" - -#define UNIT_DIV 1000 - -#define MEZZ_SENSOR_I2CBUS "11" -#define MEZZ_SENSOR_I2C_BUS_ADDR "0x1f" -#define MEZZ_SENSOR_TEMP_REGISTER "0x01" - -#define BIC_SENSOR_READ_NA 0x20 - -#define MAX_SENSOR_NUM 0xFF -#define ALL_BYTES 0xFF -#define LAST_REC_ID 0xFFFF - -#define YOSEMITE_SDR_PATH "/tmp/sdr_%s.bin" - -// List of BIC sensors to be monitored -const uint8_t bic_sensor_list[] = { - /* Threshold sensors */ - BIC_SENSOR_MB_OUTLET_TEMP, - BIC_SENSOR_VCCIN_VR_TEMP, - BIC_SENSOR_VCC_GBE_VR_TEMP, - BIC_SENSOR_1V05PCH_VR_TEMP, - BIC_SENSOR_SOC_TEMP, - BIC_SENSOR_MB_INLET_TEMP, - BIC_SENSOR_PCH_TEMP, - BIC_SENSOR_SOC_THERM_MARGIN, - BIC_SENSOR_VDDR_VR_TEMP, - BIC_SENSOR_VCC_GBE_VR_CURR, - BIC_SENSOR_1V05_PCH_VR_CURR, - BIC_SENSOR_VCCIN_VR_POUT, - BIC_SENSOR_VCCIN_VR_CURR, - BIC_SENSOR_VCCIN_VR_VOL, - BIC_SENSOR_INA230_POWER, - BIC_SENSOR_INA230_VOL, - BIC_SENSOR_SOC_PACKAGE_PWR, - BIC_SENSOR_SOC_TJMAX, - BIC_SENSOR_VDDR_VR_POUT, - BIC_SENSOR_VDDR_VR_CURR, - BIC_SENSOR_VDDR_VR_VOL, - BIC_SENSOR_VCC_SCSUS_VR_CURR, - BIC_SENSOR_VCC_SCSUS_VR_VOL, - BIC_SENSOR_VCC_SCSUS_VR_TEMP, - BIC_SENSOR_VCC_SCSUS_VR_POUT, - BIC_SENSOR_VCC_GBE_VR_POUT, - BIC_SENSOR_VCC_GBE_VR_VOL, - BIC_SENSOR_1V05_PCH_VR_POUT, - BIC_SENSOR_1V05_PCH_VR_VOL, - BIC_SENSOR_SOC_DIMMA0_TEMP, - BIC_SENSOR_SOC_DIMMA1_TEMP, - BIC_SENSOR_SOC_DIMMB0_TEMP, - BIC_SENSOR_SOC_DIMMB1_TEMP, - BIC_SENSOR_P3V3_MB, - BIC_SENSOR_P12V_MB, - BIC_SENSOR_P1V05_PCH, - BIC_SENSOR_P3V3_STBY_MB, - BIC_SENSOR_P5V_STBY_MB, - BIC_SENSOR_PV_BAT, - BIC_SENSOR_PVDDR, - BIC_SENSOR_PVCC_GBE, -}; - -const uint8_t bic_discrete_list[] = { - /* Discrete sensors */ - BIC_SENSOR_SYSTEM_STATUS, - BIC_SENSOR_VR_HOT, - BIC_SENSOR_CPU_DIMM_HOT, -}; - -// List of SPB sensors to be monitored -const uint8_t spb_sensor_list[] = { - SP_SENSOR_INLET_TEMP, - SP_SENSOR_OUTLET_TEMP, - //SP_SENSOR_MEZZ_TEMP - SP_SENSOR_FAN0_TACH, - SP_SENSOR_FAN1_TACH, - //SP_SENSOR_AIR_FLOW, - SP_SENSOR_P5V, - SP_SENSOR_P12V, - SP_SENSOR_P3V3_STBY, - SP_SENSOR_P12V_SLOT1, - SP_SENSOR_P12V_SLOT2, - SP_SENSOR_P12V_SLOT3, - SP_SENSOR_P12V_SLOT4, - SP_SENSOR_P3V3, - SP_SENSOR_HSC_IN_VOLT, - SP_SENSOR_HSC_OUT_CURR, - SP_SENSOR_HSC_TEMP, - SP_SENSOR_HSC_IN_POWER, -}; - -// List of NIC sensors to be monitored -const uint8_t nic_sensor_list[] = { - MEZZ_SENSOR_TEMP, -}; - -float spb_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1] = {0}; -float nic_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1] = {0}; - -static void -sensor_thresh_array_init() { - static bool init_done = false; - - if (init_done) - return; - - spb_sensor_threshold[SP_SENSOR_INLET_TEMP][UCR_THRESH] = 40; - spb_sensor_threshold[SP_SENSOR_OUTLET_TEMP][UCR_THRESH] = 70; - spb_sensor_threshold[SP_SENSOR_FAN0_TACH][UCR_THRESH] = 10000; - spb_sensor_threshold[SP_SENSOR_FAN0_TACH][LCR_THRESH] = 500; - spb_sensor_threshold[SP_SENSOR_FAN1_TACH][UCR_THRESH] = 10000; - spb_sensor_threshold[SP_SENSOR_FAN1_TACH][LCR_THRESH] = 500; - //spb_sensor_threshold[SP_SENSOR_AIR_FLOW][UCR_THRESH] = {75.0, 0, 0, 0, 0, 0, 0, 0}; - spb_sensor_threshold[SP_SENSOR_P5V][UCR_THRESH] = 5.493; - spb_sensor_threshold[SP_SENSOR_P5V][LCR_THRESH] = 4.501; - spb_sensor_threshold[SP_SENSOR_P12V][UCR_THRESH] = 13.216; - spb_sensor_threshold[SP_SENSOR_P12V][LCR_THRESH] = 11.269; - spb_sensor_threshold[SP_SENSOR_P3V3_STBY][UCR_THRESH] = 3.625; - spb_sensor_threshold[SP_SENSOR_P3V3_STBY][LCR_THRESH] = 2.973; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT1][UCR_THRESH] = 13.216; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT1][LCR_THRESH] = 11.269; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT2][UCR_THRESH] = 13.216; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT2][LCR_THRESH] = 11.269; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT3][UCR_THRESH] = 13.216; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT3][LCR_THRESH] = 11.269; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT4][UCR_THRESH] = 13.216; - spb_sensor_threshold[SP_SENSOR_P12V_SLOT4][LCR_THRESH] = 11.269; - spb_sensor_threshold[SP_SENSOR_P3V3][UCR_THRESH] = 3.625; - spb_sensor_threshold[SP_SENSOR_P3V3][LCR_THRESH] = 2.973; - spb_sensor_threshold[SP_SENSOR_HSC_IN_VOLT][UCR_THRESH] = 13.2; - spb_sensor_threshold[SP_SENSOR_HSC_IN_VOLT][LCR_THRESH] = 10.8; - spb_sensor_threshold[SP_SENSOR_HSC_OUT_CURR][UCR_THRESH] = 47.705; - spb_sensor_threshold[SP_SENSOR_HSC_TEMP][UCR_THRESH] = 120; - spb_sensor_threshold[SP_SENSOR_HSC_IN_POWER][UCR_THRESH] = 525; - - nic_sensor_threshold[MEZZ_SENSOR_TEMP][UCR_THRESH] = 80; - - init_done = true; -} - -size_t bic_sensor_cnt = sizeof(bic_sensor_list)/sizeof(uint8_t); - -size_t bic_discrete_cnt = sizeof(bic_discrete_list)/sizeof(uint8_t); - -size_t spb_sensor_cnt = sizeof(spb_sensor_list)/sizeof(uint8_t); - -size_t nic_sensor_cnt = sizeof(nic_sensor_list)/sizeof(uint8_t); - -enum { - FAN0 = 0, - FAN1, -}; - -enum { - ADC_PIN0 = 0, - ADC_PIN1, - ADC_PIN2, - ADC_PIN3, - ADC_PIN4, - ADC_PIN5, - ADC_PIN6, - ADC_PIN7, -}; - -static sensor_info_t g_sinfo[MAX_NUM_FRUS][MAX_SENSOR_NUM] = {0}; - -static int -read_device(const char *device, int *value) { - FILE *fp; - int rc; - - fp = fopen(device, "r"); - if (!fp) { - int err = errno; - -#ifdef DEBUG - syslog(LOG_INFO, "failed to open device %s", device); -#endif - return err; - } - - rc = fscanf(fp, "%d", value); - fclose(fp); - - if (rc != 1) { -#ifdef DEBUG - syslog(LOG_INFO, "failed to read device %s", device); -#endif - return ENOENT; - } else { - return 0; - } -} - -static int -read_device_float(const char *device, float *value) { - FILE *fp; - int rc; - char tmp[10]; - - fp = fopen(device, "r"); - if (!fp) { - int err = errno; -#ifdef DEBUG - syslog(LOG_INFO, "failed to open device %s", device); -#endif - return err; - } - - rc = fscanf(fp, "%s", tmp); - fclose(fp); - - if (rc != 1) { -#ifdef DEBUG - syslog(LOG_INFO, "failed to read device %s", device); -#endif - return ENOENT; - } - - *value = atof(tmp); - - return 0; -} - -static int -read_temp(const char *device, float *value) { - char full_name[LARGEST_DEVICE_NAME + 1]; - int tmp; - - snprintf( - full_name, LARGEST_DEVICE_NAME, "%s/temp1_input", device); - if (read_device(full_name, &tmp)) { - return -1; - } - - *value = ((float)tmp)/UNIT_DIV; - - return 0; -} - -static int -read_fan_value(const int fan, const char *device, float *value) { - char device_name[LARGEST_DEVICE_NAME]; - char full_name[LARGEST_DEVICE_NAME]; - - snprintf(device_name, LARGEST_DEVICE_NAME, device, fan); - snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", TACH_DIR, device_name); - return read_device_float(full_name, value); -} - -static int -read_adc_value(const int pin, const char *device, float *value) { - char device_name[LARGEST_DEVICE_NAME]; - char full_name[LARGEST_DEVICE_NAME]; - - snprintf(device_name, LARGEST_DEVICE_NAME, device, pin); - snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", ADC_DIR, device_name); - return read_device_float(full_name, value); -} - -static int -read_hsc_value(const char *device, float *value) { - char full_name[LARGEST_DEVICE_NAME]; - int tmp; - - snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", HSC_DEVICE, device); - if(read_device(full_name, &tmp)) { - return -1; - } - - *value = ((float) tmp)/UNIT_DIV; - - return 0; -} - -static int -read_nic_temp(uint8_t snr_num, float *value) { - char command[64]; - char tmp[8]; - - if (snr_num == MEZZ_SENSOR_TEMP) { - sprintf(command, "i2cget -y %s %s %s b", MEZZ_SENSOR_I2CBUS, - MEZZ_SENSOR_I2C_BUS_ADDR, MEZZ_SENSOR_TEMP_REGISTER); - - FILE *fp = popen(command, "r"); - fscanf(fp, "%s", tmp); - pclose(fp); - - *value = (float) strtol(tmp, NULL, 16); - } - - return 0; -} - -static int -bic_read_sensor_wrapper(uint8_t fru, uint8_t sensor_num, bool discrete, - void *value) { - - int ret; - sdr_full_t *sdr; - ipmi_sensor_reading_t sensor; - - ret = bic_read_sensor(fru, sensor_num, &sensor); - if (ret) { - return ret; - } - - if (sensor.flags & BIC_SENSOR_READ_NA) { -#ifdef DEBUG - syslog(LOG_ERR, "bic_read_sensor_wrapper: Reading Not Available"); - syslog(LOG_ERR, "bic_read_sensor_wrapper: sensor_num: 0x%X, flag: 0x%X", - sensor_num, sensor.flags); -#endif - return -1; - } - - if (discrete) { - *(float *) value = (float) sensor.status; - return 0; - } - - sdr = &g_sinfo[fru-1][sensor_num].sdr; - - // If the SDR is not type1, no need for conversion - if (sdr->type !=1) { - *(float *) value = sensor.value; - return 0; - } - - // y = (mx + b * 10^b_exp) * 10^r_exp - uint8_t x; - uint8_t m_lsb, m_msb, m; - uint8_t b_lsb, b_msb, b; - int8_t b_exp, r_exp; - - x = sensor.value; - - m_lsb = sdr->m_val; - m_msb = sdr->m_tolerance >> 6; - m = (m_msb << 8) | m_lsb; - - b_lsb = sdr->b_val; - b_msb = sdr->b_accuracy >> 6; - b = (b_msb << 8) | b_lsb; - - // exponents are 2's complement 4-bit number - b_exp = sdr->rb_exp & 0xF; - if (b_exp > 7) { - b_exp = (~b_exp + 1) & 0xF; - b_exp = -b_exp; - } - r_exp = (sdr->rb_exp >> 4) & 0xF; - if (r_exp > 7) { - r_exp = (~r_exp + 1) & 0xF; - r_exp = -r_exp; - } - - //printf("m:%d, x:%d, b:%d, b_exp:%d, r_exp:%d\n", m, x, b, b_exp, r_exp); - - * (float *) value = ((m * x) + (b * pow(10, b_exp))) * (pow(10, r_exp)); - - if ((sensor_num == BIC_SENSOR_SOC_THERM_MARGIN) && (* (float *) value > 0)) { - * (float *) value -= (float) THERMAL_CONSTANT; - } - - return 0; -} - -int -yosemite_sensor_sdr_path(uint8_t fru, char *path) { - -char fru_name[16] = {0}; - -switch(fru) { - case FRU_SLOT1: - sprintf(fru_name, "%s", "slot1"); - break; - case FRU_SLOT2: - sprintf(fru_name, "%s", "slot2"); - break; - case FRU_SLOT3: - sprintf(fru_name, "%s", "slot3"); - break; - case FRU_SLOT4: - sprintf(fru_name, "%s", "slot4"); - break; - case FRU_SPB: - sprintf(fru_name, "%s", "spb"); - break; - case FRU_NIC: - sprintf(fru_name, "%s", "nic"); - break; - default: -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_sensor_sdr_path: Wrong Slot ID\n"); -#endif - return -1; -} - -sprintf(path, YOSEMITE_SDR_PATH, fru_name); - -if (access(path, F_OK) == -1) { - return -1; -} - -return 0; -} - -/* Populates all sensor_info_t struct using the path to SDR dump */ -int -sdr_init(char *path, sensor_info_t *sinfo) { -int fd; -uint8_t buf[MAX_SDR_LEN] = {0}; -uint8_t bytes_rd = 0; -uint8_t snr_num = 0; -sdr_full_t *sdr; - -while (access(path, F_OK) == -1) { - sleep(5); -} - -fd = open(path, O_RDONLY); -if (fd < 0) { - syslog(LOG_ERR, "sdr_init: open failed for %s\n", path); - return -1; -} - -while ((bytes_rd = read(fd, buf, sizeof(sdr_full_t))) > 0) { - if (bytes_rd != sizeof(sdr_full_t)) { - syslog(LOG_ERR, "sdr_init: read returns %d bytes\n", bytes_rd); - return -1; - } - - sdr = (sdr_full_t *) buf; - snr_num = sdr->sensor_num; - sinfo[snr_num].valid = true; - memcpy(&sinfo[snr_num].sdr, sdr, sizeof(sdr_full_t)); -} - -return 0; -} - -int -yosemite_sensor_sdr_init(uint8_t fru, sensor_info_t *sinfo) { - int fd; - uint8_t buf[MAX_SDR_LEN] = {0}; - uint8_t bytes_rd = 0; - uint8_t sn = 0; - char path[64] = {0}; - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - if (yosemite_sensor_sdr_path(fru, path) < 0) { -#ifdef DEBUG - syslog(LOG_WARNING, "yosemite_sensor_sdr_init: get_fru_sdr_path failed\n"); -#endif - return ERR_NOT_READY; - } - - if (sdr_init(path, sinfo) < 0) { -#ifdef DEBUG - syslog(LOG_ERR, "yosemite_sensor_sdr_init: sdr_init failed for FRU %d", fru); -#endif - } - break; - - case FRU_SPB: - case FRU_NIC: - return -1; - break; - } - - return 0; -} - -static int -yosemite_sdr_init(uint8_t fru) { - - static bool init_done[MAX_NUM_FRUS] = {false}; - - if (!init_done[fru - 1]) { - - sensor_info_t *sinfo = g_sinfo[fru-1]; - - if (yosemite_sensor_sdr_init(fru, sinfo) < 0) - return ERR_NOT_READY; - - init_done[fru - 1] = true; - } - - return 0; -} - -static bool -is_server_prsnt(uint8_t fru) { - uint8_t gpio; - int val; - char path[64] = {0}; - - switch(fru) { - case 1: - gpio = 61; - break; - case 2: - gpio = 60; - break; - case 3: - gpio = 63; - break; - case 4: - gpio = 62; - break; - default: - return 0; - } - - sprintf(path, GPIO_VAL, gpio); - - if (read_device(path, &val)) { - return -1; - } - - if (val == 0x0) { - return 1; - } else { - return 0; - } -} - -/* Get the units for the sensor */ -int -yosemite_sensor_units(uint8_t fru, uint8_t sensor_num, char *units) { - uint8_t op, modifier; - sensor_info_t *sinfo; - - if (is_server_prsnt(fru) && (yosemite_sdr_init(fru) != 0)) { - return -1; - } - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - sprintf(units, ""); - break; - - case FRU_SPB: - switch(sensor_num) { - case SP_SENSOR_INLET_TEMP: - sprintf(units, "C"); - break; - case SP_SENSOR_OUTLET_TEMP: - sprintf(units, "C"); - break; - case SP_SENSOR_MEZZ_TEMP: - sprintf(units, "C"); - break; - case SP_SENSOR_FAN0_TACH: - sprintf(units, "RPM"); - break; - case SP_SENSOR_FAN1_TACH: - sprintf(units, "RPM"); - break; - case SP_SENSOR_AIR_FLOW: - sprintf(units, ""); - break; - case SP_SENSOR_P5V: - sprintf(units, "Volts"); - break; - case SP_SENSOR_P12V: - sprintf(units, "Volts"); - break; - case SP_SENSOR_P3V3_STBY: - sprintf(units, "Volts"); - break; - case SP_SENSOR_P12V_SLOT1: - case SP_SENSOR_P12V_SLOT2: - case SP_SENSOR_P12V_SLOT3: - case SP_SENSOR_P12V_SLOT4: - sprintf(units, "Volts"); - break; - case SP_SENSOR_P3V3: - sprintf(units, "Volts"); - break; - case SP_SENSOR_HSC_IN_VOLT: - sprintf(units, "Volts"); - break; - case SP_SENSOR_HSC_OUT_CURR: - sprintf(units, "Amps"); - break; - case SP_SENSOR_HSC_TEMP: - sprintf(units, "C"); - break; - case SP_SENSOR_HSC_IN_POWER: - sprintf(units, "Watts"); - break; - } - break; - case FRU_NIC: - switch(sensor_num) { - case MEZZ_SENSOR_TEMP: - sprintf(units, "C"); - break; - } - break; - } - return 0; -} - -int -yosemite_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, float *value) { - - sensor_thresh_array_init(); - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - break; - case FRU_SPB: - *value = spb_sensor_threshold[sensor_num][thresh]; - break; - case FRU_NIC: - *value = nic_sensor_threshold[sensor_num][thresh]; - break; - } - return 0; -} - -/* Get the name for the sensor */ -int -yosemite_sensor_name(uint8_t fru, uint8_t sensor_num, char *name) { - - switch(fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - switch(sensor_num) { - case BIC_SENSOR_SYSTEM_STATUS: - sprintf(name, "SYSTEM_STATUS"); - break; - case BIC_SENSOR_SYS_BOOT_STAT: - sprintf(name, "SYS_BOOT_STAT"); - break; - case BIC_SENSOR_CPU_DIMM_HOT: - sprintf(name, "CPU_DIMM_HOT"); - break; - case BIC_SENSOR_PROC_FAIL: - sprintf(name, "PROC_FAIL"); - break; - case BIC_SENSOR_VR_HOT: - sprintf(name, "VR_HOT"); - break; - default: - sprintf(name, ""); - break; - } - break; - - case FRU_SPB: - switch(sensor_num) { - case SP_SENSOR_INLET_TEMP: - sprintf(name, "SP_INLET_TEMP"); - break; - case SP_SENSOR_OUTLET_TEMP: - sprintf(name, "SP_OUTLET_TEMP"); - break; - case SP_SENSOR_MEZZ_TEMP: - sprintf(name, "SP_MEZZ_TEMP"); - break; - case SP_SENSOR_FAN0_TACH: - sprintf(name, "SP_FAN0_TACH"); - break; - case SP_SENSOR_FAN1_TACH: - sprintf(name, "SP_FAN1_TACH"); - break; - case SP_SENSOR_AIR_FLOW: - sprintf(name, "SP_AIR_FLOW"); - break; - case SP_SENSOR_P5V: - sprintf(name, "SP_P5V"); - break; - case SP_SENSOR_P12V: - sprintf(name, "SP_P12V"); - break; - case SP_SENSOR_P3V3_STBY: - sprintf(name, "SP_P3V3_STBY"); - break; - case SP_SENSOR_P12V_SLOT1: - sprintf(name, "SP_P12V_SLOT1"); - break; - case SP_SENSOR_P12V_SLOT2: - sprintf(name, "SP_P12V_SLOT2"); - break; - case SP_SENSOR_P12V_SLOT3: - sprintf(name, "SP_P12V_SLOT3"); - break; - case SP_SENSOR_P12V_SLOT4: - sprintf(name, "SP_P12V_SLOT4"); - break; - case SP_SENSOR_P3V3: - sprintf(name, "SP_P3V3"); - break; - case SP_SENSOR_HSC_IN_VOLT: - sprintf(name, "SP_HSC_IN_VOLT"); - break; - case SP_SENSOR_HSC_OUT_CURR: - sprintf(name, "SP_HSC_OUT_CURR"); - break; - case SP_SENSOR_HSC_TEMP: - sprintf(name, "SP_HSC_TEMP"); - break; - case SP_SENSOR_HSC_IN_POWER: - sprintf(name, "SP_HSC_IN_POWER"); - break; - } - break; - case FRU_NIC: - switch(sensor_num) { - case MEZZ_SENSOR_TEMP: - sprintf(name, "MEZZ_SENSOR_TEMP"); - break; - } - break; - } - return 0; -} - - -int -yosemite_sensor_read(uint8_t fru, uint8_t sensor_num, void *value) { - - float volt; - float curr; - int ret; - bool discrete; - int i; - - switch (fru) { - case FRU_SLOT1: - case FRU_SLOT2: - case FRU_SLOT3: - case FRU_SLOT4: - - if (!(is_server_prsnt(fru))) { - return -1; - } - - ret = yosemite_sdr_init(fru); - if (ret < 0) { - return ret; - } - - discrete = false; - - i = 0; - while (i < bic_discrete_cnt) { - if (sensor_num == bic_discrete_list[i++]) { - discrete = true; - break; - } - } - - return bic_read_sensor_wrapper(fru, sensor_num, discrete, value); - - case FRU_SPB: - switch(sensor_num) { - - // Inlet, Outlet Temp - case SP_SENSOR_INLET_TEMP: - return read_temp(SP_INLET_TEMP_DEVICE, (float*) value); - case SP_SENSOR_OUTLET_TEMP: - return read_temp(SP_OUTLET_TEMP_DEVICE, (float*) value); - - // Fan Tach Values - case SP_SENSOR_FAN0_TACH: - return read_fan_value(FAN0, FAN_TACH_RPM, (float*) value); - case SP_SENSOR_FAN1_TACH: - return read_fan_value(FAN1, FAN_TACH_RPM, (float*) value); - - // Various Voltages - case SP_SENSOR_P5V: - return read_adc_value(ADC_PIN0, ADC_VALUE, (float*) value); - case SP_SENSOR_P12V: - return read_adc_value(ADC_PIN1, ADC_VALUE, (float*) value); - case SP_SENSOR_P3V3_STBY: - return read_adc_value(ADC_PIN2, ADC_VALUE, (float*) value); - case SP_SENSOR_P12V_SLOT1: - return read_adc_value(ADC_PIN4, ADC_VALUE, (float*) value); - case SP_SENSOR_P12V_SLOT2: - return read_adc_value(ADC_PIN3, ADC_VALUE, (float*) value); - case SP_SENSOR_P12V_SLOT3: - return read_adc_value(ADC_PIN6, ADC_VALUE, (float*) value); - case SP_SENSOR_P12V_SLOT4: - return read_adc_value(ADC_PIN5, ADC_VALUE, (float*) value); - case SP_SENSOR_P3V3: - return read_adc_value(ADC_PIN7, ADC_VALUE, (float*) value); - - // Hot Swap Controller - case SP_SENSOR_HSC_IN_VOLT: - return read_hsc_value(HSC_IN_VOLT, (float*) value); - case SP_SENSOR_HSC_OUT_CURR: - return read_hsc_value(HSC_OUT_CURR, (float*) value); - case SP_SENSOR_HSC_TEMP: - return read_hsc_value(HSC_TEMP, (float*) value); - case SP_SENSOR_HSC_IN_POWER: - if (read_hsc_value(HSC_IN_VOLT, &volt)) { - return -1; - } - if (read_hsc_value(HSC_OUT_CURR, &curr)) { - return -1; - } - * (float*) value = volt * curr; - return 0; - } - break; - - case FRU_NIC: - switch(sensor_num) { - // Mezz Temp - case MEZZ_SENSOR_TEMP: - return read_nic_temp(MEZZ_SENSOR_TEMP, (float*) value); - } - break; - } -} - diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.h b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.h deleted file mode 100644 index 8775f15..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * - * Copyright 2015-present Facebook. All Rights Reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __YOSEMITE_SENSOR_H__ -#define __YOSEMITE_SENSOR_H__ - -#include <stdbool.h> -#include <openbmc/ipmi.h> -#include <openbmc/ipmb.h> -#include <facebook/bic.h> -#include <facebook/yosemite_common.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_SDR_LEN 64 -#define MAX_SENSOR_NUM 0xFF -#define MAX_SENSOR_THRESHOLD 8 -#define MAX_RETRIES_SDR_INIT 30 -#define THERMAL_CONSTANT 255 -#define ERR_NOT_READY -2 - -typedef struct _sensor_info_t { - bool valid; - sdr_full_t sdr; -} sensor_info_t; - -/* Enum for type of Upper and Lower threshold values */ -enum { - UCR_THRESH = 0x01, - UNC_THRESH, - UNR_THRESH, - LCR_THRESH, - LNC_THRESH, - LNR_THRESH, - POS_HYST, - NEG_HYST, -}; - -// Sensors under Bridge IC -enum { - BIC_SENSOR_MB_OUTLET_TEMP = 0x01, - BIC_SENSOR_VCCIN_VR_TEMP = 0x02, - BIC_SENSOR_VCC_GBE_VR_TEMP = 0x03, - BIC_SENSOR_1V05PCH_VR_TEMP = 0x04, - BIC_SENSOR_SOC_TEMP = 0x05, - BIC_SENSOR_MB_INLET_TEMP = 0x07, - BIC_SENSOR_PCH_TEMP = 0x08, - BIC_SENSOR_SOC_THERM_MARGIN = 0x09, - BIC_SENSOR_VDDR_VR_TEMP = 0x0B, - BIC_SENSOR_SYSTEM_STATUS = 0x10, //Discrete - BIC_SENSOR_SPS_FW_HLTH = 0x17, //Event-only - BIC_SENSOR_VCC_GBE_VR_CURR = 0x20, - BIC_SENSOR_1V05_PCH_VR_CURR = 0x21, - BIC_SENSOR_VCCIN_VR_POUT = 0x22, - BIC_SENSOR_VCCIN_VR_CURR = 0x23, - BIC_SENSOR_VCCIN_VR_VOL = 0x24, - BIC_SENSOR_INA230_POWER = 0x29, - BIC_SENSOR_INA230_VOL = 0x2A, - BIC_SENSOR_POST_ERR = 0x2B, //Event-only - BIC_SENSOR_SOC_PACKAGE_PWR = 0x2C, - BIC_SENSOR_SOC_TJMAX = 0x30, - BIC_SENSOR_VDDR_VR_POUT = 0x32, - BIC_SENSOR_VDDR_VR_CURR = 0x33, - BIC_SENSOR_VDDR_VR_VOL = 0x34, - BIC_SENSOR_VCC_SCSUS_VR_CURR = 0x35, - BIC_SENSOR_VCC_SCSUS_VR_VOL = 0x36, - BIC_SENSOR_VCC_SCSUS_VR_TEMP = 0x37, - BIC_SENSOR_VCC_SCSUS_VR_POUT = 0x38, - BIC_SENSOR_VCC_GBE_VR_POUT = 0x39, - BIC_SENSOR_POWER_THRESH_EVENT = 0x3B, //Event-only - BIC_SENSOR_MACHINE_CHK_ERR = 0x40, //Event-only - BIC_SENSOR_PCIE_ERR = 0x41, //Event-only - BIC_SENSOR_1V05_PCH_VR_POUT = 0x42, - BIC_SENSOR_OTHER_IIO_ERR = 0x43, //Event-only - BIC_SENSOR_PROC_HOT_EXT = 0x51, //Event-only - BIC_SENSOR_VCC_GBE_VR_VOL = 0x54, - BIC_SENSOR_1V05_PCH_VR_VOL = 0x55, - BIC_SENSOR_POWER_ERR = 0x56, //Event-only - BIC_SENSOR_MEM_ECC_ERR = 0x63, //Event-only - BIC_SENSOR_PROC_FAIL = 0x65, //Discrete - BIC_SENSOR_SYS_BOOT_STAT = 0x7E, //Discrete - BIC_SENSOR_VR_HOT = 0xB2, //Discrete - BIC_SENSOR_CPU_DIMM_HOT = 0xB3, //Discrete - BIC_SENSOR_SOC_DIMMA0_TEMP = 0xB4, - BIC_SENSOR_SOC_DIMMA1_TEMP = 0xB5, - BIC_SENSOR_SOC_DIMMB0_TEMP = 0xB6, - BIC_SENSOR_SOC_DIMMB1_TEMP = 0xB7, - BIC_SENSOR_P3V3_MB = 0xD0, - BIC_SENSOR_P12V_MB = 0xD2, - BIC_SENSOR_P1V05_PCH = 0xD3, - BIC_SENSOR_P3V3_STBY_MB = 0xD5, - BIC_SENSOR_P5V_STBY_MB = 0xD6, - BIC_SENSOR_PV_BAT = 0xD7, - BIC_SENSOR_PVDDR = 0xD8, - BIC_SENSOR_PVCC_GBE = 0xD9, - BIC_SENSOR_CAT_ERR = 0xEB, //Event-only -}; - -// Sensors Under Side Plane -enum { - SP_SENSOR_INLET_TEMP = 0x81, - SP_SENSOR_OUTLET_TEMP = 0x80, - SP_SENSOR_MEZZ_TEMP = 0x82, - SP_SENSOR_FAN0_TACH = 0x46, - SP_SENSOR_FAN1_TACH = 0x47, - SP_SENSOR_AIR_FLOW = 0x4A, - SP_SENSOR_P5V = 0xE0, - SP_SENSOR_P12V = 0xE1, - SP_SENSOR_P3V3_STBY = 0xE2, - SP_SENSOR_P12V_SLOT1 = 0xE3, - SP_SENSOR_P12V_SLOT2 = 0xE4, - SP_SENSOR_P12V_SLOT3 = 0xE5, - SP_SENSOR_P12V_SLOT4 = 0xE6, - SP_SENSOR_P3V3 = 0xE7, - SP_SENSOR_HSC_IN_VOLT = 0xC0, - SP_SENSOR_HSC_OUT_CURR = 0xC1, - SP_SENSOR_HSC_TEMP = 0xC2, - SP_SENSOR_HSC_IN_POWER = 0xC3, -}; - -enum{ - MEZZ_SENSOR_TEMP = 0x01, -}; -extern const uint8_t bic_sensor_list[]; - -extern const uint8_t bic_discrete_list[]; - -extern const uint8_t spb_sensor_list[]; - -extern const uint8_t nic_sensor_list[]; - -//extern float spb_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1]; - -//extern float nic_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1]; - -extern size_t bic_sensor_cnt; - -extern size_t bic_discrete_cnt; - -extern size_t spb_sensor_cnt; - -extern size_t nic_sensor_cnt; - -int yosemite_sensor_read(uint8_t fru, uint8_t sensor_num, void *value); -int yosemite_sensor_name(uint8_t fru, uint8_t sensor_num, char *name); -int yosemite_sensor_units(uint8_t fru, uint8_t sensor_num, char *units); -int yosemite_sensor_sdr_path(uint8_t fru, char *path); -int yosemite_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, float *value); -int yosemite_sensor_sdr_init(uint8_t fru, sensor_info_t *sinfo); - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* __YOSEMITE_SENSOR_H__ */ diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libbic_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libbic_0.1.bb deleted file mode 100644 index 6b22366..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libbic_0.1.bb +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -SUMMARY = "Bridge IC Library" -DESCRIPTION = "library for communicating with Bridge IC" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://bic.c;beginline=8;endline=20;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://bic \ - " -DEPENDS += "libipmi libipmb" - -S = "${WORKDIR}/bic" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libbic.so ${D}${libdir}/libbic.so - - install -d ${D}${includedir}/facebook - install -m 0644 bic.h ${D}${includedir}/facebook/bic.h -} - -FILES_${PN} = "${libdir}/libbic.so" -FILES_${PN}-dev = "${includedir}/facebook/bic.h" diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libpal_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libpal_0.1.bb deleted file mode 100644 index bcdd420..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libpal_0.1.bb +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -SUMMARY = "Platform Abstraction Library" -DESCRIPTION = "library for communicating with Platform" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://pal.c;beginline=8;endline=20;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://pal \ - " - -DEPENDS += "libbic libyosemite-common libyosemite-fruid libyosemite-sensor " - -S = "${WORKDIR}/pal" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libpal.so ${D}${libdir}/libpal.so - - install -d ${D}${includedir}/openbmc - install -m 0644 pal.h ${D}${includedir}/openbmc/pal.h -} - -FILES_${PN} = "${libdir}/libpal.so" -FILES_${PN}-dev = "${includedir}/openbmc/pal.h" - -RDEPENDS_${PN} += " libyosemite-common" diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-common_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-common_0.1.bb deleted file mode 100644 index bdf8192..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-common_0.1.bb +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -SUMMARY = "Yosemite Common Library" -DESCRIPTION = "library for common Yosemite information" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://yosemite_common.c;beginline=8;endline=20;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://yosemite_common \ - " - -S = "${WORKDIR}/yosemite_common" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libyosemite_common.so ${D}${libdir}/libyosemite_common.so - - install -d ${D}${includedir} - install -d ${D}${includedir}/facebook - install -m 0644 yosemite_common.h ${D}${includedir}/facebook/yosemite_common.h -} - -FILES_${PN} = "${libdir}/libyosemite_common.so" -FILES_${PN}-dev = "${includedir}/facebook/yosemite_common.h" diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-fruid_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-fruid_0.1.bb deleted file mode 100644 index ce9fe7f..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-fruid_0.1.bb +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -# -# This program file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program in a file named COPYING; if not, write to the -# Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301 USA - -SUMMARY = "Yosemite Fruid Library" -DESCRIPTION = "library for reading all yosemite fruids" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://yosemite_fruid.c;beginline=6;endline=18;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://yosemite_fruid \ - " - -DEPENDS += " libyosemite-common " - -S = "${WORKDIR}/yosemite_fruid" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libyosemite_fruid.so ${D}${libdir}/libyosemite_fruid.so - - install -d ${D}${includedir} - install -d ${D}${includedir}/facebook - install -m 0644 yosemite_fruid.h ${D}${includedir}/facebook/yosemite_fruid.h -} - -FILES_${PN} = "${libdir}/libyosemite_fruid.so" -FILES_${PN}-dev = "${includedir}/facebook/yosemite_fruid.h" diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-gpio_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-gpio_0.1.bb deleted file mode 100644 index 39993d0..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-gpio_0.1.bb +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -# -# This program file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program in a file named COPYING; if not, write to the -# Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301 USA - -SUMMARY = "Yosemite GPIO Pin Library" -DESCRIPTION = "library for all gpio pins in yosemite" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://yosemite_gpio.c;beginline=6;endline=18;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://yosemite_gpio \ - " - -DEPENDS += "libbic " - -S = "${WORKDIR}/yosemite_gpio" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libyosemite_gpio.so ${D}${libdir}/libyosemite_gpio.so - - install -d ${D}${includedir} - install -d ${D}${includedir}/facebook - install -m 0644 yosemite_gpio.h ${D}${includedir}/facebook/yosemite_gpio.h -} - -FILES_${PN} = "${libdir}/libyosemite_gpio.so" -FILES_${PN}-dev = "${includedir}/facebook/yosemite_gpio.h" diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-sensor_0.1.bb b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-sensor_0.1.bb deleted file mode 100644 index 4bbeef1..0000000 --- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/libyosemite-sensor_0.1.bb +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015-present Facebook. All Rights Reserved. -SUMMARY = "Yosemite Sensor Library" -DESCRIPTION = "library for reading various sensors" -SECTION = "base" -PR = "r1" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://yosemite_sensor.c;beginline=8;endline=20;md5=da35978751a9d71b73679307c4d296ec" - - -SRC_URI = "file://yosemite_sensor \ - " -DEPENDS =+ " libipmi libipmb libbic libyosemite-common " - -S = "${WORKDIR}/yosemite_sensor" - -do_install() { - install -d ${D}${libdir} - install -m 0644 libyosemite_sensor.so ${D}${libdir}/libyosemite_sensor.so - - install -d ${D}${includedir}/facebook - install -m 0644 yosemite_sensor.h ${D}${includedir}/facebook/yosemite_sensor.h -} - -FILES_${PN} = "${libdir}/libyosemite_sensor.so" -FILES_${PN}-dev = "${includedir}/facebook/yosemite_sensor.h" |