idxd.h (5fc8e85ff12ce0530ac658686902a0ee64600f56) idxd.h (47c16ac27d4cb664cee53ee0b9b7e2f907923fb3)
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#ifndef _IDXD_H_
4#define _IDXD_H_
5
6#include <linux/sbitmap.h>
7#include <linux/dmaengine.h>
8#include <linux/percpu-rwsem.h>
9#include <linux/wait.h>
10#include <linux/cdev.h>
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#ifndef _IDXD_H_
4#define _IDXD_H_
5
6#include <linux/sbitmap.h>
7#include <linux/dmaengine.h>
8#include <linux/percpu-rwsem.h>
9#include <linux/wait.h>
10#include <linux/cdev.h>
11#include <linux/idr.h>
11#include "registers.h"
12
13#define IDXD_DRIVER_VERSION "1.00"
14
15extern struct kmem_cache *idxd_desc_pool;
16
17struct idxd_device;
18struct idxd_wq;

--- 231 unchanged lines hidden (view full) ---

250
251#define confdev_to_idxd(dev) container_of(dev, struct idxd_device, conf_dev)
252#define confdev_to_wq(dev) container_of(dev, struct idxd_wq, conf_dev)
253
254extern struct bus_type dsa_bus_type;
255extern struct bus_type iax_bus_type;
256
257extern bool support_enqcmd;
12#include "registers.h"
13
14#define IDXD_DRIVER_VERSION "1.00"
15
16extern struct kmem_cache *idxd_desc_pool;
17
18struct idxd_device;
19struct idxd_wq;

--- 231 unchanged lines hidden (view full) ---

251
252#define confdev_to_idxd(dev) container_of(dev, struct idxd_device, conf_dev)
253#define confdev_to_wq(dev) container_of(dev, struct idxd_wq, conf_dev)
254
255extern struct bus_type dsa_bus_type;
256extern struct bus_type iax_bus_type;
257
258extern bool support_enqcmd;
259extern struct device_type dsa_device_type;
260extern struct device_type iax_device_type;
258
261
262static inline bool is_dsa_dev(struct device *dev)
263{
264 return dev->type == &dsa_device_type;
265}
266
267static inline bool is_iax_dev(struct device *dev)
268{
269 return dev->type == &iax_device_type;
270}
271
272static inline bool is_idxd_dev(struct device *dev)
273{
274 return is_dsa_dev(dev) || is_iax_dev(dev);
275}
276
259static inline bool wq_dedicated(struct idxd_wq *wq)
260{
261 return test_bit(WQ_FLAG_DEDICATED, &wq->flags);
262}
263
264static inline bool wq_shared(struct idxd_wq *wq)
265{
266 return !test_bit(WQ_FLAG_DEDICATED, &wq->flags);

--- 20 unchanged lines hidden (view full) ---

287}
288
289static inline int idxd_get_wq_portal_full_offset(int wq_id,
290 enum idxd_portal_prot prot)
291{
292 return ((wq_id * 4) << PAGE_SHIFT) + idxd_get_wq_portal_offset(prot);
293}
294
277static inline bool wq_dedicated(struct idxd_wq *wq)
278{
279 return test_bit(WQ_FLAG_DEDICATED, &wq->flags);
280}
281
282static inline bool wq_shared(struct idxd_wq *wq)
283{
284 return !test_bit(WQ_FLAG_DEDICATED, &wq->flags);

--- 20 unchanged lines hidden (view full) ---

305}
306
307static inline int idxd_get_wq_portal_full_offset(int wq_id,
308 enum idxd_portal_prot prot)
309{
310 return ((wq_id * 4) << PAGE_SHIFT) + idxd_get_wq_portal_offset(prot);
311}
312
295static inline void idxd_set_type(struct idxd_device *idxd)
296{
297 struct pci_dev *pdev = idxd->pdev;
298
299 if (pdev->device == PCI_DEVICE_ID_INTEL_DSA_SPR0)
300 idxd->type = IDXD_TYPE_DSA;
301 else if (pdev->device == PCI_DEVICE_ID_INTEL_IAX_SPR0)
302 idxd->type = IDXD_TYPE_IAX;
303 else
304 idxd->type = IDXD_TYPE_UNKNOWN;
305}
306
307static inline void idxd_wq_get(struct idxd_wq *wq)
308{
309 wq->client_count++;
310}
311
312static inline void idxd_wq_put(struct idxd_wq *wq)
313{
314 wq->client_count--;
315}
316
317static inline int idxd_wq_refcount(struct idxd_wq *wq)
318{
319 return wq->client_count;
320};
321
313static inline void idxd_wq_get(struct idxd_wq *wq)
314{
315 wq->client_count++;
316}
317
318static inline void idxd_wq_put(struct idxd_wq *wq)
319{
320 wq->client_count--;
321}
322
323static inline int idxd_wq_refcount(struct idxd_wq *wq)
324{
325 return wq->client_count;
326};
327
328struct ida *idxd_ida(struct idxd_device *idxd);
322const char *idxd_get_dev_name(struct idxd_device *idxd);
323int idxd_register_bus_type(void);
324void idxd_unregister_bus_type(void);
329const char *idxd_get_dev_name(struct idxd_device *idxd);
330int idxd_register_bus_type(void);
331void idxd_unregister_bus_type(void);
325int idxd_setup_sysfs(struct idxd_device *idxd);
326void idxd_cleanup_sysfs(struct idxd_device *idxd);
332int idxd_register_devices(struct idxd_device *idxd);
333void idxd_unregister_devices(struct idxd_device *idxd);
327int idxd_register_driver(void);
328void idxd_unregister_driver(void);
329struct bus_type *idxd_get_bus_type(struct idxd_device *idxd);
334int idxd_register_driver(void);
335void idxd_unregister_driver(void);
336struct bus_type *idxd_get_bus_type(struct idxd_device *idxd);
337struct device_type *idxd_get_device_type(struct idxd_device *idxd);
330
331/* device interrupt control */
332void idxd_msix_perm_setup(struct idxd_device *idxd);
333void idxd_msix_perm_clear(struct idxd_device *idxd);
334irqreturn_t idxd_irq_handler(int vec, void *data);
335irqreturn_t idxd_misc_thread(int vec, void *data);
336irqreturn_t idxd_wq_thread(int irq, void *data);
337void idxd_mask_error_interrupts(struct idxd_device *idxd);

--- 50 unchanged lines hidden ---
338
339/* device interrupt control */
340void idxd_msix_perm_setup(struct idxd_device *idxd);
341void idxd_msix_perm_clear(struct idxd_device *idxd);
342irqreturn_t idxd_irq_handler(int vec, void *data);
343irqreturn_t idxd_misc_thread(int vec, void *data);
344irqreturn_t idxd_wq_thread(int irq, void *data);
345void idxd_mask_error_interrupts(struct idxd_device *idxd);

--- 50 unchanged lines hidden ---