mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	Backport support for RTL8812AU/RTL8821AU USB adapters Manually backported patch: 045-v6.13-wifi-rtw88-Enable-the-new-RTL8821AU-RTL8812AU-driver Patches from 046 to 051 are pending. Signed-off-by: Marty Jones <mj8263788@gmail.com> Link: https://github.com/openwrt/openwrt/pull/17079 [Move BPAUTO_WANT_DEV_COREDUMP to original patch] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			375 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			375 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 140403599b74839b0a57c5397b7e8579e5332364 Mon Sep 17 00:00:00 2001
 | |
| From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
 | |
| Date: Wed, 18 Sep 2024 01:53:55 +0300
 | |
| Subject: [PATCH] wifi: rtw88: Constify some arrays and structs
 | |
| 
 | |
| These are never modified, so make them const:
 | |
| 
 | |
| card_enable_flow_8703b
 | |
| card_disable_flow_8703b
 | |
| rtw8703b_ops
 | |
| 
 | |
| rtw8723d_ops
 | |
| card_enable_flow_8723d
 | |
| card_disable_flow_8723d
 | |
| 
 | |
| trans_carddis_to_cardemu_8821c
 | |
| trans_cardemu_to_act_8821c
 | |
| trans_act_to_cardemu_8821c
 | |
| trans_cardemu_to_carddis_8821c
 | |
| card_enable_flow_8821c
 | |
| card_disable_flow_8821c
 | |
| rtw8821c_dig
 | |
| page_table_8821c
 | |
| rqpn_table_8821c
 | |
| prioq_addrs_8821c
 | |
| rtw8821c_ops
 | |
| 
 | |
| card_enable_flow_8822b
 | |
| card_disable_flow_8822b
 | |
| prioq_addrs_8822b
 | |
| rtw8822b_ops
 | |
| rtw8822b_edcca_th
 | |
| 
 | |
| card_enable_flow_8822c
 | |
| card_disable_flow_8822c
 | |
| prioq_addrs_8822c
 | |
| rtw8822c_ops
 | |
| rtw8822c_edcca_th
 | |
| 
 | |
| Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
 | |
| Acked-by: Ping-Ke Shih <pkshih@realtek.com>
 | |
| Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
 | |
| Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
 | |
| ---
 | |
|  drivers/net/wireless/realtek/rtw88/fw.c       |  2 +-
 | |
|  drivers/net/wireless/realtek/rtw88/mac.c      |  4 ++--
 | |
|  drivers/net/wireless/realtek/rtw88/main.h     |  8 +++----
 | |
|  drivers/net/wireless/realtek/rtw88/phy.c      |  2 +-
 | |
|  drivers/net/wireless/realtek/rtw88/rtw8703b.c |  6 ++---
 | |
|  drivers/net/wireless/realtek/rtw88/rtw8723d.c |  6 ++---
 | |
|  drivers/net/wireless/realtek/rtw88/rtw8821c.c | 22 +++++++++----------
 | |
|  drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 ++++-----
 | |
|  drivers/net/wireless/realtek/rtw88/rtw8822c.c | 10 ++++-----
 | |
|  9 files changed, 35 insertions(+), 35 deletions(-)
 | |
| 
 | |
| --- a/drivers/net/wireless/realtek/rtw88/fw.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/fw.c
 | |
