xref: /dpdk/drivers/crypto/bcmfs/bcmfs_device.h (revision 4851ef2b40bc31accfffc3bb476930a73f50afac)
1c8e79da7SVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause
2c8e79da7SVikas Gupta  * Copyright(C) 2020 Broadcom.
3c8e79da7SVikas Gupta  * All rights reserved.
4c8e79da7SVikas Gupta  */
5c8e79da7SVikas Gupta 
6c8e79da7SVikas Gupta #ifndef _BCMFS_DEVICE_H_
7c8e79da7SVikas Gupta #define _BCMFS_DEVICE_H_
8c8e79da7SVikas Gupta 
9c8e79da7SVikas Gupta #include <sys/queue.h>
10c8e79da7SVikas Gupta 
11d5a7873cSVikas Gupta #include <rte_spinlock.h>
12*4851ef2bSDavid Marchand #include <bus_vdev_driver.h>
13c8e79da7SVikas Gupta 
14c8e79da7SVikas Gupta #include "bcmfs_logs.h"
1547dcca06SVikas Gupta #include "bcmfs_qp.h"
16c8e79da7SVikas Gupta 
17c8e79da7SVikas Gupta /* max number of dev nodes */
18c8e79da7SVikas Gupta #define BCMFS_MAX_NODES		4
19c8e79da7SVikas Gupta #define BCMFS_MAX_PATH_LEN	512
20c8e79da7SVikas Gupta #define BCMFS_DEV_NAME_LEN	64
21c8e79da7SVikas Gupta 
22c8e79da7SVikas Gupta /* Path for BCM-Platform device directory */
23c8e79da7SVikas Gupta #define SYSFS_BCM_PLTFORM_DEVICES    "/sys/bus/platform/devices"
24c8e79da7SVikas Gupta 
25c8e79da7SVikas Gupta #define BCMFS_SYM_FS4_VERSION	0x76303031
26c8e79da7SVikas Gupta #define BCMFS_SYM_FS5_VERSION	0x76303032
27c8e79da7SVikas Gupta 
28c8e79da7SVikas Gupta /* Supported devices */
29c8e79da7SVikas Gupta enum bcmfs_device_type {
30c8e79da7SVikas Gupta 	BCMFS_SYM_FS4,
31c8e79da7SVikas Gupta 	BCMFS_SYM_FS5,
32c8e79da7SVikas Gupta 	BCMFS_UNKNOWN
33c8e79da7SVikas Gupta };
34c8e79da7SVikas Gupta 
357be78d02SJosh Soref /* A table to store registered queue pair operations */
36d5a7873cSVikas Gupta struct bcmfs_hw_queue_pair_ops_table {
37d5a7873cSVikas Gupta 	rte_spinlock_t tl;
38d5a7873cSVikas Gupta 	/* Number of used ops structs in the table. */
39d5a7873cSVikas Gupta 	uint32_t num_ops;
40d5a7873cSVikas Gupta 	 /*  Storage for all possible ops structs. */
41d5a7873cSVikas Gupta 	struct bcmfs_hw_queue_pair_ops qp_ops[BCMFS_MAX_NODES];
42d5a7873cSVikas Gupta };
43d5a7873cSVikas Gupta 
44d5a7873cSVikas Gupta /* HW queue pair ops register function */
45d5a7873cSVikas Gupta int
46d5a7873cSVikas Gupta bcmfs_hw_queue_pair_register_ops(const struct bcmfs_hw_queue_pair_ops *qp_ops);
47d5a7873cSVikas Gupta 
48c8e79da7SVikas Gupta struct bcmfs_device {
49c8e79da7SVikas Gupta 	TAILQ_ENTRY(bcmfs_device) next;
50c8e79da7SVikas Gupta 	/* Directory path for vfio */
51c8e79da7SVikas Gupta 	char dirname[BCMFS_MAX_PATH_LEN];
52c8e79da7SVikas Gupta 	/* BCMFS device name */
53c8e79da7SVikas Gupta 	char name[BCMFS_DEV_NAME_LEN];
54c8e79da7SVikas Gupta 	/* Parent vdev */
55c8e79da7SVikas Gupta 	struct rte_vdev_device *vdev;
5626b7dbaeSVikas Gupta 	/* vfio handle */
5726b7dbaeSVikas Gupta 	int vfio_dev_fd;
5826b7dbaeSVikas Gupta 	/* mapped address */
5926b7dbaeSVikas Gupta 	uint8_t *mmap_addr;
6026b7dbaeSVikas Gupta 	/* mapped size */
6126b7dbaeSVikas Gupta 	uint32_t mmap_size;
6247dcca06SVikas Gupta 	/* max number of h/w queue pairs detected */
6347dcca06SVikas Gupta 	uint16_t max_hw_qps;
6447dcca06SVikas Gupta 	/* current qpairs in use */
6547dcca06SVikas Gupta 	struct bcmfs_qp *qps_in_use[BCMFS_MAX_HW_QUEUES];
66d5a7873cSVikas Gupta 	/* queue pair ops exported by symmetric crypto hw */
67d5a7873cSVikas Gupta 	struct bcmfs_hw_queue_pair_ops *sym_hw_qp_ops;
68751dca90SVikas Gupta 	/* a cryptodevice attached to bcmfs device */
69751dca90SVikas Gupta 	struct rte_cryptodev *cdev;
70751dca90SVikas Gupta 	/* a rte_device to register with cryptodev */
71751dca90SVikas Gupta 	struct rte_device sym_rte_dev;
72751dca90SVikas Gupta 	/* private info to keep with cryptodev */
73751dca90SVikas Gupta 	struct bcmfs_sym_dev_private *sym_dev;
74c8e79da7SVikas Gupta };
75c8e79da7SVikas Gupta 
76c8e79da7SVikas Gupta #endif /* _BCMFS_DEVICE_H_ */
77