fuchsia.hardware.sdmmc

添加时间:HEAD

协议

InBandInterrupt

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

回调

请求

<EMPTY>

响应

<EMPTY>

SDMMC

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

AckInBandInterrupt

请求

<EMPTY>

HostInfo

获取主机信息。

请求

<EMPTY>

响应

名称类型
payload Sdmmc_HostInfo_Result

HwReset

发出硬件重置请求。

请求

<EMPTY>

响应

名称类型
payload Sdmmc_HwReset_Result

PerformTuning

执行调参。

请求

名称类型
cmd_idx uint32

响应

名称类型
payload Sdmmc_PerformTuning_Result

RegisterInBandInterrupt

注册指定的回调,以便在从卡收到带内中断时调用。在调用回调之前,协议实现将停用控制器中的带内中断。在客户端处理完之前的中断后,可通过调用 AckInBandInterrupt() 重新启用带内中断。

请求

名称类型
interrupt_cb InBandInterrupt

响应

名称类型
payload Sdmmc_RegisterInBandInterrupt_Result

RegisterVmo

在以下方法中,vmo_id 用于唯一标识将传递给 SdmmcBufferRegion 中的请求的 VMO。VMO ID 由调用方选择,可以是任何 uint32 值。注册 VMO 并将所有权转让给协议实现。vmo_rights 是一个包含 SdmmcVmoRight 值的位字段,用于确定在固定或映射 VMO 时该实现使用的读写权限。该实现可以在此调用期间或每次请求中使用它时固定 vmo,并且可以保持固定,直到 VMO 取消注册为止。client_id 可以位于 [0, SDMMC_MAX_CLIENT_ID] 中,用于标识要注册此 VMO 的 ID 空间(即,如果两个不同的 VMO 为不同的客户端注册,则可以使用相同的 ID)。

请求

名称类型
vmo_id uint32
client_id uint8
vmo handle<vmo>
offset uint64
size uint64
vmo_rights uint32

响应

名称类型
payload Sdmmc_RegisterVmo_Result

请求

以原子方式按顺序执行请求(即,没有居间请求)。此外,系统会按照收到来电的顺序对其进行回复。如果发生错误,请取消所有剩余的请求。否则,返回上一个请求的响应。

协议实现根据请求的属性和控制器的功能选择是否使用 DMA。

客户端负责执行以下缓存操作:

收到读取请求后:

  • 对客户端已映射的缓冲区使用 ZX_CACHE_FLUSH_DATA | ZX_CACHE_FLUSH_INVALIDATE 调用 zx_cache_flush。
  • 在所有其他缓冲区上使用 ZX_VMO_OP_CACHE_CLEAN_INVALIDATE 调用 zx_vmo_op_range。

请注意,在请求返回之前写入缓冲区的任何部分都可能会损坏收到的数据。

在发出写入请求之前:

  • 对客户端已映射的缓冲区使用 ZX_CACHE_FLUSH_DATA 调用 zx_cache_flush。
  • 在所有其他缓冲区上使用 ZX_VMO_OP_CACHE_CLEAN 调用 zx_vmo_op_range。

请求

名称类型
reqs vector<SdmmcReq>

响应

名称类型
payload Sdmmc_Request_Result

SetBusFreq

设置总线频率,零表示停用卡的时钟。

请求

名称类型
bus_freq uint32

响应

名称类型
payload Sdmmc_SetBusFreq_Result

SetBusWidth

设置总线宽度。

请求

名称类型
bus_width SdmmcBusWidth

响应

名称类型
payload Sdmmc_SetBusWidth_Result

SetSignalVoltage

设置信号电压。

请求

名称类型
voltage SdmmcVoltage

响应

名称类型
payload Sdmmc_SetSignalVoltage_Result

SetTiming

设置 mmc 时间。

请求

名称类型
timing SdmmcTiming

响应

名称类型
payload Sdmmc_SetTiming_Result

UnregisterVmo

被调用方取消映射/取消固定 VMO,并将所有权返回给调用方。

请求

名称类型
vmo_id uint32
client_id uint8

响应

名称类型
payload Sdmmc_UnregisterVmo_Result

结构体

SdmmcBufferRegion 资源

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
buffer SdmmcBuffer 无默认设置
offset uint64

偏移到 VMO 以开始读取或写入。如果类型为 VMO_ID,则此值相对于传递给 RegisterVmo 的偏移量。

无默认设置
size uint64

要从此缓冲区区域读取或向其写入的字节数。

无默认设置

SdmmcHostInfo

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
caps uint64

控制器功能

无默认设置
max_transfer_size uint64

数据请求大小上限

无默认设置
max_transfer_size_non_dma uint64 无默认设置
max_buffer_regions uint64

可在单个请求中使用的缓冲区区域的数量。

无默认设置

