From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D610341AB1 for ; Fri, 27 Feb 2026 04:12:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772165573; cv=none; b=OwJtktXU+72aMnGDJQb6vvMvsiPtjA//7CleeznQ94yWOTCfzLUeC18sfnlALAPVDYZpJylZAE+a6unTmD5QApVzj/uhnSl/EbIFwM45YMr+0O1y+KMi1ewB5Di5A0nMoaqZ19kypENTdI/2YJslhNImMT3qTlJ+TC2g6wSJwaw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772165573; c=relaxed/simple; bh=0hpMqC7iN1GU6/HGSB7LTfJeMBImyzsfLpG74B8WG/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lmPWdR81RFgyJiWMxaN13Re9y7uvNcSi24jtAsiwl35s79cDtuHZngk52UPbnND1TtBbQEgkZifKtLZEGddkpn4uGQNuMp9q5dT12pBW63JNj4z3ZsRsLdCsK1qdnhzG+2vUSzd3mVPZay01b5GPeOpBh4+/kRtNAKBBKnFpd4U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=morsemicro.com; spf=pass smtp.mailfrom=morsemicro.com; dkim=pass (2048-bit key) header.d=morsemicro-com.20230601.gappssmtp.com header.i=@morsemicro-com.20230601.gappssmtp.com header.b=z3UoKYrJ; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=morsemicro.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=morsemicro.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=morsemicro-com.20230601.gappssmtp.com header.i=@morsemicro-com.20230601.gappssmtp.com header.b="z3UoKYrJ" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2ad9516a653so7210135ad.0 for ; Thu, 26 Feb 2026 20:12:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=morsemicro-com.20230601.gappssmtp.com; s=20230601; t=1772165571; x=1772770371; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yVZ6jZaREZIiz226cNa+rAmRJUyjsVN1xL65upg+7t0=; b=z3UoKYrJX67BOYU46lRUTdazGNW5w7lPswrHNYhBAsW2IycRmZOCrAouzI3x3bbook TV2dHzioAqJXM1aEeqOpT9RBtBBCeGRX3Rtmb41zR/6Z01fcYgVsrWGM8z3TIoUoMK8Q +DvgBOJwsYus7nj1kbf4i/RMOvt0rKqfBsBcnKgNxTNZqf4UOOAz8imtxu2YJ6pRU/B1 B8a4D76NKd5/1o29ISpwy3BtZ0f45YBV7xlKYeeU+HDFYwpAwfl0i1dIW2a7v9BuH8nX F+IX7W3eYLNBfWvwHqTuje5kZW2nz7QleQUnmtk72HuWBLx8+Cffbe3JTBXrmQ/P58qS yeQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772165571; x=1772770371; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yVZ6jZaREZIiz226cNa+rAmRJUyjsVN1xL65upg+7t0=; b=EQ4KtU+C6EKZb457wXLAr59Rud5aNEjdWszbPok7eD5oAcH80KFkEjuaUizjuXDUIH c+UD/JE+SWWLeJorjSvGP0jo39AXDGDrffPmXB1k8UZjadZi1upoGhr3mjpErC2VsYTW wtEoirSNMmbOsth9Zhz7wDiDKgoKrMijbaf7/PViUc/WNwsItVO3WlN4r2UlDbiFJR8X pocjc/9HDgtXpnZsiggCJVfgTPgQM0PG702wpWEUafNj+HzmzqE93k6TPcaA0OEh35eR d/KH9ZhBy7N3dyyfRfD24YXwQ76IS5E7Ir6sjQNwxNkv/UaayHCrgDDYCB8aNhKvANFL 0YUA== X-Forwarded-Encrypted: i=1; AJvYcCVFDEB/Cor9QoHUU43FAL1lf/zQYyZiztNmQC2kAGqzF8S+aDgcp2j2EQAiD07o+MGVlHNSbYGTubNq/+I=@vger.kernel.org X-Gm-Message-State: AOJu0YxtWqUK89ZYPeeCW+veXmtpXAyzS/DyWUZ2HzflBIqj27V2xN6V FVLnAhG9QB5jGmtyuTmpapZseQwqIyJSivLxd8bds52kN8nGkP8uAymFVzRiMKisjcI= X-Gm-Gg: ATEYQzxwVPd2gkparEUlvM7pinSSt5PjsVUApSIKRsP8q/05wHqlySJ9HG5cKQSVZwI KmOl2FkWudCKNuzcEP2oCJfcD18Fz9ARr7RV2U8XQ2OXgQlPc0C+yzdfk8piNSGCbAvqoLQUos7 w6C64gIx8SLbM5B8UnTwvLcKxMfs94UTCjC2dXhOasH3cWJJ+DjUho3ww0s9D+nvFE/KV+gdCxq gJqWUAYetkVilkV5NDIQakIoilZsJljpIN5TX5uW0q0QHCBROARTmiK45KwbHewoAueZb7Sfzzg EEl1tZWVaI/1GSPrsDM/PDKLS+eIbJqYKOYIhG3GfDLeDfuzB5pt4zy2Pz3GcsPQFafPPdzWGjc 5xH/pmjsA9KAurtDymvF6cyggJuLnCrLdJZ6DwLeunX8tm0iG9mCWE41BhoBnxUcipOnxi9/MD1 BKaJ6PWL+7nZqO6+hqmPXfmeuw9CAtgj5Rl6E95myqysyQg+ErWpXAO3LLbuCQeQxImgEfhJzDN qMu6umY6QGndIXyiQc73oONtpHmq5k= X-Received: by 2002:a17:902:8210:b0:2aa:e3c2:f925 with SMTP id d9443c01a7336-2ae2e47e0a1mr8851875ad.34.1772165570786; Thu, 26 Feb 2026 20:12:50 -0800 (PST) Received: from mma-H9MHD44.lan (60-242-93-14.static.tpgi.com.au. [60.242.93.14]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2adfb6ba5eesm41682865ad.68.2026.02.26.20.12.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 20:12:50 -0800 (PST) From: Lachlan Hodges To: johannes@sipsolutions.net, Lachlan Hodges , Dan Callaghan , Arien Judge Cc: ayman.grais@morsemicro.com, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH wireless-next 11/35] wifi: mm81x: add hif.h Date: Fri, 27 Feb 2026 15:10:21 +1100 Message-ID: <20260227041108.66508-12-lachlan.hodges@morsemicro.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260227041108.66508-1-lachlan.hodges@morsemicro.com> References: <20260227041108.66508-1-lachlan.hodges@morsemicro.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit (Patches split per file for review, see cover letter for more information) Signed-off-by: Lachlan Hodges --- drivers/net/wireless/morsemicro/mm81x/hif.h | 116 ++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 drivers/net/wireless/morsemicro/mm81x/hif.h diff --git a/drivers/net/wireless/morsemicro/mm81x/hif.h b/drivers/net/wireless/morsemicro/mm81x/hif.h new file mode 100644 index 000000000000..73c23a39d14b --- /dev/null +++ b/drivers/net/wireless/morsemicro/mm81x/hif.h @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2017-2026 Morse Micro + */ + +#ifndef _MM81X_HIF_H_ +#define _MM81X_HIF_H_ + +#include "core.h" + +struct mm81x_skbq; + +#define MM81X_HIF_BYPASS_TX_STATUS_IRQ_NUM (15) +#define MM81X_HIF_BYPASS_CMD_RESP_IRQ_NUM (29) +#define MM81X_HIF_IRQ_BYPASS_TX_STATUS_AVAILABLE \ + BIT(MM81X_HIF_BYPASS_TX_STATUS_IRQ_NUM) +#define MM81X_HIF_IRQ_BYPASS_CMD_RESP_AVAILABLE \ + BIT(MM81X_HIF_BYPASS_CMD_RESP_IRQ_NUM) + +/* Hardware IF interrupt mask. We may use any interrupts in this range */ +#define MM81X_HIF_IRQ_MASK_ALL \ + (GENMASK(13, 0) | MM81X_HIF_IRQ_BYPASS_TX_STATUS_AVAILABLE | \ + MM81X_HIF_IRQ_BYPASS_CMD_RESP_AVAILABLE) + +enum mm81x_hif_flags { + MM81X_HIF_FLAGS_DIR_TO_HOST = BIT(0), + MM81X_HIF_FLAGS_DIR_TO_CHIP = BIT(1), + MM81X_HIF_FLAGS_COMMAND = BIT(2), + MM81X_HIF_FLAGS_BEACON = BIT(3), + MM81X_HIF_FLAGS_DATA = BIT(4) +}; + +struct mm81x_hif_ops { + int (*init)(struct mm81x *mm); + void (*flush_tx_data)(struct mm81x *mm); + void (*flush_cmds)(struct mm81x *mm); + void (*finish)(struct mm81x *mm); + void (*skbq_get_tx_qs)(struct mm81x *mm, struct mm81x_skbq **qs, + int *num_qs); + struct mm81x_skbq *(*get_tx_cmd_queue)(struct mm81x *mm); + struct mm81x_skbq *(*get_tx_beacon_queue)(struct mm81x *mm); + struct mm81x_skbq *(*get_tx_mgmt_queue)(struct mm81x *mm); + struct mm81x_skbq *(*get_tx_data_queue)(struct mm81x *mm, int aci); + int (*handle_irq)(struct mm81x *mm, u32 status); + int (*get_tx_buffered_count)(struct mm81x *mm); + int (*get_tx_status_pending_count)(struct mm81x *mm); +}; + +static inline void mm81x_hif_clear_events(struct mm81x *mm) +{ + mm->hif.event_flags = 0; +} + +static inline int mm81x_hif_init(struct mm81x *mm) +{ + return mm->hif.ops->init(mm); +} + +static inline void mm81x_hif_flush_tx_data(struct mm81x *mm) +{ + mm->hif.ops->flush_tx_data(mm); +} + +static inline void mm81x_hif_flush_cmds(struct mm81x *mm) +{ + mm->hif.ops->flush_cmds(mm); +} + +static inline void mm81x_hif_finish(struct mm81x *mm) +{ + mm->hif.ops->finish(mm); +} + +static inline void mm81x_hif_skbq_get_tx_qs(struct mm81x *mm, + struct mm81x_skbq **qs, int *num_qs) +{ + mm->hif.ops->skbq_get_tx_qs(mm, qs, num_qs); +} + +static inline struct mm81x_skbq *mm81x_hif_get_tx_cmd_queue(struct mm81x *mm) +{ + return mm->hif.ops->get_tx_cmd_queue(mm); +} + +static inline struct mm81x_skbq *mm81x_hif_get_tx_beacon_queue(struct mm81x *mm) +{ + return mm->hif.ops->get_tx_beacon_queue(mm); +} + +static inline struct mm81x_skbq *mm81x_hif_get_tx_mgmt_queue(struct mm81x *mm) +{ + return mm->hif.ops->get_tx_mgmt_queue(mm); +} + +static inline struct mm81x_skbq *mm81x_hif_get_tx_data_queue(struct mm81x *mm, + int aci) +{ + return mm->hif.ops->get_tx_data_queue(mm, aci); +} + +static inline int mm81x_hif_handle_irq(struct mm81x *mm, u32 status) +{ + return mm->hif.ops->handle_irq(mm, status); +} + +static inline int mm81x_hif_get_tx_buffered_count(struct mm81x *mm) +{ + return mm->hif.ops->get_tx_buffered_count(mm); +} + +static inline int mm81x_hif_get_tx_status_pending_count(struct mm81x *mm) +{ + return mm->hif.ops->get_tx_status_pending_count(mm); +} + +#endif /* _MM81X_HIF_H_ */ -- 2.43.0