Lines Matching refs:espi
4 * File: espi.c *
32 #include "espi.h"
108 void t1_espi_intr_enable(struct peespi *espi)
110 u32 enable, pl_intr = readl(espi->adapter->regs + A_PL_ENABLE);
119 enable = t1_is_T1B(espi->adapter) ? 0 : ESPI_INTR_MASK;
120 writel(enable, espi->adapter->regs + A_ESPI_INTR_ENABLE);
121 writel(pl_intr | F_PL_INTR_ESPI, espi->adapter->regs + A_PL_ENABLE);
124 void t1_espi_intr_clear(struct peespi *espi)
126 readl(espi->adapter->regs + A_ESPI_DIP2_ERR_COUNT);
127 writel(0xffffffff, espi->adapter->regs + A_ESPI_INTR_STATUS);
128 writel(F_PL_INTR_ESPI, espi->adapter->regs + A_PL_CAUSE);
131 void t1_espi_intr_disable(struct peespi *espi)
133 u32 pl_intr = readl(espi->adapter->regs + A_PL_ENABLE);
135 writel(0, espi->adapter->regs + A_ESPI_INTR_ENABLE);
136 writel(pl_intr & ~F_PL_INTR_ESPI, espi->adapter->regs + A_PL_ENABLE);
139 int t1_espi_intr_handler(struct peespi *espi)
141 u32 status = readl(espi->adapter->regs + A_ESPI_INTR_STATUS);
144 espi->intr_cnt.DIP4_err++;
146 espi->intr_cnt.rx_drops++;
148 espi->intr_cnt.tx_drops++;
150 espi->intr_cnt.rx_ovflw++;
152 espi->intr_cnt.parity_err++;
154 espi->intr_cnt.DIP2_parity_err++;
160 readl(espi->adapter->regs + A_ESPI_DIP2_ERR_COUNT);
167 if (status && t1_is_T1B(espi->adapter))
169 writel(status, espi->adapter->regs + A_ESPI_INTR_STATUS);
173 const struct espi_intr_counts *t1_espi_get_intr_counts(struct peespi *espi)
175 return &espi->intr_cnt;
228 int t1_espi_init(struct peespi *espi, int mac_type, int nports)
231 adapter_t *adapter = espi->adapter;
264 espi->misc_ctrl = readl(adapter->regs + A_ESPI_MISC_CONTROL);
265 espi->misc_ctrl &= ~MON_MASK;
266 espi->misc_ctrl |= F_MONITORED_DIRECTION;
268 espi->misc_ctrl |= F_MONITORED_INTERFACE;
269 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
270 spin_lock_init(&espi->lock);
276 void t1_espi_destroy(struct peespi *espi)
278 kfree(espi);
283 struct peespi *espi = kzalloc(sizeof(*espi), GFP_KERNEL);
285 if (espi)
286 espi->adapter = adapter;
287 return espi;
293 struct peespi *espi = adapter->espi;
297 spin_lock(&espi->lock);
298 espi->misc_ctrl = (val & ~MON_MASK) |
299 (espi->misc_ctrl & MON_MASK);
300 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
301 spin_unlock(&espi->lock);
307 struct peespi *espi = adapter->espi;
315 if (!spin_trylock(&espi->lock))
318 spin_lock(&espi->lock);
320 if ((sel != (espi->misc_ctrl & MON_MASK))) {
321 writel(((espi->misc_ctrl & ~MON_MASK) | sel),
324 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
327 spin_unlock(&espi->lock);
338 struct peespi *espi = adapter->espi;
342 if (!spin_trylock(&espi->lock))
345 spin_lock(&espi->lock);
347 if ((espi->misc_ctrl & MON_MASK) != F_MONITORED_DIRECTION) {
348 espi->misc_ctrl = (espi->misc_ctrl & ~MON_MASK) |
350 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
354 writel(espi->misc_ctrl | V_MONITORED_PORT_NUM(i),
360 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
361 spin_unlock(&espi->lock);