drivers/crypto/ccp/sev-dev-tsm.c

Source file repositories/reference/linux-study-clean/drivers/crypto/ccp/sev-dev-tsm.c

File Facts

System
Linux kernel
Corpus path
drivers/crypto/ccp/sev-dev-tsm.c
Extension
.c
Size
8704 bytes
Lines
400
Domain
Driver Families
Bucket
drivers/crypto
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (ide[i]) {
			ret = stream_enable(ide[i]);
			if (ret)
				break;
		}
	}

	return ret;
}

static void stream_disable(struct pci_ide *ide)
{
	pci_ide_stream_disable(ide->pdev, ide);
	pci_ide_stream_disable(pcie_find_root_port(ide->pdev), ide);
}

static void streams_disable(struct pci_ide **ide)
{
	for (int i = 0; i < TIO_IDE_MAX_TC; ++i)
		if (ide[i])
			stream_disable(ide[i]);
}

static void stream_setup(struct pci_ide *ide)
{
	struct pci_dev *rp = pcie_find_root_port(ide->pdev);

	ide->partner[PCI_IDE_EP].rid_start = 0;
	ide->partner[PCI_IDE_EP].rid_end = 0xffff;
	ide->partner[PCI_IDE_RP].rid_start = 0;
	ide->partner[PCI_IDE_RP].rid_end = 0xffff;

	ide->pdev->ide_cfg = 0;
	ide->pdev->ide_tee_limit = 1;
	rp->ide_cfg = 1;
	rp->ide_tee_limit = 0;

	pci_warn(ide->pdev, "Forcing CFG/TEE for %s", pci_name(rp));
	pci_ide_stream_setup(ide->pdev, ide);
	pci_ide_stream_setup(rp, ide);
}

static u8 streams_setup(struct pci_ide **ide, u8 *ids)
{
	bool def = false;
	u8 tc_mask = 0;
	int i;

	for (i = 0; i < TIO_IDE_MAX_TC; ++i) {
		if (!ide[i]) {
			ids[i] = 0xFF;
			continue;
		}

		tc_mask |= BIT(i);
		ids[i] = ide[i]->stream_id;

		if (!def) {
			struct pci_ide_partner *settings;

			settings = pci_ide_to_settings(ide[i]->pdev, ide[i]);
			settings->default_stream = 1;
			def = true;
		}

		stream_setup(ide[i]);
	}

	return tc_mask;
}

static int streams_register(struct pci_ide **ide)
{
	int ret = 0, i;

	for (i = 0; i < TIO_IDE_MAX_TC; ++i) {
		if (ide[i]) {
			ret = pci_ide_stream_register(ide[i]);
			if (ret)
				break;
		}
	}

	return ret;
}

static void streams_unregister(struct pci_ide **ide)
{
	for (int i = 0; i < TIO_IDE_MAX_TC; ++i)
		if (ide[i])

Annotation

Implementation Notes