1/*-
2 * Copyright (c) 2017 Kevin Lo <kevlo@FreeBSD.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#ifndef R92E_ROM_IMAGE_H
18#define R92E_ROM_IMAGE_H
19
20#include <dev/rtwn/rtl8192e/r92e_rom_defs.h>
21
22#define	R92E_DEF_TX_PWR_2G		0x2d
23#define	R92E_DEF_TX_PWR_HT20_DIFF	0x02
24#define	R92E_DEF_TX_PWR_DIFF		0xfe
25
26struct r92e_tx_pwr_2g {
27	uint8_t		cck[R92E_GROUP_2G];
28	uint8_t		ht40[R92E_GROUP_2G - 1];
29} __packed;
30
31struct r92e_tx_pwr_diff_2g {
32	uint8_t		ht20_ofdm;
33	struct {
34		uint8_t	ht40_ht20;
35		uint8_t	ofdm_cck;
36	} __packed	diff123[R92E_MAX_TX_COUNT - 1];
37} __packed;
38
39struct r92e_tx_pwr {
40	struct r92e_tx_pwr_2g		pwr_2g;
41	struct r92e_tx_pwr_diff_2g	pwr_diff_2g;
42	uint8_t				reserved[24];
43} __packed;
44
45/*
46 * RTL8192EU ROM image.
47 */
48struct r92e_rom {
49	uint8_t			reserved1[16];
50	struct r92e_tx_pwr	tx_pwr[R92E_MAX_RF_PATH];
51	uint8_t			channel_plan;
52	uint8_t			crystalcap;
53#define R92E_ROM_CRYSTALCAP_DEF		0x20
54
55	uint8_t			thermal_meter;
56	uint8_t			iqk_lck;
57	uint8_t			pa_type;
58	uint8_t			lna_type_2g;
59	uint8_t			reserved2;
60	uint8_t			lna_type_5g;
61	uint8_t			reserved3;
62	uint8_t			rf_board_opt;
63	uint8_t			rf_feature_opt;
64	uint8_t			rf_bt_opt;
65	uint8_t			version;
66	uint8_t			customer_id;
67	uint8_t			tx_bbswing_2g;
68	uint8_t			tx_bbswing_5g;
69	uint8_t			tx_pwr_calib_rate;
70	uint8_t			rf_ant_opt;
71	uint8_t			rfe_option;
72	uint8_t			reserved4[5];
73	uint16_t		vid;
74	uint16_t		pid;
75	uint8_t			reserved5[3];
76	uint8_t			macaddr[IEEE80211_ADDR_LEN];
77	uint8_t			reserved6[2];
78	uint8_t			string[7];	/* "Realtek" */
79	uint8_t			reserved7[282];
80} __packed;
81
82_Static_assert(sizeof(struct r92e_rom) == R92E_EFUSE_MAP_LEN,
83    "R92E_EFUSE_MAP_LEN must be equal to sizeof(struct r92e_rom)!");
84
85#endif	/* R92E_ROM_IMAGE_H */
86