48 while (atomic_cmpset_int(&sc->
bypass.
low, 0, 1) == 0)
50 while (atomic_cmpset_int(&sc->
bypass.
high, 0, 1) == 0)
61 while (atomic_cmpset_int(&sc->
bypass.
high, 1, 0) == 0)
63 while (atomic_cmpset_int(&sc->
bypass.
low, 1, 0) == 0)
76 while (atomic_cmpset_int(&sc->
bypass.
high, 0, 1) == 0)
87 while (atomic_cmpset_int(&sc->
bypass.
high, 1, 0) == 0)
98 struct timespec current;
102 *sec = current.tv_sec;
121 static int version = 0;
136 error = sysctl_handle_int(oidp, &version, 0, req);
161 static int state = 0;
172 error = sysctl_handle_int(oidp, &state, 0, req);
173 if ((error != 0) || (req->newptr == NULL))
223 static int timeout = 0;
233 error = sysctl_handle_int(oidp, &timeout, 0, req);
234 if ((error) || (req->newptr == NULL))
266 static int main_on = 0;
275 error = sysctl_handle_int(oidp, &main_on, 0, req);
276 if ((error) || (req->newptr == NULL))
308 static int main_off = 0;
317 error = sysctl_handle_int(oidp, &main_off, 0, req);
318 if ((error) || (req->newptr == NULL))
350 static int aux_on = 0;
359 error = sysctl_handle_int(oidp, &aux_on, 0, req);
360 if ((error) || (req->newptr == NULL))
392 static int aux_off = 0;
401 error = sysctl_handle_int(oidp, &aux_off, 0, req);
402 if ((error) || (req->newptr == NULL))
439 static int timeout = 0;
455 error = sysctl_handle_int(oidp, &timeout, 0, req);
456 if ((error) || (req->newptr == NULL))
510 int cmd, count = 0, error = 0;
513 error = sysctl_handle_int(oidp, &reset_wd, 0, req);
514 if ((error) || (req->newptr == NULL))
557 u32 log_off, count = 0;
558 static int status = 0;
563 error = sysctl_handle_int(oidp, &status, 0, req);
564 if ((error) || (req->newptr == NULL))
568 while (atomic_cmpset_int(&sc->
bypass.
log, 0, 1) == 0)
595 log_off = base + (head * 5);
599 eeprom[count].
logs = 0;
603 for (i = 0; i < 4; i++) {
610 eeprom[count].
logs += data << (8 * i);
615 log_off + i, &eeprom[count].
actions);
632 log_off = base + (head * 5);
638 u32 mon, days, hours, min, sec;
643 u16 day_mon[2][13] = {
644 {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365},
645 {0, 31, 59, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}
647 char *event_str[] = {
"unknown",
"main on",
"aux on",
648 "main off",
"aux off",
"WDT",
"user" };
649 char *action_str[] = {
"ignore",
"normal",
"bypass",
"isolate",};
661 for (i = 11; days < day_mon[
LEAP_YR(year)][i]; i--)
667 hours = time / (60 * 60);
671 device_printf(sc->
dev,
672 "UT %02d/%02d %02d:%02d:%02d %8.8s -> %7.7s\n",
673 mon, days, hours, min, sec, event_str[event],
678 cmd |= ((eeprom[count].
logs & ~BYPASS_LOG_CLEAR_M) >> 24);
695 while (atomic_cmpset_int(&sc->
bypass.
log, 1, 0) == 0)
702 while (atomic_cmpset_int(&sc->
bypass.
log, 1, 0) == 0)
717 device_t dev = sc->
dev;
718 struct sysctl_oid *bp_node;
719 struct sysctl_oid_list *bp_list;
720 u32 mask, value, sec, year;
747 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
748 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
749 OID_AUTO,
"bypass_log",
750 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
754 bp_node = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev),
755 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
756 OID_AUTO,
"bypass", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Bypass");
758 bp_list = SYSCTL_CHILDREN(bp_node);
760 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
761 OID_AUTO,
"version", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
764 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
765 OID_AUTO,
"state", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
768 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
769 OID_AUTO,
"timeout", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
772 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
773 OID_AUTO,
"main_on", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
776 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
777 OID_AUTO,
"main_off", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
780 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
781 OID_AUTO,
"aux_on", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
784 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
785 OID_AUTO,
"aux_off", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
788 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
789 OID_AUTO,
"wd_set", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
792 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), bp_list,
793 OID_AUTO,
"wd_reset", CTLTYPE_INT | CTLFLAG_WR | CTLFLAG_NEEDGIANT,
static int ixgbe_bp_aux_off(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_wd_reset(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_set_state(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_main_on(SYSCTL_HANDLER_ARGS)
void ixgbe_bypass_init(struct ixgbe_softc *sc)
static int ixgbe_bp_aux_on(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_timeout(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_main_off(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_version(SYSCTL_HANDLER_ARGS)
static int ixgbe_bp_wd_set(SYSCTL_HANDLER_ARGS)
static void ixgbe_bypass_wd_mutex_clear(struct ixgbe_softc *sc)
static void ixgbe_bypass_mutex_enter(struct ixgbe_softc *sc)
static void ixgbe_bypass_mutex_clear(struct ixgbe_softc *sc)
static int ixgbe_bp_log(SYSCTL_HANDLER_ARGS)
static void ixgbe_bypass_wd_mutex_enter(struct ixgbe_softc *sc)
static void ixgbe_get_bypass_time(u32 *year, u32 *sec)
#define IXGBE_FEATURE_BYPASS
#define BYPASS_AUX_OFF_SHIFT
#define BYPASS_CTL1_TIME_M
#define BYPASS_MAIN_ON_SHIFT
#define BYPASS_LOG_EVENT_SHIFT
#define BYPASS_AUX_ON_SHIFT
#define BYPASS_CTL2_OFFSET_M
#define BYPASS_CTL1_OFFTRST_M
#define BYPASS_WDTIMEOUT_SHIFT
#define BYPASS_CTL1_VALID
#define BYPASS_CTL2_OFFSET_SHIFT
#define BYPASS_WDT_ENABLE_M
#define BYPASS_LOG_ACTION_M
#define BYPASS_MODE_OFF_M
#define BYPASS_CTL1_OFFTRST
#define BYPASS_LOG_TIME_M
#define BYPASS_MAIN_OFF_M
#define BYPASS_LOG_CLEAR_M
#define BYPASS_MAIN_OFF_SHIFT
#define IXGBE_BYPASS_FW_WRITE_FAILURE
#define BYPASS_LOG_EVENT_M
#define BYPASS_WDTIMEOUT_M
#define BYPASS_CTL1_WDT_PET
#define BYPASS_EEPROM_VER_ADD
#define BYPASS_WDT_ENABLE_SHIFT
#define IXGBE_ERR_INVALID_ARGUMENT
#define BYPASS_WDT_TIME_SHIFT
#define BYPASS_CTL2_HEAD_SHIFT
#define BYPASS_STATUS_OFF_SHIFT
#define BYPASS_CTL2_HEAD_M
#define BYPASS_CTL1_VALID_M
#define BYPASS_CTL2_DATA_M
#define BYPASS_WDT_VALUE_M
struct ixgbe_mac_info mac
struct ixgbe_mac_operations ops
s32(* bypass_set)(struct ixgbe_hw *hw, u32 cmd, u32 event, u32 action)
bool(* bypass_valid_rd)(u32 in_reg, u32 out_reg)
s32(* bypass_rd_eep)(struct ixgbe_hw *hw, u32 addr, u8 *value)
s32(* bypass_rw)(struct ixgbe_hw *hw, u32 cmd, u32 *status)
struct ixgbe_bp_data bypass