From nobody Sat Jun 20 19:10:39 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gjPDw50x9z6hNg9 for ; Sat, 20 Jun 2026 19:10:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gjPDw2lJJz3tvq for ; Sat, 20 Jun 2026 19:10:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781982640; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=d59QYY+bGJCAp6AOvMBYjop7X9/9ZvrLY8HrIX8Z5qg=; b=Gvq+69wYUTcC+B0V+xr4KpMw6v0b4mXYI0Mq73eWAdItV2rtAIQXNfqQRwlkxs4AL/hoqh DNZs2h355y+VCSkXoqU4v8Jw86EvPoYh1YWBTtSx+kvVonPdp5UwG0AuBT+fgmsiGaDvmf oNoIGSHP71P10ZwRym9EqVFElsE3+339HQUEaQOVbZGJ6vgoELNsZN6HSrQX6hi3GVOOk9 1+kbkXahPXoKzmQl5AxIki8j2TbGAW0jqQZEuqVeMo/iIj1Q9/N/ssCWLlxl7ETWaVBJsJ QWfRR9gRVaIT2nPgX2fRQDfMRKU2BMJESTYqL7fBYcz/JwPtUt4OEK+ploACkg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1781982640; a=rsa-sha256; cv=none; b=Zl+EkWcbHhv5SysDK4AhzlwGHbi2jykXX3MobQYCfl/wQ6zxcXdZkauiItM3e00YGiarRF dMgDyI56JKl0JVyXddmUhCwthxM56KuUEPqAZ3dlmvMZySzKgoO59adg/eo9cmdp5Qk5/z S8+qhu6M/Xm7XHH41tBr8i+215c4HI4f4S8uKJDbGVG35GUQWa62pux0x9I/jibRbESMMc /GPGbwW54e482fnxmspjZGudwAr34DZo00x/5EveB1vq/Kx8XvBDZoKj2g6h4UCciZDqFp 3uEd4j4GVS/O0of4GyTNFo+dKMiciIdUOmSVYAiVbuIVKlMnJZWX8uvXcxiB3Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781982640; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=d59QYY+bGJCAp6AOvMBYjop7X9/9ZvrLY8HrIX8Z5qg=; b=H9to0J4+Ff+9W88J2kWb0Fopg1XKWJOvKNuCyoFzKvDqEyi521g04XMCu8jzK9/EFsFkk6 bTeG1jh3lAdAoL6ogVqi9F6KP4ZEkUg/nJUnehiAORPizPYPGQKzeoYUFo8x7yjP/DD3Cj uKAFGS2lOpW4uOuvF5DVczjnHd3jk/DDUEeZgmxc1G+eQsst0luxfSVBy70bPMkxx/W/hS pMaQu1LYAJwkKTwCxaPUrSlgRsKHRCijiicBdHsnJ9XQnWSY+ECD956kg3JwJYxaMqI2iy kV9weCFJxPigsBIxNVLE8VPcig7HaviNlsd99n452L7udc3wO0ThySHHVmh/Jw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gjPDv6w2czkTs for ; Sat, 20 Jun 2026 19:10:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34416 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 20 Jun 2026 19:10:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Nick Price From: Adrian Chadd Subject: git: 5409e03a0ef1 - main - aq(4): modernize and de-Linuxify the vendor driver List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5409e03a0ef1f2d71da94bedd433fbaa7b6b21f2 Auto-Submitted: auto-generated Date: Sat, 20 Jun 2026 19:10:39 +0000 Message-Id: <6a36e5af.34416.2b6701db@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=5409e03a0ef1f2d71da94bedd433fbaa7b6b21f2 commit 5409e03a0ef1f2d71da94bedd433fbaa7b6b21f2 Author: Nick Price AuthorDate: 2026-06-20 19:03:09 +0000 Commit: Adrian Chadd CommitDate: 2026-06-20 19:10:16 +0000 aq(4): modernize and de-Linuxify the vendor driver Dead-code removal, device_printf(9) logging, style(9) de-Linuxification, const F/W-ops tables, and readability cleanups. No change for valid traffic. Dead code and logging: - Remove the sub-gigabit TSO-masking block in the link-state ISR: it cleared IFCAP_TSO from the static isc_capabilities record (read only at attach / SIOCSIFCAP, never on the datapath), so it never gated TSO and only corrupted the validation mask. The Atlantic has no sub-gigabit TSO erratum. - Tidy the RX buffer-size handling: drop the dead switch(MCLBYTES) in aq_if_rx_queues_alloc, rename rx_max_frame_size -> rx_buf_size, and bound the per-fragment length from the wb.pkt_len writeback (EBADMSG on underflow or a final fragment longer than the RX buffer). - Drop every __FreeBSD__/__FreeBSD_version branch (FreeBSD 14.0 baseline); the pre-13 arms used pre-opaque-if_t APIs since removed and one never built. - Route all log messages through device_printf(9) (MAC via %6D), adding a device_t to struct aq_hw; drop the dead AQ_XXX_UNIMPLEMENTED_FUNCTION and aq_log_error macros and the per-ring init console spam. - Minor: comma -> semicolon in aq_if_attach_pre; (uint64_t) -> (uint32_t) TX high-word cast; MODULE_VERSION(atlantic, 1); remove unused/duplicate #includes. style(9) and types: - Remove all typedef'd struct/enum/union types (aq_dev_t, the speed/fc/ debug enums, the volatile RX/TX descriptor types, the firmware-file types) in favor of bare tags; for the DMA descriptors the volatile qualifier moves to the pointer/use sites. Drop the _s/_e tag suffixes and the "#define aq_hw_s aq_hw" alias. Rename the OOP-style *self parameter to hw. Replace usec_delay/msec_delay/ARRAY_SIZE/LOWORD with FreeBSD equivalents (BIT kept). __attribute__((__packed__)) -> __packed. F/W-ops vtable: - Rename the leftover hal parameter to hw; make aq_fw1x_ops/aq_fw2x_ops const (read-only data); drop the always-true "fw_ops &&" and always-present dispatch guards (only led_control, absent in F/W 1.x, keeps its NULL check). Readability: - aq_isc_rxd_pkt_get: fold the four identical RX-error blocks into one rx_err: label. aq_isc_rxd_available: hoist the shared descriptor advance out of the EOP test and drop the redundant continue. aq_hw_offload_set: drop the dead "int err = 0". Fix a stale "10 ms" comment on a 50 ms DELAY and the redundant literal parentheses. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57438 --- sys/dev/aq/aq_common.h | 12 +--- sys/dev/aq/aq_dbg.c | 2 +- sys/dev/aq/aq_dbg.h | 11 ++-- sys/dev/aq/aq_device.h | 16 +++-- sys/dev/aq/aq_fw.c | 49 ++++++++------- sys/dev/aq/aq_fw.h | 20 +++---- sys/dev/aq/aq_fw1x.c | 56 +++++++++--------- sys/dev/aq/aq_fw2x.c | 80 ++++++++++++------------- sys/dev/aq/aq_hw.c | 157 ++++++++++++++++++++++--------------------------- sys/dev/aq/aq_hw.h | 42 ++++++------- sys/dev/aq/aq_hw_llh.c | 86 +++++++++++++-------------- sys/dev/aq/aq_irq.c | 17 +----- sys/dev/aq/aq_main.c | 104 ++++++-------------------------- sys/dev/aq/aq_media.c | 13 ++-- sys/dev/aq/aq_ring.c | 88 ++++++++++++--------------- sys/dev/aq/aq_ring.h | 26 ++++---- 16 files changed, 328 insertions(+), 451 deletions(-) diff --git a/sys/dev/aq/aq_common.h b/sys/dev/aq/aq_common.h index 6529f249ff62..5c497d071802 100644 --- a/sys/dev/aq/aq_common.h +++ b/sys/dev/aq/aq_common.h @@ -40,24 +40,14 @@ #define BIT(nr) (1UL << (nr)) -#define usec_delay(x) DELAY(x) - -#ifndef msec_delay -#define msec_delay(x) DELAY(x*1000) -#define msec_delay_irq(x) DELAY(x*1000) -#endif - #define AQ_HW_WAIT_FOR(_B_, _US_, _N_) ({ \ unsigned int _i; \ for (_i = (_N_); !(_B_) && _i; --_i) \ - usec_delay(_US_); \ + DELAY(_US_); \ (_i == 0) ? ETIMEDOUT : 0; \ }) -#define LOWORD(a) ((uint16_t)(a)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) - #define AQ_VER "0.0.5" #endif // _AQ_COMMON_H_ diff --git a/sys/dev/aq/aq_dbg.c b/sys/dev/aq/aq_dbg.c index bed29b3d0755..ec3954185749 100644 --- a/sys/dev/aq/aq_dbg.c +++ b/sys/dev/aq/aq_dbg.c @@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$"); #include "aq_dbg.h" -const aq_debug_level dbg_level_ = lvl_detail; +const enum aq_debug_level dbg_level_ = lvl_detail; const uint32_t dbg_categories_ = dbg_init | dbg_config | dbg_fw; diff --git a/sys/dev/aq/aq_dbg.h b/sys/dev/aq/aq_dbg.h index d90a8599e085..280572e7d5da 100644 --- a/sys/dev/aq/aq_dbg.h +++ b/sys/dev/aq/aq_dbg.h @@ -88,15 +88,15 @@ Debug levels: #define AQ_DBG_DUMP_DESC(desc) #endif -typedef enum aq_debug_level +enum aq_debug_level { lvl_error = LOG_ERR, lvl_warn = LOG_WARNING, lvl_trace = LOG_NOTICE, lvl_detail = LOG_INFO, -} aq_debug_level; +}; -typedef enum aq_debug_category +enum aq_debug_category { dbg_init = 1, dbg_config = 1 << 1, @@ -104,12 +104,12 @@ typedef enum aq_debug_category dbg_rx = 1 << 3, dbg_intr = 1 << 4, dbg_fw = 1 << 5, -} aq_debug_category; +}; #define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) -extern const aq_debug_level dbg_level_; +extern const enum aq_debug_level dbg_level_; extern const uint32_t dbg_categories_; #define log_base_(_lvl, _fmt, args...) printf( "atlantic: " _fmt "\n", ##args) @@ -120,7 +120,6 @@ extern const uint32_t dbg_categories_; #define trace_base_(_lvl, _cat, _fmt, ...) do {} while (0) #endif // AQ_CFG_DEBUG_LVL > 0 -#define aq_log_error(_fmt, args...) log_base_(lvl_error, "[!] " _fmt, ##args) #define aq_log_warn(_fmt, args...) log_base_(lvl_warn, "/!\\ " _fmt, ##args) #define aq_log(_fmt, args...) log_base_(lvl_trace, _fmt, ##args) #define aq_log_detail(_fmt, args...) log_base_(lvl_detail, _fmt, ##args) diff --git a/sys/dev/aq/aq_device.h b/sys/dev/aq/aq_device.h index 64edbd138b3a..23785c1854c5 100644 --- a/sys/dev/aq/aq_device.h +++ b/sys/dev/aq/aq_device.h @@ -53,7 +53,7 @@ enum aq_media_type { #define AQ_LINK_ALL (AQ_LINK_100M | AQ_LINK_1G | AQ_LINK_2G5 | AQ_LINK_5G | \ AQ_LINK_10G ) -struct aq_stats_s { +struct aq_stats { uint64_t prc; uint64_t uprc; uint64_t mprc; @@ -77,7 +77,7 @@ struct aq_stats_s { uint64_t bbtc; }; -enum aq_dev_state_e { +enum aq_dev_state { AQ_DEV_STATE_UNLOAD, AQ_DEV_STATE_PCI_STOP, AQ_DEV_STATE_DOWN, @@ -126,8 +126,8 @@ struct aq_dev { bool linkup; int media_active; - struct aq_hw_stats_s last_stats; - struct aq_stats_s curr_stats; + struct aq_hw_stats last_stats; + struct aq_stats curr_stats; bitstr_t *vlan_tags; int mcnt; @@ -136,13 +136,11 @@ struct aq_dev { uint8_t rss_table[HW_ATL_RSS_INDIRECTION_TABLE_MAX]; }; -typedef struct aq_dev aq_dev_t; - -int aq_update_hw_stats(aq_dev_t *aq_dev); -void aq_initmedia(aq_dev_t *aq_dev); +int aq_update_hw_stats(struct aq_dev *aq_dev); +void aq_initmedia(struct aq_dev *aq_dev); int aq_linkstat_isr(void *arg); int aq_isr_rx(void *arg); -void aq_mediastatus_update(aq_dev_t *aq_dev, uint32_t link_speed, const struct aq_hw_fc_info *fc_neg); +void aq_mediastatus_update(struct aq_dev *aq_dev, uint32_t link_speed, const struct aq_hw_fc_info *fc_neg); void aq_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr); int aq_mediachange(struct ifnet *ifp); void aq_if_update_admin_status(if_ctx_t ctx); diff --git a/sys/dev/aq/aq_fw.c b/sys/dev/aq/aq_fw.c index 487137e9c61e..7f9496add875 100644 --- a/sys/dev/aq/aq_fw.c +++ b/sys/dev/aq/aq_fw.c @@ -48,18 +48,17 @@ __FBSDID("$FreeBSD$"); #include "aq_hw_llh_internal.h" #include "aq_fw.h" -#include "aq_common.h" #include "aq_dbg.h" -typedef enum aq_fw_bootloader_mode +enum aq_fw_bootloader_mode { boot_mode_unknown = 0, boot_mode_flb, boot_mode_rbl_flash, boot_mode_rbl_host_bootload, -} aq_fw_bootloader_mode; +}; #define AQ_CFG_HOST_BOOT_DISABLE 0 @@ -86,13 +85,13 @@ const uint32_t RBL_STATUS_HOST_BOOT = 0xf1a7; const uint32_t SCRATCHPAD_FW_LOADER_STATUS = (0x40 / sizeof(uint32_t)); -extern struct aq_firmware_ops aq_fw1x_ops; -extern struct aq_firmware_ops aq_fw2x_ops; +extern const struct aq_firmware_ops aq_fw1x_ops; +extern const struct aq_firmware_ops aq_fw2x_ops; -int mac_soft_reset_(struct aq_hw* hw, aq_fw_bootloader_mode* mode); +int mac_soft_reset_(struct aq_hw* hw, enum aq_fw_bootloader_mode* mode); int mac_soft_reset_flb_(struct aq_hw* hw); -int mac_soft_reset_rbl_(struct aq_hw* hw, aq_fw_bootloader_mode* mode); +int mac_soft_reset_rbl_(struct aq_hw* hw, enum aq_fw_bootloader_mode* mode); int wait_init_mac_firmware_(struct aq_hw* hw); @@ -111,7 +110,7 @@ aq_fw_reset(struct aq_hw* hw) } if (k == 1000) { - aq_log_error("Neither RBL nor FLB started"); + device_printf(hw->dev, "Neither RBL nor FLB started\n"); return (EBUSY); } @@ -131,10 +130,10 @@ aq_fw_reset(struct aq_hw* hw) return (0); } - aq_fw_bootloader_mode mode = boot_mode_unknown; + enum aq_fw_bootloader_mode mode = boot_mode_unknown; int err = mac_soft_reset_(hw, &mode); if (err != 0) { - aq_log_error("MAC reset failed: %d", err); + device_printf(hw->dev, "MAC reset failed: %d\n", err); return (err); } @@ -150,12 +149,12 @@ aq_fw_reset(struct aq_hw* hw) return wait_init_mac_firmware_(hw); case boot_mode_unknown: - aq_log_error("F/W bootload error: unknown bootloader type"); + device_printf(hw->dev, "F/W bootload error: unknown bootloader type\n"); return (ENOTSUP); case boot_mode_rbl_host_bootload: #if AQ_CFG_HOST_BOOT_DISABLE - aq_log_error("RBL> Host Bootload mode: this driver does not support Host Boot"); + device_printf(hw->dev, "RBL> Host Bootload mode: this driver does not support Host Boot\n"); return (ENOTSUP); #else trace(dbg_init, "RBL> Host Bootload mode"); @@ -166,7 +165,7 @@ aq_fw_reset(struct aq_hw* hw) /* * #todo: Host Boot */ - aq_log_error("RBL> F/W Host Bootload not implemented"); + device_printf(hw->dev, "RBL> F/W Host Bootload not implemented\n"); return (ENOTSUP); } @@ -191,14 +190,14 @@ aq_fw_ops_init(struct aq_hw* hw) return (0); } - aq_log_error("aq_fw_ops_init(): invalid F/W version %#x", + device_printf(hw->dev, "aq_fw_ops_init(): invalid F/W version %#x\n", hw->fw_version.raw); return (ENOTSUP); } int -mac_soft_reset_(struct aq_hw* hw, aq_fw_bootloader_mode* mode /*= nullptr*/) +mac_soft_reset_(struct aq_hw* hw, enum aq_fw_bootloader_mode* mode /*= nullptr*/) { if (hw->rbl_enabled) { return mac_soft_reset_rbl_(hw, mode); @@ -218,7 +217,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) reg_global_ctl2_set(hw, 0x40e1); // Let Felicity hardware complete SMBUS transaction before Global // software reset. - msec_delay(50); + DELAY((50) * 1000); /* * If SPI burst transaction was interrupted(before running the script), @@ -228,7 +227,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) reg_glb_nvr_provisioning2_set(hw, 0xa0); reg_glb_nvr_interface1_set(hw, 0x9f); reg_glb_nvr_interface1_set(hw, 0x809f); - msec_delay(50); + DELAY((50) * 1000); reg_glb_standard_ctl1_set(hw, (reg_glb_standard_ctl1_get(hw) & ~glb_reg_res_dis_msk) | glb_soft_res_msk); @@ -242,7 +241,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) * For the case SPI burst transaction was interrupted (by MCP reset * above), wait until it is completed by hardware. */ - msec_delay(50); // Sleep for 10 ms. + DELAY(50 * 1000); /* MAC Kickstart */ if (!hw->fast_start_enabled) { @@ -254,7 +253,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) flb_status = reg_glb_daisy_chain_status1_get(hw) & 0x10; if (flb_status != 0) break; - msec_delay(10); // Sleep for 10 ms. + DELAY(10 * 1000); } if (flb_status == 0) { @@ -268,7 +267,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) reg_global_ctl2_set(hw, 0x80e0); // Let Felicity hardware complete SMBUS transaction before // Global software reset. - msec_delay(50); + DELAY((50) * 1000); } reg_glb_cpu_sem_set(hw, 1, 0); @@ -285,7 +284,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) restart_completed = reg_glb_fw_image_id1_get(hw) != 0; if (restart_completed) break; - msec_delay(10); + DELAY((10) * 1000); } if (!restart_completed) { @@ -298,7 +297,7 @@ mac_soft_reset_flb_(struct aq_hw* hw) } int -mac_soft_reset_rbl_(struct aq_hw* hw, aq_fw_bootloader_mode* mode) +mac_soft_reset_rbl_(struct aq_hw* hw, enum aq_fw_bootloader_mode* mode) { trace(dbg_init, "RBL> MAC reset STARTED!"); @@ -322,11 +321,11 @@ mac_soft_reset_rbl_(struct aq_hw* hw, aq_fw_bootloader_mode* mode) // Wait for RBL to finish boot process. uint16_t rbl_status = 0; for (int k = 0; k < RBL_TIMEOUT_MS; ++k) { - rbl_status = LOWORD(reg_glb_cpu_no_reset_scratchpad_get(hw, NO_RESET_SCRATCHPAD_RBL_STATUS)); + rbl_status = ((uint16_t)(reg_glb_cpu_no_reset_scratchpad_get(hw, NO_RESET_SCRATCHPAD_RBL_STATUS))); if (rbl_status != 0 && rbl_status != 0xDEAD) break; - msec_delay(1); + DELAY((1) * 1000); } if (rbl_status == 0 || rbl_status == 0xDEAD) { @@ -357,7 +356,7 @@ wait_init_mac_firmware_(struct aq_hw* hw) if ((hw->fw_version.raw = AQ_READ_REG(hw, 0x18)) != 0) return (0); - msec_delay(1); + DELAY((1) * 1000); } trace_error(dbg_init, diff --git a/sys/dev/aq/aq_fw.h b/sys/dev/aq/aq_fw.h index ea2c37b6c92c..9195c91d6b5f 100644 --- a/sys/dev/aq/aq_fw.h +++ b/sys/dev/aq/aq_fw.h @@ -36,7 +36,7 @@ struct aq_hw; -typedef enum aq_fw_link_speed +enum aq_fw_link_speed { aq_fw_none = 0, aq_fw_100M = (1 << 0), @@ -44,30 +44,30 @@ typedef enum aq_fw_link_speed aq_fw_2G5 = (1 << 2), aq_fw_5G = (1 << 3), aq_fw_10G = (1 << 4), -} aq_fw_link_speed_t; +}; -typedef enum aq_fw_link_fc +enum aq_fw_link_fc { aq_fw_fc_none = 0, aq_fw_fc_ENABLE_RX = BIT(0), aq_fw_fc_ENABLE_TX = BIT(1), aq_fw_fc_ENABLE_ALL = aq_fw_fc_ENABLE_RX | aq_fw_fc_ENABLE_TX, -} aq_fw_link_fc_t; +}; #define aq_fw_speed_auto \ (aq_fw_100M | aq_fw_1G | aq_fw_2G5 | aq_fw_5G | aq_fw_10G) struct aq_firmware_ops { - int (*reset)(struct aq_hw* hal); + int (*reset)(struct aq_hw* hw); - int (*set_mode)(struct aq_hw* hal, enum aq_hw_fw_mpi_state_e mode, aq_fw_link_speed_t speed); - int (*get_mode)(struct aq_hw* hal, enum aq_hw_fw_mpi_state_e* mode, aq_fw_link_speed_t* speed, aq_fw_link_fc_t* fc); + int (*set_mode)(struct aq_hw* hw, enum aq_hw_fw_mpi_state mode, enum aq_fw_link_speed speed); + int (*get_mode)(struct aq_hw* hw, enum aq_hw_fw_mpi_state* mode, enum aq_fw_link_speed* speed, enum aq_fw_link_fc* fc); - int (*get_mac_addr)(struct aq_hw* hal, uint8_t* mac_addr); - int (*get_stats)(struct aq_hw* hal, struct aq_hw_stats_s* stats); + int (*get_mac_addr)(struct aq_hw* hw, uint8_t* mac_addr); + int (*get_stats)(struct aq_hw* hw, struct aq_hw_stats* stats); - int (*led_control)(struct aq_hw* hal, uint32_t mode); + int (*led_control)(struct aq_hw* hw, uint32_t mode); }; diff --git a/sys/dev/aq/aq_fw1x.c b/sys/dev/aq/aq_fw1x.c index f5458b174c3f..731370e94f3e 100644 --- a/sys/dev/aq/aq_fw1x.c +++ b/sys/dev/aq/aq_fw1x.c @@ -49,14 +49,14 @@ __FBSDID("$FreeBSD$"); #define FW1X_MPI_STATE_ADR 0x36C -typedef enum fw1x_mode { +enum fw1x_mode { FW1X_MPI_DEINIT = 0, FW1X_MPI_RESERVED = 1, FW1X_MPI_INIT = 2, FW1X_MPI_POWER = 4, -} fw1x_mode; +}; -typedef enum aq_fw1x_rate { +enum aq_fw1x_rate { FW1X_RATE_10G = 1 << 0, FW1X_RATE_5G = 1 << 1, FW1X_RATE_5GSR = 1 << 2, @@ -64,9 +64,9 @@ typedef enum aq_fw1x_rate { FW1X_RATE_1G = 1 << 4, FW1X_RATE_100M = 1 << 5, FW1X_RATE_INVALID = 1 << 6, -} aq_fw1x_rate; +}; -typedef union fw1x_state_reg { +union fw1x_state_reg { uint32_t val; struct { uint8_t mode; @@ -77,20 +77,20 @@ typedef union fw1x_state_reg { uint8_t reserved3 : 2; uint8_t downshift : 4; }; -} fw1x_state_reg; +}; int fw1x_reset(struct aq_hw* hw); -int fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, - aq_fw_link_speed_t speed); -int fw1x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode, - aq_fw_link_speed_t* speed, aq_fw_link_fc_t* fc); +int fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state mode, + enum aq_fw_link_speed speed); +int fw1x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state* mode, + enum aq_fw_link_speed* speed, enum aq_fw_link_fc* fc); int fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac_addr); -int fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats); +int fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats* stats); -static fw1x_mode -mpi_mode_to_fw1x_(enum aq_hw_fw_mpi_state_e mode) +static enum fw1x_mode +mpi_mode_to_fw1x_(enum aq_hw_fw_mpi_state mode) { switch (mode) { case MPI_DEINIT: @@ -113,7 +113,7 @@ mpi_mode_to_fw1x_(enum aq_hw_fw_mpi_state_e mode) return (FW1X_MPI_RESERVED); } -static aq_fw1x_rate +static enum aq_fw1x_rate link_speed_mask_to_fw1x_(uint32_t /*aq_fw_link_speed*/ speed) { uint32_t rate = 0; @@ -134,11 +134,11 @@ link_speed_mask_to_fw1x_(uint32_t /*aq_fw_link_speed*/ speed) if (speed & aq_fw_100M) rate |= FW1X_RATE_100M; - return ((aq_fw1x_rate)rate); + return ((enum aq_fw1x_rate)rate); } -static aq_fw_link_speed_t -fw1x_rate_to_link_speed_(aq_fw1x_rate rate) +static enum aq_fw_link_speed +fw1x_rate_to_link_speed_(enum aq_fw1x_rate rate) { switch (rate) { case FW1X_RATE_10G: @@ -164,7 +164,7 @@ fw1x_rate_to_link_speed_(aq_fw1x_rate rate) } int -fw1x_reset(struct aq_hw* hal) +fw1x_reset(struct aq_hw* hw) { uint32_t tid0 = ~0u; /*< Initial value of MBOX transactionId. */ struct aq_hw_fw_mbox mbox; @@ -173,7 +173,7 @@ fw1x_reset(struct aq_hw* hal) for (int i = 0; i < retryCount; ++i) { // Read the beginning of Statistics structure to capture the // Transaction ID. - aq_hw_fw_downld_dwords(hal, hal->mbox_addr, (uint32_t*)&mbox, + aq_hw_fw_downld_dwords(hw, hw->mbox_addr, (uint32_t*)&mbox, (uint32_t)((char*)&mbox.stats - (char*)&mbox) / sizeof(uint32_t)); // Successfully read the stats. @@ -193,7 +193,7 @@ fw1x_reset(struct aq_hw* hal) * Transaction ID value haven't changed since last time. * Try reading the stats again. */ - usec_delay(10); + DELAY(10); } trace_error(dbg_init, "F/W 1.x reset finalize timeout"); @@ -201,8 +201,8 @@ fw1x_reset(struct aq_hw* hal) } int -fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, - aq_fw_link_speed_t speed) +fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state mode, + enum aq_fw_link_speed speed) { union fw1x_state_reg state = {0}; state.mode = mpi_mode_to_fw1x_(mode); @@ -217,15 +217,15 @@ fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, } int -fw1x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode, - aq_fw_link_speed_t* speed, aq_fw_link_fc_t* fc) +fw1x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state* mode, + enum aq_fw_link_speed* speed, enum aq_fw_link_fc* fc) { union fw1x_state_reg state = { .val = AQ_READ_REG(hw, AQ_HW_MPI_STATE_ADR) }; trace(dbg_init, "fw1x> get_mode(): 0x36c -> %x, 0x368 -> %x", state.val, AQ_READ_REG(hw, AQ_HW_MPI_CONTROL_ADR)); - enum aq_hw_fw_mpi_state_e md = MPI_DEINIT; + enum aq_hw_fw_mpi_state md = MPI_DEINIT; switch (state.mode) { case FW1X_MPI_DEINIT: @@ -271,7 +271,7 @@ fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac) } err = aq_hw_fw_downld_dwords(hw, efuse_shadow_addr + (40 * 4), - mac_addr, ARRAY_SIZE(mac_addr)); + mac_addr, nitems(mac_addr)); if (err != 0) { mac_addr[0] = 0; mac_addr[1] = 0; @@ -292,7 +292,7 @@ fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac) } int -fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats) +fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats* stats) { int err = 0; @@ -311,7 +311,7 @@ fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats) return (err); } -struct aq_firmware_ops aq_fw1x_ops = +const struct aq_firmware_ops aq_fw1x_ops = { .reset = fw1x_reset, diff --git a/sys/dev/aq/aq_fw2x.c b/sys/dev/aq/aq_fw2x.c index 0a6d433a48fc..04935e9368d4 100644 --- a/sys/dev/aq/aq_fw2x.c +++ b/sys/dev/aq/aq_fw2x.c @@ -51,7 +51,7 @@ __FBSDID("$FreeBSD$"); #include "aq_dbg.h" -typedef enum { +enum fw2x_caps_lo { CAPS_LO_10BASET_HD = 0x00, CAPS_LO_10BASET_FD, CAPS_LO_100BASETX_HD, @@ -64,9 +64,9 @@ typedef enum { CAPS_LO_2P5GBASET_FD, CAPS_LO_5GBASET_FD, CAPS_LO_10GBASET_FD, -} fw2x_caps_lo; +}; -typedef enum { +enum fw2x_caps_hi { CAPS_HI_RESERVED1 = 0x00, CAPS_HI_10BASET_EEE, CAPS_HI_RESERVED2, @@ -99,19 +99,19 @@ typedef enum { CAPS_HI_WOL_TIMER, CAPS_HI_STATISTICS, CAPS_HI_TRANSACTION_ID, -} fw2x_caps_hi; +}; -typedef enum aq_fw2x_rate +enum aq_fw2x_rate { FW2X_RATE_100M = 0x20, FW2X_RATE_1G = 0x100, FW2X_RATE_2G5 = 0x200, FW2X_RATE_5G = 0x400, FW2X_RATE_10G = 0x800, -} aq_fw2x_rate; +}; -typedef struct fw2x_msm_statistics +struct fw2x_msm_statistics { uint32_t uprc; uint32_t mprc; @@ -129,36 +129,36 @@ typedef struct fw2x_msm_statistics uint32_t ubtc; uint32_t ptc; uint32_t prc; -} fw2x_msm_statistics; +}; -typedef struct fw2x_phy_cable_diag_data +struct fw2x_phy_cable_diag_data { uint32_t lane_data[4]; -} fw2x_phy_cable_diag_data; +}; -typedef struct fw2x_capabilities { +struct fw2x_capabilities { uint32_t caps_lo; uint32_t caps_hi; -} fw2x_capabilities; +}; -typedef struct fw2x_mailbox // struct fwHostInterface +struct fw2x_mailbox // struct fwHostInterface { uint32_t version; uint32_t transaction_id; int32_t error; - fw2x_msm_statistics msm; // msmStatistics_t msm; + struct fw2x_msm_statistics msm; // msmStatistics_t msm; uint16_t phy_h_bit; uint16_t phy_fault_code; int16_t phy_temperature; uint8_t cable_len; uint8_t reserved1; - fw2x_phy_cable_diag_data diag_data; + struct fw2x_phy_cable_diag_data diag_data; uint32_t reserved[8]; - fw2x_capabilities caps; + struct fw2x_capabilities caps; /* ... */ -} fw2x_mailbox; +}; // EEE caps @@ -195,13 +195,13 @@ typedef struct fw2x_mailbox // struct fwHostInterface // Firmware v2-3.x specific functions. int fw2x_reset(struct aq_hw* hw); -int fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, - aq_fw_link_speed_t speed); -int fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode, - aq_fw_link_speed_t* speed, aq_fw_link_fc_t* fc); +int fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state mode, + enum aq_fw_link_speed speed); +int fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state* mode, + enum aq_fw_link_speed* speed, enum aq_fw_link_fc* fc); int fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac); -int fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats); +int fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats* stats); static uint64_t @@ -242,10 +242,10 @@ set_mpi_ctrl_(struct aq_hw* hw, uint64_t value) int fw2x_reset(struct aq_hw* hw) { - fw2x_capabilities caps = {0}; + struct fw2x_capabilities caps = {0}; AQ_DBG_ENTER(); int err = aq_hw_fw_downld_dwords(hw, - hw->mbox_addr + offsetof(fw2x_mailbox, caps), + hw->mbox_addr + offsetof(struct fw2x_mailbox, caps), (uint32_t*)&caps, sizeof caps/sizeof(uint32_t)); if (err == 0) { hw->fw_caps = caps.caps_lo | ((uint64_t)caps.caps_hi << 32); @@ -262,7 +262,7 @@ fw2x_reset(struct aq_hw* hw) } -static aq_fw2x_rate +static enum aq_fw2x_rate link_speed_mask_to_fw2x_(uint32_t speed) { uint32_t rate = 0; @@ -284,13 +284,13 @@ link_speed_mask_to_fw2x_(uint32_t speed) rate |= FW2X_RATE_100M; AQ_DBG_EXIT(rate); - return ((aq_fw2x_rate)rate); + return ((enum aq_fw2x_rate)rate); } int -fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, - aq_fw_link_speed_t speed) +fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state mode, + enum aq_fw_link_speed speed) { uint64_t mpi_ctrl = get_mpi_ctrl_(hw); @@ -326,8 +326,8 @@ fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode, } int -fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode, - aq_fw_link_speed_t* link_speed, aq_fw_link_fc_t* fc) +fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state* mode, + enum aq_fw_link_speed* link_speed, enum aq_fw_link_fc* fc) { uint64_t mpi_state = get_mpi_state_(hw); uint32_t rates = mpi_state & FW2X_RATE_MASK; @@ -342,7 +342,7 @@ fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode, *mode = MPI_DEINIT; } - aq_fw_link_speed_t speed = aq_fw_none; + enum aq_fw_link_speed speed = aq_fw_none; if (rates & FW2X_RATE_10G) speed = aq_fw_10G; @@ -382,7 +382,7 @@ fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac) } err = aq_hw_fw_downld_dwords(hw, efuse_shadow_addr + (40 * 4), mac_addr, - ARRAY_SIZE(mac_addr)); + nitems(mac_addr)); if (err != 0) { mac_addr[0] = 0; mac_addr[1] = 0; @@ -400,8 +400,8 @@ fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac) } static inline void -fw2x_stats_to_fw_stats_(struct aq_hw_stats_s* dst, - const fw2x_msm_statistics* src) +fw2x_stats_to_fw_stats_(struct aq_hw_stats* dst, + const struct fw2x_msm_statistics* src) { dst->uprc = src->uprc; dst->mprc = src->mprc; @@ -454,7 +454,7 @@ toggle_mpi_ctrl_and_wait_(struct aq_hw* hw, uint64_t mask, uint32_t timeout_ms, // AQ_DBG_EXIT(true); return (true); } - msec_delay(timeout_ms); + DELAY((timeout_ms) * 1000); } trace_detail(dbg_fw, @@ -466,10 +466,10 @@ toggle_mpi_ctrl_and_wait_(struct aq_hw* hw, uint64_t mask, uint32_t timeout_ms, int -fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats) +fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats* stats) { int err = 0; - fw2x_msm_statistics fw2x_stats = {0}; + struct fw2x_msm_statistics fw2x_stats = {0}; // AQ_DBG_ENTER(); @@ -486,7 +486,7 @@ fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats) } err = aq_hw_fw_downld_dwords(hw, - hw->mbox_addr + offsetof(fw2x_mailbox, msm), + hw->mbox_addr + offsetof(struct fw2x_mailbox, msm), (uint32_t*)&fw2x_stats, sizeof fw2x_stats/sizeof(uint32_t)); fw2x_stats_to_fw_stats_(stats, &fw2x_stats); @@ -506,7 +506,7 @@ fw2x_led_control(struct aq_hw* hw, uint32_t onoff) AQ_DBG_ENTER(); - aq_hw_fw_version ver_expected = { .raw = FW2X_FW_MIN_VER_LED}; + struct aq_hw_fw_version ver_expected = { .raw = FW2X_FW_MIN_VER_LED}; if (aq_hw_ver_match(&ver_expected, &hw->fw_version)) AQ_WRITE_REG(hw, FW2X_MPI_LED_ADDR, (onoff) ? ((FW2X_LED_BLINK) | (FW2X_LED_BLINK << 2) | (FW2X_LED_BLINK << 4)): @@ -516,7 +516,7 @@ fw2x_led_control(struct aq_hw* hw, uint32_t onoff) return (err); } -struct aq_firmware_ops aq_fw2x_ops = +const struct aq_firmware_ops aq_fw2x_ops = { .reset = fw2x_reset, diff --git a/sys/dev/aq/aq_hw.c b/sys/dev/aq/aq_hw.c index 882fdf1807f2..da07c876b959 100644 --- a/sys/dev/aq/aq_hw.c +++ b/sys/dev/aq/aq_hw.c @@ -37,7 +37,6 @@ #include #include #include -#include #include "aq_hw.h" #include "aq_dbg.h" @@ -133,8 +132,8 @@ err_exit: } int -aq_hw_ver_match(const aq_hw_fw_version* ver_expected, - const aq_hw_fw_version* ver_actual) +aq_hw_ver_match(const struct aq_hw_fw_version* ver_expected, + const struct aq_hw_fw_version* ver_actual) { AQ_DBG_ENTER(); @@ -155,14 +154,14 @@ aq_hw_init_ucp(struct aq_hw *hw) err = aq_fw_reset(hw); if (err != 0) { - aq_log_error("aq_hw_init_ucp(): F/W reset failed, err %d", err); + device_printf(hw->dev, "aq_hw_init_ucp(): F/W reset failed, err %d\n", err); return (err); } aq_hw_chip_features_init(hw, &hw->chip_features); err = aq_fw_ops_init(hw); if (err != 0) { - aq_log_error("could not initialize F/W ops, err %d", err); + device_printf(hw->dev, "could not initialize F/W ops, err %d\n", err); return (err); } @@ -183,9 +182,9 @@ aq_hw_init_ucp(struct aq_hw *hw) /* check 10 times by 1ms */ err = AQ_HW_WAIT_FOR((hw->mbox_addr = AQ_READ_REG(hw, 0x360)) != 0, 400U, 20); - aq_hw_fw_version ver_expected = { .raw = AQ_CFG_FW_MIN_VER_EXPECTED }; + struct aq_hw_fw_version ver_expected = { .raw = AQ_CFG_FW_MIN_VER_EXPECTED }; if (!aq_hw_ver_match(&ver_expected, &hw->fw_version)) - aq_log_error("atlantic: aq_hw_init_ucp(), wrong FW version: expected:%x actual:%x", + device_printf(hw->dev, "aq_hw_init_ucp(), wrong FW version: expected:%x actual:%x\n", AQ_CFG_FW_MIN_VER_EXPECTED, hw->fw_version.raw); AQ_DBG_EXIT(err); @@ -210,15 +209,10 @@ err_exit: int aq_hw_mpi_read_stats(struct aq_hw *hw, struct aq_hw_fw_mbox *pmbox) { - int err = 0; + int err; // AQ_DBG_ENTER(); - if (hw->fw_ops && hw->fw_ops->get_stats) { - err = hw->fw_ops->get_stats(hw, &pmbox->stats); - } else { - err = ENOTSUP; - aq_log_error("get_stats() not supported by F/W"); - } + err = hw->fw_ops->get_stats(hw, &pmbox->stats); if (err == 0) { pmbox->stats.dpc = reg_rx_dma_stat_counter7get(hw); @@ -230,16 +224,12 @@ aq_hw_mpi_read_stats(struct aq_hw *hw, struct aq_hw_fw_mbox *pmbox) } static int -aq_hw_mpi_set(struct aq_hw *hw, enum aq_hw_fw_mpi_state_e state, uint32_t speed) +aq_hw_mpi_set(struct aq_hw *hw, enum aq_hw_fw_mpi_state state, uint32_t speed) { - int err = ENOTSUP; + int err; AQ_DBG_ENTERA("speed %d", speed); - if (hw->fw_ops && hw->fw_ops->set_mode) { - err = hw->fw_ops->set_mode(hw, state, speed); - } else { - aq_log_error("set_mode() not supported by F/W"); - } + err = hw->fw_ops->set_mode(hw, state, speed); AQ_DBG_EXIT(err); return (err); @@ -258,20 +248,14 @@ aq_hw_get_link_state(struct aq_hw *hw, uint32_t *link_speed, struct aq_hw_fc_inf // AQ_DBG_ENTER(); - enum aq_hw_fw_mpi_state_e mode; - aq_fw_link_speed_t speed = aq_fw_none; - aq_fw_link_fc_t fc; + enum aq_hw_fw_mpi_state mode; + enum aq_fw_link_speed speed = aq_fw_none; + enum aq_fw_link_fc fc; - if (hw->fw_ops && hw->fw_ops->get_mode) { - err = hw->fw_ops->get_mode(hw, &mode, &speed, &fc); - } else { - aq_log_error("get_mode() not supported by F/W"); - AQ_DBG_EXIT(ENOTSUP); - return (ENOTSUP); - } + err = hw->fw_ops->get_mode(hw, &mode, &speed, &fc); *** 1502 LINES SKIPPED ***