/*
 * FaceAuth Firmware
 *
 * Copyright (C) 2019 Google, Inc.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#ifndef __FACEAUTH_SHARED_H__
#define __FACEAUTH_SHARED_H__

/* Feature Flags - bug: 123535349 */
#define DISABLE_GAZE                            (1ULL << 0) //bit 0
#define SECURE_CAMERA_DATA                      (1ULL << 2) //bit 2
/* Keep temporary feature bits in the top part of the field */

#define MAX_CACHE_ENROLLMENT 1536

/* TODO (masterwilliams) change max enrollments to 21
 * once it is changed in citadel */
#define MAX_ENROLLMENT 20
#define MAX_NUM_USERS 4

/*  The error codes are broken up into functional groups with space reserve for
 *  future error codes. The divisions are as follows:
 *  0     - success
 *  1     - general error (debug only, never used)
 *  2-31  - TPU device driver errors (inherrited from the TPU driver)
 *  32-47 - Errors returned from the citadel chip
 *  48-63 - Errors returned form the M0 citadel code
 *  64-83   - TPU/IPU model errors and M0 processing errors
 *  84-90   - M0 errors
 */
#define ERROR_NO_ERROR 0
#define ERROR_GENERAL_ERROR -1

#define ERROR_INTERNAL_CITADEL_INVALID_ARGS -32
#define ERROR_INTERNAL_CITADEL_TIMEOUT -33
#define ERROR_INTERNAL_CITADEL_SFS_FULL -34
#define ERROR_INTERNAL_CITADEL_SFS_INTERNAL -35
#define ERROR_INTERNAL_CITADEL_ERR_THROTTLE -36
#define ERROR_INTERNAL_CITADEL_SESSION_ID -37
#define ERROR_INTERNAL_CITADEL_CRC -38
#define ERROR_INTERNAL_CITADEL_NONSECURE_MODE -39
#define ERROR_INTERNAL_CITADEL_INVALID_TOKEN -40
#define ERROR_INTERNAL_CITADEL_RECALIBRATE -41
#define ERROR_INTERNAL_CITADEL_VERSION -42
#define ERROR_INTERNAL_CITADEL_ERR_UNKNOWN -43
#define ERROR_INTERNAL_CITADEL_INVALID_CHALLENGE -44
#define ERROR_INTERNAL_CITADEL_INVALID_USER_ID -45
#define ERROR_INTERNAL_CITADEL_EMBEDDING_VERSION -46
#define ERROR_INTERNAL_CITADEL_EMBEDDING_DOWNGRADE -47

/* errors generated by the M0 citadel code */
#define ERROR_CITADEL_INVALID_ARGS -48
#define ERROR_CITADEL_TIMEOUT -49
#define ERROR_CITADEL_CACHE_FULL -50
#define ERROR_CITADEL_CACHE_INVALID_INDEX -51
#define ERROR_CITADEL_INVALID_PROFILE -52
#define ERROR_CITADEL_EARLY_FAIL -53
#define ERROR_CITADEL_SESSION_ID -54
#define ERROR_CITADEL_CRC -55
#define ERROR_CITADEL_UNSUPPORTED -56
#define ERROR_INTERNAL_CITADEL_CHALLENGE_EXPIRED -57
#define ERROR_INTERNAL_CITADEL_WIPED_USER -58
#define ERROR_INTERNAL_CITADEL_INVALID_FACENET -59
#define ERROR_INTERNAL_CITADEL_INVALID_DEPTHID -60

#define ERROR_DEPTH_IPU_TIMEOUT -64
#define ERROR_SKIN_INVALID_LAYER_SIZE -65
#define ERROR_FSSD_BUFFER_SIZE_MISMATCH -66
#define ERROR_SKIN_INVALID_PATCH_SIZE -67
#define ERROR_SKIN_INVALID_FACE_SIZE -68
#define ERROR_DOWNSCALE_IPU_TIMEOUT -69
#define ERROR_AFFINE_COMBINED_IPU_TIMEOUT -70
#define ERROR_FACENET_BUFFER_SIZE_MISMATCH -71
#define ERROR_DEPTHID_BUFFER_SIZE_MISMATCH -72
#define ERROR_GAZENET_BUFFER_SIZE_MISMATCH -73
#define ERROR_SKIN_BUFFER_SIZE_MISMATCH -74
#define ERROR_MAX_THRESHOLD_FACES -75
/* TODO (masterwilliams) b/126613551 */
#define ERROR_INSUFFICIENT_ALLOCATOR_MEMORY -76
#define ERROR_IPU_TIMEOUT -77
#define ERROR_REJECT_USERS_FULL -78
#define ERROR_REJECT_PROFILES_FULL -79
#define ERROR_REJECT_MAX_PROFILES_PER_USER -80
#define ERROR_UNSUPPORTED_COMMAND -81

#define ERROR_FW_DRIVER_SYNC_ERROR -84
#define ERROR_UNEXPECTED_COMMAND -85

// TODO: disable migrate until fully supported
#define CMD_IS_VALID(cmd) ((cmd) < COMMAND_COUNT && (cmd) != COMMAND_MIGRATE)

/* Any change to the WorkloadStatus should also be accompanied by a change to
 * WORKLOAD_STATUS_STRINGS in defines.h.
 */
