The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/include/common/adf_common_drv.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: BSD-3-Clause */
    2 /* Copyright(c) 2007-2022 Intel Corporation */
    3 /* $FreeBSD$ */
    4 #ifndef ADF_DRV_H
    5 #define ADF_DRV_H
    6 
    7 #include <dev/pci/pcivar.h>
    8 #include "adf_accel_devices.h"
    9 #include "icp_qat_fw_loader_handle.h"
   10 #include "icp_qat_hal.h"
   11 #include "adf_cfg_user.h"
   12 
   13 #define ADF_MAJOR_VERSION 0
   14 #define ADF_MINOR_VERSION 6
   15 #define ADF_BUILD_VERSION 0
   16 #define ADF_DRV_VERSION                                                        \
   17         __stringify(ADF_MAJOR_VERSION) "." __stringify(                        \
   18             ADF_MINOR_VERSION) "." __stringify(ADF_BUILD_VERSION)
   19 
   20 #define ADF_STATUS_RESTARTING 0
   21 #define ADF_STATUS_STARTING 1
   22 #define ADF_STATUS_CONFIGURED 2
   23 #define ADF_STATUS_STARTED 3
   24 #define ADF_STATUS_AE_INITIALISED 4
   25 #define ADF_STATUS_AE_UCODE_LOADED 5
   26 #define ADF_STATUS_AE_STARTED 6
   27 #define ADF_STATUS_PF_RUNNING 7
   28 #define ADF_STATUS_IRQ_ALLOCATED 8
   29 #define ADF_PCIE_FLR_ATTEMPT 10
   30 #define ADF_STATUS_SYSCTL_CTX_INITIALISED 9
   31 
   32 #define PCI_EXP_AERUCS 0x104
   33 
   34 /* PMISC BAR upper and lower offsets in PCIe config space */
   35 #define ADF_PMISC_L_OFFSET 0x18
   36 #define ADF_PMISC_U_OFFSET 0x1c
   37 
   38 enum adf_dev_reset_mode { ADF_DEV_RESET_ASYNC = 0, ADF_DEV_RESET_SYNC };
   39 
   40 enum adf_event {
   41         ADF_EVENT_INIT = 0,
   42         ADF_EVENT_START,
   43         ADF_EVENT_STOP,
   44         ADF_EVENT_SHUTDOWN,
   45         ADF_EVENT_RESTARTING,
   46         ADF_EVENT_RESTARTED,
   47         ADF_EVENT_ERROR,
   48 };
   49 
   50 struct adf_state {
   51         enum adf_event dev_state;
   52         int dev_id;
   53 };
   54 
   55 struct service_hndl {
   56         int (*event_hld)(struct adf_accel_dev *accel_dev, enum adf_event event);
   57         unsigned long init_status[ADF_DEVS_ARRAY_SIZE];
   58         unsigned long start_status[ADF_DEVS_ARRAY_SIZE];
   59         char *name;
   60         struct list_head list;
   61 };
   62 
   63 static inline int
   64 get_current_node(void)
   65 {
   66         return PCPU_GET(domain);
   67 }
   68 
   69 int adf_service_register(struct service_hndl *service);
   70 int adf_service_unregister(struct service_hndl *service);
   71 
   72 int adf_dev_init(struct adf_accel_dev *accel_dev);
   73 int adf_dev_start(struct adf_accel_dev *accel_dev);
   74 int adf_dev_stop(struct adf_accel_dev *accel_dev);
   75 void adf_dev_shutdown(struct adf_accel_dev *accel_dev);
   76 int adf_dev_autoreset(struct adf_accel_dev *accel_dev);
   77 int adf_dev_reset(struct adf_accel_dev *accel_dev,
   78                   enum adf_dev_reset_mode mode);
   79 int adf_dev_aer_schedule_reset(struct adf_accel_dev *accel_dev,
   80                                enum adf_dev_reset_mode mode);
   81 void adf_error_notifier(uintptr_t arg);
   82 int adf_init_fatal_error_wq(void);
   83 void adf_exit_fatal_error_wq(void);
   84 int adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr);
   85 int adf_iov_notify(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr);
   86 void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev);
   87 int adf_notify_fatal_error(struct adf_accel_dev *accel_dev);
   88 void adf_pf2vf_notify_fatal_error(struct adf_accel_dev *accel_dev);
   89 void adf_pf2vf_notify_uncorrectable_error(struct adf_accel_dev *accel_dev);
   90 void adf_pf2vf_notify_heartbeat_error(struct adf_accel_dev *accel_dev);
   91 typedef int (*adf_iov_block_provider)(struct adf_accel_dev *accel_dev,
   92                                       u8 **buffer,
   93                                       u8 *length,
   94                                       u8 *block_version,
   95                                       u8 compatibility,
   96                                       u8 byte_num);
   97 int adf_iov_block_provider_register(u8 block_type,
   98                                     const adf_iov_block_provider provider);
   99 u8 adf_iov_is_block_provider_registered(u8 block_type);
  100 int adf_iov_block_provider_unregister(u8 block_type,
  101                                       const adf_iov_block_provider provider);
  102 int adf_iov_block_get(struct adf_accel_dev *accel_dev,
  103                       u8 block_type,
  104                       u8 *block_version,
  105                       u8 *buffer,
  106                       u8 *length);
  107 u8 adf_pfvf_crc(u8 start_crc, u8 *buf, u8 len);
  108 int adf_iov_init_compat_manager(struct adf_accel_dev *accel_dev,
  109                                 struct adf_accel_compat_manager **cm);
  110 int adf_iov_shutdown_compat_manager(struct adf_accel_dev *accel_dev,
  111                                     struct adf_accel_compat_manager **cm);
  112 int adf_iov_register_compat_checker(struct adf_accel_dev *accel_dev,
  113                                     const adf_iov_compat_checker_t cc);
  114 int adf_iov_unregister_compat_checker(struct adf_accel_dev *accel_dev,
  115                                       const adf_iov_compat_checker_t cc);
  116 int adf_pf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev);
  117 int adf_pf_disable_vf2pf_comms(struct adf_accel_dev *accel_dev);
  118 int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev);
  119 int adf_disable_vf2pf_comms(struct adf_accel_dev *accel_dev);
  120 void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info);
  121 void adf_devmgr_update_class_index(struct adf_hw_device_data *hw_data);
  122 void adf_clean_vf_map(bool);
  123 int adf_sysctl_add_fw_versions(struct adf_accel_dev *accel_dev);
  124 int adf_sysctl_remove_fw_versions(struct adf_accel_dev *accel_dev);
  125 
  126 int adf_ctl_dev_register(void);
  127 void adf_ctl_dev_unregister(void);
  128 int adf_pf_vf_capabilities_init(struct adf_accel_dev *accel_dev);
  129 int adf_pf_ext_dc_cap_msg_provider(struct adf_accel_dev *accel_dev,
  130                                    u8 **buffer,
  131                                    u8 *length,
  132                                    u8 *block_version,
  133                                    u8 compatibility);
  134 int adf_pf_vf_ring_to_svc_init(struct adf_accel_dev *accel_dev);
  135 int adf_pf_ring_to_svc_msg_provider(struct adf_accel_dev *accel_dev,
  136                                     u8 **buffer,
  137                                     u8 *length,
  138                                     u8 *block_version,
  139                                     u8 compatibility,
  140                                     u8 byte_num);
  141 int adf_devmgr_add_dev(struct adf_accel_dev *accel_dev,
  142                        struct adf_accel_dev *pf);
  143 void adf_devmgr_rm_dev(struct adf_accel_dev *accel_dev,
  144                        struct adf_accel_dev *pf);
  145 struct list_head *adf_devmgr_get_head(void);
  146 struct adf_accel_dev *adf_devmgr_get_dev_by_id(uint32_t id);
  147 struct adf_accel_dev *adf_devmgr_get_first(void);
  148 struct adf_accel_dev *adf_devmgr_pci_to_accel_dev(device_t pci_dev);
  149 int adf_devmgr_verify_id(uint32_t *id);
  150 void adf_devmgr_get_num_dev(uint32_t *num);
  151 int adf_devmgr_in_reset(struct adf_accel_dev *accel_dev);
  152 int adf_dev_started(struct adf_accel_dev *accel_dev);
  153 int adf_dev_restarting_notify(struct adf_accel_dev *accel_dev);
  154 int adf_dev_restarting_notify_sync(struct adf_accel_dev *accel_dev);
  155 int adf_dev_restarted_notify(struct adf_accel_dev *accel_dev);
  156 int adf_dev_stop_notify_sync(struct adf_accel_dev *accel_dev);
  157 int adf_ae_init(struct adf_accel_dev *accel_dev);
  158 int adf_ae_shutdown(struct adf_accel_dev *accel_dev);
  159 int adf_ae_fw_load(struct adf_accel_dev *accel_dev);
  160 void adf_ae_fw_release(struct adf_accel_dev *accel_dev);
  161 int adf_ae_start(struct adf_accel_dev *accel_dev);
  162 int adf_ae_stop(struct adf_accel_dev *accel_dev);
  163 
  164 int adf_aer_store_ppaerucm_reg(device_t pdev,
  165                                struct adf_hw_device_data *hw_data);
  166 
  167 int adf_enable_aer(struct adf_accel_dev *accel_dev, device_t *adf);
  168 void adf_disable_aer(struct adf_accel_dev *accel_dev);
  169 void adf_reset_sbr(struct adf_accel_dev *accel_dev);
  170 void adf_reset_flr(struct adf_accel_dev *accel_dev);
  171 void adf_dev_pre_reset(struct adf_accel_dev *accel_dev);
  172 void adf_dev_post_reset(struct adf_accel_dev *accel_dev);
  173 void adf_dev_restore(struct adf_accel_dev *accel_dev);
  174 int adf_init_aer(void);
  175 void adf_exit_aer(void);
  176 int adf_put_admin_msg_sync(struct adf_accel_dev *accel_dev,
  177                            u32 ae,
  178                            void *in,
  179                            void *out);
  180 struct icp_qat_fw_init_admin_req;
  181 struct icp_qat_fw_init_admin_resp;
  182 int adf_send_admin(struct adf_accel_dev *accel_dev,
  183                    struct icp_qat_fw_init_admin_req *req,
  184                    struct icp_qat_fw_init_admin_resp *resp,
  185                    u32 ae_mask);
  186 int adf_config_device(struct adf_accel_dev *accel_dev);
  187 
  188 int adf_init_admin_comms(struct adf_accel_dev *accel_dev);
  189 void adf_exit_admin_comms(struct adf_accel_dev *accel_dev);
  190 int adf_send_admin_init(struct adf_accel_dev *accel_dev);
  191 int adf_get_fw_timestamp(struct adf_accel_dev *accel_dev, u64 *timestamp);
  192 int adf_get_fw_pke_stats(struct adf_accel_dev *accel_dev,
  193                          u64 *suc_count,
  194                          u64 *unsuc_count);
  195 int adf_dev_measure_clock(struct adf_accel_dev *accel_dev,
  196                           u32 *frequency,
  197                           u32 min,
  198                           u32 max);
  199 int adf_clock_debugfs_add(struct adf_accel_dev *accel_dev);
  200 u64 adf_clock_get_current_time(void);
  201 int adf_init_arb(struct adf_accel_dev *accel_dev);
  202 int adf_init_gen2_arb(struct adf_accel_dev *accel_dev);
  203 void adf_exit_arb(struct adf_accel_dev *accel_dev);
  204 void adf_disable_arb(struct adf_accel_dev *accel_dev);
  205 void adf_update_ring_arb(struct adf_etr_ring_data *ring);
  206 void adf_enable_ring_arb(struct adf_accel_dev *accel_dev,
  207                          void *csr_addr,
  208                          unsigned int bank_nr,
  209                          unsigned int mask);
  210 void adf_disable_ring_arb(struct adf_accel_dev *accel_dev,
  211                           void *csr_addr,
  212                           unsigned int bank_nr,
  213                           unsigned int mask);
  214 int adf_set_ssm_wdtimer(struct adf_accel_dev *accel_dev);
  215 struct adf_accel_dev *adf_devmgr_get_dev_by_bdf(struct adf_pci_address *addr);
  216 struct adf_accel_dev *adf_devmgr_get_dev_by_pci_bus(u8 bus);
  217 int adf_get_vf_nr(struct adf_pci_address *vf_pci_addr, int *vf_nr);
  218 u32 adf_get_slices_for_svc(struct adf_accel_dev *accel_dev,
  219                            enum adf_svc_type svc);
  220 bool adf_is_bdf_equal(struct adf_pci_address *bdf1,
  221                       struct adf_pci_address *bdf2);
  222 int adf_is_vf_nr_valid(struct adf_accel_dev *accel_dev, int vf_nr);
  223 void adf_dev_get(struct adf_accel_dev *accel_dev);
  224 void adf_dev_put(struct adf_accel_dev *accel_dev);
  225 int adf_dev_in_use(struct adf_accel_dev *accel_dev);
  226 int adf_init_etr_data(struct adf_accel_dev *accel_dev);
  227 void adf_cleanup_etr_data(struct adf_accel_dev *accel_dev);
  228 
  229 struct qat_crypto_instance *qat_crypto_get_instance_node(int node);
  230 void qat_crypto_put_instance(struct qat_crypto_instance *inst);
  231 void qat_alg_callback(void *resp);
  232 void qat_alg_asym_callback(void *resp);
  233 int qat_algs_register(void);
  234 void qat_algs_unregister(void);
  235 int qat_asym_algs_register(void);
  236 void qat_asym_algs_unregister(void);
  237 
  238 int adf_isr_resource_alloc(struct adf_accel_dev *accel_dev);
  239 void adf_isr_resource_free(struct adf_accel_dev *accel_dev);
  240 int adf_vf_isr_resource_alloc(struct adf_accel_dev *accel_dev);
  241 void adf_vf_isr_resource_free(struct adf_accel_dev *accel_dev);
  242 
  243 int qat_hal_init(struct adf_accel_dev *accel_dev);
  244 void qat_hal_deinit(struct icp_qat_fw_loader_handle *handle);
  245 int qat_hal_start(struct icp_qat_fw_loader_handle *handle);
  246 void qat_hal_stop(struct icp_qat_fw_loader_handle *handle,
  247                   unsigned char ae,
  248                   unsigned int ctx_mask);
  249 void qat_hal_reset(struct icp_qat_fw_loader_handle *handle);
  250 int qat_hal_clr_reset(struct icp_qat_fw_loader_handle *handle);
  251 void qat_hal_set_live_ctx(struct icp_qat_fw_loader_handle *handle,
  252                           unsigned char ae,
  253                           unsigned int ctx_mask);
  254 int qat_hal_check_ae_active(struct icp_qat_fw_loader_handle *handle,
  255                             unsigned int ae);
  256 int qat_hal_set_ae_lm_mode(struct icp_qat_fw_loader_handle *handle,
  257                            unsigned char ae,
  258                            enum icp_qat_uof_regtype lm_type,
  259                            unsigned char mode);
  260 void qat_hal_set_ae_tindex_mode(struct icp_qat_fw_loader_handle *handle,
  261                                 unsigned char ae,
  262                                 unsigned char mode);
  263 void qat_hal_set_ae_scs_mode(struct icp_qat_fw_loader_handle *handle,
  264                              unsigned char ae,
  265                              unsigned char mode);
  266 int qat_hal_set_ae_ctx_mode(struct icp_qat_fw_loader_handle *handle,
  267                             unsigned char ae,
  268                             unsigned char mode);
  269 int qat_hal_set_ae_nn_mode(struct icp_qat_fw_loader_handle *handle,
  270                            unsigned char ae,
  271                            unsigned char mode);
  272 void qat_hal_set_pc(struct icp_qat_fw_loader_handle *handle,
  273                     unsigned char ae,
  274                     unsigned int ctx_mask,
  275                     unsigned int upc);
  276 void qat_hal_wr_uwords(struct icp_qat_fw_loader_handle *handle,
  277                        unsigned char ae,
  278                        unsigned int uaddr,
  279                        unsigned int words_num,
  280                        const uint64_t *uword);
  281 void qat_hal_wr_coalesce_uwords(struct icp_qat_fw_loader_handle *handle,
  282                                 unsigned char ae,
  283                                 unsigned int uaddr,
  284                                 unsigned int words_num,
  285                                 uint64_t *uword);
  286 
  287 void qat_hal_wr_umem(struct icp_qat_fw_loader_handle *handle,
  288                      unsigned char ae,
  289                      unsigned int uword_addr,
  290                      unsigned int words_num,
  291                      unsigned int *data);
  292 int qat_hal_get_ins_num(void);
  293 int qat_hal_batch_wr_lm(struct icp_qat_fw_loader_handle *handle,
  294                         unsigned char ae,
  295                         struct icp_qat_uof_batch_init *lm_init_header);
  296 int qat_hal_init_gpr(struct icp_qat_fw_loader_handle *handle,
  297                      unsigned char ae,
  298                      unsigned long ctx_mask,
  299                      enum icp_qat_uof_regtype reg_type,
  300                      unsigned short reg_num,
  301                      unsigned int regdata);
  302 int qat_hal_init_wr_xfer(struct icp_qat_fw_loader_handle *handle,
  303                          unsigned char ae,
  304                          unsigned long ctx_mask,
  305                          enum icp_qat_uof_regtype reg_type,
  306                          unsigned short reg_num,
  307                          unsigned int regdata);
  308 int qat_hal_init_rd_xfer(struct icp_qat_fw_loader_handle *handle,
  309                          unsigned char ae,
  310                          unsigned long ctx_mask,
  311                          enum icp_qat_uof_regtype reg_type,
  312                          unsigned short reg_num,
  313                          unsigned int regdata);
  314 int qat_hal_init_nn(struct icp_qat_fw_loader_handle *handle,
  315                     unsigned char ae,
  316                     unsigned long ctx_mask,
  317                     unsigned short reg_num,
  318                     unsigned int regdata);
  319 int qat_hal_wr_lm(struct icp_qat_fw_loader_handle *handle,
  320                   unsigned char ae,
  321                   unsigned short lm_addr,
  322                   unsigned int value);
  323 int qat_uclo_wr_all_uimage(struct icp_qat_fw_loader_handle *handle);
  324 void qat_uclo_del_obj(struct icp_qat_fw_loader_handle *handle);
  325 void qat_uclo_del_mof(struct icp_qat_fw_loader_handle *handle);
  326 int qat_uclo_wr_mimage(struct icp_qat_fw_loader_handle *handle,
  327                        const void *addr_ptr,
  328                        int mem_size);
  329 int qat_uclo_map_obj(struct icp_qat_fw_loader_handle *handle,
  330                      const void *addr_ptr,
  331                      u32 mem_size,
  332                      const char *obj_name);
  333 
  334 void qat_hal_get_scs_neigh_ae(unsigned char ae, unsigned char *ae_neigh);
  335 int qat_uclo_set_cfg_ae_mask(struct icp_qat_fw_loader_handle *handle,
  336                              unsigned int cfg_ae_mask);
  337 void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
  338 void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
  339 int adf_init_vf_wq(void);
  340 void adf_exit_vf_wq(void);
  341 void adf_flush_vf_wq(void);
  342 int adf_vf2pf_init(struct adf_accel_dev *accel_dev);
  343 void adf_vf2pf_shutdown(struct adf_accel_dev *accel_dev);
  344 static inline int
  345 adf_sriov_configure(device_t *pdev, int numvfs)
  346 {
  347         return 0;
  348 }
  349 
  350 static inline void
  351 adf_disable_sriov(struct adf_accel_dev *accel_dev)
  352 {
  353 }
  354 
  355 static inline void
  356 adf_vf2pf_handler(struct adf_accel_vf_info *vf_info)
  357 {
  358 }
  359 
  360 static inline int
  361 adf_init_pf_wq(void)
  362 {
  363         return 0;
  364 }
  365 
  366 static inline void
  367 adf_exit_pf_wq(void)
  368 {
  369 }
  370 #endif

Cache object: b533312733aae01f3f534d35f88dbc7d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.