aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/samsung_modemctl/modem_ctl_recovery.h
blob: 6d62e9f09572bf22a14d6ec4542d12ef71e82d46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef __MODEM_CTL_RECOVERY_H__
#define __MODEM_CTL_RECOVERY_H__

/* The below macros define the offsets from the base shared memory */
#define DPRAM_BOOT_MAGIC_ADDR		0x00
#define DPRAM_BOOT_TYPE_ADDR		0x04
#define DPRAM_MODEM_STATUS_ADDR		0x08
#define DPRAM_AP_STATUS_ADDR		0x0C
#define DPRAM_FIRMWARE_SIZE_ADDR	0x10
#define DPRAM_MODEM_STRING_MSG_ADDR	0x100
#define DPRAM_FIRMWARE_ADDR		0x1000

/* Max. length of the message from modem */
#define DPRAM_MODEM_MSG_SIZE		0x100

#define DPRAM_BOOT_MAGIC_RECOVERY_FOTA	0x56434552
#define DPRAM_BOOT_TYPE_DPRAM_DELTA	0x41544c44
#define DPRAM_BOOT_SEM_REQ		0x5555ffff

/* ioctl commands of updating modem binary */
#define IOCTL_MODEM_FW_UPDATE	_IO('D', 0x1)
#define IOCTL_MODEM_CHK_STAT	_IO('D', 0x2)
#define IOCTL_MODEM_PWROFF	_IO('D', 0x3)

/*
* All status values are kept through out the process.
* So the final status value for a successful job will be 0xB60x1164
* This means that magic code is	B6xxxxxx
* Job was started		xxxxx1xx
* Job is done 100%		xxxxxx64 (0x64 is 100 in hex)
* Job is completed		xxxx1xxx
* This way we can just check the final value and know the status of the job.
*/
#define STATUS_JOB_MAGIC_CODE	0xB6000000
#define STATUS_JOB_MAGIC_M	0xFF000000
#define STATUS_JOB_STARTED_M	0x00000100
#define STATUS_JOB_PROGRESS_M	0x000000FF
#define STATUS_JOB_COMPLETE_M	0x00001000
#define STATUS_JOB_DEBUG_M	0x000F0000
#define STATUS_JOB_ERROR_M	0x00F00000
#define STATUS_JOB_ENDED_M	(0x00F00000|0x00001000)


#define DPRAM_MEMORY_SIZE	0xFFF800

/* read modem delta file to the buffer of this type */
struct dpram_firmware {
	char *firmware;
	int size;
	int is_delta;
};

/* the progress status of modem updage */
struct stat_info {
	int pct;
	char msg[DPRAM_MODEM_MSG_SIZE];
};

/* Define Full modem update interface between AP and modem */
#define ONEDRAM_DL_SIGNATURE		0x4F4E
#define ONEDRAM_DL_SMD_SIGNATURE	0x605F
#define ONEDRAM_DL_COMPLETE		0x56781234
#define ONEDRAM_DL_CHECKSUM_ERR		0x4444
#define ONEDRAM_DL_ERASE_WRITE_ERR	0x77779999
#define ONEDRAM_DL_BOOT_UPDATE_ERR	0xBBBBEEEE
#define ONEDRAM_DL_REWRITE_FAIL_ERR	0xDDDDFFFF
#define ONEDRAM_DL_DONE_AND_RESET	0xDDDDAAAA
#define ONEDRAM_DL_LENGTH_CH_FAIL	0x55FF

#define ONEDRAM_DL_HEADER_OFFSET	0x0
#define ONEDRAM_DL_DATA_OFFSET		0x400

/* typedefs */
struct onedram_head_t {
	u16 signature;
	u8  is_boot_update;
	u8  is_nv_update;
	u32 length;
	u32 checksum;
} __packed;


#endif	/* __MODEM_CTL_RECOVERY_H__ */