drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c

Source file repositories/reference/linux-study-clean/drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c

File Facts

System
Linux kernel
Corpus path
drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c
Extension
.c
Size
21686 bytes
Lines
726
Domain
Driver Families
Bucket
drivers/firmware
Inferred role
Driver Families: exported/initcall integration point
Status
integration 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

switch (mem_type) {
		case WMFW_ADSP2_PM:
			return 3 * regmap_get_val_bytes(priv->dsp->regmap);
		case WMFW_ADSP2_XM:
		case WMFW_ADSP2_YM:
		case WMFW_ADSP2_ZM:
			return sizeof(u32);
		default:
			break;
		}
		break;
	case WMFW_HALO:
		switch (mem_type) {
		case WMFW_ADSP2_XM:
		case WMFW_ADSP2_YM:
			return sizeof(u32);
		case WMFW_HALO_PM_PACKED:
			return 5 * sizeof(u32);
		case WMFW_HALO_XM_PACKED:
		case WMFW_HALO_YM_PACKED:
			return 3 * sizeof(u32);
		default:
			break;
		}
		break;
	default:
		KUNIT_FAIL(priv->test, "Unexpected DSP type\n");
		return 0;
	}

	KUNIT_FAIL(priv->test, "Unexpected mem type\n");

	return 0;
}
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_reg_block_length_bytes, "FW_CS_DSP_KUNIT_TEST_UTILS");

/**
 * cs_dsp_mock_reg_block_length_registers() - Number of registers in an access block.
 *
 * @priv:	Pointer to struct cs_dsp_test.
 * @mem_type:	Memory region type.
 *
 * Return: Total number of register forming the smallest bus access size.
 * For unpacked memory this is the number of registers containing one
 * DSP word. For packed memory this is the number of registers in one
 * packed access block.
 */
unsigned int cs_dsp_mock_reg_block_length_registers(struct cs_dsp_test *priv, int mem_type)
{
	return cs_dsp_mock_reg_block_length_bytes(priv, mem_type) /
	       regmap_get_val_bytes(priv->dsp->regmap);
}
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_reg_block_length_registers, "FW_CS_DSP_KUNIT_TEST_UTILS");

/**
 * cs_dsp_mock_reg_block_length_dsp_words() - Number of dsp_words in an access block.
 *
 * @priv:	Pointer to struct cs_dsp_test.
 * @mem_type:	Memory region type.
 *
 * Return: Total number of DSP words in a group of registers forming the
 * smallest bus access size.
 */
unsigned int cs_dsp_mock_reg_block_length_dsp_words(struct cs_dsp_test *priv, int mem_type)
{
	switch (priv->dsp->type) {
	case WMFW_ADSP2:
		switch (mem_type) {
		case WMFW_ADSP2_PM:
			return regmap_get_val_bytes(priv->dsp->regmap) / 2;
		case WMFW_ADSP2_XM:
		case WMFW_ADSP2_YM:
		case WMFW_ADSP2_ZM:
			return 1;
		default:
			break;
		}
		break;
	case WMFW_HALO:
		switch (mem_type) {
		case WMFW_ADSP2_XM:
		case WMFW_ADSP2_YM:
			return 1;
		case WMFW_HALO_PM_PACKED:
		case WMFW_HALO_XM_PACKED:
		case WMFW_HALO_YM_PACKED:
			return 4;
		default:
			break;
		}

Annotation

Implementation Notes