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 */