typedef enum _workload_status {
	WORKLOAD_STATUS_NO_STATUS = 0,
	WORKLOAD_STATUS_PASS,

	/* Soft errors */
	/* Reject (post)FSSD code when no face is found */
	WORKLOAD_STATUS_REJECT_NO_FACE,
	/* Reject (post)FDDS code when number of faces is more than capacity */
	WORKLOAD_STATUS_REJECT_MAX_FACE_CAPACITY,
	/* Reject Gazenet for no camera attention, optionally can be ignored */
	WORKLOAD_STATUS_REJECT_NO_ATTENTION,
	/* Reject Face Check when the face bounding box is too small */
	WORKLOAD_STATUS_REJECT_TOO_SMALL,
	/* Reject Face Check when the face is clipped on the left side */
	WORKLOAD_STATUS_REJECT_CLIPPED_LEFT,
	/* Reject Face Check when the face is clipped on the right side */
	WORKLOAD_STATUS_REJECT_CLIPPED_RIGHT,
	/* Reject Face Check when the face is clipped on the top */
	WORKLOAD_STATUS_REJECT_CLIPPED_TOP,
	/* Reject Face Check when the face is clipped on the bottom */
	WORKLOAD_STATUS_REJECT_CLIPPED_BOTTOM,
	/* Reject Face Check when the flood image is too dark */
	WORKLOAD_STATUS_REJECT_TOO_DARK,
	/* Reject Face Check when the flood image is too bright */
	WORKLOAD_STATUS_REJECT_TOO_BRIGHT,
	/* Reject Face Check when the face tilt angle is too extreme */
	WORKLOAD_STATUS_REJECT_TILT_ANGLE,
	/* Reject Face Check when the face pan angle is too extreme */
	WORKLOAD_STATUS_REJECT_PAN_ANGLE,
	/* Reject depth when the face is too close */
	WORKLOAD_STATUS_REJECT_TOO_CLOSE,
	/* Reject depth when the face is too far */
	WORKLOAD_STATUS_REJECT_TOO_FAR,
	/* Reject enrollment due to max users enrolled */
	WORKLOAD_STATUS_REJECT_USERS_FULL,
	/* Reject enrollment/migration due to no additional free profiles */
	WORKLOAD_STATUS_REJECT_PROFILES_FULL,
	/* Reject an invalid depth thumbnail (bad calibration or a smudge) */
	WORKLOAD_STATUS_REJECT_INVALID_DEPTH,

	/* hard errors - these should be squashed into a single status in
	 * GetCumulativeStatus() */
	/* Reject Skin */
	WORKLOAD_STATUS_REJECT_SKIN,
	/* Reject depth id spoof */
	WORKLOAD_STATUS_REJECT_SPOOF,
	WORKLOAD_STATUS_HARD_REJECT,

	/* fatal error */
	WORKLOAD_STATUS_ERROR,

	WORKLOAD_STATUS_COUNT,
	WORKLOAD_STATUS_INTMAX =
		0xffffffff /* used to extend enum size to 4 bytes */
} WorkloadStatus;

/* The set of commands accepted by faceauth FW
 * Needs to be kept in sync with WORKLOAD_STATE_STRINGS in define.h
 */
typedef enum _faceauth_input_commands {
	COMMAND_NONE = 0,
	COMMAND_ENROLL,
	COMMAND_ENROLL_COMPLETE,
	COMMAND_ERASE,
	COMMAND_VALIDATE,
	COMMAND_EXIT,
	COMMAND_GET_CHALLENGE,
	COMMAND_REVOKE_CHALLENGE,
	COMMAND_GET_USER_INFO,
	COMMAND_SET_FEATURE,
	COMMAND_CLR_FEATURE,
	COMMAND_RESET_LOCKOUT,
	COMMAND_MIGRATE,
	// EL2 should filter this command so it can't be sent from userspace
	COMMAND_EXIT_DIRTY,
	COMMAND_VERIFY_HAT,

	COMMAND_COUNT,
	/* used to extend enum size to 4 bytes */
	COMMAND_INTMAX =
		0xffffffff /* used to extend enum size to 4 bytes */
} FaceAuthInputCommands;

typedef enum _faceauth_ack_messages {
	STATUS_NONE = 0,
	STATUS_READY,
	STATUS_BUSY,
	STATUS_CLEAN,
	STATUS_INTMAX =
		0xffffffff /* used to extend enum size to 4 bytes */
} FaceAckMessages;

/* Definitions needed to interpret debug data */

struct Coordinate {
	int32_t x;
	int32_t y;
} __attribute__((packed));

struct BoundingBox {
	/* These coordinates are in integer format */
	struct Coordinate top_left;
	struct Coordinate bottom_right;
} __attribute__((packed));

struct BoundingBoxes {
	struct BoundingBox right_box;
	struct BoundingBox left_box;
} __attribute__((packed));

enum FaceLandmarks {
	LEFT_EYE = 0,
	RIGHT_EYE,
	NOSE_TIP,
	MOUTH_CENTER,
	LEFT_EAR_TRAGION,
	RIGHT_EAR_TRAGION,
	NUM_FACE_LANDMARKS,
	FACE_LANDMARK_INTMAX =
		0xffffffff /* used to extend enum size to 4 bytes */
};

struct Face {
	/* In whole pixels */
	int32_t x1;
	int32_t y1;
	int32_t x2;
	int32_t y2;
	/* Fixed point 16.16 */
	struct Coordinate landmark[NUM_FACE_LANDMARKS];
	uint32_t confidence;
	int32_t pan_angle;
	int32_t tilt_angle;
	int32_t roll_angle;
} __attribute__((packed));

struct SerialVerificationToken {
	uint64_t challenge;
	uint64_t timestamp;
	uint32_t security_level;
	uint8_t mac[32];
} __attribute__((packed));

#endif /* __FACEAUTH_SHARED_H__ */
