View | Details | Raw Unified | Return to bug 234403 | Differences between
and this patch

Collapse All | Expand All

(-)b/share/man/man4/acpi_ibm.4 (+22 lines)
Lines 345-350 Built-in battery Link Here
345
.It
345
.It
346
UltraBay battery
346
UltraBay battery
347
.El
347
.El
348
.It Va dev.acpi_ibm.0.bat0_charge_start
349
Primary battery charge below which charging starts.
350
.Pp
351
.Bl -tag -width indent-two -compact
352
.It Li 0
353
Use battery firmware's default setting
354
.It Li 1-99
355
Threshold in percent
356
.It Li -4
357
Not supported
358
.El
359
.It Va dev.acpi_ibm.0.bat0_charge_stop
360
Primary battery charge above which charging stops.
361
.Pp
362
.Bl -tag -width indent-two -compact
363
.It Li 0
364
Use battery firmware's default setting
365
.It Li 1-99
366
Threshold in percent
367
.It Li -4
368
Not supported
369
.El
348
.It Va dev.acpi_ibm.0.handlerevents
370
.It Va dev.acpi_ibm.0.handlerevents
349
.Xr devd 8
371
.Xr devd 8
350
events handled by
372
events handled by
(-)b/sys/dev/acpi_support/acpi_ibm.c (-1 / +100 lines)
Lines 77-82 ACPI_MODULE_NAME("IBM") Link Here
77
#define ACPI_IBM_METHOD_HANDLEREVENTS	14
77
#define ACPI_IBM_METHOD_HANDLEREVENTS	14
78
#define ACPI_IBM_METHOD_MIC_LED		15
78
#define ACPI_IBM_METHOD_MIC_LED		15
79
#define ACPI_IBM_METHOD_PRIVACYGUARD	16
79
#define ACPI_IBM_METHOD_PRIVACYGUARD	16
80
#define ACPI_IBM_METHOD_BAT0_CHRG_START	17
81
#define ACPI_IBM_METHOD_BAT0_CHRG_STOP	18
80
82
81
/* Hotkeys/Buttons */
83
/* Hotkeys/Buttons */
82
#define IBM_RTC_HOTKEY1			0x64
84
#define IBM_RTC_HOTKEY1			0x64
Lines 154-159 ACPI_MODULE_NAME("IBM") Link Here
154
#define IBM_FLAG_PRIVACYGUARD_DEVICE_PRESENT	0x10000
156
#define IBM_FLAG_PRIVACYGUARD_DEVICE_PRESENT	0x10000
155
#define IBM_FLAG_PRIVACYGUARD_ON	0x1
157
#define IBM_FLAG_PRIVACYGUARD_ON	0x1
156
158
159
/* Batteries */
160
#define IBM_BAT_PRIMARY   1
161
157
#define ABS(x) (((x) < 0)? -(x) : (x))
162
#define ABS(x) (((x) < 0)? -(x) : (x))
158
163
159
struct acpi_ibm_softc {
164
struct acpi_ibm_softc {
Lines 282-287 static struct { Link Here
282
		.method		= ACPI_IBM_METHOD_PRIVACYGUARD,
287
		.method		= ACPI_IBM_METHOD_PRIVACYGUARD,
283
		.description	= "PrivacyGuard enable",
288
		.description	= "PrivacyGuard enable",
284
	},
289
	},
290
	{
291
		.name		= "bat0_charge_start",
292
		.method		= ACPI_IBM_METHOD_BAT0_CHRG_START,
293
		.description	= "Primary battery charge threshold",
294
	},
295
	{
296
		.name		= "bat0_charge_stop",
297
		.method		= ACPI_IBM_METHOD_BAT0_CHRG_STOP,
298
		.description	= "Primary battery charge stop threshold",
299
	},
285
	{ NULL, 0, NULL, 0 }
300
	{ NULL, 0, NULL, 0 }
286
};
301
};
287
302
Lines 439-444 acpi_ibm_mic_led_set(struct acpi_ibm_softc *sc, int arg) Link Here
439
	return (0);
454
	return (0);
440
}
455
}
441
456
457
/*
458
 * Evaluate an object with one integer parameter that returns one integer.
459
 * If result is NULL, the return value is discarded.
460
 */
461
static ACPI_STATUS
462
acpi_EvalIntToInt(ACPI_HANDLE handle, char *path, UINT32 param, UINT32 *result)
463
{
464
	ACPI_STATUS status;
465
	ACPI_OBJECT_LIST params;
466
	ACPI_OBJECT pbuf[1];
467
	ACPI_BUFFER results;
468
	ACPI_OBJECT rbuf[1];
469
470
	params.Count = 1;
471
	params.Pointer = pbuf;
472
	pbuf[0].Type = ACPI_TYPE_INTEGER;
473
	pbuf[0].Integer.Value = param;
474
475
	if (result != NULL) {
476
		results.Length = sizeof(rbuf);
477
		results.Pointer = rbuf;
478
		status = AcpiEvaluateObject(handle, path, &params, &results);
479
		if (ACPI_SUCCESS(status)) {
480
			if (rbuf[0].Type == ACPI_TYPE_INTEGER)
481
				*result = rbuf[0].Integer.Value;
482
			else
483
				status = AE_TYPE;
484
		}
485
	} else
486
		status = AcpiEvaluateObject(handle, path, &params, NULL);
487
	return (status);
488
}
489
490
/*
491
 * Get battery charge start (BCTG) and stop (BCSG) thresholds.
492
 */
