Lines Matching full:ide
4 /* PCIe r7.0 section 6.33 Integrity & Data Encryption (IDE) */
6 #define dev_fmt(fmt) "PCI/IDE: " fmt
10 #include <linux/pci-ide.h>
65 /* No stream index to reserve in the Link IDE case */ in claim_stream()
103 * Require endpoint IDE capability to be paired with IDE Root Port IDE in pci_ide_init()
228 * @pdev: IDE capable PCIe Endpoint Physical Function
231 * Port IDE RID Association registers, and conversely retrieve the
232 * Requester ID of the Root Port for programming @pdev's IDE RID
235 * Allocate a Selective IDE Stream Register Block instance per port.
261 struct pci_ide *ide __free(kfree) = kzalloc(sizeof(*ide), GFP_KERNEL); in pci_ide_stream_alloc()
262 if (!ide) in pci_ide_stream_alloc()
305 *ide = (struct pci_ide) { in pci_ide_stream_alloc()
328 return_ptr(ide); in pci_ide_stream_alloc()
334 * @ide: idle IDE settings descriptor
337 * pci_ide_stream_alloc(). The stream represented by @ide is assumed to
340 void pci_ide_stream_free(struct pci_ide *ide) in pci_ide_stream_free() argument
342 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_free()
346 ida_free(&pdev->ide_stream_ida, ide->partner[PCI_IDE_EP].stream_index); in pci_ide_stream_free()
347 ida_free(&rp->ide_stream_ida, ide->partner[PCI_IDE_RP].stream_index); in pci_ide_stream_free()
348 ida_free(&hb->ide_stream_ida, ide->host_bridge_stream); in pci_ide_stream_free()
349 kfree(ide); in pci_ide_stream_free()
354 * pci_ide_stream_release() - unwind and release an @ide context
355 * @ide: partially or fully registered IDE settings descriptor
357 * In support of automatic cleanup of IDE setup routines perform IDE
359 * aspects of IDE setup have successfully completed.
362 * open code releasing the IDE context.
364 void pci_ide_stream_release(struct pci_ide *ide) in pci_ide_stream_release() argument
366 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_release()
369 if (ide->partner[PCI_IDE_RP].enable) in pci_ide_stream_release()
370 pci_ide_stream_disable(rp, ide); in pci_ide_stream_release()
372 if (ide->partner[PCI_IDE_EP].enable) in pci_ide_stream_release()
373 pci_ide_stream_disable(pdev, ide); in pci_ide_stream_release()
375 if (ide->partner[PCI_IDE_RP].setup) in pci_ide_stream_release()
376 pci_ide_stream_teardown(rp, ide); in pci_ide_stream_release()
378 if (ide->partner[PCI_IDE_EP].setup) in pci_ide_stream_release()
379 pci_ide_stream_teardown(pdev, ide); in pci_ide_stream_release()
381 if (ide->name) in pci_ide_stream_release()
382 pci_ide_stream_unregister(ide); in pci_ide_stream_release()
384 pci_ide_stream_free(ide); in pci_ide_stream_release()
411 * pci_ide_stream_register() - Prepare to activate an IDE Stream
412 * @ide: IDE settings descriptor
414 * After a Stream ID has been acquired for @ide, record the presence of
415 * the stream in sysfs. The expectation is that @ide is immutable while
418 int pci_ide_stream_register(struct pci_ide *ide) in pci_ide_stream_register() argument
420 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_register()
426 if (ide->stream_id < 0 || ide->stream_id > U8_MAX) { in pci_ide_stream_register()
427 pci_err(pdev, "Setup fail: Invalid Stream ID: %d\n", ide->stream_id); in pci_ide_stream_register()
432 request_stream_id(hb, ide->stream_id, &__sid); in pci_ide_stream_register()
434 pci_err(pdev, "Setup fail: Stream ID %d in use\n", ide->stream_id); in pci_ide_stream_register()
438 ep_stream = ide->partner[PCI_IDE_EP].stream_index; in pci_ide_stream_register()
439 rp_stream = ide->partner[PCI_IDE_RP].stream_index; in pci_ide_stream_register()
441 ide->host_bridge_stream, in pci_ide_stream_register()
450 ide->name = no_free_ptr(name); in pci_ide_stream_register()
452 /* Stream ID reservation recorded in @ide is now successfully registered */ in pci_ide_stream_register()
461 * @ide: idle IDE settings descriptor
463 * In preparation for freeing @ide, remove sysfs enumeration for the
466 void pci_ide_stream_unregister(struct pci_ide *ide) in pci_ide_stream_unregister() argument
468 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_unregister()
471 sysfs_remove_link(&hb->dev.kobj, ide->name); in pci_ide_stream_unregister()
472 kfree(ide->name); in pci_ide_stream_unregister()
473 ida_free(&hb->ide_stream_ids_ida, ide->stream_id); in pci_ide_stream_unregister()
474 ide->name = NULL; in pci_ide_stream_unregister()
485 struct pci_ide_partner *pci_ide_to_settings(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_to_settings() argument
494 if (pdev != ide->pdev) { in pci_ide_to_settings()
495 pci_warn_once(pdev, "setup expected Endpoint: %s\n", pci_name(ide->pdev)); in pci_ide_to_settings()
498 return &ide->partner[PCI_IDE_EP]; in pci_ide_to_settings()
500 struct pci_dev *rp = pcie_find_root_port(ide->pdev); in pci_ide_to_settings()
507 return &ide->partner[PCI_IDE_RP]; in pci_ide_to_settings()
516 static void set_ide_sel_ctl(struct pci_dev *pdev, struct pci_ide *ide, in set_ide_sel_ctl() argument
520 u32 val = FIELD_PREP(PCI_IDE_SEL_CTL_ID, ide->stream_id) | in set_ide_sel_ctl()
550 * pci_ide_stream_to_regs() - convert IDE settings to association register values
552 * @ide: registered IDE settings descriptor
555 static void pci_ide_stream_to_regs(struct pci_dev *pdev, struct pci_ide *ide, in pci_ide_stream_to_regs() argument
558 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_to_regs()
587 * pci_ide_stream_setup() - program settings to Selective IDE Stream registers
589 * @ide: registered IDE settings descriptor
592 * settings are written to @pdev's Selective IDE Stream register block,
596 void pci_ide_stream_setup(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_setup() argument
598 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_setup()
605 pci_ide_stream_to_regs(pdev, ide, ®s); in pci_ide_stream_setup()
632 set_ide_sel_ctl(pdev, ide, settings, pos, false); in pci_ide_stream_setup()
640 * @ide: registered IDE settings descriptor
646 void pci_ide_stream_teardown(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_teardown() argument
648 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_teardown()
671 * pci_ide_stream_enable() - enable a Selective IDE Stream
673 * @ide: registered and setup IDE settings descriptor
675 * Activate the stream by writing to the Selective IDE Stream Control
679 * if @ide is invalid, and -ENXIO if the stream fails to enter the secure state.
687 int pci_ide_stream_enable(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_enable() argument
689 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_enable()
698 set_ide_sel_ctl(pdev, ide, settings, pos, true); in pci_ide_stream_enable()
711 * pci_ide_stream_disable() - disable a Selective IDE Stream
713 * @ide: registered and setup IDE settings descriptor
715 * Clear the Selective IDE Stream Control Register, but leave all other
718 void pci_ide_stream_disable(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_disable() argument
720 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_disable()
786 * pci_ide_set_nr_streams() - sets size of the pool of IDE Stream resources
790 * Platform PCI init and/or expert test module use only. Limit IDE