| .. | .. |
|---|
| 415 | 415 | return ret; |
|---|
| 416 | 416 | } |
|---|
| 417 | 417 | |
|---|
| 418 | | -static int intel_ntb3_link_enable(struct ntb_dev *ntb, |
|---|
| 419 | | - enum ntb_speed max_speed, |
|---|
| 420 | | - enum ntb_width max_width) |
|---|
| 418 | +int intel_ntb3_link_enable(struct ntb_dev *ntb, enum ntb_speed max_speed, |
|---|
| 419 | + enum ntb_width max_width) |
|---|
| 421 | 420 | { |
|---|
| 422 | 421 | struct intel_ntb_dev *ndev; |
|---|
| 423 | 422 | u32 ntb_ctl; |
|---|
| .. | .. |
|---|
| 532 | 531 | return 0; |
|---|
| 533 | 532 | } |
|---|
| 534 | 533 | |
|---|
| 535 | | -static int intel_ntb3_peer_db_set(struct ntb_dev *ntb, u64 db_bits) |
|---|
| 534 | +int intel_ntb3_peer_db_addr(struct ntb_dev *ntb, phys_addr_t *db_addr, |
|---|
| 535 | + resource_size_t *db_size, |
|---|
| 536 | + u64 *db_data, int db_bit) |
|---|
| 537 | +{ |
|---|
| 538 | + phys_addr_t db_addr_base; |
|---|
| 539 | + struct intel_ntb_dev *ndev = ntb_ndev(ntb); |
|---|
| 540 | + |
|---|
| 541 | + if (unlikely(db_bit >= BITS_PER_LONG_LONG)) |
|---|
| 542 | + return -EINVAL; |
|---|
| 543 | + |
|---|
| 544 | + if (unlikely(BIT_ULL(db_bit) & ~ntb_ndev(ntb)->db_valid_mask)) |
|---|
| 545 | + return -EINVAL; |
|---|
| 546 | + |
|---|
| 547 | + ndev_db_addr(ndev, &db_addr_base, db_size, ndev->peer_addr, |
|---|
| 548 | + ndev->peer_reg->db_bell); |
|---|
| 549 | + |
|---|
| 550 | + if (db_addr) { |
|---|
| 551 | + *db_addr = db_addr_base + (db_bit * 4); |
|---|
| 552 | + dev_dbg(&ndev->ntb.pdev->dev, "Peer db addr %llx db bit %d\n", |
|---|
| 553 | + *db_addr, db_bit); |
|---|
| 554 | + } |
|---|
| 555 | + |
|---|
| 556 | + if (db_data) { |
|---|
| 557 | + *db_data = 1; |
|---|
| 558 | + dev_dbg(&ndev->ntb.pdev->dev, "Peer db data %llx db bit %d\n", |
|---|
| 559 | + *db_data, db_bit); |
|---|
| 560 | + } |
|---|
| 561 | + |
|---|
| 562 | + return 0; |
|---|
| 563 | +} |
|---|
| 564 | + |
|---|
| 565 | +int intel_ntb3_peer_db_set(struct ntb_dev *ntb, u64 db_bits) |
|---|
| 536 | 566 | { |
|---|
| 537 | 567 | struct intel_ntb_dev *ndev = ntb_ndev(ntb); |
|---|
| 538 | 568 | int bit; |
|---|
| .. | .. |
|---|
| 550 | 580 | return 0; |
|---|
| 551 | 581 | } |
|---|
| 552 | 582 | |
|---|
| 553 | | -static u64 intel_ntb3_db_read(struct ntb_dev *ntb) |
|---|
| 583 | +u64 intel_ntb3_db_read(struct ntb_dev *ntb) |
|---|
| 554 | 584 | { |
|---|
| 555 | 585 | struct intel_ntb_dev *ndev = ntb_ndev(ntb); |
|---|
| 556 | 586 | |
|---|
| .. | .. |
|---|
| 559 | 589 | ndev->self_reg->db_clear); |
|---|
| 560 | 590 | } |
|---|
| 561 | 591 | |
|---|
| 562 | | -static int intel_ntb3_db_clear(struct ntb_dev *ntb, u64 db_bits) |
|---|
| 592 | +int intel_ntb3_db_clear(struct ntb_dev *ntb, u64 db_bits) |
|---|
| 563 | 593 | { |
|---|
| 564 | 594 | struct intel_ntb_dev *ndev = ntb_ndev(ntb); |
|---|
| 565 | 595 | |
|---|
| .. | .. |
|---|
| 584 | 614 | .db_clear = intel_ntb3_db_clear, |
|---|
| 585 | 615 | .db_set_mask = intel_ntb_db_set_mask, |
|---|
| 586 | 616 | .db_clear_mask = intel_ntb_db_clear_mask, |
|---|
| 587 | | - .peer_db_addr = intel_ntb_peer_db_addr, |
|---|
| 617 | + .peer_db_addr = intel_ntb3_peer_db_addr, |
|---|
| 588 | 618 | .peer_db_set = intel_ntb3_peer_db_set, |
|---|
| 589 | 619 | .spad_is_unsafe = intel_ntb_spad_is_unsafe, |
|---|
| 590 | 620 | .spad_count = intel_ntb_spad_count, |
|---|