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 * $FreeBSD$
17 */
18
19#ifndef R92E_ROM_IMAGE_H
20#define R92E_ROM_IMAGE_H
21
22#include <dev/rtwn/rtl8192e/r92e_rom_defs.h>
23
24#define	R92E_DEF_TX_PWR_2G		0x2d
25#define	R92E_DEF_TX_PWR_HT20_DIFF	0x02
26#define	R92E_DEF_TX_PWR_DIFF		0xfe
27
28struct r92e_tx_pwr_2g {
29	uint8_t		cck[R92E_GROUP_2G];
30	uint8_t		ht40[R92E_GROUP_2G - 1];
31} __packed;
32
33struct r92e_tx_pwr_diff_2g {
34	uint8_t		ht20_ofdm;
35	struct {
36		uint8_t	ht40_ht20;
37		uint8_t	ofdm_cck;
38	} __packed	diff123[R92E_MAX_TX_COUNT - 1];
39} __packed;
40
41struct r92e_tx_pwr {
42	struct r92e_tx_pwr_2g		pwr_2g;
43	struct r92e_tx_pwr_diff_2g	pwr_diff_2g;
44	uint8_t				reserved[24];
45} __packed;
46
47/*
48 * RTL8192EU ROM image.
49 */
50struct r92e_rom {
51	uint8_t			reserved1[16];
52	struct r92e_tx_pwr	tx_pwr[R92E_MAX_RF_PATH];
53	uint8_t			channel_plan;
54	uint8_t			crystalcap;
55#define R92E_ROM_CRYSTALCAP_DEF		0x20
56
57	uint8_t			thermal_meter;
58	uint8_t			iqk_lck;
59	uint8_t			pa_type;
60	uint8_t			lna_type_2g;
61	uint8_t			reserved2;
62	uint8_t			lna_type_5g;
63	uint8_t			reserved3;
64	uint8_t			rf_board_opt;
65	uint8_t			rf_feature_opt;
66	uint8_t			rf_bt_opt;
67	uint8_t			version;
68	uint8_t			customer_id;
69	uint8_t			tx_bbswing_2g;
70	uint8_t			tx_bbswing_5g;
71	uint8_t			tx_pwr_calib_rate;
72	uint8_t			rf_ant_opt;
73	uint8_t			rfe_option;
74	uint8_t			reserved4[5];
75	uint16_t		vid;
76	uint16_t		pid;
77	uint8_t			reserved5[3];
78	uint8_t			macaddr[IEEE80211_ADDR_LEN];
79	uint8_t			reserved6[2];
80	uint8_t			string[7];	/* "Realtek" */
81	uint8_t			reserved7[282];
82} __packed;
83
84_Static_assert(sizeof(struct r92e_rom) == R92E_EFUSE_MAP_LEN,
85    "R92E_EFUSE_MAP_LEN must be equal to sizeof(struct r92e_rom)!");
86
87#endif	/* R92E_ROM_IMAGE_H */
88