Blame src/ses.h

Packit 7e09eb
/*
Packit 7e09eb
 * Intel(R) Enclosure LED Utilities
Packit Service cb68d2
 * Copyright (C) 2009-2021 Intel Corporation.
Packit 7e09eb
 *
Packit 7e09eb
 * This program is free software; you can redistribute it and/or modify it
Packit 7e09eb
 * under the terms and conditions of the GNU General Public License,
Packit 7e09eb
 * version 2, as published by the Free Software Foundation.
Packit 7e09eb
 *
Packit 7e09eb
 * This program is distributed in the hope it will be useful, but WITHOUT
Packit 7e09eb
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
Packit 7e09eb
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
Packit 7e09eb
 * more details.
Packit 7e09eb
 *
Packit 7e09eb
 * You should have received a copy of the GNU General Public License along with
Packit 7e09eb
 * this program; if not, write to the Free Software Foundation, Inc.,
Packit 7e09eb
 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
Packit 7e09eb
 *
Packit 7e09eb
 */
Packit 7e09eb
Packit 7e09eb
#ifndef _SES_H_INCLUDED_
Packit 7e09eb
#define _SES_H_INCLUDED_
Packit 7e09eb
Packit 7e09eb
#include <asm/types.h>
Packit 7e09eb
Packit Service cb68d2
#include "ibpi.h"
Packit Service cb68d2
Packit 7e09eb
/* Size of buffer for SES-2 Messages. */
Packit 7e09eb
#define SES_ALLOC_BUFF 4096
Packit 7e09eb
Packit 7e09eb
typedef enum __attribute__((packed)) {
Packit 7e09eb
	SES_UNSPECIFIED		= 0x00,
Packit 7e09eb
	SES_DEVICE_SLOT		= 0x01,
Packit 7e09eb
	SES_ARRAY_DEVICE_SLOT	= 0x17,
Packit 7e09eb
} element_type;
Packit 7e09eb
Packit 7e09eb
struct ses_page {
Packit 7e09eb
	unsigned char buf[SES_ALLOC_BUFF];
Packit 7e09eb
	int len;
Packit 7e09eb
};
Packit 7e09eb
Packit 7e09eb
struct type_descriptor_header {
Packit 7e09eb
	element_type element_type;
Packit 7e09eb
	__u8 num_of_elements;
Packit 7e09eb
	__u8 subenclosure_id;
Packit 7e09eb
	__u8 type_desc_text_len;
Packit 7e09eb
};
Packit 7e09eb
Packit 7e09eb
struct ses_pages {
Packit Service cb68d2
	struct ses_page page1;
Packit Service cb68d2
	struct ses_page page2;
Packit Service cb68d2
	struct ses_page page10;
Packit Service cb68d2
	const struct type_descriptor_header *page1_types;
Packit 7e09eb
	int page1_types_len;
Packit Service cb68d2
	int changes;
Packit 7e09eb
};
Packit 7e09eb
Packit 7e09eb
struct ses_slot_ctrl_elem {
Packit 7e09eb
	union {
Packit 7e09eb
		struct {
Packit 7e09eb
			__u8 common_control;
Packit 7e09eb
			__u8 array_slot_control;
Packit 7e09eb
			__u8 b2;
Packit 7e09eb
			__u8 b3;
Packit 7e09eb
		};
Packit 7e09eb
		__u8 b[4];
Packit 7e09eb
	};
Packit 7e09eb
};
Packit 7e09eb
Packit Service cb68d2
struct ses_slot {
Packit Service cb68d2
	int index;
Packit Service cb68d2
	uint64_t sas_addr;
Packit Service cb68d2
};
Packit Service cb68d2
Packit Service cb68d2
int ses_load_pages(int fd, struct ses_pages *sp);
Packit Service cb68d2
int ses_write_msg(enum ibpi_pattern ibpi, struct ses_pages *sp, int idx);
Packit Service cb68d2
int ses_send_diag(int fd, struct ses_pages *sp);
Packit Service cb68d2
int ses_get_slots(struct ses_pages *sp, struct ses_slot **out_slots, int *out_slots_count);
Packit Service cb68d2
Packit 7e09eb
#endif