--- - 2018-12-24 08:27:48.000000000 +0100 +++ sys/dev/ipmi.c 2018-12-23 09:50:53.000000000 +0100 @@ -1,4 +1,4 @@ -/* $NetBSD: ipmi.c,v 1.70 2018/12/17 16:26:03 christos Exp $ */ +/* $NetBSD$ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -67,8 +67,6 @@ __KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.7 #include #include -#include - #include #include @@ -90,33 +88,14 @@ struct ipmi_sensor { int32_t i_prevval; /* feed rnd source on change */ }; -int ipmi_nintr; -int ipmi_dbg = 0; -int ipmi_enabled = 0; +#if 0 +static int ipmi_nintr; +#endif +static int ipmi_dbg = 0; +static int ipmi_enabled = 0; #define SENSOR_REFRESH_RATE (hz / 2) -#define SMBIOS_TYPE_IPMI 0x26 - -/* - * Format of SMBIOS IPMI Flags - * - * bit0: interrupt trigger mode (1=level, 0=edge) - * bit1: interrupt polarity (1=active high, 0=active low) - * bit2: reserved - * bit3: address LSB (1=odd,0=even) - * bit4: interrupt (1=specified, 0=not specified) - * bit5: reserved - * bit6/7: register spacing (1,4,2,err) - */ -#define SMIPMI_FLAG_IRQLVL (1L << 0) -#define SMIPMI_FLAG_IRQEN (1L << 3) -#define SMIPMI_FLAG_ODDOFFSET (1L << 4) -#define SMIPMI_FLAG_IFSPACING(x) (((x)>>6)&0x3) -#define IPMI_IOSPACING_BYTE 0 -#define IPMI_IOSPACING_WORD 2 -#define IPMI_IOSPACING_DWORD 1 - #define IPMI_BTMSG_LEN 0 #define IPMI_BTMSG_NFLN 1 #define IPMI_BTMSG_SEQ 2 @@ -164,74 +143,89 @@ int ipmi_enabled = 0; if (len && ipmi_dbg >= lvl) \ dumpb(msg, len, (const uint8_t *)(buf)); -long signextend(unsigned long, int); +static long signextend(unsigned long, int); SLIST_HEAD(ipmi_sensors_head, ipmi_sensor); -struct ipmi_sensors_head ipmi_sensor_list = +static struct ipmi_sensors_head ipmi_sensor_list = SLIST_HEAD_INITIALIZER(&ipmi_sensor_list); -void dumpb(const char *, int, const uint8_t *); +static void dumpb(const char *, int, const uint8_t *); -int read_sensor(struct ipmi_softc *, struct ipmi_sensor *); -int add_sdr_sensor(struct ipmi_softc *, uint8_t *); -int get_sdr_partial(struct ipmi_softc *, uint16_t, uint16_t, +static int read_sensor(struct ipmi_softc *, struct ipmi_sensor *); +static int add_sdr_sensor(struct ipmi_softc *, uint8_t *); +static int get_sdr_partial(struct ipmi_softc *, uint16_t, uint16_t, uint8_t, uint8_t, void *, uint16_t *); -int get_sdr(struct ipmi_softc *, uint16_t, uint16_t *); +static int get_sdr(struct ipmi_softc *, uint16_t, uint16_t *); -char *ipmi_buf_acquire(struct ipmi_softc *, size_t); -void ipmi_buf_release(struct ipmi_softc *, char *); -int ipmi_sendcmd(struct ipmi_softc *, int, int, int, int, int, const void*); -int ipmi_recvcmd(struct ipmi_softc *, int, int *, void *); -void ipmi_delay(struct ipmi_softc *, int); - -int ipmi_watchdog_setmode(struct sysmon_wdog *); -int ipmi_watchdog_tickle(struct sysmon_wdog *); -void ipmi_dotickle(struct ipmi_softc *); - -int ipmi_intr(void *); -int ipmi_match(device_t, cfdata_t, void *); -void ipmi_attach(device_t, device_t, void *); -static int ipmi_detach(device_t, int); +static char *ipmi_buf_acquire(struct ipmi_softc *, size_t); +static void ipmi_buf_release(struct ipmi_softc *, char *); +static int ipmi_sendcmd(struct ipmi_softc *, int, int, int, int, int, const void*); +static int ipmi_recvcmd(struct ipmi_softc *, int, int *, void *); +static void ipmi_delay(struct ipmi_softc *, int); + +static int ipmi_watchdog_setmode(struct sysmon_wdog *); +static int ipmi_watchdog_tickle(struct sysmon_wdog *); +static void ipmi_dotickle(struct ipmi_softc *); -long ipmi_convert(uint8_t, struct sdrtype1 *, long); -void ipmi_sensor_name(char *, int, uint8_t, uint8_t *); +#if 0 +static int ipmi_intr(void *); +#endif -/* BMC Helper Functions */ -uint8_t bmc_read(struct ipmi_softc *, int); -void bmc_write(struct ipmi_softc *, int, uint8_t); -int bmc_io_wait(struct ipmi_softc *, int, uint8_t, uint8_t, const char *); -int bmc_io_wait_spin(struct ipmi_softc *, int, uint8_t, uint8_t); -int bmc_io_wait_sleep(struct ipmi_softc *, int, uint8_t, uint8_t); - -void *bt_buildmsg(struct ipmi_softc *, int, int, int, const void *, int *); -void *cmn_buildmsg(struct ipmi_softc *, int, int, int, const void *, int *); - -int getbits(uint8_t *, int, int); -int ipmi_sensor_type(int, int, int); - -void ipmi_smbios_probe(struct smbios_ipmi *, struct ipmi_attach_args *); -void ipmi_refresh_sensors(struct ipmi_softc *); -int ipmi_map_regs(struct ipmi_softc *, struct ipmi_attach_args *); -void ipmi_unmap_regs(struct ipmi_softc *); - -void *scan_sig(long, long, int, int, const void *); - -int32_t ipmi_convert_sensor(uint8_t *, struct ipmi_sensor *); -void ipmi_set_limits(struct sysmon_envsys *, envsys_data_t *, - sysmon_envsys_lim_t *, uint32_t *); -void ipmi_get_limits(struct sysmon_envsys *, envsys_data_t *, - sysmon_envsys_lim_t *, uint32_t *); -void ipmi_get_sensor_limits(struct ipmi_softc *, struct ipmi_sensor *, - sysmon_envsys_lim_t *, uint32_t *); -int ipmi_sensor_status(struct ipmi_softc *, struct ipmi_sensor *, - envsys_data_t *, uint8_t *); +static int ipmi_match(device_t, cfdata_t, void *); +static void ipmi_attach(device_t, device_t, void *); +static int ipmi_detach(device_t, int); -int add_child_sensors(struct ipmi_softc *, uint8_t *, int, int, int, - int, int, int, const char *); +static long ipmi_convert(uint8_t, struct sdrtype1 *, long); +static void ipmi_sensor_name(char *, int, uint8_t, uint8_t *); -bool ipmi_suspend(device_t, const pmf_qual_t *); +/* BMC Helper Functions */ +static uint8_t bmc_read(struct ipmi_softc *, int); +static void bmc_write(struct ipmi_softc *, int, uint8_t); +static int bmc_io_wait(struct ipmi_softc *, int, uint8_t, uint8_t, const char *); +static int bmc_io_wait_spin(struct ipmi_softc *, int, uint8_t, uint8_t); +static int bmc_io_wait_sleep(struct ipmi_softc *, int, uint8_t, uint8_t); + +static void *bt_buildmsg(struct ipmi_softc *, int, int, int, const void *, int *); +static void *cmn_buildmsg(struct ipmi_softc *, int, int, int, const void *, int *); + +static int getbits(uint8_t *, int, int); +static int ipmi_sensor_type(int, int, int); + +static void ipmi_refresh_sensors(struct ipmi_softc *); +static int ipmi_map_regs(struct ipmi_softc *, struct ipmi_attach_args *); +static void ipmi_unmap_regs(struct ipmi_softc *); + +static int32_t ipmi_convert_sensor(uint8_t *, struct ipmi_sensor *); +static void ipmi_set_limits(struct sysmon_envsys *, envsys_data_t *, + sysmon_envsys_lim_t *, uint32_t *); +static void ipmi_get_limits(struct sysmon_envsys *, envsys_data_t *, + sysmon_envsys_lim_t *, uint32_t *); +static void ipmi_get_sensor_limits(struct ipmi_softc *, struct ipmi_sensor *, + sysmon_envsys_lim_t *, uint32_t *); +static int ipmi_sensor_status(struct ipmi_softc *, struct ipmi_sensor *, + envsys_data_t *, uint8_t *); + +static int add_child_sensors(struct ipmi_softc *, uint8_t *, int, int, int, + int, int, int, const char *); + +static bool ipmi_suspend(device_t, const pmf_qual_t *); + +static int kcs_probe(struct ipmi_softc *); +static int kcs_reset(struct ipmi_softc *); +static int kcs_sendmsg(struct ipmi_softc *, int, const uint8_t *); +static int kcs_recvmsg(struct ipmi_softc *, int, int *len, uint8_t *); + +static int bt_probe(struct ipmi_softc *); +static int bt_reset(struct ipmi_softc *); +static int bt_sendmsg(struct ipmi_softc *, int, const uint8_t *); +static int bt_recvmsg(struct ipmi_softc *, int, int *, uint8_t *); + +static int smic_probe(struct ipmi_softc *); +static int smic_reset(struct ipmi_softc *); +static int smic_sendmsg(struct ipmi_softc *, int, const uint8_t *); +static int smic_recvmsg(struct ipmi_softc *, int, int *, uint8_t *); -struct ipmi_if kcs_if = { +static struct ipmi_if kcs_if = { "KCS", IPMI_IF_KCS_NREGS, cmn_buildmsg, @@ -241,7 +235,7 @@ struct ipmi_if kcs_if = { kcs_probe, }; -struct ipmi_if smic_if = { +static struct ipmi_if smic_if = { "SMIC", IPMI_IF_SMIC_NREGS, cmn_buildmsg, @@ -251,7 +245,7 @@ struct ipmi_if smic_if = { smic_probe, }; -struct ipmi_if bt_if = { +static struct ipmi_if bt_if = { "BT", IPMI_IF_BT_NREGS, bt_buildmsg, @@ -261,9 +255,9 @@ struct ipmi_if bt_if = { bt_probe, }; -struct ipmi_if *ipmi_get_if(int); +static struct ipmi_if *ipmi_get_if(int); -struct ipmi_if * +static struct ipmi_if * ipmi_get_if(int iftype) { switch (iftype) { @@ -281,21 +275,21 @@ ipmi_get_if(int iftype) /* * BMC Helper Functions */ -uint8_t +static uint8_t bmc_read(struct ipmi_softc *sc, int offset) { return bus_space_read_1(sc->sc_iot, sc->sc_ioh, offset * sc->sc_if_iospacing); } -void +static void bmc_write(struct ipmi_softc *sc, int offset, uint8_t val) { bus_space_write_1(sc->sc_iot, sc->sc_ioh, offset * sc->sc_if_iospacing, val); } -int +static int bmc_io_wait_sleep(struct ipmi_softc *sc, int offset, uint8_t mask, uint8_t value) { @@ -315,7 +309,7 @@ bmc_io_wait_sleep(struct ipmi_softc *sc, return -1; } -int +static int bmc_io_wait(struct ipmi_softc *sc, int offset, uint8_t mask, uint8_t value, const char *lbl) { @@ -328,7 +322,7 @@ bmc_io_wait(struct ipmi_softc *sc, int o return bmc_io_wait_sleep(sc, offset, mask, value); } -int +static int bmc_io_wait_spin(struct ipmi_softc *sc, int offset, uint8_t mask, uint8_t value) { @@ -373,16 +367,16 @@ bmc_io_wait_spin(struct ipmi_softc *sc, #define BT_IM_SMI_EN (1L << 3) #define BT_IM_NMI2SMI (1L << 4) -int bt_read(struct ipmi_softc *, int); -int bt_write(struct ipmi_softc *, int, uint8_t); +static int bt_read(struct ipmi_softc *, int); +static int bt_write(struct ipmi_softc *, int, uint8_t); -int +static int bt_read(struct ipmi_softc *sc, int reg) { return bmc_read(sc, reg); } -int +static int bt_write(struct ipmi_softc *sc, int reg, uint8_t data) { if (bmc_io_wait(sc, _BT_CTRL_REG, BT_BMC_BUSY, 0, __func__) < 0) @@ -392,7 +386,7 @@ bt_write(struct ipmi_softc *sc, int reg, return 0; } -int +static int bt_sendmsg(struct ipmi_softc *sc, int len, const uint8_t *data) { int i; @@ -409,7 +403,7 @@ bt_sendmsg(struct ipmi_softc *sc, int le return 0; } -int +static int bt_recvmsg(struct ipmi_softc *sc, int maxlen, int *rxlen, uint8_t *data) { uint8_t len, v, i; @@ -433,13 +427,13 @@ bt_recvmsg(struct ipmi_softc *sc, int ma return 0; } -int +static int bt_reset(struct ipmi_softc *sc) { return -1; } -int +static int bt_probe(struct ipmi_softc *sc) { uint8_t rv; @@ -499,11 +493,11 @@ bt_probe(struct ipmi_softc *sc) #define SMIC_TX_DATA_RDY (1L << 6) #define SMIC_RX_DATA_RDY (1L << 7) -int smic_wait(struct ipmi_softc *, uint8_t, uint8_t, const char *); -int smic_write_cmd_data(struct ipmi_softc *, uint8_t, const uint8_t *); -int smic_read_data(struct ipmi_softc *, uint8_t *); +static int smic_wait(struct ipmi_softc *, uint8_t, uint8_t, const char *); +static int smic_write_cmd_data(struct ipmi_softc *, uint8_t, const uint8_t *); +static int smic_read_data(struct ipmi_softc *, uint8_t *); -int +static int smic_wait(struct ipmi_softc *sc, uint8_t mask, uint8_t val, const char *lbl) { int v; @@ -519,7 +513,7 @@ smic_wait(struct ipmi_softc *sc, uint8_t return v; } -int +static int smic_write_cmd_data(struct ipmi_softc *sc, uint8_t cmd, const uint8_t *data) { int sts, v; @@ -541,7 +535,7 @@ smic_write_cmd_data(struct ipmi_softc *s return smic_wait(sc, SMIC_BUSY, 0, __func__); } -int +static int smic_read_data(struct ipmi_softc *sc, uint8_t *data) { int sts; @@ -557,7 +551,7 @@ smic_read_data(struct ipmi_softc *sc, ui #define ErrStat(a, ...) if (a) printf(__VA_ARGS__); -int +static int smic_sendmsg(struct ipmi_softc *sc, int len, const uint8_t *data) { int sts, idx; @@ -578,7 +572,7 @@ smic_sendmsg(struct ipmi_softc *sc, int return 0; } -int +static int smic_recvmsg(struct ipmi_softc *sc, int maxlen, int *len, uint8_t *data) { int sts, idx; @@ -610,13 +604,13 @@ smic_recvmsg(struct ipmi_softc *sc, int return 0; } -int +static int smic_reset(struct ipmi_softc *sc) { return -1; } -int +static int smic_probe(struct ipmi_softc *sc) { /* Flag register should not be 0xFF on a good system */ @@ -651,12 +645,12 @@ smic_probe(struct ipmi_softc *sc) #define KCS_WRITE_STATE 0x80 #define KCS_ERROR_STATE 0xC0 -int kcs_wait(struct ipmi_softc *, uint8_t, uint8_t, const char *); -int kcs_write_cmd(struct ipmi_softc *, uint8_t); -int kcs_write_data(struct ipmi_softc *, uint8_t); -int kcs_read_data(struct ipmi_softc *, uint8_t *); +static int kcs_wait(struct ipmi_softc *, uint8_t, uint8_t, const char *); +static int kcs_write_cmd(struct ipmi_softc *, uint8_t); +static int kcs_write_data(struct ipmi_softc *, uint8_t); +static int kcs_read_data(struct ipmi_softc *, uint8_t *); -int +static int kcs_wait(struct ipmi_softc *sc, uint8_t mask, uint8_t value, const char *lbl) { int v; @@ -681,7 +675,7 @@ kcs_wait(struct ipmi_softc *sc, uint8_t return v & KCS_STATE_MASK; } -int +static int kcs_write_cmd(struct ipmi_softc *sc, uint8_t cmd) { /* ASSERT: IBF and OBF are clear */ @@ -691,7 +685,7 @@ kcs_write_cmd(struct ipmi_softc *sc, uin return kcs_wait(sc, KCS_IBF, 0, "write_cmd"); } -int +static int kcs_write_data(struct ipmi_softc *sc, uint8_t data) { /* ASSERT: IBF and OBF are clear */ @@ -701,7 +695,7 @@ kcs_write_data(struct ipmi_softc *sc, ui return kcs_wait(sc, KCS_IBF, 0, "write_data"); } -int +static int kcs_read_data(struct ipmi_softc *sc, uint8_t * data) { int sts; @@ -720,7 +714,7 @@ kcs_read_data(struct ipmi_softc *sc, uin } /* Exported KCS functions */ -int +static int kcs_sendmsg(struct ipmi_softc *sc, int len, const uint8_t * data) { int idx, sts; @@ -746,7 +740,7 @@ kcs_sendmsg(struct ipmi_softc *sc, int l return 0; } -int +static int kcs_recvmsg(struct ipmi_softc *sc, int maxlen, int *rxlen, uint8_t * data) { int idx, sts; @@ -769,13 +763,13 @@ kcs_recvmsg(struct ipmi_softc *sc, int m return 0; } -int +static int kcs_reset(struct ipmi_softc *sc) { return -1; } -int +static int kcs_probe(struct ipmi_softc *sc) { uint8_t v; @@ -859,24 +853,7 @@ struct ipmi_bmc_response { CFATTACH_DECL2_NEW(ipmi, sizeof(struct ipmi_softc), ipmi_match, ipmi_attach, ipmi_detach, NULL, NULL, NULL); -/* Scan memory for signature */ -void * -scan_sig(long start, long end, int skip, int len, const void *data) -{ - void *va; - - while (start < end) { - va = ISA_HOLE_VADDR(start); - if (memcmp(va, data, len) == 0) - return va; - - start += skip; - } - - return NULL; -} - -void +static void dumpb(const char *lbl, int len, const uint8_t *data) { int idx; @@ -888,76 +865,6 @@ dumpb(const char *lbl, int len, const ui printf("\n"); } -void -ipmi_smbios_probe(struct smbios_ipmi *pipmi, struct ipmi_attach_args *ia) -{ - const char *platform; - - dbg_printf(1, "%s: %#.2x %#.2x %#.2x %#.2x %#08" PRIx64 - " %#.2x %#.2x\n", __func__, - pipmi->smipmi_if_type, - pipmi->smipmi_if_rev, - pipmi->smipmi_i2c_address, - pipmi->smipmi_nvram_address, - pipmi->smipmi_base_address, - pipmi->smipmi_base_flags, - pipmi->smipmi_irq); - - ia->iaa_if_type = pipmi->smipmi_if_type; - ia->iaa_if_rev = pipmi->smipmi_if_rev; - ia->iaa_if_irq = (pipmi->smipmi_base_flags & SMIPMI_FLAG_IRQEN) ? - pipmi->smipmi_irq : -1; - ia->iaa_if_irqlvl = (pipmi->smipmi_base_flags & SMIPMI_FLAG_IRQLVL) ? - IST_LEVEL : IST_EDGE; - - switch (SMIPMI_FLAG_IFSPACING(pipmi->smipmi_base_flags)) { - case IPMI_IOSPACING_BYTE: - ia->iaa_if_iospacing = 1; - break; - - case IPMI_IOSPACING_DWORD: - ia->iaa_if_iospacing = 4; - break; - - case IPMI_IOSPACING_WORD: - ia->iaa_if_iospacing = 2; - break; - - default: - ia->iaa_if_iospacing = 1; - aprint_error("%s: unknown register spacing\n", __func__); - } - - /* Calculate base address (PCI BAR format) */ - if (pipmi->smipmi_base_address & 0x1) { - ia->iaa_if_iotype = 'i'; - ia->iaa_if_iobase = pipmi->smipmi_base_address & ~0x1; - } else { - ia->iaa_if_iotype = 'm'; - ia->iaa_if_iobase = pipmi->smipmi_base_address & ~0xF; - } - if (pipmi->smipmi_base_flags & SMIPMI_FLAG_ODDOFFSET) - ia->iaa_if_iobase++; - - platform = pmf_get_platform("system-product"); - if (platform != NULL && - strcmp(platform, "ProLiant MicroServer") == 0 && - pipmi->smipmi_base_address != 0) { - ia->iaa_if_iospacing = 1; - ia->iaa_if_iobase = pipmi->smipmi_base_address & ~0x7; - ia->iaa_if_iotype = 'i'; - return; - } - - if (pipmi->smipmi_base_flags == 0x7f) { - /* IBM 325 eServer workaround */ - ia->iaa_if_iospacing = 1; - ia->iaa_if_iobase = pipmi->smipmi_base_address; - ia->iaa_if_iotype = 'i'; - return; - } -} - /* * bt_buildmsg builds an IPMI message from a nfLun, cmd, and data * This is used by BT protocol @@ -965,7 +872,7 @@ ipmi_smbios_probe(struct smbios_ipmi *pi * Returns a buffer to an allocated message, txlen contains length * of allocated message */ -void * +static void * bt_buildmsg(struct ipmi_softc *sc, int nfLun, int cmd, int len, const void *data, int *txlen) { @@ -994,7 +901,7 @@ bt_buildmsg(struct ipmi_softc *sc, int n * Returns a buffer to an allocated message, txlen contains length * of allocated message */ -void * +static void * cmn_buildmsg(struct ipmi_softc *sc, int nfLun, int cmd, int len, const void *data, int *txlen) { @@ -1019,7 +926,7 @@ cmn_buildmsg(struct ipmi_softc *sc, int * * Send an IPMI command */ -int +static int ipmi_sendcmd(struct ipmi_softc *sc, int rssa, int rslun, int netfn, int cmd, int txlen, const void *data) { @@ -1066,7 +973,7 @@ done: return rc; } -void +static void ipmi_buf_release(struct ipmi_softc *sc, char *buf) { KASSERT(sc->sc_buf_rsvd); @@ -1074,7 +981,7 @@ ipmi_buf_release(struct ipmi_softc *sc, sc->sc_buf_rsvd = false; } -char * +static char * ipmi_buf_acquire(struct ipmi_softc *sc, size_t len) { KASSERT(len <= sizeof(sc->sc_buf)); @@ -1088,7 +995,7 @@ ipmi_buf_acquire(struct ipmi_softc *sc, /* * ipmi_recvcmd: caller must hold sc_cmd_mtx. */ -int +static int ipmi_recvcmd(struct ipmi_softc *sc, int maxlen, int *rxlen, void *data) { uint8_t *buf, rc = 0; @@ -1127,7 +1034,7 @@ ipmi_recvcmd(struct ipmi_softc *sc, int /* * ipmi_delay: caller must hold sc_cmd_mtx. */ -void +static void ipmi_delay(struct ipmi_softc *sc, int ms) { if (cold) { @@ -1140,7 +1047,7 @@ ipmi_delay(struct ipmi_softc *sc, int ms } /* Read a partial SDR entry */ -int +static int get_sdr_partial(struct ipmi_softc *sc, uint16_t recordId, uint16_t reserveId, uint8_t offset, uint8_t length, void *buffer, uint16_t *nxtRecordId) { @@ -1171,10 +1078,10 @@ get_sdr_partial(struct ipmi_softc *sc, u return 0; } -int maxsdrlen = 0x10; +static int maxsdrlen = 0x10; /* Read an entire SDR; pass to add sensor */ -int +static int get_sdr(struct ipmi_softc *sc, uint16_t recid, uint16_t *nxtrec) { uint16_t resid = 0; @@ -1232,7 +1139,7 @@ get_sdr(struct ipmi_softc *sc, uint16_t return 0; } -int +static int getbits(uint8_t *bytes, int bitpos, int bitlen) { int v; @@ -1251,7 +1158,7 @@ getbits(uint8_t *bytes, int bitpos, int } /* Decode IPMI sensor name */ -void +static void ipmi_sensor_name(char *name, int len, uint8_t typelen, uint8_t *bits) { int i, slen; @@ -1295,7 +1202,7 @@ ipmi_sensor_name(char *name, int len, ui } /* Sign extend a n-bit value */ -long +static long signextend(unsigned long val, int bits) { long msk = (1L << (bits-1))-1; @@ -1450,7 +1357,7 @@ done: } /* Convert IPMI reading from sensor factors */ -long +static long ipmi_convert(uint8_t v, struct sdrtype1 *s1, long adj) { int64_t M, B; @@ -1499,7 +1406,7 @@ ipmi_convert(uint8_t v, struct sdrtype1 return FIX2INT(val); } -int32_t +static int32_t ipmi_convert_sensor(uint8_t *reading, struct ipmi_sensor *psensor) { struct sdrtype1 *s1 = (struct sdrtype1 *)psensor->i_sdr; @@ -1526,7 +1433,7 @@ ipmi_convert_sensor(uint8_t *reading, st return val; } -void +static void ipmi_set_limits(struct sysmon_envsys *sme, envsys_data_t *edata, sysmon_envsys_lim_t *limits, uint32_t *props) { @@ -1548,7 +1455,7 @@ ipmi_set_limits(struct sysmon_envsys *sm return; } -void +static void ipmi_get_limits(struct sysmon_envsys *sme, envsys_data_t *edata, sysmon_envsys_lim_t *limits, uint32_t *props) { @@ -1571,7 +1478,7 @@ ipmi_get_limits(struct sysmon_envsys *sm return; } -void +static void ipmi_get_sensor_limits(struct ipmi_softc *sc, struct ipmi_sensor *psensor, sysmon_envsys_lim_t *limits, uint32_t *props) { @@ -1647,7 +1554,7 @@ ipmi_get_sensor_limits(struct ipmi_softc return; } -int +static int ipmi_sensor_status(struct ipmi_softc *sc, struct ipmi_sensor *psensor, envsys_data_t *edata, uint8_t *reading) { @@ -1707,7 +1614,7 @@ ipmi_sensor_status(struct ipmi_softc *sc return ENVSYS_SVALID; } -int +static int read_sensor(struct ipmi_softc *sc, struct ipmi_sensor *psensor) { struct sdrtype1 *s1 = (struct sdrtype1 *) psensor->i_sdr; @@ -1744,7 +1651,7 @@ err: return -1; } -int +static int ipmi_sensor_type(int type, int ext_type, int entity) { switch (ext_type << 8L | type) { @@ -1770,7 +1677,7 @@ ipmi_sensor_type(int type, int ext_type, } /* Add Sensor to BSD Sysctl interface */ -int +static int add_sdr_sensor(struct ipmi_softc *sc, uint8_t *psdr) { int rc; @@ -1812,7 +1719,7 @@ ipmi_is_dupname(char *name) return 0; } -int +static int add_child_sensors(struct ipmi_softc *sc, uint8_t *psdr, int count, int sensor_num, int sensor_type, int ext_type, int sensor_base, int entity, const char *name) @@ -1889,8 +1796,9 @@ add_child_sensors(struct ipmi_softc *sc, return 1; } +#if 0 /* Interrupt handler */ -int +static int ipmi_intr(void *arg) { struct ipmi_softc *sc = (struct ipmi_softc *)arg; @@ -1902,9 +1810,10 @@ ipmi_intr(void *arg) return 0; } +#endif /* Handle IPMI Timer - reread sensor values */ -void +static void ipmi_refresh_sensors(struct ipmi_softc *sc) { @@ -1920,7 +1829,7 @@ ipmi_refresh_sensors(struct ipmi_softc * } } -int +static int ipmi_map_regs(struct ipmi_softc *sc, struct ipmi_attach_args *ia) { int error; @@ -1955,40 +1864,14 @@ ipmi_map_regs(struct ipmi_softc *sc, str return 0; } -void +static void ipmi_unmap_regs(struct ipmi_softc *sc) { bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_if->nregs * sc->sc_if_iospacing); } -int -ipmi_probe(struct ipmi_attach_args *ia) -{ - struct dmd_ipmi *pipmi; - struct smbtable tbl; - - tbl.cookie = 0; - - if (smbios_find_table(SMBIOS_TYPE_IPMIDEV, &tbl)) - ipmi_smbios_probe(tbl.tblhdr, ia); - else { - pipmi = scan_sig(0xC0000L, 0xFFFFFL, 16, 4, "IPMI"); - /* XXX hack to find Dell PowerEdge 8450 */ - if (pipmi == NULL) { - /* no IPMI found */ - return 0; - } - - /* we have an IPMI signature, fill in attach arg structure */ - ia->iaa_if_type = pipmi->dmd_if_type; - ia->iaa_if_rev = pipmi->dmd_if_rev; - } - - return 1; -} - -int +static int ipmi_match(device_t parent, cfdata_t cf, void *aux) { struct ipmi_softc sc; @@ -2150,7 +2033,7 @@ ipmi_thread(void *cookie) kthread_exit(0); } -void +static void ipmi_attach(device_t parent, device_t self, void *aux) { struct ipmi_softc *sc = device_private(self); @@ -2230,7 +2113,7 @@ ipmi_detach(device_t self, int flags) return 0; } -int +static int ipmi_watchdog_setmode(struct sysmon_wdog *smwdog) { struct ipmi_softc *sc = smwdog->smw_cookie; @@ -2280,7 +2163,7 @@ ipmi_watchdog_setmode(struct sysmon_wdog return 0; } -int +static int ipmi_watchdog_tickle(struct sysmon_wdog *smwdog) { struct ipmi_softc *sc = smwdog->smw_cookie; @@ -2292,7 +2175,7 @@ ipmi_watchdog_tickle(struct sysmon_wdog return 0; } -void +static void ipmi_dotickle(struct ipmi_softc *sc) { int rc, len; @@ -2309,7 +2192,7 @@ ipmi_dotickle(struct ipmi_softc *sc) } } -bool +static bool ipmi_suspend(device_t dev, const pmf_qual_t *qual) { struct ipmi_softc *sc = device_private(dev);