/******************************************************************************
 *
 *  Copyright (C) 2009-2012 Broadcom 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.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  This contains constants definitions and other information from the MCAP
 *  specification.
 *
 ******************************************************************************/
#ifndef MCA_DEFS_H
#define MCA_DEFS_H

/*****************************************************************************
 * constants
 ****************************************************************************/
#define MCA_MIN_MTU 48

/* standard op codes */
/* invalid opcode response */
#define MCA_OP_ERROR_RSP 0x00
/* create an MDL, wait for an associated data channel connection */
#define MCA_OP_MDL_CREATE_REQ 0x01
/* response to above request */
#define MCA_OP_MDL_CREATE_RSP 0x02
/* req to prepare to rvc a data channel conn associated with a prev MDL */
#define MCA_OP_MDL_RECONNECT_REQ 0x03
/* response to above request */
#define MCA_OP_MDL_RECONNECT_RSP 0x04
/* stop waiting for a data channel connection */
#define MCA_OP_MDL_ABORT_REQ 0x05
/* response to above request */
#define MCA_OP_MDL_ABORT_RSP 0x06
/* delete an MDL */
#define MCA_OP_MDL_DELETE_REQ 0x07
/* response to above request */
#define MCA_OP_MDL_DELETE_RSP 0x08
#define MCA_NUM_STANDARD_OPCODE (1 + MCA_OP_MDL_DELETE_RSP)

/* clock synchronization op codes */
/* request sync capabilities & requirements */
#define MCA_OP_SYNC_CAP_REQ 0x11
/* indicate completion */
#define MCA_OP_SYNC_CAP_RSP 0x12
/* request to set the time-stamp clock */
#define MCA_OP_SYNC_SET_REQ 0x13
/* indicate completion */
#define MCA_OP_SYNC_SET_RSP 0x14
/* update of the actual time-stamp clock instant from the sync slave */
#define MCA_OP_SYNC_INFO_IND 0x15

#define MCA_FIRST_SYNC_OP MCA_OP_SYNC_CAP_REQ
#define MCA_LAST_SYNC_OP MCA_OP_SYNC_INFO_IND

/* response code */
/* The corresponding request was received and processed successfully. */
#define MCA_RSP_SUCCESS 0x00
/* The Op Code received is not valid (i.e. neither a Standard Op Code nor a
 * Clock Synchronization Protocol Op Code). */
#define MCA_RSP_BAD_OPCODE 0x01
/* One or more of the values in the received request is invalid. */
#define MCA_RSP_BAD_PARAM 0x02
/* MCA_RSP_BAD_PARAM shall be used when:
- The request length is invalid
- Some of the parameters have invalid values and none of the other defined
Response Codes are more appropriate.
*/
/* The MDEP ID referenced does not exist on this device. */
#define MCA_RSP_BAD_MDEP 0x03
/* The requested MDEP currently has as many active MDLs as it can manage
 * simultaneously. */
#define MCA_RSP_MDEP_BUSY 0x04
/* The MDL ID referenced is invalid. */
#define MCA_RSP_BAD_MDL 0x05
/* MCA_RSP_BAD_MDL shall be used when:
- A reserved or invalid value for MDL ID was used.
- The MDL ID referenced is not available (was never created, has been deleted,
or was otherwise lost),
- The MDL ID referenced in the Abort request is not the same value that was used
to initiate the PENDING state
*/
/* The device is temporarily unable to complete the request. This is intended
 * for reasons not related to the physical sensor (e.g. communication resources
 * unavailable). */
#define MCA_RSP_MDL_BUSY 0x06
/* The received request is invalid in the current state. */
#define MCA_RSP_BAD_OP 0x07
/* MCA_RSP_BAD_OP is used when
- Abort request was received while not in the PENDING state.
- Create, Reconnect, or Delete request was received while in the PENDING state.
- A response is received when a request is expected
*/
/* The device is temporarily unable to complete the request. This is intended
 * for reasons relating to the physical sensor (e.g. hardware fault, low
 * battery), or when processing resources are temporarily committed to other
 * processes. */
#define MCA_RSP_NO_RESOURCE 0x08
/* An internal error other than those listed in this table was encountered while
 * processing the request. */
#define MCA_RSP_ERROR 0x09
/* The Op Code that was used in this request is not supported. */
#define MCA_RSP_NO_SUPPORT 0x0A
/* A configuration required by a MD_CREATE_MDL or MD_RECONNECT_MDL operation has
 * been rejected. */
#define MCA_RSP_CFG_REJ 0x0B

/* the valid range for MDEP ID is 1-0x7F */
#define MCA_MAX_MDEP_ID 0x7F
#define MCA_IS_VALID_MDL_ID(xxx) (((xxx) > 0) && ((xxx) <= 0xFEFF))
#define MCA_ALL_MDL_ID 0xFFFF

#endif /* MCA_DEFS_H */
