Lines Matching refs:dev

80 static u32 mt7996_reg_map_l1(struct mt7996_dev *dev, u32 addr)  in mt7996_reg_map_l1()  argument
85 dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L1, in mt7996_reg_map_l1()
89 dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L1); in mt7996_reg_map_l1()
94 static u32 mt7996_reg_map_l2(struct mt7996_dev *dev, u32 addr) in mt7996_reg_map_l2() argument
99 dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2, in mt7996_reg_map_l2()
103 dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2); in mt7996_reg_map_l2()
108 static u32 __mt7996_reg_addr(struct mt7996_dev *dev, u32 addr) in __mt7996_reg_addr() argument
115 for (i = 0; i < dev->reg.map_size; i++) { in __mt7996_reg_addr()
118 if (addr < dev->reg.map[i].phys) in __mt7996_reg_addr()
121 ofs = addr - dev->reg.map[i].phys; in __mt7996_reg_addr()
122 if (ofs > dev->reg.map[i].size) in __mt7996_reg_addr()
125 return dev->reg.map[i].mapped + ofs; in __mt7996_reg_addr()
131 static u32 __mt7996_reg_remap_addr(struct mt7996_dev *dev, u32 addr) in __mt7996_reg_remap_addr() argument
136 return mt7996_reg_map_l1(dev, addr); in __mt7996_reg_remap_addr()
138 if (dev_is_pci(dev->mt76.dev) && in __mt7996_reg_remap_addr()
141 return mt7996_reg_map_l1(dev, addr); in __mt7996_reg_remap_addr()
146 return mt7996_reg_map_l1(dev, addr); in __mt7996_reg_remap_addr()
149 return mt7996_reg_map_l2(dev, addr); in __mt7996_reg_remap_addr()
152 void mt7996_memcpy_fromio(struct mt7996_dev *dev, void *buf, u32 offset, in mt7996_memcpy_fromio() argument
155 u32 addr = __mt7996_reg_addr(dev, offset); in mt7996_memcpy_fromio()
158 memcpy_fromio(buf, dev->mt76.mmio.regs + addr, len); in mt7996_memcpy_fromio()
162 spin_lock_bh(&dev->reg_lock); in mt7996_memcpy_fromio()
163 memcpy_fromio(buf, dev->mt76.mmio.regs + in mt7996_memcpy_fromio()
164 __mt7996_reg_remap_addr(dev, offset), len); in mt7996_memcpy_fromio()
165 spin_unlock_bh(&dev->reg_lock); in mt7996_memcpy_fromio()
170 struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_rr() local
171 u32 addr = __mt7996_reg_addr(dev, offset), val; in mt7996_rr()
174 return dev->bus_ops->rr(mdev, addr); in mt7996_rr()
176 spin_lock_bh(&dev->reg_lock); in mt7996_rr()
177 val = dev->bus_ops->rr(mdev, __mt7996_reg_remap_addr(dev, offset)); in mt7996_rr()
178 spin_unlock_bh(&dev->reg_lock); in mt7996_rr()
185 struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_wr() local
186 u32 addr = __mt7996_reg_addr(dev, offset); in mt7996_wr()
189 dev->bus_ops->wr(mdev, addr, val); in mt7996_wr()
193 spin_lock_bh(&dev->reg_lock); in mt7996_wr()
194 dev->bus_ops->wr(mdev, __mt7996_reg_remap_addr(dev, offset), val); in mt7996_wr()
195 spin_unlock_bh(&dev->reg_lock); in mt7996_wr()
200 struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_rmw() local
201 u32 addr = __mt7996_reg_addr(dev, offset); in mt7996_rmw()
204 return dev->bus_ops->rmw(mdev, addr, mask, val); in mt7996_rmw()
206 spin_lock_bh(&dev->reg_lock); in mt7996_rmw()
207 val = dev->bus_ops->rmw(mdev, __mt7996_reg_remap_addr(dev, offset), mask, val); in mt7996_rmw()
208 spin_unlock_bh(&dev->reg_lock); in mt7996_rmw()
218 struct mt7996_dev *dev; in mt7996_mmio_init() local
220 dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_mmio_init()
221 mt76_mmio_init(&dev->mt76, mem_base); in mt7996_mmio_init()
222 spin_lock_init(&dev->reg_lock); in mt7996_mmio_init()
226 dev->reg.base = mt7996_reg_base; in mt7996_mmio_init()
227 dev->reg.map = mt7996_reg_map; in mt7996_mmio_init()
228 dev->reg.map_size = ARRAY_SIZE(mt7996_reg_map); in mt7996_mmio_init()
234 dev->bus_ops = dev->mt76.bus; in mt7996_mmio_init()
235 bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops), in mt7996_mmio_init()
243 dev->mt76.bus = bus_ops; in mt7996_mmio_init()
245 mdev->rev = (device_id << 16) | (mt76_rr(dev, MT_HW_REV) & 0xff); in mt7996_mmio_init()
247 dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev); in mt7996_mmio_init()
252 void mt7996_dual_hif_set_irq_mask(struct mt7996_dev *dev, bool write_reg, in mt7996_dual_hif_set_irq_mask() argument
255 struct mt76_dev *mdev = &dev->mt76; in mt7996_dual_hif_set_irq_mask()
264 mt76_wr(dev, MT_INT_MASK_CSR, mdev->mmio.irqmask); in mt7996_dual_hif_set_irq_mask()
265 mt76_wr(dev, MT_INT1_MASK_CSR, mdev->mmio.irqmask); in mt7996_dual_hif_set_irq_mask()
274 struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_rx_poll_complete() local
276 mt7996_irq_enable(dev, MT_INT_RX(q)); in mt7996_rx_poll_complete()
282 struct mt7996_dev *dev = from_tasklet(dev, t, mt76.irq_tasklet); in mt7996_irq_tasklet() local
285 mt76_wr(dev, MT_INT_MASK_CSR, 0); in mt7996_irq_tasklet()
286 if (dev->hif2) in mt7996_irq_tasklet()
287 mt76_wr(dev, MT_INT1_MASK_CSR, 0); in mt7996_irq_tasklet()
289 intr = mt76_rr(dev, MT_INT_SOURCE_CSR); in mt7996_irq_tasklet()
290 intr &= dev->mt76.mmio.irqmask; in mt7996_irq_tasklet()
291 mt76_wr(dev, MT_INT_SOURCE_CSR, intr); in mt7996_irq_tasklet()
293 if (dev->hif2) { in mt7996_irq_tasklet()
294 intr1 = mt76_rr(dev, MT_INT1_SOURCE_CSR); in mt7996_irq_tasklet()
295 intr1 &= dev->mt76.mmio.irqmask; in mt7996_irq_tasklet()
296 mt76_wr(dev, MT_INT1_SOURCE_CSR, intr1); in mt7996_irq_tasklet()
301 trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask); in mt7996_irq_tasklet()
306 mt7996_irq_disable(dev, mask); in mt7996_irq_tasklet()
309 napi_schedule(&dev->mt76.tx_napi); in mt7996_irq_tasklet()
313 napi_schedule(&dev->mt76.napi[i]); in mt7996_irq_tasklet()
317 u32 val = mt76_rr(dev, MT_MCU_CMD); in mt7996_irq_tasklet()
319 mt76_wr(dev, MT_MCU_CMD, val); in mt7996_irq_tasklet()
321 dev->recovery.state = val; in mt7996_irq_tasklet()
322 mt7996_reset(dev); in mt7996_irq_tasklet()
329 struct mt7996_dev *dev = dev_instance; in mt7996_irq_handler() local
331 mt76_wr(dev, MT_INT_MASK_CSR, 0); in mt7996_irq_handler()
332 if (dev->hif2) in mt7996_irq_handler()
333 mt76_wr(dev, MT_INT1_MASK_CSR, 0); in mt7996_irq_handler()
335 if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state)) in mt7996_irq_handler()
338 tasklet_schedule(&dev->mt76.irq_tasklet); in mt7996_irq_handler()
365 struct mt7996_dev *dev; in mt7996_mmio_probe() local
369 mdev = mt76_alloc_device(pdev, sizeof(*dev), &mt7996_ops, &drv_ops); in mt7996_mmio_probe()
373 dev = container_of(mdev, struct mt7996_dev, mt76); in mt7996_mmio_probe()
381 mt76_wr(dev, MT_INT_MASK_CSR, 0); in mt7996_mmio_probe()
383 return dev; in mt7996_mmio_probe()
386 mt76_free_device(&dev->mt76); in mt7996_mmio_probe()