Lines Matching +full:txpower +full:-

1 // SPDX-License-Identifier: ISC
24 dev_err(mdev->dev, "MCU message %02x (seq %d) timed out\n", in mt7603_mcu_parse_response()
26 dev->mcu_hang = MT7603_WATCHDOG_TIMEOUT; in mt7603_mcu_parse_response()
27 return -ETIMEDOUT; in mt7603_mcu_parse_response()
30 rxd = (struct mt7603_mcu_rxd *)skb->data; in mt7603_mcu_parse_response()
31 if (seq != rxd->seq) in mt7603_mcu_parse_response()
32 return -EAGAIN; in mt7603_mcu_parse_response()
42 int hdrlen = dev->mcu_running ? sizeof(struct mt7603_mcu_txd) : 12; in mt7603_mcu_skb_send_msg()
46 mdev->mcu.timeout = 3 * HZ; in mt7603_mcu_skb_send_msg()
48 seq = ++mdev->mcu.msg_seq & 0xf; in mt7603_mcu_skb_send_msg()
50 seq = ++mdev->mcu.msg_seq & 0xf; in mt7603_mcu_skb_send_msg()
54 txd->len = cpu_to_le16(skb->len); in mt7603_mcu_skb_send_msg()
55 if (cmd == -MCU_CMD_FW_SCATTER) in mt7603_mcu_skb_send_msg()
56 txd->pq_id = cpu_to_le16(MCU_PORT_QUEUE_FW); in mt7603_mcu_skb_send_msg()
58 txd->pq_id = cpu_to_le16(MCU_PORT_QUEUE); in mt7603_mcu_skb_send_msg()
59 txd->pkt_type = MCU_PKT_ID; in mt7603_mcu_skb_send_msg()
60 txd->seq = seq; in mt7603_mcu_skb_send_msg()
63 txd->cid = -cmd; in mt7603_mcu_skb_send_msg()
64 txd->set_query = MCU_Q_NA; in mt7603_mcu_skb_send_msg()
66 txd->cid = MCU_CMD_EXT_CID; in mt7603_mcu_skb_send_msg()
67 txd->ext_cid = cmd; in mt7603_mcu_skb_send_msg()
68 txd->set_query = MCU_Q_SET; in mt7603_mcu_skb_send_msg()
69 txd->ext_cid_ack = 1; in mt7603_mcu_skb_send_msg()
75 return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[MT_MCUQ_WM], skb, 0); in mt7603_mcu_skb_send_msg()
91 return mt76_mcu_send_msg(&dev->mt76, -MCU_CMD_TARGET_ADDRESS_LEN_REQ, in mt7603_mcu_init_download()
106 return mt76_mcu_send_msg(&dev->mt76, -MCU_CMD_FW_START_REQ, &req, in mt7603_mcu_start_firmware()
113 return mt76_mcu_send_msg(dev, -MCU_CMD_RESTART_DL_REQ, NULL, 0, true); in mt7603_mcu_restart()
137 ret = request_firmware(&fw, firmware, dev->mt76.dev); in mt7603_load_firmware()
141 if (!fw || !fw->data || fw->size < sizeof(*hdr)) { in mt7603_load_firmware()
142 dev_err(dev->mt76.dev, "Invalid firmware\n"); in mt7603_load_firmware()
143 ret = -EINVAL; in mt7603_load_firmware()
147 hdr = (const struct mt7603_fw_trailer *)(fw->data + fw->size - in mt7603_load_firmware()
150 dev_info(dev->mt76.dev, "Firmware Version: %.10s\n", hdr->fw_ver); in mt7603_load_firmware()
151 dev_info(dev->mt76.dev, "Build Time: %.15s\n", hdr->build_date); in mt7603_load_firmware()
164 dev_info(dev->mt76.dev, "Firmware already running...\n"); in mt7603_load_firmware()
169 dev_err(dev->mt76.dev, "Timeout waiting for ROM code to become ready\n"); in mt7603_load_firmware()
170 ret = -EIO; in mt7603_load_firmware()
174 dl_len = le32_to_cpu(hdr->dl_len) + 4; in mt7603_load_firmware()
177 dev_err(dev->mt76.dev, "Download request failed\n"); in mt7603_load_firmware()
181 ret = mt76_mcu_send_firmware(&dev->mt76, -MCU_CMD_FW_SCATTER, in mt7603_load_firmware()
182 fw->data, dl_len); in mt7603_load_firmware()
184 dev_err(dev->mt76.dev, "Failed to send firmware to device\n"); in mt7603_load_firmware()
190 dev_err(dev->mt76.dev, "Failed to start firmware\n"); in mt7603_load_firmware()
195 dev_err(dev->mt76.dev, "Timeout waiting for firmware to initialize\n"); in mt7603_load_firmware()
196 ret = -EIO; in mt7603_load_firmware()
206 dev->mcu_running = true; in mt7603_load_firmware()
207 snprintf(dev->mt76.hw->wiphy->fw_version, in mt7603_load_firmware()
208 sizeof(dev->mt76.hw->wiphy->fw_version), in mt7603_load_firmware()
209 "%.10s-%.15s", hdr->fw_ver, hdr->build_date); in mt7603_load_firmware()
210 dev_info(dev->mt76.dev, "firmware init done\n"); in mt7603_load_firmware()
227 dev->mt76.mcu_ops = &mt7603_mcu_ops; in mt7603_mcu_init()
233 __mt76_mcu_restart(&dev->mt76); in mt7603_mcu_exit()
234 skb_queue_purge(&dev->mt76.mcu.res_q); in mt7603_mcu_exit()
313 .len = ARRAY_SIZE(req_fields) - 1, in mt7603_mcu_set_eeprom()
316 u8 *req, *eep = (u8 *)dev->mt76.eeprom.data; in mt7603_mcu_set_eeprom()
324 return -ENOMEM; in mt7603_mcu_set_eeprom()
334 ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_EFUSE_BUFFER_MODE, in mt7603_mcu_set_eeprom()
354 .center_channel = dev->mphy.chandef.chan->hw_value, in mt7603_mcu_set_tx_power()
355 #define EEP_VAL(n) ((u8 *)dev->mt76.eeprom.data)[n] in mt7603_mcu_set_tx_power()
373 u8 *eep = (u8 *)dev->mt76.eeprom.data; in mt7603_mcu_set_tx_power()
381 return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_TX_POWER_CTRL, in mt7603_mcu_set_tx_power()
387 struct cfg80211_chan_def *chandef = &dev->mphy.chandef; in mt7603_mcu_set_channel()
389 int n_chains = hweight8(dev->mphy.antenna_mask); in mt7603_mcu_set_channel()
397 u8 txpower[21]; in mt7603_mcu_set_channel() member
400 .control_chan = chandef->chan->hw_value, in mt7603_mcu_set_channel()
401 .center_chan = chandef->chan->hw_value, in mt7603_mcu_set_channel()
406 s8 tx_power = hw->conf.power_level * 2; in mt7603_mcu_set_channel()
409 if (dev->mphy.chandef.width == NL80211_CHAN_WIDTH_40) { in mt7603_mcu_set_channel()
411 if (chandef->center_freq1 > chandef->chan->center_freq) in mt7603_mcu_set_channel()
414 req.center_chan -= 2; in mt7603_mcu_set_channel()
417 tx_power = mt76_get_sar_power(&dev->mphy, chandef->chan, tx_power); in mt7603_mcu_set_channel()
418 if (dev->mphy.antenna_mask == 3) in mt7603_mcu_set_channel()
419 tx_power -= 6; in mt7603_mcu_set_channel()
420 tx_power = min(tx_power, dev->tx_power_limit); in mt7603_mcu_set_channel()
422 dev->mphy.txpower_cur = tx_power; in mt7603_mcu_set_channel()
424 for (i = 0; i < ARRAY_SIZE(req.txpower); i++) in mt7603_mcu_set_channel()
425 req.txpower[i] = tx_power; in mt7603_mcu_set_channel()
427 ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_CHANNEL_SWITCH, &req, in mt7603_mcu_set_channel()