493
static int
494
acpi_ibm_bat_get(ACPI_HANDLE handle, char *path, int bat)
495
{
496
	int val;
497
	if (ACPI_FAILURE(acpi_EvalIntToInt(handle, path, bat & 0x3, &val)))
498
		return -2; /* failed to eval object */
499
	if (val & (1 << 31))
500
		return -3; /* got error flag */
501
	if (!(val & (1 << 8)))
502
		return -4; /* not supported */
503
	return val & 0xff;
504
}
505
506
/*
507
 * Set battery charge start (BCCS) and stop (BCSS) thresholds.
508
 */
509
static int
510
acpi_ibm_bat_set(ACPI_HANDLE handle, char *path, int bat, int arg)
511
{
512
	ACPI_STATUS status;
513
	int val;
514
	if (arg < 0 || arg > 99)
515
		return (EINVAL);
516
	status = acpi_EvalIntToInt(handle, path, (bat & 0x3) << 8 | (arg & 0xff), &val);
517
	if (ACPI_FAILURE(status) || val & 0x8000)
518
		return (-1);
519
	return (0);
520
}
521
442
static int
522
static int
443
acpi_ibm_probe(device_t dev)
523
acpi_ibm_probe(device_t dev)
444
{
524
{
Lines 856-861 acpi_ibm_sysctl_get(struct acpi_ibm_softc *sc, int method) Link Here
856
	case ACPI_IBM_METHOD_PRIVACYGUARD:
936
	case ACPI_IBM_METHOD_PRIVACYGUARD:
857
		val = acpi_ibm_privacyguard_get(sc);
937
		val = acpi_ibm_privacyguard_get(sc);
858
		break;
938
		break;
939
940
	case ACPI_IBM_METHOD_BAT0_CHRG_START:
941
		return acpi_ibm_bat_get(sc->handle, "BCTG", IBM_BAT_PRIMARY);
942
943
	case ACPI_IBM_METHOD_BAT0_CHRG_STOP:
944
		return acpi_ibm_bat_get(sc->handle, "BCSG", IBM_BAT_PRIMARY);
859
	}
945
	}
860
946
861
	return (val);
947
	return (val);
Lines 949-954 acpi_ibm_sysctl_set(struct acpi_ibm_softc *sc, int method, int arg) Link Here
949
				(arg == 1) ? (val_ec | IBM_EC_MASK_FANSTATUS) : (val_ec & (~IBM_EC_MASK_FANSTATUS)), 1);
1035
				(arg == 1) ? (val_ec | IBM_EC_MASK_FANSTATUS) : (val_ec & (~IBM_EC_MASK_FANSTATUS)), 1);
950
		}
1036
		}
951
		break;
1037
		break;
1038
1039
	case ACPI_IBM_METHOD_BAT0_CHRG_START:
1040
		return acpi_ibm_bat_set(sc->handle, "BCCS", IBM_BAT_PRIMARY, arg);
1041
1042
	case ACPI_IBM_METHOD_BAT0_CHRG_STOP:
1043
		return acpi_ibm_bat_set(sc->handle, "BCSS", IBM_BAT_PRIMARY, arg);
952
	}
1044
	}
953
1045
954
	return (0);
1046
	return (0);
Lines 1056-1061 acpi_ibm_sysctl_init(struct acpi_ibm_softc *sc, int method) Link Here
1056
1148
1057
	case ACPI_IBM_METHOD_PRIVACYGUARD:
1149
	case ACPI_IBM_METHOD_PRIVACYGUARD:
1058
		return (acpi_ibm_privacyguard_get(sc) != -1);
1150
		return (acpi_ibm_privacyguard_get(sc) != -1);
1151
1152
	case ACPI_IBM_METHOD_BAT0_CHRG_START:
1153
		if (acpi_ibm_bat_get(sc->handle, "BCTG", IBM_BAT_PRIMARY) >= 0)
1154
			return (TRUE);
1155
1156
	case ACPI_IBM_METHOD_BAT0_CHRG_STOP:
1157
		if (acpi_ibm_bat_get(sc->handle, "BCSG", IBM_BAT_PRIMARY) >= 0)
1158
			return (TRUE);
1059
	}
1159
	}
1060
	return (FALSE);
1160
	return (FALSE);
1061
}
1161
}
1062
- 

Return to bug 234403