Page MenuHomeFreeBSD

D54439.id.diff
No OneTemporary

D54439.id.diff

diff --git a/sys/dev/asmc/asmc.c b/sys/dev/asmc/asmc.c
--- a/sys/dev/asmc/asmc.c
+++ b/sys/dev/asmc/asmc.c
@@ -106,6 +106,7 @@
static int asmc_mbp_sysctl_light_right(SYSCTL_HANDLER_ARGS);
static int asmc_mbp_sysctl_light_control(SYSCTL_HANDLER_ARGS);
static int asmc_mbp_sysctl_light_left_10byte(SYSCTL_HANDLER_ARGS);
+static int asmc_wol_sysctl(SYSCTL_HANDLER_ARGS);
struct asmc_model {
const char *smc_model; /* smbios.system.product env var. */
@@ -921,6 +922,14 @@
out:
asmc_sms_calibrate(dev);
nosms:
+ /* Wake-on-LAN convenience sysctl */
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "wol",
+ CTLTYPE_U8 | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
+ dev, 0, asmc_wol_sysctl, "CU",
+ "Wake-on-LAN enable (0=off, 1=on)");
+
sc->sc_nfan = asmc_fan_count(dev);
if (sc->sc_nfan > ASMC_MAXFANS) {
device_printf(dev, "more than %d fans were detected. Please "
@@ -1669,3 +1678,34 @@
return (error);
}
+/*
+ * Wake-on-LAN convenience sysctl.
+ * Reading returns 1 if WoL is enabled, 0 if disabled.
+ * Writing 1 enables WoL, 0 disables it.
+ */
+static int
+asmc_wol_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ device_t dev = (device_t) arg1;
+ uint8_t aupo, newval;
+ int error;
+
+ /* Read current AUPO value */
+ if (asmc_key_read(dev, "AUPO", &aupo, 1) != 0)
+ return (EIO);
+
+ newval = (aupo != 0) ? 1 : 0;
+ error = sysctl_handle_8(oidp, &newval, 0, req);
+ if (error || req->newptr == NULL)
+ return (error);
+
+ /* Clamp to 0 or 1 */
+ newval = (newval != 0) ? 1 : 0;
+
+ /* Write AUPO */
+ if (asmc_key_write(dev, "AUPO", &newval, 1) != 0)
+ return (EIO);
+
+ return (0);
+}
+

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 2, 7:12 AM (1 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27445499
Default Alt Text
D54439.id.diff (1 KB)

Event Timeline