162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci#ifndef P54PCI_H 362306a36Sopenharmony_ci#define P54PCI_H 462306a36Sopenharmony_ci#include <linux/interrupt.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci/* 762306a36Sopenharmony_ci * Defines for PCI based mac80211 Prism54 driver 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net> 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Based on the islsm (softmac prism54) driver, which is: 1262306a36Sopenharmony_ci * Copyright 2004-2006 Jean-Baptiste Note <jbnote@gmail.com>, et al. 1362306a36Sopenharmony_ci */ 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* Device Interrupt register bits */ 1662306a36Sopenharmony_ci#define ISL38XX_DEV_INT_RESET 0x0001 1762306a36Sopenharmony_ci#define ISL38XX_DEV_INT_UPDATE 0x0002 1862306a36Sopenharmony_ci#define ISL38XX_DEV_INT_WAKEUP 0x0008 1962306a36Sopenharmony_ci#define ISL38XX_DEV_INT_SLEEP 0x0010 2062306a36Sopenharmony_ci#define ISL38XX_DEV_INT_ABORT 0x0020 2162306a36Sopenharmony_ci/* these two only used in USB */ 2262306a36Sopenharmony_ci#define ISL38XX_DEV_INT_DATA 0x0040 2362306a36Sopenharmony_ci#define ISL38XX_DEV_INT_MGMT 0x0080 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define ISL38XX_DEV_INT_PCIUART_CTS 0x4000 2662306a36Sopenharmony_ci#define ISL38XX_DEV_INT_PCIUART_DR 0x8000 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* Interrupt Identification/Acknowledge/Enable register bits */ 2962306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_UPDATE 0x0002 3062306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_INIT 0x0004 3162306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_WAKEUP 0x0008 3262306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_SLEEP 0x0010 3362306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_PCIUART_CTS 0x4000 3462306a36Sopenharmony_ci#define ISL38XX_INT_IDENT_PCIUART_DR 0x8000 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* Control/Status register bits */ 3762306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_SLEEPMODE 0x00000200 3862306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_CLKRUN 0x00800000 3962306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_RESET 0x10000000 4062306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_RAMBOOT 0x20000000 4162306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_STARTHALTED 0x40000000 4262306a36Sopenharmony_ci#define ISL38XX_CTRL_STAT_HOST_OVERRIDE 0x80000000 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistruct p54p_csr { 4562306a36Sopenharmony_ci __le32 dev_int; 4662306a36Sopenharmony_ci u8 unused_1[12]; 4762306a36Sopenharmony_ci __le32 int_ident; 4862306a36Sopenharmony_ci __le32 int_ack; 4962306a36Sopenharmony_ci __le32 int_enable; 5062306a36Sopenharmony_ci u8 unused_2[4]; 5162306a36Sopenharmony_ci union { 5262306a36Sopenharmony_ci __le32 ring_control_base; 5362306a36Sopenharmony_ci __le32 gen_purp_com[2]; 5462306a36Sopenharmony_ci }; 5562306a36Sopenharmony_ci u8 unused_3[8]; 5662306a36Sopenharmony_ci __le32 direct_mem_base; 5762306a36Sopenharmony_ci u8 unused_4[44]; 5862306a36Sopenharmony_ci __le32 dma_addr; 5962306a36Sopenharmony_ci __le32 dma_len; 6062306a36Sopenharmony_ci __le32 dma_ctrl; 6162306a36Sopenharmony_ci u8 unused_5[12]; 6262306a36Sopenharmony_ci __le32 ctrl_stat; 6362306a36Sopenharmony_ci u8 unused_6[1924]; 6462306a36Sopenharmony_ci u8 cardbus_cis[0x800]; 6562306a36Sopenharmony_ci u8 direct_mem_win[0x1000]; 6662306a36Sopenharmony_ci} __packed; 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci/* usb backend only needs the register defines above */ 6962306a36Sopenharmony_ci#ifndef P54USB_H 7062306a36Sopenharmony_cistruct p54p_desc { 7162306a36Sopenharmony_ci __le32 host_addr; 7262306a36Sopenharmony_ci __le32 device_addr; 7362306a36Sopenharmony_ci __le16 len; 7462306a36Sopenharmony_ci __le16 flags; 7562306a36Sopenharmony_ci} __packed; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct p54p_ring_control { 7862306a36Sopenharmony_ci __le32 host_idx[4]; 7962306a36Sopenharmony_ci __le32 device_idx[4]; 8062306a36Sopenharmony_ci struct p54p_desc rx_data[8]; 8162306a36Sopenharmony_ci struct p54p_desc tx_data[32]; 8262306a36Sopenharmony_ci struct p54p_desc rx_mgmt[4]; 8362306a36Sopenharmony_ci struct p54p_desc tx_mgmt[4]; 8462306a36Sopenharmony_ci} __packed; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci#define P54P_READ(r) (__force __le32)__raw_readl(&priv->map->r) 8762306a36Sopenharmony_ci#define P54P_WRITE(r, val) __raw_writel((__force u32)(__le32)(val), &priv->map->r) 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct p54p_priv { 9062306a36Sopenharmony_ci struct p54_common common; 9162306a36Sopenharmony_ci struct pci_dev *pdev; 9262306a36Sopenharmony_ci struct p54p_csr __iomem *map; 9362306a36Sopenharmony_ci struct tasklet_struct tasklet; 9462306a36Sopenharmony_ci const struct firmware *firmware; 9562306a36Sopenharmony_ci spinlock_t lock; 9662306a36Sopenharmony_ci struct p54p_ring_control *ring_control; 9762306a36Sopenharmony_ci dma_addr_t ring_control_dma; 9862306a36Sopenharmony_ci u32 rx_idx_data, tx_idx_data; 9962306a36Sopenharmony_ci u32 rx_idx_mgmt, tx_idx_mgmt; 10062306a36Sopenharmony_ci struct sk_buff *rx_buf_data[8]; 10162306a36Sopenharmony_ci struct sk_buff *rx_buf_mgmt[4]; 10262306a36Sopenharmony_ci struct sk_buff *tx_buf_data[32]; 10362306a36Sopenharmony_ci struct sk_buff *tx_buf_mgmt[4]; 10462306a36Sopenharmony_ci struct completion boot_comp; 10562306a36Sopenharmony_ci struct completion fw_loaded; 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#endif /* P54USB_H */ 10962306a36Sopenharmony_ci#endif /* P54PCI_H */ 110