/**
 * Copyright © 2016 Google Inc.
 * Copyright © 2016 IBM Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __GPIO_CONFIGS_H__
#define __GPIO_CONFIGS_H__

#include <stddef.h>
#include <glib.h>
#include "gpio.h"

typedef struct PowerGpio {
	/* Optional active high pin enabling writes to latched power_up pins. */
	GPIO latch_out; /* NULL name if not used. */
	/* Active high pin that is asserted following successful host power up. */
	GPIO power_good_in;
	/* Selectable polarity pins enabling host power rails. */
	size_t num_power_up_outs;
	GPIO *power_up_outs;
	/* TRUE for active high */
	gboolean *power_up_pols;
	/* Selectable polarity pins holding system complexes in reset. */
	size_t num_reset_outs;
	GPIO *reset_outs;
	/* TRUE for active high */
	gboolean *reset_pols;
	size_t num_pci_reset_outs;
	GPIO *pci_reset_outs;
	/* TRUE for active high */
	gboolean *pci_reset_pols;
	gboolean *pci_reset_holds;
} PowerGpio;

typedef struct HostctlGpio {
	GPIO fsi_data;
	GPIO fsi_clk;
	GPIO fsi_enable;
	GPIO cronus_sel;
	size_t num_optionals;
	GPIO* optionals;
	gboolean* optional_pols;
} HostctlGpio;

typedef struct GpioConfigs {
	PowerGpio power_gpio;
	HostctlGpio hostctl_gpio;
} GpioConfigs;

/* Read system configuration for GPIOs. */
gboolean read_gpios(GDBusConnection *connection, GpioConfigs *gpios);
/* Frees internal buffers. Does not free parameter. Does not close GPIOs. */
void free_gpios(GpioConfigs *gpios);

#endif
