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 * Set the translation of a memory window.  The peer may access local memory
 526 * through the window starting at the address, up to the size.  The address
 527 * must be aligned to the alignment specified by ntb_mw_get_range().  The size
 528 * must be aligned to the size alignment specified by ntb_mw_get_range().
 529 *
 530 * Return: One if the link is up, zero if the link is down, otherwise a
 531 *              negative value indicating the error number.
 532 */
 533static inline int ntb_link_is_up(struct ntb_dev *ntb,
 534                                 enum ntb_speed *speed, enum ntb_width *width)
 535{
 536        return ntb->ops->link_is_up(ntb, speed, width);
 537}
 538
 539/**
 540 * ntb_link_enable() - enable the link on the secondary side of the ntb
 541 * @ntb:        NTB device context.
 542 * @max_speed:  The maximum link speed expressed as PCIe generation number.
 543 * @max_width:  The maximum link width expressed as the number of PCIe lanes.
 544 *
 545 * Enable the link on the secondary side of the ntb.  This can only be done
 546 * from the primary side of the ntb in primary or b2b topology.  The ntb device
 547 * should train the link to its maximum speed and width, or the requested speed
 548 * and width, whichever is smaller, if supported.
 549 *
 550 * Return: Zero on success, otherwise an error number.
 551 */
 552static inline int ntb_link_enable(struct ntb_dev *ntb,
 553                                  enum ntb_speed max_speed,
 554                                  enum ntb_width max_width)
 555{
 556        return ntb->ops->link_enable(ntb, max_speed, max_width);
 557}
 558
 559/**
 560 * ntb_link_disable() - disable the link on the secondary side of the ntb
 561 * @ntb:        NTB device context.
 562 *
 563 * Disable the link on the secondary side of the ntb.  This can only be
 564 * done from the primary side of the ntb in primary or b2b topology.  The ntb
 565 * device should disable the link.  Returning from this call must indicate that
 566 * a barrier has passed, though with no more writes may pass in either
 567 * direction across the link, except if this call returns an error number.
 568 *
 569 * Return: Zero on success, otherwise an error number.
 570 */
 571static inline int ntb_link_disable(struct ntb_dev *ntb)
 572{
 573        return ntb->ops->link_disable(ntb);
 574}
 575
 576/**
 577 * ntb_db_is_unsafe() - check if it is safe to use hardware doorbell
 578 * @ntb:        NTB device context.
 579 *
 580 * It is possible for some ntb hardware to be affected by errata.  Hardware
 581 * drivers can advise clients to avoid using doorbells.  Clients may ignore
 582 * this advice, though caution is recommended.
 583 *
 584 * Return: Zero if it is safe to use doorbells, or One if it is not safe.
 585 */
 586static inline int ntb_db_is_unsafe(struct ntb_dev *ntb)
 587{
 588        if (!ntb->ops->db_is_unsafe)
 589                return 0;
 590
 591        return ntb->ops->db_is_unsafe(ntb);
 592}
 593
 594/**
 595 * ntb_db_valid_mask() - get a mask of doorbell bits supported by the ntb
 596 * @ntb:        NTB device context.
 597 *
 598 * Hardware may support different number or arrangement of doorbell bits.
 599 *
 600 * Return: A mask of doorbell bits supported by the ntb.
 601 */
 602static inline u64 ntb_db_valid_mask(struct ntb_dev *ntb)
 603{
 604        return ntb->ops->db_valid_mask(ntb);
 605}
 606
 607/**
 608 * ntb_db_vector_count() - get the number of doorbell interrupt vectors
 609 * @ntb:        NTB device context.
 610 *
 611 * Hardware may support different number of interrupt vectors.
 612 *
 613 * Return: The number of doorbell interrupt vectors.
 614 */
 615static inline int ntb_db_vector_count(struct ntb_dev *ntb)
 616{
 617        if (!ntb->ops->db_vector_count)
 618                return 1;
 619
 620        return ntb->ops->db_vector_count(ntb);
 621}
 622
 623/**
 624 * ntb_db_vector_mask() - get a mask of doorbell bits serviced by a vector
 625 * @ntb:        NTB device context.
 626 * @vector:     Doorbell vector number.
 627 *
 628 * Each interrupt vector may have a different number or arrangement of bits.
 629 *
 630 * Return: A mask of doorbell bits serviced by a vector.
 631 */
 632static inline u64 ntb_db_vector_mask(struct ntb_dev *ntb, int vector)
 633{
 634        if (!ntb->ops->db_vector_mask)
 635                return ntb_db_valid_mask(ntb);
 636
 637        return ntb->ops->db_vector_mask(ntb, vector);
 638}
 639
 640/**
 641 * ntb_db_read() - read the local doorbell register
 642 * @ntb:        NTB device context.
 643 *
 644 * Read the local doorbell register, and return the bits that are set.
 645 *
 646 * Return: The bits currently set in the local doorbell register.
 647 */
 648static inline u64 ntb_db_read(struct ntb_dev *ntb)
 649{
 650        return ntb->ops->db_read(ntb);
 651}
 652
 653/**
 654 * ntb_db_set() - set bits in the local doorbell register
 655 * @ntb:        NTB device context.
 656 * @db_bits:    Doorbell bits to set.
 657 *
 658 * Set bits in the local doorbell register, which may generate a local doorbell
 659 * interrupt.  Bits that were already set must remain set.
 660 *
 661 * This is unusual, and hardware may not support it.
 662 *
 663 * Return: Zero on success, otherwise an error number.
 664 */
 665static inline int ntb_db_set(struct ntb_dev *ntb, u64 db_bits)
 666{
 667        if (!ntb->ops->db_set)
 668                return -EINVAL;
 669
 670        return ntb->ops->db_set(ntb, db_bits);
 671}
 672
 673/**
 674 * ntb_db_clear() - clear bits in the local doorbell register
 675 * @ntb:        NTB device context.
 676 * @db_bits:    Doorbell bits to clear.
 677 *
 678 * Clear bits in the local doorbell register, arming the bits for the next
 679 * doorbell.
 680 *
 681 * Return: Zero on success, otherwise an error number.
 682 */
 683static inline int ntb_db_clear(struct ntb_dev *ntb, u64 db_bits)
 684{
 685        return ntb->ops->db_clear(ntb, db_bits);
 686}
 687
 688/**
 689 * ntb_db_read_mask() - read the local doorbell mask
 690 * @ntb:        NTB device context.
 691 *
 692 * Read the local doorbell mask register, and return the bits that are set.
 693 *
 694 * This is unusual, though hardware is likely to support it.
 695 *
 696 * Return: The bits currently set in the local doorbell mask register.
 697 */
 698static inline u64 ntb_db_read_mask(struct ntb_dev *ntb)
 699{
 700        if (!ntb->ops->db_read_mask)
 701                return 0;
 702
 703        return ntb->ops->db_read_mask(ntb);
 704}
 705
 706/**
 707 * ntb_db_set_mask() - set bits in the local doorbell mask
 708 * @ntb:        NTB device context.
 709 * @db_bits:    Doorbell mask bits to set.
 710 *
 711 * Set bits in the local doorbell mask register, preventing doorbell interrupts
 712 * from being generated for those doorbell bits.  Bits that were already set
 713 * must remain set.
 714 *
 715 * Return: Zero on success, otherwise an error number.
 716 */
 717static inline int ntb_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
 718{
 719        return ntb->ops->db_set_mask(ntb, db_bits);
 720}
 721
 722/**
 723 * ntb_db_clear_mask() - clear bits in the local doorbell mask
 724 * @ntb:        NTB device context.
 725 * @db_bits:    Doorbell bits to clear.
 726 *
 727 * Clear bits in the local doorbell mask register, allowing doorbell interrupts
 728 * from being generated for those doorbell bits.  If a doorbell bit is already
 729 * set at the time the mask is cleared, and the corresponding mask bit is
 730 * changed from set to clear, then the ntb driver must ensure that
 731 * ntb_db_event() is called.  If the hardware does not generate the interrupt
 732 * on clearing the mask bit, then the driver must call ntb_db_event() anyway.
 733 *
 734 * Return: Zero on success, otherwise an error number.
 735 */
 736static inline int ntb_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
 737{
 738        return ntb->ops->db_clear_mask(ntb, db_bits);
 739}
 740
 741/**
 742 * ntb_peer_db_addr() - address and size of the peer doorbell register
 743 * @ntb:        NTB device context.
 744 * @db_addr:    OUT - The address of the peer doorbell register.
 745 * @db_size:    OUT - The number of bytes to write the peer doorbell register.
 746 *
 747 * Return the address of the peer doorbell register.  This may be used, for
 748 * example, by drivers that offload memory copy operations to a dma engine.
 749 * The drivers may wish to ring the peer doorbell at the completion of memory
 750 * copy operations.  For efficiency, and to simplify ordering of operations
 751 * between the dma memory copies and the ringing doorbell, the driver may
 752 * append one additional dma memory copy with the doorbell register as the
 753 * destination, after the memory copy operations.
 754 *
 755 * Return: Zero on success, otherwise an error number.
 756 */
 757static inline int ntb_peer_db_addr(struct ntb_dev *ntb,
 758                                   phys_addr_t *db_addr,
 759                                   resource_size_t *db_size)
 760{
 761        if (!ntb->ops->peer_db_addr)
 762                return -EINVAL;
 763
 764        return ntb->ops->peer_db_addr(ntb, db_addr, db_size);
 765}
 766
 767/**
 768 * ntb_peer_db_read() - read the peer doorbell register
 769 * @ntb:        NTB device context.
 770 *
 771 * Read the peer doorbell register, and return the bits that are set.
 772 *
 773 * This is unusual, and hardware may not support it.
 774 *
 775 * Return: The bits currently set in the peer doorbell register.
 776 */
 777static inline u64 ntb_peer_db_read(struct ntb_dev *ntb)
 778{
 779        if (!ntb->ops->peer_db_read)
 780                return 0;
 781
 782        return ntb->ops->peer_db_read(ntb);
 783}
 784
 785/**
 786 * ntb_peer_db_set() - set bits in the peer doorbell register
 787 * @ntb:        NTB device context.
 788 * @db_bits:    Doorbell bits to set.
 789 *
 790 * Set bits in the peer doorbell register, which may generate a peer doorbell
 791 * interrupt.  Bits that were already set must remain set.
 792 *
 793 * Return: Zero on success, otherwise an error number.
 794 */
 795static inline int ntb_peer_db_set(struct ntb_dev *ntb, u64 db_bits)
 796{
 797        return ntb->ops->peer_db_set(ntb, db_bits);
 798}
 799
 800/**
 801 * ntb_peer_db_clear() - clear bits in the peer doorbell register
 802 * @ntb:        NTB device context.
 803 * @db_bits:    Doorbell bits to clear.
 804 *
 805 * Clear bits in the peer doorbell register, arming the bits for the next
 806 * doorbell.
 807 *
 808 * This is unusual, and hardware may not support it.
 809 *
 810 * Return: Zero on success, otherwise an error number.
 811 */
 812static inline int ntb_peer_db_clear(struct ntb_dev *ntb, u64 db_bits)
 813{
 814        if (!ntb->ops->db_clear)
 815                return -EINVAL;
 816
 817        return ntb->ops->peer_db_clear(ntb, db_bits);
 818}
 819
 820/**
 821 * ntb_peer_db_read_mask() - read the peer doorbell mask
 822 * @ntb:        NTB device context.
 823 *
 824 * Read the peer doorbell mask register, and return the bits that are set.
 825 *
 826 * This is unusual, and hardware may not support it.
 827 *
 828 * Return: The bits currently set in the peer doorbell mask register.
 829 */
 830static inline u64 ntb_peer_db_read_mask(struct ntb_dev *ntb)
 831{
 832        if (!ntb->ops->db_read_mask)
 833                return 0;
 834
 835        return ntb->ops->peer_db_read_mask(ntb);
 836}
 837
 838/**
 839 * ntb_peer_db_set_mask() - set bits in the peer doorbell mask
 840 * @ntb:        NTB device context.
 841 * @db_bits:    Doorbell mask bits to set.
 842 *
 843 * Set bits in the peer doorbell mask register, preventing doorbell interrupts
 844 * from being generated for those doorbell bits.  Bits that were already set
 845 * must remain set.
 846 *
 847 * This is unusual, and hardware may not support it.
 848 *
 849 * Return: Zero on success, otherwise an error number.
 850 */
 851static inline int ntb_peer_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
 852{
 853        if (!ntb->ops->db_set_mask)
 854                return -EINVAL;
 855
 856        return ntb->ops->peer_db_set_mask(ntb, db_bits);
 857}
 858
 859/**
 860 * ntb_peer_db_clear_mask() - clear bits in the peer doorbell mask
 861 * @ntb:        NTB device context.
 862 * @db_bits:    Doorbell bits to clear.
 863 *
 864 * Clear bits in the peer doorbell mask register, allowing doorbell interrupts
 865 * from being generated for those doorbell bits.  If the hardware does not
 866 * generate the interrupt on clearing the mask bit, then the driver should not
 867 * implement this function!
 868 *
 869 * This is unusual, and hardware may not support it.
 870 *
 871 * Return: Zero on success, otherwise an error number.
 872 */
 873static inline int ntb_peer_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
 874{
 875        if (!ntb->ops->db_clear_mask)
 876                return -EINVAL;
 877
 878        return ntb->ops->peer_db_clear_mask(ntb, db_bits);
 879}
 880
 881/**
 882 * ntb_spad_is_unsafe() - check if it is safe to use the hardware scratchpads
 883 * @ntb:        NTB device context.
 884 *
 885 * It is possible for some ntb hardware to be affected by errata.  Hardware
 886 * drivers can advise clients to avoid using scratchpads.  Clients may ignore
 887 * this advice, though caution is recommended.
 888 *
 889 * Return: Zero if it is safe to use scratchpads, or One if it is not safe.
 890 */
 891static inline int ntb_spad_is_unsafe(struct ntb_dev *ntb)
 892{
 893        if (!ntb->ops->spad_is_unsafe)
 894                return 0;
 895
 896        return ntb->ops->spad_is_unsafe(ntb);
 897}
 898
 899/**
 900 * ntb_spad_count() - get the number of scratchpads
 901 * @ntb:        NTB device context.
 902 *
 903 * Hardware and topology may support a different number of scratchpads.
 904 *
 905 * Return: the number of scratchpads.
 906 */
 907static inline int ntb_spad_count(struct ntb_dev *ntb)
 908{
 909        return ntb->ops->spad_count(ntb);
 910}
 911
 912/**
 913 * ntb_spad_read() - read the local scratchpad register
 914 * @ntb:        NTB device context.
 915 * @idx:        Scratchpad index.
 916 *
 917 * Read the local scratchpad register, and return the value.
 918 *
 919 * Return: The value of the local scratchpad register.
 920 */
 921static inline u32 ntb_spad_read(struct ntb_dev *ntb, int idx)
 922{
 923        return ntb->ops->spad_read(ntb, idx);
 924}
 925
 926/**
 927 * ntb_spad_write() - write the local scratchpad register
 928 * @ntb:        NTB device context.
 929 * @idx:        Scratchpad index.
 930 * @val:        Scratchpad value.
 931 *
 932 * Write the value to the local scratchpad register.
 933 *
 934 * Return: Zero on success, otherwise an error number.
 935 */
 936static inline int ntb_spad_write(struct ntb_dev *ntb, int idx, u32 val)
 937{
 938        return ntb->ops->spad_write(ntb, idx, val);
 939}
 940
 941/**
 942 * ntb_peer_spad_addr() - address of the peer scratchpad register
 943 * @ntb:        NTB device context.
 944 * @idx:        Scratchpad index.
 945 * @spad_addr:  OUT - The address of the peer scratchpad register.
 946 *
 947 * Return the address of the peer doorbell register.  This may be used, for
 948 * example, by drivers that offload memory copy operations to a dma engine.
 949 *
 950 * Return: Zero on success, otherwise an error number.
 951 */
 952static inline int ntb_peer_spad_addr(struct ntb_dev *ntb, int idx,
 953                                     phys_addr_t *spad_addr)
 954{
 955        if (!ntb->ops->peer_spad_addr)
 956                return -EINVAL;
 957
 958        return ntb->ops->peer_spad_addr(ntb, idx, spad_addr);
 959}
 960
 961/**
 962 * ntb_peer_spad_read() - read the peer scratchpad register
 963 * @ntb:        NTB device context.
 964 * @idx:        Scratchpad index.
 965 *
 966 * Read the peer scratchpad register, and return the value.
 967 *
 968 * Return: The value of the local scratchpad register.
 969 */
 970static inline u32 ntb_peer_spad_read(struct ntb_dev *ntb, int idx)
 971{
 972        if (!ntb->ops->peer_spad_read)
 973                return 0;
 974
 975        return ntb->ops->peer_spad_read(ntb, idx);
 976}
 977
 978/**
 979 * ntb_peer_spad_write() - write the peer scratchpad register
 980 * @ntb:        NTB device context.
 981 * @idx:        Scratchpad index.
 982 * @val:        Scratchpad value.
 983 *
 984 * Write the value to the peer scratchpad register.
 985 *
 986 * Return: Zero on success, otherwise an error number.
 987 */
 988static inline int ntb_peer_spad_write(struct ntb_dev *ntb, int idx, u32 val)
 989{
 990        return ntb->ops->peer_spad_write(ntb, idx, val);
 991}
 992
 993#endif
 994