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