/*
 * drivers/amlogic/media/common/firmware/firmware.h
 *
 * Copyright (C) 2016 Amlogic, Inc. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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 __VIDEO_FIRMWARE_PRIV_HEAD_
#define __VIDEO_FIRMWARE_PRIV_HEAD_
#include <linux/types.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include "firmware_type.h"

struct fw_mgr_s {
	struct list_head fw_head;
	struct list_head files_head;
	spinlock_t lock;
	int cur_cpu;
};

struct fw_files_s {
	struct list_head node;
	int fw_type;
	int file_type;
	char name[32];
	char path[64];
};

struct ucode_file_info_s {
	int fw_type;
	int file_type;
	const char *name;
};

struct fw_info_s {
	struct list_head node;
	char name[32];
	char src_from[32];
	int file_type;
	unsigned int format;
	struct firmware_s *data;
};

struct fw_head_s {
	int magic;
	int checksum;
	char name[32];
	char cpu[16];
	char format[32];
	char version[32];
	char maker[32];
	char date[32];
	char commit[16];
	int data_size;
	unsigned int time;
	char change_id[16];
	int duplicate;
	char dup_from[16];
	char reserved[92];
};

struct firmware_s {
	union {
		struct fw_head_s head;
		char buf[512];
	};
	char data[0];
};

struct package_head_s {
	int magic;
	int size;
	int checksum;
	int total;
	int version;
	int submit_count;
	char change_id[16];
	char commit[16];
	char history_change_id[30];
	char reserved[62];
};

struct package_s {
	union {
		struct package_head_s head;
		char buf[256];
	};
	char data[0];
};

struct info_head_s {
	char name[32];
	char format[32];
	char cpu[32];
	int length;
};

struct package_info_s {
	union {
		struct info_head_s head;
		char buf[256];
	};
	char data[0];
};

struct fw_dev_s {
	struct cdev cdev;
	struct device *dev;
	dev_t dev_no;
};

#endif
