1 /*
2  * This file and its contents are supplied under the terms of the
3  * Common Development and Distribution License ("CDDL"), version 1.0.
4  * You may only use this file in accordance with the terms of version
5  * 1.0 of the CDDL.
6  *
7  * A full copy of the text of the CDDL should have accompanied this
8  * source.  A copy of the CDDL is also available via the Internet at
9  * http://www.illumos.org/license/CDDL.
10  */
11 
12 /*
13  * Copyright (c) 2018 Joyent, Inc.
14  */
15 
16 #ifndef _AHCIEM_H
17 #define	_AHCIEM_H
18 
19 /*
20  * Private interface to AHCI Enclosure services
21  */
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include <sys/types.h>
28 
29 #define	AHCI_EM_IOC	(('a' << 24) | ('e' << 16) | ('m' << 8))
30 #define	AHCI_EM_IOC_GET	(AHCI_EM_IOC | 0x00)
31 #define	AHCI_EM_IOC_SET	(AHCI_EM_IOC | 0x01)
32 
33 #define	AHCI_EM_IOC_MAX_PORTS	32
34 
35 /*
36  * The default state for LEDs is to have ident and fault disabled and activity
37  * enabled, if in hardware control.
38  */
39 typedef enum ahci_em_led_state {
40 	AHCI_EM_LED_IDENT_ENABLE	= 1 << 0,
41 	AHCI_EM_LED_FAULT_ENABLE	= 1 << 1,
42 	AHCI_EM_LED_ACTIVITY_DISABLE	= 1 << 2
43 } ahci_em_led_state_t;
44 
45 #define	AHCI_EM_FLAG_CONTROL_ACTIVITY	0x01
46 
47 typedef struct ahci_ioc_em_get {
48 	uint_t	aiemg_nports;
49 	uint_t	aiemg_flags;
50 	uint_t	aiemg_status[AHCI_EM_IOC_MAX_PORTS];
51 } ahci_ioc_em_get_t;
52 
53 
54 /*
55  * Values set in aiems_op that control the behavior of the ioctl. If ADD is set,
56  * the listed flags are added to the current set. If, REM is set, then the flags
57  * are removed. If SET is set, then the flags are replaced.
58  */
59 #define	AHCI_EM_IOC_SET_OP_ADD		0x01
60 #define	AHCI_EM_IOC_SET_OP_REM		0x02
61 #define	AHCI_EM_IOC_SET_OP_SET		0x03
62 
63 typedef struct ahci_ioc_em_set {
64 	uint_t	aiems_port;
65 	uint_t	aiems_op;
66 	uint_t	aiems_leds;
67 	uint_t	aiems_pad;
68 } ahci_ioc_em_set_t;
69 
70 #ifdef __cplusplus
71 }
72 #endif
73 
74 #endif /* _AHCIEM_H */
75