1/*
2 *  Compex's MyLoader specific definitions
3 *
4 *  Copyright (C) 2006-2008 Gabor Juhos <juhosg@openwrt.org>
5 *
6 *  This program is free software; you can redistribute it and/or modify it
7 *  under the terms of the GNU General Public License version 2 as published
8 *  by the Free Software Foundation.
9 *
10 */
11
12#ifndef _MYLOADER_H_
13#define _MYLOADER_H_
14
15/* Myloader specific magic numbers */
16#define MYLO_MAGIC_SYS_PARAMS	0x20021107
17#define MYLO_MAGIC_PARTITIONS	0x20021103
18#define MYLO_MAGIC_BOARD_PARAMS	0x20021103
19
20/* Vendor ID's (seems to be same as the PCI vendor ID's) */
21#define VENID_COMPEX		0x11F6
22
23/* Devices based on the ADM5120 */
24#define DEVID_COMPEX_NP27G	0x0078
25#define DEVID_COMPEX_NP28G	0x044C
26#define DEVID_COMPEX_NP28GHS	0x044E
27#define DEVID_COMPEX_WP54Gv1C	0x0514
28#define DEVID_COMPEX_WP54G	0x0515
29#define DEVID_COMPEX_WP54AG	0x0546
30#define DEVID_COMPEX_WPP54AG	0x0550
31#define DEVID_COMPEX_WPP54G	0x0555
32
33/* Devices based on the Atheros AR2317 */
34#define DEVID_COMPEX_NP25G	0x05E6
35#define DEVID_COMPEX_WPE53G	0x05DC
36
37/* Devices based on the Atheros AR71xx */
38#define DEVID_COMPEX_WP543	0x0640
39#define DEVID_COMPEX_WPE72	0x0672
40
41/* Devices based on the IXP422 */
42#define DEVID_COMPEX_WP18	0x047E
43#define DEVID_COMPEX_NP18A	0x0489
44
45/* Other devices */
46#define DEVID_COMPEX_NP26G8M	0x03E8
47#define DEVID_COMPEX_NP26G16M	0x03E9
48
49struct mylo_partition {
50	uint16_t	flags;	/* partition flags */
51	uint16_t	type;	/* type of the partition */
52	uint32_t	addr;	/* relative address of the partition from the
53				   flash start */
54	uint32_t	size;	/* size of the partition in bytes */
55	uint32_t	param;	/* if this is the active partition, the
56				   MyLoader load code to this address */
57};
58
59#define PARTITION_FLAG_ACTIVE	0x8000 /* this is the active partition,
60					* MyLoader loads firmware from here */
61#define PARTITION_FLAG_ISRAM	0x2000 /* FIXME: this is a RAM partition? */
62#define PARTIIION_FLAG_RAMLOAD	0x1000 /* FIXME: load this partition into the RAM? */
63#define PARTITION_FLAG_PRELOAD	0x0800 /* the partition data preloaded to RAM
64					* before decompression */
65#define PARTITION_FLAG_LZMA	0x0100 /* partition data compressed by LZMA */
66#define PARTITION_FLAG_HAVEHDR  0x0002 /* the partition data have a header */
67
68#define PARTITION_TYPE_FREE	0
69#define PARTITION_TYPE_USED	1
70
71#define MYLO_MAX_PARTITIONS	8	/* maximum number of partitions in the
72					   partition table */
73
74struct mylo_partition_table {
75	uint32_t	magic;		/* must be MYLO_MAGIC_PARTITIONS */
76	uint32_t	res0;		/* unknown/unused */
77	uint32_t	res1;		/* unknown/unused */
78	uint32_t 	res2;		/* unknown/unused */
79	struct mylo_partition partitions[MYLO_MAX_PARTITIONS];
80};
81
82struct mylo_partition_header {
83	uint32_t	len;		/* length of the partition data */
84	uint32_t	crc;		/* CRC value of the partition data */
85};
86
87struct mylo_system_params {
88	uint32_t	magic;		/* must be MYLO_MAGIC_SYS_PARAMS */
89	uint32_t	res0;
90	uint32_t	res1;
91	uint32_t	mylo_ver;
92	uint16_t	vid;		/* Vendor ID */
93	uint16_t	did;		/* Device ID */
94	uint16_t	svid;		/* Sub Vendor ID */
95	uint16_t	sdid;		/* Sub Device ID */
96	uint32_t	rev;		/* device revision */
97	uint32_t	fwhi;
98	uint32_t	fwlo;
99	uint32_t	tftp_addr;
100	uint32_t	prog_start;
101	uint32_t	flash_size;	/* size of boot FLASH in bytes */
102	uint32_t	dram_size;	/* size of onboard RAM in bytes */
103};
104
105struct mylo_eth_addr {
106	uint8_t	mac[6];
107	uint8_t	csum[2];
108};
109
110#define MYLO_ETHADDR_COUNT	8	/* maximum number of ethernet address
111					   in the board parameters */
112
113struct mylo_board_params {
114	uint32_t	magic;	/* must be MYLO_MAGIC_BOARD_PARAMS */
115	uint32_t	res0;
116	uint32_t	res1;
117	uint32_t	res2;
118	struct mylo_eth_addr addr[MYLO_ETHADDR_COUNT];
119};
120
121#endif /* _MYLOADER_H_*/
122