// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_CONNECTIVITY_WLAN_LIB_MLME_RUST_C_BINDING_BINDINGS_H_
#define SRC_CONNECTIVITY_WLAN_LIB_MLME_RUST_C_BINDING_BINDINGS_H_

// Warning:
// This file was autogenerated by cbindgen.
// Do not modify this file manually.

#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

#include <ddk/protocol/wlan/info.h>
#include <ddk/protocol/wlan/mac.h>
#include <garnet/lib/wlan/protocol/include/wlan/protocol/mac.h>

typedef struct wlan_ap_sta_t wlan_ap_sta_t;

/**
 * A STA running in Client mode.
 * The Client STA is in its early development process and does not yet manage its internal state
 * machine or track negotiated capabilities.
 */
typedef struct wlan_client_sta_t wlan_client_sta_t;

typedef struct wlan_client_mlme_t wlan_client_mlme_t;

/**
 * Manages all SNS for a STA.
 */
typedef struct mlme_sequence_manager_t mlme_sequence_manager_t;

/**
 * A convenient C-wrapper for read-only memory that is neither owned or managed by Rust
 */
typedef struct {
  const uint8_t *data;
  uintptr_t size;
} wlan_span_t;

/**
 * An output buffer requires its owner to manage the underlying buffer's memory themselves.
 * An output buffer is used for every buffer handed from Rust to C++.
 */
typedef struct {
  /**
   * Pointer to the buffer's underlying data structure.
   */
  void *raw;
  /**
   * Pointer to the start of the buffer's data portion and the amount of bytes written.
   */
  uint8_t *data;
  uintptr_t written_bytes;
} mlme_out_buf_t;

/**
 * A `Device` allows transmitting frames and MLME messages.
 */
typedef struct {
  void *device;
  /**
   * Request to deliver an Ethernet II frame to Fuchsia's Netstack.
   */
  int32_t (*deliver_eth_frame)(void *device, const uint8_t *data, uintptr_t len);
  /**
   * Request to deliver a WLAN frame over the air.
   */
  int32_t (*send_wlan_frame)(void *device, mlme_out_buf_t buf, uint32_t flags);
  /**
   * Returns an unowned channel handle to MLME's SME peer, or ZX_HANDLE_INVALID
   * if no SME channel is available.
   */
  uint32_t (*get_sme_channel)(void *device);
  /**
   * Returns the currently set WLAN channel.
   */
  wlan_channel_t (*get_wlan_channel)(void *device);
  /**
   * Request the PHY to change its channel. If successful, get_wlan_channel will return the
   * chosen channel.
   */
  int32_t (*set_wlan_channel)(void *device, wlan_channel_t channel);
  /**
   * Set a key on the device.
   * |key| is mutable because the underlying API does not take a const wlan_key_config_t.
   */
  int32_t (*set_key)(void *device, wlan_key_config_t *key);
  /**
   * Make scan request to the driver
   */
  int32_t (*start_hw_scan)(void *device, const wlan_hw_scan_config_t *config);
  /**
   * Get information and capabilities of this WLAN interface
   */
  wlanmac_info_t (*get_wlan_info)(void *device);
  /**
   * Configure the device's BSS.
   * |cfg| is mutable because the underlying API does not take a const wlan_bss_config_t.
   */
  int32_t (*configure_bss)(void *device, wlan_bss_config_t *cfg);
  /**
   * Enable hardware offload of beaconing on the device.
   */
  int32_t (*enable_beaconing)(void *device, mlme_out_buf_t buf, uintptr_t tim_ele_offset,
                              uint16_t beacon_interval);
  /**
   * Disable beaconing on the device.
   */
  int32_t (*disable_beaconing)(void *device);
  /**
   * Reconfigure the enabled beacon on the device.
   */
  int32_t (*configure_beacon)(void *device, mlme_out_buf_t buf);
  /**
   * Sets the link status to be UP or DOWN.
   */
  int32_t (*set_link_status)(void *device, uint8_t status);
  /**
   * Configure the association context.
   * |assoc_ctx| is mutable because the underlying API does not take a const wlan_assoc_ctx_t.
   */
  int32_t (*configure_assoc)(void *device, wlan_assoc_ctx_t *assoc_ctx);
  /**
   * Clear the association context.
   */
  int32_t (*clear_assoc)(void *device, const uint8_t (*addr)[6]);
} mlme_device_ops_t;

/**
 * An input buffer will always be returned to its original owner when no longer being used.
 * An input buffer is used for every buffer handed from C++ to Rust.
 */
