iBoot/drivers/apple/csi/include/endpoints/management_ep.h

102 lines
2.5 KiB
C

/*
* Copyright (C) 2011-2013 Apple Inc. All rights reserved.
*
* This document is the property of Apple Inc.
* It is considered confidential and proprietary.
*
* This document may not be reproduced or transmitted in any form,
* in whole or in part, without the express written permission of
* Apple Inc.
*/
#pragma once
#include <csi_ipc_protocol.h>
#include <csi_mgmt_protocol.h>
// FixMe - auto-pinger not implemented
// pinger
typedef enum {
PINGER_DISABLED = 0x0000,
PINGER_OK = 0x0001,
PINGER_TIMEOUT = 0x1000,
PINGER_SEQ_ERR = 0x1001,
PINGER_XMIT_ERR = 0x1002,
} pinger_status_t;
typedef struct {
uint32_t xmt_count;
uint32_t replied_to_count;
uint32_t xmt_err_count;
uint32_t rcv_err_count;
uint32_t timeout_err_count;
} ping_stats_t;
typedef struct {
uint32_t ping_period_usec;
uint32_t report_period_usec;
pinger_status_t status;
csi_ping_seqnum_t xmt_seq_number;
csi_ping_seqnum_t expected_rcv_seq_number;
csi_ping_seqnum_t rcv_seq_number;
ping_stats_t stats;
} pinger_t;
//
// Management Object
//
typedef enum {
MGMT_INITIALIZED = 0,
MGMT_QUIESCED,
MGMT_WAITING_FOR_ACK,
MGMT_VERSION_OK,
// error status
MGMT_NONEXISTENT = 0x1000,
MGMT_UNSUPPORTED_PROTOCOL_VERSION = 0x1001,
MGMT_MBOX_ERROR = 0x1002,
} mgmt_state_t;
typedef struct {
csi_coproc_t coproc;
struct task_event msg_event;
void *csi_token;
const char *name;
csi_protocol_version_t remoteVersion;
mgmt_state_t state;
// pinger
pinger_t pinger;
volatile bool ping_test_waiting;
volatile csi_ping_seqnum_t ping_test_seqnum;
volatile ipc_msg_t ping_test_ack;
// power
struct task_event *ps_event;
csi_power_state_t power_state;
} ep_mgmt_desc_t;
extern ep_mgmt_desc_t *mgmt_descs[];
//
// Endpoint API
//
void bi_ep_mgmt_create (csi_coproc_t which_coproc, struct task_event *ps_event);
csi_status_t bi_ep_mgmt_send_ps (csi_coproc_t which_coproc, csi_power_state_t ps);
csi_status_t bi_ep_mgmt_send_ping (csi_coproc_t which_coproc, int ping_count);
mgmt_state_t bi_ep_mgmt_get_state (csi_coproc_t which_coproc);
csi_power_state_t bi_ep_mgmt_get_power_state (csi_coproc_t which_coproc);
// to support panic recovery
csi_status_t handle_power_state_ack (ep_mgmt_desc_t *mgmt, ipc_msg_t msg_in);