SdmmcReq 资源

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
cmd_idx uint32 无默认设置
cmd_flags uint32 无默认设置
arg uint32 无默认设置
blocksize uint32 无默认设置
suppress_error_messages bool

如果为 true,则 SDMMC 驱动程序应降低此请求产生的任何错误消息的日志级别。对于预计会有错误或并非严重错误的请求,系统将设置此变量。

无默认设置
client_id uint8

此请求的客户端 ID。只有向此客户端注册的 VMO 可能存在于下面的缓冲区中。

无默认设置
buffers vector<SdmmcBufferRegion> 无默认设置

Sdmmc_HostInfo_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
info SdmmcHostInfo 无默认设置

Sdmmc_HwReset_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_PerformTuning_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_RegisterInBandInterrupt_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_RegisterVmo_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_Request_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
response uint32[4] 无默认设置

Sdmmc_SetBusFreq_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_SetBusWidth_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_SetSignalVoltage_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_SetTiming_Response

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

<EMPTY>

Sdmmc_UnregisterVmo_Response 资源

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

字段类型说明默认
vmo handle<vmo> 无默认设置

精英

SdmmcBusWidth 严格

类型:uint8

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
0
1
2
3

SdmmcTiming 严格

类型:uint8

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
0
1
2
3
4
5
6
7
8
9
10

SdmmcVoltage 严格

类型:uint8

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
0
1
2

SdmmcMetadata

fuchsia.hardware.sdmmc/metadata.fidl 中定义

序数字段类型说明
max_frequency uint32

总线运行频率上限。SDMMC 核心驱动程序会将总线频率上限限定为此水平。如果未指定元数据,默认值为 UINT32_MAX。

speed_capabilities SdmmcHostPrefs

特定于主机的速度功能。如果未指定元数据,默认值为 0(无标志)。

enable_cache bool

如果为 true,则利用设备上的易失性缓存。如果未指定元数据,默认值为 true。如果连接的设备或插入的卡没有存储空间,则忽略此字段。

removable bool

如果为 true,此 SDMMC 控制器对应于一个可随时插入或移除 MMC/SD/SDIO 卡的可移动卡槽。在这种情况下,在驱动程序初始化期间探测失败不会被视为严重问题。如果未指定元数据,默认值为 false。

max_command_packing uint32

使用命令打包(批处理)至这么多的命令。如果为零,则停用命令打包。如果未指定元数据,默认值为 16。如果连接的设备或插入的卡不支持命令打包,则忽略。

use_fidl bool

。如果为 true,则使用 FIDL SDMMC 协议。如果为 false,则使用 Banjo SDMMC 协议。如果未指定元数据,默认值为 true。

联合体

SdmmcBuffer 严格 资源

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
vmo_id uint32

之前注册的 VMO 的 ID。

vmo handle<vmo>

协议实现不取得所有权的未注册 VMO。VMO 会在进入请求时被固定,并在返回前被取消固定。

Sdmmc_HostInfo_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_HostInfo_Response
err zx/Status

Sdmmc_HwReset_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_HwReset_Response
err zx/Status

Sdmmc_PerformTuning_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_PerformTuning_Response
err zx/Status

Sdmmc_RegisterInBandInterrupt_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_RegisterInBandInterrupt_Response
err zx/Status

Sdmmc_RegisterVmo_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_RegisterVmo_Response
err zx/Status

Sdmmc_Request_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_Request_Response
err zx/Status

Sdmmc_SetBusFreq_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_SetBusFreq_Response
err zx/Status

Sdmmc_SetBusWidth_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_SetBusWidth_Response
err zx/Status

Sdmmc_SetSignalVoltage_Result strict

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_SetSignalVoltage_Response
err zx/Status

Sdmmc_SetTiming_Result 严格

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_SetTiming_Response
err zx/Status

Sdmmc_UnregisterVmo_Result 严格资源

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

序数变体类型说明
response Sdmmc_UnregisterVmo_Response
err zx/Status

SdmmcHostCap 严格

类型:uint64

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
1
2
4
8
16
32
64
128

主机不需要针对 SDR50 进行调优。

SdmmcHostPrefs 严格

类型:uint64

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
1
2
4

SdmmcVmoRight 严格

类型:uint32

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称说明
1
2

常量

名称类型说明
SDMMC_MAX_CLIENT_ID 7 uint8

下方 client_id 字段的最大值。目前已知需要 8 个以上的客户端,但如果以后发生变化,此值将会增大。

SDMMC_PAGES_COUNT 512 uint64

每个请求浏览页数 - 每个请求 200 万个与 dev/block/sdhci 中的 DMA_DESC_COUNT 匹配 (PAGE_SIZE / sizeof(zx_paddr_t))

服务

SdmmcService

fuchsia.hardware.sdmmc/sdmmc.fidl 中定义

名称类型传输
sdmmc fuchsia.hardware.sdmmc/Sdmmc 驱动程序