typedef struct {
  /**
   * Returns the buffer's ownership and free it.
   */
  void (*free_buffer)(void *raw);
  /**
   * Pointer to the buffer's underlying data structure.
   */
  void *raw;
  /**
   * Pointer to the start of the buffer's data portion and its length.
   */
  uint8_t *data;
  uintptr_t len;
} mlme_in_buf_t;

typedef struct {
  /**
   * Acquire a `InBuf` with a given minimum length from the provider.
   * The provider must release the underlying buffer's ownership and transfer it to this crate.
   * The buffer will be returned via the `free_buffer` callback when it's no longer used.
   */
  mlme_in_buf_t (*get_buffer)(uintptr_t min_len);
} mlme_buffer_provider_ops_t;

typedef struct {
  uint64_t _0;
} wlan_scheduler_event_id_t;

/**
 * A scheduler to schedule and cancel timeouts.
 */
typedef struct {
  void *cookie;
  /**
   * Returns the current system time in nano seconds.
   */
  int64_t (*now)(void *cookie);
  /**
   * Requests to schedule an event. Returns a a unique ID used to cancel the scheduled event.
   */
  wlan_scheduler_event_id_t (*schedule)(void *cookie, int64_t deadline);
  /**
   * Cancels a previously scheduled event.
   */
  void (*cancel)(void *cookie, wlan_scheduler_event_id_t id);
} wlan_scheduler_ops_t;

/**
 * ClientConfig affects time duration used for different timeouts.
 * Originally added to more easily control behavior in tests.
 */
typedef struct {
  zx_duration_t ensure_on_channel_time;
} wlan_client_mlme_config_t;

/**
 * The power management state of a station.
 *
 * Represents the possible power states from IEEE-802.11-2016, 11.2.7.
 */
typedef struct {
  bool _0;
} wlan_power_state_t;

extern "C" void ap_sta_delete(wlan_ap_sta_t *sta);

extern "C" int32_t ap_sta_handle_eth_frame(wlan_ap_sta_t *sta, wlan_span_t frame);

extern "C" int32_t ap_sta_handle_hw_indication(wlan_ap_sta_t *sta, wlan_indication_t ind);

extern "C" int32_t ap_sta_handle_mac_frame(wlan_ap_sta_t *sta, wlan_span_t frame,
                                           const wlan_rx_info_t *rx_info);

extern "C" int32_t ap_sta_handle_mlme_msg(wlan_ap_sta_t *sta, wlan_span_t bytes);

extern "C" wlan_ap_sta_t *ap_sta_new(mlme_device_ops_t device,
                                     mlme_buffer_provider_ops_t buf_provider,
                                     wlan_scheduler_ops_t scheduler, const uint8_t (*bssid)[6]);

extern "C" void ap_sta_timeout_fired(wlan_ap_sta_t *sta, wlan_scheduler_event_id_t event_id);

extern "C" void client_mlme_delete(wlan_client_mlme_t *mlme);

extern "C" int32_t client_mlme_handle_mlme_msg(wlan_client_mlme_t *mlme, wlan_span_t bytes);

extern "C" void client_mlme_hw_scan_complete(wlan_client_mlme_t *mlme, uint8_t status);

extern "C" wlan_client_mlme_t *client_mlme_new(wlan_client_mlme_config_t config,
                                               mlme_device_ops_t device,
                                               mlme_buffer_provider_ops_t buf_provider,
                                               wlan_scheduler_ops_t scheduler);

extern "C" bool client_mlme_on_channel(wlan_client_mlme_t *mlme);

extern "C" void client_mlme_on_mac_frame(wlan_client_mlme_t *mlme, wlan_span_t bytes,
                                         const wlan_rx_info_t *rx_info);

/**
 * Return true if auto-deauth triggers. Return false otherwise
 */
extern "C" void client_mlme_timeout_fired(wlan_client_mlme_t *mlme,
                                          wlan_scheduler_event_id_t event_id);

extern "C" int32_t client_mlme_handle_eth_frame(wlan_client_mlme_t *mlme, wlan_span_t frame);

extern "C" void mlme_sequence_manager_delete(mlme_sequence_manager_t *mgr);

extern "C" mlme_sequence_manager_t *mlme_sequence_manager_new(void);

extern "C" uint32_t mlme_sequence_manager_next_sns1(mlme_sequence_manager_t *mgr,
                                                    const uint8_t (*sta_addr)[6]);

extern "C" uint32_t mlme_sequence_manager_next_sns2(mlme_sequence_manager_t *mgr,
                                                    const uint8_t (*sta_addr)[6], uint16_t tid);

#endif  // SRC_CONNECTIVITY_WLAN_LIB_MLME_RUST_C_BINDING_BINDINGS_H_