| @@ -267,7 +267,7 @@ static void rtw_fw_scan_result(struct rt
 | |
|  static void rtw_fw_adaptivity_result(struct rtw_dev *rtwdev, u8 *payload,
 | |
|  				     u8 length)
 | |
|  {
 | |
| -	struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
 | |
| +	const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
 | |
|  	struct rtw_c2h_adaptivity *result = (struct rtw_c2h_adaptivity *)payload;
 | |
|  
 | |
|  	rtw_dbg(rtwdev, RTW_DBG_ADAPTIVITY,
 | |
| --- a/drivers/net/wireless/realtek/rtw88/mac.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/mac.c
 | |
| @@ -228,7 +228,7 @@ static int rtw_sub_pwr_seq_parser(struct
 | |
|  }
 | |
|  
 | |
|  static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
 | |
| -			      const struct rtw_pwr_seq_cmd **cmd_seq)
 | |
| +			      const struct rtw_pwr_seq_cmd * const *cmd_seq)
 | |
|  {
 | |
|  	u8 cut_mask;
 | |
|  	u8 intf_mask;
 | |
| @@ -271,7 +271,7 @@ static int rtw_pwr_seq_parser(struct rtw
 | |
|  static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
 | |
|  {
 | |
|  	const struct rtw_chip_info *chip = rtwdev->chip;
 | |
| -	const struct rtw_pwr_seq_cmd **pwr_seq;
 | |
| +	const struct rtw_pwr_seq_cmd * const *pwr_seq;
 | |
|  	u32 imr = 0;
 | |
|  	u8 rpwm;
 | |
|  	bool cur_pwr;
 | |
| --- a/drivers/net/wireless/realtek/rtw88/main.h
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/main.h
 | |
| @@ -1167,7 +1167,7 @@ enum rtw_fwcd_item {
 | |
|  
 | |
|  /* hardware configuration for each IC */
 | |
|  struct rtw_chip_info {
 | |
| -	struct rtw_chip_ops *ops;
 | |
| +	const struct rtw_chip_ops *ops;
 | |
|  	u8 id;
 | |
|  
 | |
|  	const char *fw_name;
 | |
| @@ -1209,8 +1209,8 @@ struct rtw_chip_info {
 | |
|  
 | |
|  	/* init values */
 | |
|  	u8 sys_func_en;
 | |
| -	const struct rtw_pwr_seq_cmd **pwr_on_seq;
 | |
| -	const struct rtw_pwr_seq_cmd **pwr_off_seq;
 | |
| +	const struct rtw_pwr_seq_cmd * const *pwr_on_seq;
 | |
| +	const struct rtw_pwr_seq_cmd * const *pwr_off_seq;
 | |
|  	const struct rtw_rqpn *rqpn_table;
 | |
|  	const struct rtw_prioq_addrs *prioq_addrs;
 | |
|  	const struct rtw_page_table *page_table;
 | |
| @@ -1242,7 +1242,7 @@ struct rtw_chip_info {
 | |
|  	u8 bfer_su_max_num;
 | |
|  	u8 bfer_mu_max_num;
 | |
|  
 | |
| -	struct rtw_hw_reg_offset *edcca_th;
 | |
| +	const struct rtw_hw_reg_offset *edcca_th;
 | |
|  	s8 l2h_th_ini_cs;
 | |
|  	s8 l2h_th_ini_ad;
 | |
|  
 | |
| --- a/drivers/net/wireless/realtek/rtw88/phy.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/phy.c
 | |
| @@ -123,7 +123,7 @@ static void rtw_phy_cck_pd_init(struct r
 | |
|  
 | |
|  void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l)
 | |
|  {
 | |
| -	struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
 | |
| +	const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
 | |
|  
 | |
|  	rtw_write32_mask(rtwdev,
 | |
|  			 edcca_th[EDCCA_TH_L2H_IDX].hw_reg.addr,
 | |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
 | |
| @@ -481,14 +481,14 @@ static const struct rtw_pwr_seq_cmd tran
 | |
|  	{TRANS_SEQ_END},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_enable_flow_8703b[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_enable_flow_8703b[] = {
 | |
|  	trans_pre_enable_8703b,
 | |
|  	trans_carddis_to_cardemu_8703b,
 | |
|  	trans_cardemu_to_act_8703b,
 | |
|  	NULL
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_disable_flow_8703b[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_disable_flow_8703b[] = {
 | |
|  	trans_act_to_lps_8703b,
 | |
|  	trans_act_to_reset_mcu_8703b,
 | |
|  	trans_act_to_cardemu_8703b,
 | |
| @@ -1941,7 +1941,7 @@ static const struct coex_tdma_para tdma_
 | |
|  	{ {0x61, 0x08, 0x03, 0x11, 0x11} },
 | |
|  };
 | |
|  
 | |
| -static struct rtw_chip_ops rtw8703b_ops = {
 | |
| +static const struct rtw_chip_ops rtw8703b_ops = {
 | |
|  	.mac_init		= rtw8723x_mac_init,
 | |
|  	.dump_fw_crash		= NULL,
 | |
|  	.shutdown		= NULL,
 | |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
 | |
| @@ -1430,7 +1430,7 @@ static void rtw8723d_pwr_track(struct rt
 | |
|  	dm_info->pwr_trk_triggered = false;
 | |
|  }
 | |
|  
 | |
| -static struct rtw_chip_ops rtw8723d_ops = {
 | |
| +static const struct rtw_chip_ops rtw8723d_ops = {
 | |
|  	.phy_set_param		= rtw8723d_phy_set_param,
 | |
|  	.read_efuse		= rtw8723x_read_efuse,
 | |
|  	.query_rx_desc		= rtw8723d_query_rx_desc,
 | |
| @@ -1788,7 +1788,7 @@ static const struct rtw_pwr_seq_cmd tran
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_enable_flow_8723d[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_enable_flow_8723d[] = {
 | |
|  	trans_carddis_to_cardemu_8723d,
 | |
|  	trans_cardemu_to_act_8723d,
 | |
|  	NULL
 | |
| @@ -2004,7 +2004,7 @@ static const struct rtw_pwr_seq_cmd tran
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_disable_flow_8723d[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_disable_flow_8723d[] = {
 | |
|  	trans_act_to_lps_8723d,
 | |
|  	trans_act_to_pre_carddis_8723d,
 | |
|  	trans_act_to_cardemu_8723d,
 | |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
 | |
| @@ -1254,7 +1254,7 @@ static void rtw8821c_fill_txdesc_checksu
 | |
|  	fill_txdesc_checksum_common(txdesc, 16);
 | |
|  }
 | |
|  
 | |
| -static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
 | |
|  	{0x0086,
 | |
|  	 RTW_PWR_CUT_ALL_MSK,
 | |
|  	 RTW_PWR_INTF_SDIO_MSK,
 | |
| @@ -1292,7 +1292,7 @@ static struct rtw_pwr_seq_cmd trans_card
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
 | |
|  	{0x0020,
 | |
|  	 RTW_PWR_CUT_ALL_MSK,
 | |
|  	 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
 | |
| @@ -1396,7 +1396,7 @@ static struct rtw_pwr_seq_cmd trans_card
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
 | |
|  	{0x0093,
 | |
|  	 RTW_PWR_CUT_ALL_MSK,
 | |
|  	 RTW_PWR_INTF_ALL_MSK,
 | |
| @@ -1454,7 +1454,7 @@ static struct rtw_pwr_seq_cmd trans_act_
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
 | |
|  	{0x0007,
 | |
|  	 RTW_PWR_CUT_ALL_MSK,
 | |
|  	 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
 | |
| @@ -1567,13 +1567,13 @@ static struct rtw_pwr_seq_cmd trans_card
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_enable_flow_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_enable_flow_8821c[] = {
 | |
|  	trans_carddis_to_cardemu_8821c,
 | |
|  	trans_cardemu_to_act_8821c,
 | |
|  	NULL
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_disable_flow_8821c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_disable_flow_8821c[] = {
 | |
|  	trans_act_to_cardemu_8821c,
 | |
|  	trans_cardemu_to_carddis_8821c,
 | |
|  	NULL
 | |
| @@ -1629,7 +1629,7 @@ static const struct rtw_rfe_def rtw8821c
 | |
|  	[6] = RTW_DEF_RFE(8821c, 0, 0),
 | |
|  };
 | |
|  
 | |
| -static struct rtw_hw_reg rtw8821c_dig[] = {
 | |
| +static const struct rtw_hw_reg rtw8821c_dig[] = {
 | |
|  	[0] = { .addr = 0xc50, .mask = 0x7f },
 | |
|  };
 | |
|  
 | |
| @@ -1639,7 +1639,7 @@ static const struct rtw_ltecoex_addr rtw
 | |
|  	.rdata = LTECOEX_READ_DATA,
 | |
|  };
 | |
|  
 | |
| -static struct rtw_page_table page_table_8821c[] = {
 | |
| +static const struct rtw_page_table page_table_8821c[] = {
 | |
|  	/* not sure what [0] stands for */
 | |
|  	{16, 16, 16, 14, 1},
 | |
|  	{16, 16, 16, 14, 1},
 | |
| @@ -1648,7 +1648,7 @@ static struct rtw_page_table page_table_
 | |
|  	{16, 16, 16, 14, 1},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_rqpn rqpn_table_8821c[] = {
 | |
| +static const struct rtw_rqpn rqpn_table_8821c[] = {
 | |
|  	/* not sure what [0] stands for */
 | |
|  	{RTW_DMA_MAPPING_NORMAL, RTW_DMA_MAPPING_NORMAL,
 | |
|  	 RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW,
 | |
| @@ -1667,7 +1667,7 @@ static struct rtw_rqpn rqpn_table_8821c[
 | |
|  	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_prioq_addrs prioq_addrs_8821c = {
 | |
| +static const struct rtw_prioq_addrs prioq_addrs_8821c = {
 | |
|  	.prio[RTW_DMA_MAPPING_EXTRA] = {
 | |
|  		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
 | |
|  	},
 | |
| @@ -1683,7 +1683,7 @@ static struct rtw_prioq_addrs prioq_addr
 | |
|  	.wsize = true,
 | |
|  };
 | |
|  
 | |
| -static struct rtw_chip_ops rtw8821c_ops = {
 | |
| +static const struct rtw_chip_ops rtw8821c_ops = {
 | |
|  	.phy_set_param		= rtw8821c_phy_set_param,
 | |
|  	.read_efuse		= rtw8821c_read_efuse,
 | |
|  	.query_rx_desc		= rtw8821c_query_rx_desc,
 | |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 | |
| @@ -1978,13 +1978,13 @@ static const struct rtw_pwr_seq_cmd tran
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_enable_flow_8822b[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822b[] = {
 | |
|  	trans_carddis_to_cardemu_8822b,
 | |
|  	trans_cardemu_to_act_8822b,
 | |
|  	NULL
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_disable_flow_8822b[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822b[] = {
 | |
|  	trans_act_to_cardemu_8822b,
 | |
|  	trans_cardemu_to_carddis_8822b,
 | |
|  	NULL
 | |
| @@ -2156,7 +2156,7 @@ static const struct rtw_rqpn rqpn_table_
 | |
|  	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_prioq_addrs prioq_addrs_8822b = {
 | |
| +static const struct rtw_prioq_addrs prioq_addrs_8822b = {
 | |
|  	.prio[RTW_DMA_MAPPING_EXTRA] = {
 | |
|  		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
 | |
|  	},
 | |
| @@ -2172,7 +2172,7 @@ static struct rtw_prioq_addrs prioq_addr
 | |
|  	.wsize = true,
 | |
|  };
 | |
|  
 | |
| -static struct rtw_chip_ops rtw8822b_ops = {
 | |
| +static const struct rtw_chip_ops rtw8822b_ops = {
 | |
|  	.phy_set_param		= rtw8822b_phy_set_param,
 | |
|  	.read_efuse		= rtw8822b_read_efuse,
 | |
|  	.query_rx_desc		= rtw8822b_query_rx_desc,
 | |
| @@ -2521,7 +2521,7 @@ static const struct rtw_reg_domain coex_
 | |
|  	{0xc50,  MASKBYTE0, RTW_REG_DOMAIN_MAC8},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
 | |
| +static const struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
 | |
|  	[EDCCA_TH_L2H_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE0}, .offset = 0},
 | |
|  	[EDCCA_TH_H2L_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE1}, .offset = 0},
 | |
|  };
 | |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 | |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 | |
| @@ -4874,13 +4874,13 @@ static const struct rtw_pwr_seq_cmd tran
 | |
|  	 RTW_PWR_CMD_END, 0, 0},
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_enable_flow_8822c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822c[] = {
 | |
|  	trans_carddis_to_cardemu_8822c,
 | |
|  	trans_cardemu_to_act_8822c,
 | |
|  	NULL
 | |
|  };
 | |
|  
 | |
| -static const struct rtw_pwr_seq_cmd *card_disable_flow_8822c[] = {
 | |
| +static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822c[] = {
 | |
|  	trans_act_to_cardemu_8822c,
 | |
|  	trans_cardemu_to_carddis_8822c,
 | |
|  	NULL
 | |
| @@ -4972,7 +4972,7 @@ static const struct rtw_rqpn rqpn_table_
 | |
|  	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
 | |
|  };
 | |
|  
 | |
| -static struct rtw_prioq_addrs prioq_addrs_8822c = {
 | |
| +static const struct rtw_prioq_addrs prioq_addrs_8822c = {
 | |
|  	.prio[RTW_DMA_MAPPING_EXTRA] = {
 | |
|  		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
 | |
|  	},
 | |
| @@ -4988,7 +4988,7 @@ static struct rtw_prioq_addrs prioq_addr
 | |
|  	.wsize = true,
 | |
|  };
 | |
|  
 | |
| -static struct rtw_chip_ops rtw8822c_ops = {
 | |
| +static const struct rtw_chip_ops rtw8822c_ops = {
 | |
|  	.phy_set_param		= rtw8822c_phy_set_param,
 | |
|  	.read_efuse		= rtw8822c_read_efuse,
 | |
|  	.query_rx_desc		= rtw8822c_query_rx_desc,
 | |
| @@ -5301,7 +5301,7 @@ static const struct rtw_pwr_track_tbl rt
 | |
|  	.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
 | |
|  };
 | |
|  
 | |
| -static struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
 | |
| +static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
 | |
|  	[EDCCA_TH_L2H_IDX] = {
 | |
|  		{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
 | |
|  	},
 |