Lines Matching defs:espi

3  * File: espi.c                                                              *
41 #include "espi.h"
117 void t1_espi_intr_enable(struct peespi *espi)
119 u32 enable, pl_intr = readl(espi->adapter->regs + A_PL_ENABLE);
128 enable = t1_is_T1B(espi->adapter) ? 0 : ESPI_INTR_MASK;
129 writel(enable, espi->adapter->regs + A_ESPI_INTR_ENABLE);
130 writel(pl_intr | F_PL_INTR_ESPI, espi->adapter->regs + A_PL_ENABLE);
133 void t1_espi_intr_clear(struct peespi *espi)
135 readl(espi->adapter->regs + A_ESPI_DIP2_ERR_COUNT);
136 writel(0xffffffff, espi->adapter->regs + A_ESPI_INTR_STATUS);
137 writel(F_PL_INTR_ESPI, espi->adapter->regs + A_PL_CAUSE);
140 void t1_espi_intr_disable(struct peespi *espi)
142 u32 pl_intr = readl(espi->adapter->regs + A_PL_ENABLE);
144 writel(0, espi->adapter->regs + A_ESPI_INTR_ENABLE);
145 writel(pl_intr & ~F_PL_INTR_ESPI, espi->adapter->regs + A_PL_ENABLE);
148 int t1_espi_intr_handler(struct peespi *espi)
150 u32 status = readl(espi->adapter->regs + A_ESPI_INTR_STATUS);
153 espi->intr_cnt.DIP4_err++;
155 espi->intr_cnt.rx_drops++;
157 espi->intr_cnt.tx_drops++;
159 espi->intr_cnt.rx_ovflw++;
161 espi->intr_cnt.parity_err++;
163 espi->intr_cnt.DIP2_parity_err++;
169 readl(espi->adapter->regs + A_ESPI_DIP2_ERR_COUNT);
176 if (status && t1_is_T1B(espi->adapter))
178 writel(status, espi->adapter->regs + A_ESPI_INTR_STATUS);
182 const struct espi_intr_counts *t1_espi_get_intr_counts(struct peespi *espi)
184 return &espi->intr_cnt;
237 int t1_espi_init(struct peespi *espi, int mac_type, int nports)
240 adapter_t *adapter = espi->adapter;
273 espi->misc_ctrl = readl(adapter->regs + A_ESPI_MISC_CONTROL);
274 espi->misc_ctrl &= ~MON_MASK;
275 espi->misc_ctrl |= F_MONITORED_DIRECTION;
277 espi->misc_ctrl |= F_MONITORED_INTERFACE;
278 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
279 spin_lock_init(&espi->lock);
285 void t1_espi_destroy(struct peespi *espi)
287 kfree(espi);
292 struct peespi *espi = kzalloc(sizeof(*espi), GFP_KERNEL);
294 if (espi)
295 espi->adapter = adapter;
296 return espi;
302 struct peespi *espi = adapter->espi;
306 spin_lock(&espi->lock);
307 espi->misc_ctrl = (val & ~MON_MASK) |
308 (espi->misc_ctrl & MON_MASK);
309 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
310 spin_unlock(&espi->lock);
316 struct peespi *espi = adapter->espi;
324 if (!spin_trylock(&espi->lock))
327 spin_lock(&espi->lock);
329 if ((sel != (espi->misc_ctrl & MON_MASK))) {
330 writel(((espi->misc_ctrl & ~MON_MASK) | sel),
333 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
336 spin_unlock(&espi->lock);
347 struct peespi *espi = adapter->espi;
351 if (!spin_trylock(&espi->lock))
354 spin_lock(&espi->lock);
356 if ((espi->misc_ctrl & MON_MASK) != F_MONITORED_DIRECTION) {
357 espi->misc_ctrl = (espi->misc_ctrl & ~MON_MASK) |
359 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
363 writel(espi->misc_ctrl | V_MONITORED_PORT_NUM(i),
369 writel(espi->misc_ctrl, adapter->regs + A_ESPI_MISC_CONTROL);
370 spin_unlock(&espi->lock);