linux/include/linux/ntb.h
<<
>>
Prefs
   1/*
   2 * This file is provided under a dual BSD/GPLv2 license.  When using or
   3 *   redistributing this file, you may do so under either license.
   4 *
   5 *   GPL LICENSE SUMMARY
   6 *
   7 *   Copyright (C) 2015 EMC Corporation. All Rights Reserved.
   8 *
   9 *   This program is free software; you can redistribute it and/or modify
  10 *   it under the terms of version 2 of the GNU General Public License as
  11 *   published by the Free Software Foundation.
  12 *
  13 *   This program is distributed in the hope that it will be useful, but
  14 *   WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16 *   General Public License for more details.
  17 *
  18 *   BSD LICENSE
  19 *
  20 *   Copyright (C) 2015 EMC Corporation. All Rights Reserved.
  21 *
  22 *   Redistribution and use in source and binary forms, with or without
  23 *   modification, are permitted provided that the following conditions
  24 *   are met:
  25 *
  26 *     * Redistributions of source code must retain the above copyright
  27 *       notice, this list of conditions and the following disclaimer.
  28 *     * Redistributions in binary form must reproduce the above copy
  29 *       notice, this list of conditions and the following disclaimer in
  30 *       the documentation and/or other materials provided with the
  31 *       distribution.
  32 *     * Neither the name of Intel Corporation nor the names of its
  33 *       contributors may be used to endorse or promote products derived
  34 *       from this software without specific prior written permission.
  35 *
  36 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  37 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  38 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  39 *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  40 *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41 *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  42 *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  43 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  44 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  45 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  46 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  47 *
  48 * PCIe NTB Linux driver
  49 *
  50 * Contact Information:
  51 * Allen Hubbe <Allen.Hubbe@emc.com>
  52 */
  53
  54#ifndef _NTB_H_
  55#define _NTB_H_
  56
  57#include <linux/completion.h>
  58#include <linux/device.h>
  59
  60struct ntb_client;
  61struct ntb_dev;
  62struct pci_dev;
  63
  64/**
  65 * enum ntb_topo - NTB connection topology
  66 * @NTB_TOPO_NONE:      Topology is unknown or invalid.
  67 * @NTB_TOPO_PRI:       On primary side of local ntb.
  68 * @NTB_TOPO_SEC:       On secondary side of remote ntb.
  69 * @NTB_TOPO_B2B_USD:   On primary side of local ntb upstream of remote ntb.
  70 * @NTB_TOPO_B2B_DSD:   On primary side of local ntb downstream of remote ntb.
  71 */
  72enum ntb_topo {
  73        NTB_TOPO_NONE = -1,
  74        NTB_TOPO_PRI,
  75        NTB_TOPO_SEC,
  76        NTB_TOPO_B2B_USD,
  77        NTB_TOPO_B2B_DSD,
  78};
  79
  80static inline int ntb_topo_is_b2b(enum ntb_topo topo)
  81{
  82        switch ((int)topo) {
  83        case NTB_TOPO_B2B_USD:
  84        case NTB_TOPO_B2B_DSD:
  85                return 1;
  86        }
  87        return 0;
  88}
  89
  90static inline char *ntb_topo_string(enum ntb_topo topo)
  91{
  92        switch (topo) {
  93        case NTB_TOPO_NONE:     return "NTB_TOPO_NONE";
  94        case NTB_TOPO_PRI:      return "NTB_TOPO_PRI";
  95        case NTB_TOPO_SEC:      return "NTB_TOPO_SEC";
  96        case NTB_TOPO_B2B_USD:  return "NTB_TOPO_B2B_USD";
  97        case NTB_TOPO_B2B_DSD:  return "NTB_TOPO_B2B_DSD";
  98        }
  99        return "NTB_TOPO_INVALID";
 100}
 101
 102/**
 103 * enum ntb_speed - NTB link training speed
 104 * @NTB_SPEED_AUTO:     Request the max supported speed.
 105 * @NTB_SPEED_NONE:     Link is not trained to any speed.
 106 * @NTB_SPEED_GEN1:     Link is trained to gen1 speed.
 107 * @NTB_SPEED_GEN2:     Link is trained to gen2 speed.
 108 * @NTB_SPEED_GEN3:     Link is trained to gen3 speed.
 109 */
 110enum ntb_speed {
 111        NTB_SPEED_AUTO = -1,
 112        NTB_SPEED_NONE = 0,
 113        NTB_SPEED_GEN1 = 1,
 114        NTB_SPEED_GEN2 = 2,
 115        NTB_SPEED_GEN3 = 3,
 116};
 117
 118/**
 119 * enum ntb_width - NTB link training width
 120 * @NTB_WIDTH_AUTO:     Request the max supported width.
 121 * @NTB_WIDTH_NONE:     Link is not trained to any width.
 122 * @NTB_WIDTH_1:        Link is trained to 1 lane width.
 123 * @NTB_WIDTH_2:        Link is trained to 2 lane width.
 124 * @NTB_WIDTH_4:        Link is trained to 4 lane width.
 125 * @NTB_WIDTH_8:        Link is trained to 8 lane width.
 126 * @NTB_WIDTH_12:       Link is trained to 12 lane width.
 127 * @NTB_WIDTH_16:       Link is trained to 16 lane width.
 128 * @NTB_WIDTH_32:       Link is trained to 32 lane width.
 129 */
 130enum ntb_width {
 131        NTB_WIDTH_AUTO = -1,
 132        NTB_WIDTH_NONE = 0,
 133        NTB_WIDTH_1 = 1,
 134        NTB_WIDTH_2 = 2,
 135        NTB_WIDTH_4 = 4,
 136        NTB_WIDTH_8 = 8,
 137        NTB_WIDTH_12 = 12,
 138        NTB_WIDTH_16 = 16,
 139        NTB_WIDTH_32 = 32,
 140};
 141
 142/**
 143 * struct ntb_client_ops - ntb client operations
 144 * @probe:              Notify client of a new device.
 145 * @remove:             Notify client to remove a device.
 146 */
 147struct ntb_client_ops {
 148        int (*probe)(struct ntb_client *client, struct ntb_dev *ntb);
 149        void (*remove)(struct ntb_client *client, struct ntb_dev *ntb);
 150};
 151
 152static inline int ntb_client_ops_is_valid(const struct ntb_client_ops *ops)
 153{
 154        /* commented callbacks are not required: */
 155        return
 156                ops->probe                      &&
 157                ops->remove                     &&
 158                1;
 159}
 160
 161/**
 162 * struct ntb_ctx_ops - ntb driver context operations
 163 * @link_event:         See ntb_link_event().
 164 * @db_event:           See ntb_db_event().
 165 */
 166struct ntb_ctx_ops {
 167        void (*link_event)(void *ctx);
 168        void (*db_event)(void *ctx, int db_vector);
 169};
 170
 171static inline int ntb_ctx_ops_is_valid(const struct ntb_ctx_ops *ops)
 172{
 173        /* commented callbacks are not required: */
 174        return
 175                /* ops->link_event              && */
 176                /* ops->db_event                && */
 177                1;
 178}
 179
 180/**
 181 * struct ntb_ctx_ops - ntb device operations
 182 * @mw_count:           See ntb_mw_count().
 183 * @mw_get_range:       See ntb_mw_get_range().
 184 * @mw_set_trans:       See ntb_mw_set_trans().
 185 * @mw_clear_trans:     See ntb_mw_clear_trans().
 186 * @link_is_up:         See ntb_link_is_up().
 187 * @link_enable:        See ntb_link_enable().
 188 * @link_disable:       See ntb_link_disable().
 189 * @db_is_unsafe:       See ntb_db_is_unsafe().
 190 * @db_valid_mask:      See ntb_db_valid_mask().
 191 * @db_vector_count:    See ntb_db_vector_count().
 192 * @db_vector_mask:     See ntb_db_vector_mask().
 193 * @db_read:            See ntb_db_read().
 194 * @db_set:             See ntb_db_set().
 195 * @db_clear:           See ntb_db_clear().
 196 * @db_read_mask:       See ntb_db_read_mask().
 197 * @db_set_mask:        See ntb_db_set_mask().
 198 * @db_clear_mask:      See ntb_db_clear_mask().
 199 * @peer_db_addr:       See ntb_peer_db_addr().
 200 * @peer_db_read:       See ntb_peer_db_read().
 201 * @peer_db_set:        See ntb_peer_db_set().
 202 * @peer_db_clear:      See ntb_peer_db_clear().
 203 * @peer_db_read_mask:  See ntb_peer_db_read_mask().
 204 * @peer_db_set_mask:   See ntb_peer_db_set_mask().
 205 * @peer_db_clear_mask: See ntb_peer_db_clear_mask().
 206 * @spad_is_unsafe:     See ntb_spad_is_unsafe().
 207 * @spad_count:         See ntb_spad_count().
 208 * @spad_read:          See ntb_spad_read().
 209 * @spad_write:         See ntb_spad_write().
 210 * @peer_spad_addr:     See ntb_peer_spad_addr().
 211 * @peer_spad_read:     See ntb_peer_spad_read().
 212 * @peer_spad_write:    See ntb_peer_spad_write().
 213 */
 214struct ntb_dev_ops {
 215        int (*mw_count)(struct ntb_dev *ntb);
 216        int (*mw_get_range)(struct ntb_dev *ntb, int idx,
 217                            phys_addr_t *base, resource_size_t *size,
 218                        resource_size_t *align, resource_size_t *align_size);
 219        int (*mw_set_trans)(struct ntb_dev *ntb, int idx,
 220                            dma_addr_t addr, resource_size_t size);
 221        int (*mw_clear_trans)(struct ntb_dev *ntb, int idx);
 222
 223        int (*link_is_up)(struct ntb_dev *ntb,
 224                          enum ntb_speed *speed, enum ntb_width *width);
 225        int (*link_enable)(struct ntb_dev *ntb,
 226                           enum ntb_speed max_speed, enum ntb_width max_width);
 227        int (*link_disable)(struct ntb_dev *ntb);
 228
 229        int (*db_is_unsafe)(struct ntb_dev *ntb);
 230        u64 (*db_valid_mask)(struct ntb_dev *ntb);
 231        int (*db_vector_count)(struct ntb_dev *ntb);
 232        u64 (*db_vector_mask)(struct ntb_dev *ntb, int db_vector);
 233
 234        u64 (*db_read)(struct ntb_dev *ntb);
 235        int (*db_set)(struct ntb_dev *ntb, u64 db_bits);
 236        int (*db_clear)(struct ntb_dev *ntb, u64 db_bits);
 237
 238        u64 (*db_read_mask)(struct ntb_dev *ntb);
 239        int (*db_set_mask)(struct ntb_dev *ntb, u64 db_bits);
 240        int (*db_clear_mask)(struct ntb_dev *ntb, u64 db_bits);
 241
 242        int (*peer_db_addr)(struct ntb_dev *ntb,
 243                            phys_addr_t *db_addr, resource_size_t *db_size);
 244        u64 (*peer_db_read)(struct ntb_dev *ntb);
 245        int (*peer_db_set)(struct ntb_dev *ntb, u64 db_bits);
 246        int (*peer_db_clear)(struct ntb_dev *ntb, u64 db_bits);
 247
 248        u64 (*peer_db_read_mask)(struct ntb_dev *ntb);
 249        int (*peer_db_set_mask)(struct ntb_dev *ntb, u64 db_bits);
 250        int (*peer_db_clear_mask)(struct ntb_dev *ntb, u64 db_bits);
 251
 252        int (*spad_is_unsafe)(struct ntb_dev *ntb);
 253        int (*spad_count)(struct ntb_dev *ntb);
 254
 255        u32 (*spad_read)(struct ntb_dev *ntb, int idx);
 256        int (*spad_write)(struct ntb_dev *ntb, int idx, u32 val);
 257
 258        int (*peer_spad_addr)(struct ntb_dev *ntb, int idx,
 259                              phys_addr_t *spad_addr);
 260        u32 (*peer_spad_read)(struct ntb_dev *ntb, int idx);
 261        int (*peer_spad_write)(struct ntb_dev *ntb, int idx, u32 val);
 262};
 263
 264static inline int ntb_dev_ops_is_valid(const struct ntb_dev_ops *ops)
 265{
 266        /* commented callbacks are not required: */
 267        return
 268                ops->mw_count                           &&
 269                ops->mw_get_range                       &&
 270                ops->mw_set_trans                       &&
 271                /* ops->mw_clear_trans                  && */
 272                ops->link_is_up                         &&
 273                ops->link_enable                        &&
 274                ops->link_disable                       &&
 275                /* ops->db_is_unsafe                    && */
 276                ops->db_valid_mask                      &&
 277
 278                /* both set, or both unset */
 279                (!ops->db_vector_count == !ops->db_vector_mask) &&
 280
 281                ops->db_read                            &&
 282                /* ops->db_set                          && */
 283                ops->db_clear                           &&
 284                /* ops->db_read_mask                    && */
 285                ops->db_set_mask                        &&
 286                ops->db_clear_mask                      &&
 287                /* ops->peer_db_addr                    && */
 288                /* ops->peer_db_read                    && */
 289                ops->peer_db_set                        &&
 290                /* ops->peer_db_clear                   && */
 291                /* ops->peer_db_read_mask               && */
 292                /* ops->peer_db_set_mask                && */
 293                /* ops->peer_db_clear_mask              && */
 294                /* ops->spad_is_unsafe                  && */
 295                ops->spad_count                         &&
 296                ops->spad_read                          &&
 297                ops->spad_write                         &&
 298                /* ops->peer_spad_addr                  && */
 299                /* ops->peer_spad_read                  && */
 300                ops->peer_spad_write                    &&
 301                1;
 302}
 303
 304/**
 305 * struct ntb_client - client interested in ntb devices
 306 * @drv:                Linux driver object.
 307 * @ops:                See &ntb_client_ops.
 308 */
 309struct ntb_client {
 310        struct device_driver            drv;
 311        const struct ntb_client_ops     ops;
 312};
 313
 314#define drv_ntb_client(__drv) container_of((__drv), struct ntb_client, drv)
 315
 316/**
 317 * struct ntb_device - ntb device
 318 * @dev:                Linux device object.
 319 * @pdev:               Pci device entry of the ntb.
 320 * @topo:               Detected topology of the ntb.
 321 * @ops:                See &ntb_dev_ops.
 322 * @ctx:                See &ntb_ctx_ops.
 323 * @ctx_ops:            See &ntb_ctx_ops.
 324 */
 325struct ntb_dev {
 326        struct device                   dev;
 327        struct pci_dev                  *pdev;
 328        enum ntb_topo                   topo;
 329        const struct ntb_dev_ops        *ops;
 330        void                            *ctx;
 331        const struct ntb_ctx_ops        *ctx_ops;
 332
 333        /* private: */
 334
 335        /* synchronize setting, clearing, and calling ctx_ops */
 336        spinlock_t                      ctx_lock;
 337        /* block unregister until device is fully released */
 338        struct completion               released;
 339};
 340
 341#define dev_ntb(__dev) container_of((__dev), struct ntb_dev, dev)
 342
 343/**
 344 * ntb_register_client() - register a client for interest in ntb devices
 345 * @client:     Client context.
 346 *
 347 * The client will be added to the list of clients interested in ntb devices.
 348 * The client will be notified of any ntb devices that are not already
 349 * associated with a client, or if ntb devices are registered later.
 350 *
 351 * Return: Zero if the client is registered, otherwise an error number.
 352 */
 353#define ntb_register_client(client) \
 354        __ntb_register_client((client), THIS_MODULE, KBUILD_MODNAME)
 355
 356int __ntb_register_client(struct ntb_client *client, struct module *mod,
 357                          const char *mod_name);
 358
 359/**
 360 * ntb_unregister_client() - unregister a client for interest in ntb devices
 361 * @client:     Client context.
 362 *
 363 * The client will be removed from the list of clients interested in ntb
 364 * devices.  If any ntb devices are associated with the client, the client will
 365 * be notified to remove those devices.
 366 */
 367void ntb_unregister_client(struct ntb_client *client);
 368
 369#define module_ntb_client(__ntb_client) \
 370        module_driver(__ntb_client, ntb_register_client, \
 371                        ntb_unregister_client)
 372
 373/**
 374 * ntb_register_device() - register a ntb device
 375 * @ntb:        NTB device context.
 376 *
 377 * The device will be added to the list of ntb devices.  If any clients are
 378 * interested in ntb devices, each client will be notified of the ntb device,
 379 * until at most one client accepts the device.
 380 *
 381 * Return: Zero if the device is registered, otherwise an error number.
 382 */
 383int ntb_register_device(struct ntb_dev *ntb);
 384
 385/**
 386 * ntb_register_device() - unregister a ntb device
 387 * @ntb:        NTB device context.
 388 *
 389 * The device will be removed from the list of ntb devices.  If the ntb device
 390 * is associated with a client, the client will be notified to remove the
 391 * device.
 392 */
 393void ntb_unregister_device(struct ntb_dev *ntb);
 394
 395/**
 396 * ntb_set_ctx() - associate a driver context with an ntb device
 397 * @ntb:        NTB device context.
 398 * @ctx:        Driver context.
 399 * @ctx_ops:    Driver context operations.
 400 *
 401 * Associate a driver context and operations with a ntb device.  The context is
 402 * provided by the client driver, and the driver may associate a different
 403 * context with each ntb device.
 404 *
 405 * Return: Zero if the context is associated, otherwise an error number.
 406 */
 407int ntb_set_ctx(struct ntb_dev *ntb, void *ctx,
 408                const struct ntb_ctx_ops *ctx_ops);
 409
 410/**
 411 * ntb_clear_ctx() - disassociate any driver context from an ntb device
 412 * @ntb:        NTB device context.
 413 *
 414 * Clear any association that may exist between a driver context and the ntb
 415 * device.
 416 */
 417void ntb_clear_ctx(struct ntb_dev *ntb);
 418
 419/**
 420 * ntb_link_event() - notify driver context of a change in link status
 421 * @ntb:        NTB device context.
 422 *
 423 * Notify the driver context that the link status may have changed.  The driver
 424 * should call ntb_link_is_up() to get the current status.
 425 */
 426void ntb_link_event(struct ntb_dev *ntb);
 427
 428/**
 429 * ntb_db_event() - notify driver context of a doorbell event
 430 * @ntb:        NTB device context.
 431 * @vector:     Interrupt vector number.
 432 *
 433 * Notify the driver context of a doorbell event.  If hardware supports
 434 * multiple interrupt vectors for doorbells, the vector number indicates which
 435 * vector received the interrupt.  The vector number is relative to the first
 436 * vector used for doorbells, starting at zero, and must be less than
 437 ** ntb_db_vector_count().  The driver may call ntb_db_read() to check which
 438 * doorbell bits need service, and ntb_db_vector_mask() to determine which of
 439 * those bits are associated with the vector number.
 440 */
 441void ntb_db_event(struct ntb_dev *ntb, int vector);
 442
 443/**
 444 * ntb_mw_count() - get the number of memory windows
 445 * @ntb:        NTB device context.
 446 *
 447 * Hardware and topology may support a different number of memory windows.
 448 *
 449 * Return: the number of memory windows.
 450 */
 451static inline int ntb_mw_count(struct ntb_dev *ntb)
 452{
 453        return ntb->ops->mw_count(ntb);
 454}
 455
 456/**
 457 * ntb_mw_get_range() - get the range of a memory window
 458 * @ntb:        NTB device context.
 459 * @idx:        Memory window number.
 460 * @base:       OUT - the base address for mapping the memory window
 461 * @size:       OUT - the size for mapping the memory window
 462 * @align:      OUT - the base alignment for translating the memory window
 463 * @align_size: OUT - the size alignment for translating the memory window
 464 *
 465 * Get the range of a memory window.  NULL may be given for any output
 466 * parameter if the value is not needed.  The base and size may be used for
 467 * mapping the memory window, to access the peer memory.  The alignment and
 468 * size may be used for translating the memory window, for the peer to access
 469 * memory on the local system.
 470 *
 471 * Return: Zero on success, otherwise an error number.
 472 */
 473static inline int ntb_mw_get_range(struct ntb_dev *ntb, int idx,
 474                                   phys_addr_t *base, resource_size_t *size,
 475                resource_size_t *align, resource_size_t *align_size)
 476{
 477        return ntb->ops->mw_get_range(ntb, idx, base, size,
 478                        align, align_size);
 479}
 480
 481/**
 482 * ntb_mw_set_trans() - set the translation of a memory window
 483 * @ntb:        NTB device context.
 484 * @idx:        Memory window number.
 485 * @addr:       The dma address local memory to expose to the peer.
 486 * @size:       The size of the local memory to expose to the peer.
 487 *
 488 * Set the translation of a memory window.  The peer may access local memory
 489 * through the window starting at the address, up to the size.  The address
 490 * must be aligned to the alignment specified by ntb_mw_get_range().  The size
 491 * must be aligned to the size alignment specified by ntb_mw_get_range().
 492 *
 493 * Return: Zero on success, otherwise an error number.
 494 */
 495static inline int ntb_mw_set_trans(struct ntb_dev *ntb, int idx,
 496                                   dma_addr_t addr, resource_size_t size)
 497{
 498        return ntb->ops->mw_set_trans(ntb, idx, addr, size);
 499}
 500
 501/**
 502 * ntb_mw_clear_trans() - clear the translation of a memory window
 503 * @ntb:        NTB device context.
 504 * @idx:        Memory window number.
 505 *
 506 * Clear the translation of a memory window.  The peer may no longer access
 507 * local memory through the window.
 508 *
 509 * Return: Zero on success, otherwise an error number.
 510 */
 511static inline int ntb_mw_clear_trans(struct ntb_dev *ntb, int idx)
 512{
 513        if (!ntb->ops->mw_clear_trans)
 514                return ntb->ops->mw_set_trans(ntb, idx, 0, 0);
 515
 516        return ntb->ops->mw_clear_trans(ntb, idx);
 517}
 518
 519/**
 520 * ntb_link_is_up() - get the current ntb link state
 521 * @ntb:        NTB device context.
 522 * @speed:      OUT - The link speed expressed as PCIe generation number.
 523 * @width:      OUT - The link width expressed as the number of PCIe lanes.
 524 *
 525 * Get the current state of the ntb link.  It is recommended to query the link
 526 * state once after every link event.  It is safe to query the link state in
 527 * the context of the link event callback.
 528 *
 529 * Return: One if the link is up, zero if the link is down, otherwise a
 530 *              negative value indicating the error number.
 531 */
 532static inline int ntb_link_is_up(struct ntb_dev *ntb,
 533                                 enum ntb_speed *speed, enum ntb_width *width)
 534{
 535        return ntb->ops->link_is_up(ntb, speed, width);
 536}
 537
 538/**
 539 * ntb_link_enable() - enable the link on the secondary side of the ntb
 540 * @ntb:        NTB device context.
 541 * @max_speed:  The maximum link speed expressed as PCIe generation number.
 542 * @max_width:  The maximum link width expressed as the number of PCIe lanes.
 543 *
 544 * Enable the link on the secondary side of the ntb.  This can only be done
 545 * from the primary side of the ntb in primary or b2b topology.  The ntb device
 546 * should train the link to its maximum speed and width, or the requested speed
 547 * and width, whichever is smaller, if supported.
 548 *
 549 * Return: Zero on success, otherwise an error number.
 550 */
 551static inline int ntb_link_enable(struct ntb_dev *ntb,
 552                                  enum ntb_speed max_speed,
 553                                  enum ntb_width max_width)
 554{
 555        return ntb->ops->link_enable(ntb, max_speed, max_width);
 556}
 557
 558/**
 559 * ntb_link_disable() - disable the link on the secondary side of the ntb
 560 * @ntb:        NTB device context.
 561 *
 562 * Disable the link on the secondary side of the ntb.  This can only be
 563 * done from the primary side of the ntb in primary or b2b topology.  The ntb
 564 * device should disable the link.  Returning from this call must indicate that
 565 * a barrier has passed, though with no more writes may pass in either
 566 * direction across the link, except if this call returns an error number.
 567 *
 568 * Return: Zero on success, otherwise an error number.
 569 */
 570static inline int ntb_link_disable(struct ntb_dev *ntb)
 571{
 572        return ntb->ops->link_disable(ntb);
 573}
 574
 575/**
 576 * ntb_db_is_unsafe() - check if it is safe to use hardware doorbell
 577 * @ntb:        NTB device context.
 578 *
 579 * It is possible for some ntb hardware to be affected by errata.  Hardware
 580 * drivers can advise clients to avoid using doorbells.  Clients may ignore
 581 * this advice, though caution is recommended.
 582 *
 583 * Return: Zero if it is safe to use doorbells, or One if it is not safe.
 584 */
 585static inline int ntb_db_is_unsafe(struct ntb_dev *ntb)
 586{
 587        if (!ntb->ops->db_is_unsafe)
 588                return 0;
 589
 590        return ntb->ops->db_is_unsafe(ntb);
 591}
 592
 593/**
 594 * ntb_db_valid_mask() - get a mask of doorbell bits supported by the ntb
 595 * @ntb:        NTB device context.
 596 *
 597 * Hardware may support different number or arrangement of doorbell bits.
 598 *
 599 * Return: A mask of doorbell bits supported by the ntb.
 600 */
 601static inline u64 ntb_db_valid_mask(struct ntb_dev *ntb)
 602{
 603        return ntb->ops->db_valid_mask(ntb);
 604}
 605
 606/**
 607 * ntb_db_vector_count() - get the number of doorbell interrupt vectors
 608 * @ntb:        NTB device context.
 609 *
 610 * Hardware may support different number of interrupt vectors.
 611 *
 612 * Return: The number of doorbell interrupt vectors.
 613 */
 614static inline int ntb_db_vector_count(struct ntb_dev *ntb)
 615{
 616        if (!ntb->ops->db_vector_count)
 617                return 1;
 618
 619        return ntb->ops->db_vector_count(ntb);
 620}
 621
 622/**
 623 * ntb_db_vector_mask() - get a mask of doorbell bits serviced by a vector
 624 * @ntb:        NTB device context.
 625 * @vector:     Doorbell vector number.
 626 *
 627 * Each interrupt vector may have a different number or arrangement of bits.
 628 *
 629 * Return: A mask of doorbell bits serviced by a vector.
 630 */
 631static inline u64 ntb_db_vector_mask(struct ntb_dev *ntb, int vector)
 632{
 633        if (!ntb->ops->db_vector_mask)
 634                return ntb_db_valid_mask(ntb);
 635
 636        return ntb->ops->db_vector_mask(ntb, vector);
 637}
 638
 639/**
 640 * ntb_db_read() - read the local doorbell register
 641 * @ntb:        NTB device context.
 642 *
 643 * Read the local doorbell register, and return the bits that are set.
 644 *
 645 * Return: The bits currently set in the local doorbell register.
 646 */
 647static inline u64 ntb_db_read(struct ntb_dev *ntb)
 648{
 649        return ntb->ops->db_read(ntb);
 650}
 651
 652/**
 653 * ntb_db_set() - set bits in the local doorbell register
 654 * @ntb:        NTB device context.
 655 * @db_bits:    Doorbell bits to set.
 656 *
 657 * Set bits in the local doorbell register, which may generate a local doorbell
 658 * interrupt.  Bits that were already set must remain set.
 659 *
 660 * This is unusual, and hardware may not support it.
 661 *
 662 * Return: Zero on success, otherwise an error number.
 663 */
 664static inline int ntb_db_set(struct ntb_dev *ntb, u64 db_bits)
 665{
 666        if (!ntb->ops->db_set)
 667                return -EINVAL;
 668
 669        return ntb->ops->db_set(ntb, db_bits);
 670}
 671
 672/**
 673 * ntb_db_clear() - clear bits in the local doorbell register
 674 * @ntb:        NTB device context.
 675 * @db_bits:    Doorbell bits to clear.
 676 *
 677 * Clear bits in the local doorbell register, arming the bits for the next
 678 * doorbell.
 679 *
 680 * Return: Zero on success, otherwise an error number.
 681 */
 682static inline int ntb_db_clear(struct ntb_dev *ntb, u64 db_bits)
 683{
 684        return ntb->ops->db_clear(ntb, db_bits);
 685}
 686
 687/**
 688 * ntb_db_read_mask() - read the local doorbell mask
 689 * @ntb:        NTB device context.
 690 *
 691 * Read the local doorbell mask register, and return the bits that are set.
 692 *
 693 * This is unusual, though hardware is likely to support it.
 694 *
 695 * Return: The bits currently set in the local doorbell mask register.
 696 */
 697static inline u64 ntb_db_read_mask(struct ntb_dev *ntb)
 698{
 699        if (!ntb->ops->db_read_mask)
 700                return 0;
 701
 702        return ntb->ops->db_read_mask(ntb);
 703}
 704
 705/**
 706 * ntb_db_set_mask() - set bits in the local doorbell mask
 707 * @ntb:        NTB device context.
 708 * @db_bits:    Doorbell mask bits to set.
 709 *
 710 * Set bits in the local doorbell mask register, preventing doorbell interrupts
 711 * from being generated for those doorbell bits.  Bits that were already set
 712 * must remain set.
 713 *
 714 * Return: Zero on success, otherwise an error number.
 715 */
 716static inline int ntb_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
 717{
 718        return ntb->ops->db_set_mask(ntb, db_bits);
 719}
 720
 721/**
 722 * ntb_db_clear_mask() - clear bits in the local doorbell mask
 723 * @ntb:        NTB device context.
 724 * @db_bits:    Doorbell bits to clear.
 725 *
 726 * Clear bits in the local doorbell mask register, allowing doorbell interrupts
 727 * from being generated for those doorbell bits.  If a doorbell bit is already
 728 * set at the time the mask is cleared, and the corresponding mask bit is
 729 * changed from set to clear, then the ntb driver must ensure that
 730 * ntb_db_event() is called.  If the hardware does not generate the interrupt
 731 * on clearing the mask bit, then the driver must call ntb_db_event() anyway.
 732 *
 733 * Return: Zero on success, otherwise an error number.
 734 */
 735static inline int ntb_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
 736{
 737        return ntb->ops->db_clear_mask(ntb, db_bits);
 738}
 739
 740/**
 741 * ntb_peer_db_addr() - address and size of the peer doorbell register
 742 * @ntb:        NTB device context.
 743 * @db_addr:    OUT - The address of the peer doorbell register.
 744 * @db_size:    OUT - The number of bytes to write the peer doorbell register.
 745 *
 746 * Return the address of the peer doorbell register.  This may be used, for
 747 * example, by drivers that offload memory copy operations to a dma engine.
 748 * The drivers may wish to ring the peer doorbell at the completion of memory
 749 * copy operations.  For efficiency, and to simplify ordering of operations
 750 * between the dma memory copies and the ringing doorbell, the driver may
 751 * append one additional dma memory copy with the doorbell register as the
 752 * destination, after the memory copy operations.
 753 *
 754 * Return: Zero on success, otherwise an error number.
 755 */
 756static inline int ntb_peer_db_addr(struct ntb_dev *ntb,
 757                                   phys_addr_t *db_addr,
 758                                   resource_size_t *db_size)
 759{
 760        if (!ntb->ops->peer_db_addr)
 761                return -EINVAL;
 762
 763        return ntb->ops->peer_db_addr(ntb, db_addr, db_size);
 764}
 765
 766/**
 767 * ntb_peer_db_read() - read the peer doorbell register
 768 * @ntb:        NTB device context.
 769 *
 770 * Read the peer doorbell register, and return the bits that are set.
 771 *
 772 * This is unusual, and hardware may not support it.
 773 *
 774 * Return: The bits currently set in the peer doorbell register.
 775 */
 776static inline u64 ntb_peer_db_read(struct ntb_dev *ntb)
 777{
 778        if (!ntb->ops->peer_db_read)
 779                return 0;
 780
 781        return ntb->ops->peer_db_read(ntb);
 782}
 783
 784/**
 785 * ntb_peer_db_set() - set bits in the peer doorbell register
 786 * @ntb:        NTB device context.
 787 * @db_bits:    Doorbell bits to set.
 788 *
 789 * Set bits in the peer doorbell register, which may generate a peer doorbell
 790 * interrupt.  Bits that were already set must remain set.
 791 *
 792 * Return: Zero on success, otherwise an error number.
 793 */
 794static inline int ntb_peer_db_set(struct ntb_dev *ntb, u64 db_bits)
 795{
 796        return ntb->ops->peer_db_set(ntb, db_bits);
 797}
 798
 799/**
 800 * ntb_peer_db_clear() - clear bits in the peer doorbell register
 801 * @ntb:        NTB device context.
 802 * @db_bits:    Doorbell bits to clear.
 803 *
 804 * Clear bits in the peer doorbell register, arming the bits for the next
 805 * doorbell.
 806 *
 807 * This is unusual, and hardware may not support it.
 808 *
 809 * Return: Zero on success, otherwise an error number.
 810 */
 811static inline int ntb_peer_db_clear(struct ntb_dev *ntb, u64 db_bits)
 812{
 813        if (!ntb->ops->db_clear)
 814                return -EINVAL;
 815
 816        return ntb->ops->peer_db_clear(ntb, db_bits);
 817}
 818
 819/**
 820 * ntb_peer_db_read_mask() - read the peer doorbell mask
 821 * @ntb:        NTB device context.
 822 *
 823 * Read the peer doorbell mask register, and return the bits that are set.
 824 *
 825 * This is unusual, and hardware may not support it.
 826 *
 827 * Return: The bits currently set in the peer doorbell mask register.
 828 */
 829static inline u64 ntb_peer_db_read_mask(struct ntb_dev *ntb)
 830{
 831        if (!ntb->ops->db_read_mask)
 832                return 0;
 833
 834        return ntb->ops->peer_db_read_mask(ntb);
 835}
 836
 837/**
 838 * ntb_peer_db_set_mask() - set bits in the peer doorbell mask
 839 * @ntb:        NTB device context.
 840 * @db_bits:    Doorbell mask bits to set.
 841 *
 842 * Set bits in the peer doorbell mask register, preventing doorbell interrupts
 843 * from being generated for those doorbell bits.  Bits that were already set
 844 * must remain set.
 845 *
 846 * This is unusual, and hardware may not support it.
 847 *
 848 * Return: Zero on success, otherwise an error number.
 849 */
 850static inline int ntb_peer_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
 851{
 852        if (!ntb->ops->db_set_mask)
 853                return -EINVAL;
 854
 855        return ntb->ops->peer_db_set_mask(ntb, db_bits);
 856}
 857
 858/**
 859 * ntb_peer_db_clear_mask() - clear bits in the peer doorbell mask
 860 * @ntb:        NTB device context.
 861 * @db_bits:    Doorbell bits to clear.
 862 *
 863 * Clear bits in the peer doorbell mask register, allowing doorbell interrupts
 864 * from being generated for those doorbell bits.  If the hardware does not
 865 * generate the interrupt on clearing the mask bit, then the driver should not
 866 * implement this function!
 867 *
 868 * This is unusual, and hardware may not support it.
 869 *
 870 * Return: Zero on success, otherwise an error number.
 871 */
 872static inline int ntb_peer_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
 873{
 874        if (!ntb->ops->db_clear_mask)
 875                return -EINVAL;
 876
 877        return ntb->ops->peer_db_clear_mask(ntb, db_bits);
 878}
 879
 880/**
 881 * ntb_spad_is_unsafe() - check if it is safe to use the hardware scratchpads
 882 * @ntb:        NTB device context.
 883 *
 884 * It is possible for some ntb hardware to be affected by errata.  Hardware
 885 * drivers can advise clients to avoid using scratchpads.  Clients may ignore
 886 * this advice, though caution is recommended.
 887 *
 888 * Return: Zero if it is safe to use scratchpads, or One if it is not safe.
 889 */
 890static inline int ntb_spad_is_unsafe(struct ntb_dev *ntb)
 891{
 892        if (!ntb->ops->spad_is_unsafe)
 893                return 0;
 894
 895        return ntb->ops->spad_is_unsafe(ntb);
 896}
 897
 898/**
 899 * ntb_mw_count() - get the number of scratchpads
 900 * @ntb:        NTB device context.
 901 *
 902 * Hardware and topology may support a different number of scratchpads.
 903 *
 904 * Return: the number of scratchpads.
 905 */
 906static inline int ntb_spad_count(struct ntb_dev *ntb)
 907{
 908        return ntb->ops->spad_count(ntb);
 909}
 910
 911/**
 912 * ntb_spad_read() - read the local scratchpad register
 913 * @ntb:        NTB device context.
 914 * @idx:        Scratchpad index.
 915 *
 916 * Read the local scratchpad register, and return the value.
 917 *
 918 * Return: The value of the local scratchpad register.
 919 */
 920static inline u32 ntb_spad_read(struct ntb_dev *ntb, int idx)
 921{
 922        return ntb->ops->spad_read(ntb, idx);
 923}
 924
 925/**
 926 * ntb_spad_write() - write the local scratchpad register
 927 * @ntb:        NTB device context.
 928 * @idx:        Scratchpad index.
 929 * @val:        Scratchpad value.
 930 *
 931 * Write the value to the local scratchpad register.
 932 *
 933 * Return: Zero on success, otherwise an error number.
 934 */
 935static inline int ntb_spad_write(struct ntb_dev *ntb, int idx, u32 val)
 936{
 937        return ntb->ops->spad_write(ntb, idx, val);
 938}
 939
 940/**
 941 * ntb_peer_spad_addr() - address of the peer scratchpad register
 942 * @ntb:        NTB device context.
 943 * @idx:        Scratchpad index.
 944 * @spad_addr:  OUT - The address of the peer scratchpad register.
 945 *
 946 * Return the address of the peer doorbell register.  This may be used, for
 947 * example, by drivers that offload memory copy operations to a dma engine.
 948 *
 949 * Return: Zero on success, otherwise an error number.
 950 */
 951static inline int ntb_peer_spad_addr(struct ntb_dev *ntb, int idx,
 952                                     phys_addr_t *spad_addr)
 953{
 954        if (!ntb->ops->peer_spad_addr)
 955                return -EINVAL;
 956
 957        return ntb->ops->peer_spad_addr(ntb, idx, spad_addr);
 958}
 959
 960/**
 961 * ntb_peer_spad_read() - read the peer scratchpad register
 962 * @ntb:        NTB device context.
 963 * @idx:        Scratchpad index.
 964 *
 965 * Read the peer scratchpad register, and return the value.
 966 *
 967 * Return: The value of the local scratchpad register.
 968 */
 969static inline u32 ntb_peer_spad_read(struct ntb_dev *ntb, int idx)
 970{
 971        return ntb->ops->peer_spad_read(ntb, idx);
 972}
 973
 974/**
 975 * ntb_peer_spad_write() - write the peer scratchpad register
 976 * @ntb:        NTB device context.
 977 * @idx:        Scratchpad index.
 978 * @val:        Scratchpad value.
 979 *
 980 * Write the value to the peer scratchpad register.
 981 *
 982 * Return: Zero on success, otherwise an error number.
 983 */
 984static inline int ntb_peer_spad_write(struct ntb_dev *ntb, int idx, u32 val)
 985{
 986        return ntb->ops->peer_spad_write(ntb, idx, val);
 987}
 988
 989#endif
 990