1/* $NetBSD$ */ 2 3/* 4 * Apple System Management Controller Interface 5 */ 6 7/*- 8 * Copyright (c) 2013 The NetBSD Foundation, Inc. 9 * All rights reserved. 10 * 11 * This code is derived from software contributed to The NetBSD Foundation 12 * by Taylor R. Campbell. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions 16 * are met: 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 2. Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 24 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 25 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 27 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36#ifndef _DEV_IC_APPLE_SMC_H_ 37#define _DEV_IC_APPLE_SMC_H_ 38 39#include <sys/types.h> 40 41struct apple_smc_tag; 42 43struct apple_smc_attach_args { 44 struct apple_smc_tag *asa_smc; 45}; 46 47struct apple_smc_key; 48 49struct apple_smc_desc { 50 uint8_t asd_size; 51 52 char asd_type[4]; 53#define APPLE_SMC_TYPE_UINT8 "ui8 " 54#define APPLE_SMC_TYPE_UINT16 "ui16" 55#define APPLE_SMC_TYPE_UINT32 "ui32" 56#define APPLE_SMC_TYPE_SINT8 "si8 " 57#define APPLE_SMC_TYPE_SINT16 "si16" 58#define APPLE_SMC_TYPE_SINT32 "si32" 59#define APPLE_SMC_TYPE_STRING "ch8*" 60#define APPLE_SMC_TYPE_FANDESC "{fds" /* fan description */ 61#define APPLE_SMC_TYPE_FPE2 "fpe2" /* fan RPM */ 62#define APPLE_SMC_TYPE_SP78 "sp78" /* temperature in a weird scale */ 63 64 uint8_t asd_flags; 65#define APPLE_SMC_FLAG_UNKNOWN0 0x01 66#define APPLE_SMC_FLAG_UNKNOWN1 0x02 67#define APPLE_SMC_FLAG_UNKNOWN2 0x04 68#define APPLE_SMC_FLAG_UNKNOWN3 0x08 69#define APPLE_SMC_FLAG_UNKNOWN4 0x10 70#define APPLE_SMC_FLAG_UNKNOWN5 0x20 71#define APPLE_SMC_FLAG_WRITE 0x40 72#define APPLE_SMC_FLAG_READ 0x80 73} __packed; 74 75uint32_t apple_smc_nkeys(struct apple_smc_tag *); 76int apple_smc_nth_key(struct apple_smc_tag *, 77 uint32_t, const char[4 + 1], 78 struct apple_smc_key **); 79int apple_smc_named_key(struct apple_smc_tag *, 80 const char[4 + 1], const char[4 + 1], 81 struct apple_smc_key **); 82void apple_smc_release_key(struct apple_smc_tag *, 83 struct apple_smc_key *); 84int apple_smc_key_search(struct apple_smc_tag *, const char[4 + 1], 85 uint32_t *); 86const char * apple_smc_key_name(const struct apple_smc_key *); 87uint32_t apple_smc_key_index(const struct apple_smc_key *); 88const struct apple_smc_desc * 89 apple_smc_key_desc(const struct apple_smc_key *); 90 91int apple_smc_read_key(struct apple_smc_tag *, 92 const struct apple_smc_key *, void *, uint8_t); 93int apple_smc_read_key_1(struct apple_smc_tag *, 94 const struct apple_smc_key *, uint8_t *); 95int apple_smc_read_key_2(struct apple_smc_tag *, 96 const struct apple_smc_key *, uint16_t *); 97int apple_smc_read_key_4(struct apple_smc_tag *, 98 const struct apple_smc_key *, uint32_t *); 99 100int apple_smc_write_key(struct apple_smc_tag *, 101 const struct apple_smc_key *, const void *, uint8_t); 102int apple_smc_write_key_1(struct apple_smc_tag *, 103 const struct apple_smc_key *, uint8_t); 104int apple_smc_write_key_2(struct apple_smc_tag *, 105 const struct apple_smc_key *, uint16_t); 106int apple_smc_write_key_4(struct apple_smc_tag *, 107 const struct apple_smc_key *, uint32_t); 108 109#endif /* _DEV_IC_APPLE_SMC_H_ */ 110