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