协议
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 中定义
名称 | 值 | 说明 |
---|---|---|
LEGACY |
0 |
|
HS |
1 |
|
HSDDR 存储器 |
2 |
|
HS200 |
3 |
|
HS400 |
4 |
|
SDR12 |
5 |
|
SDR25 |
6 |
|
SDR50 |
7 |
|
SDR104 |
8 |
|
DDR50 |
9 |
|
最高 |
10 |
SdmmcVoltage 严格
类型:uint8
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
V330 |
0 |
|
V180 |
1 |
|
最高 |
2 |
表
SdmmcMetadata
在 fuchsia.hardware.sdmmc/metadata.fidl 中定义
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
max_frequency |
uint32
|
总线运行频率上限。SDMMC 核心驱动程序会将总线频率上限限定为此水平。如果未指定元数据,默认值为 UINT32_MAX。 |
2 |
speed_capabilities |
SdmmcHostPrefs
|
特定于主机的速度功能。如果未指定元数据,默认值为 0(无标志)。 |
3 |
enable_cache |
bool
|
如果为 true,则利用设备上的易失性缓存。如果未指定元数据,默认值为 true。如果连接的设备或插入的卡没有存储空间,则忽略此字段。 |
4 |
removable |
bool
|
如果为 true,此 SDMMC 控制器对应于一个可随时插入或移除 MMC/SD/SDIO 卡的可移动卡槽。在这种情况下,在驱动程序初始化期间探测失败不会被视为严重问题。如果未指定元数据,默认值为 false。 |
5 |
max_command_packing |
uint32
|
使用命令打包(批处理)至这么多的命令。如果为零,则停用命令打包。如果未指定元数据,默认值为 16。如果连接的设备或插入的卡不支持命令打包,则忽略。 |
6 |
use_fidl |
bool
|
。如果为 true,则使用 FIDL SDMMC 协议。如果为 false,则使用 Banjo SDMMC 协议。如果未指定元数据,默认值为 true。 |
联合体
SdmmcBuffer 严格 资源
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
vmo_id |
uint32
|
之前注册的 VMO 的 ID。 |
2 |
vmo |
handle<vmo>
|
协议实现不取得所有权的未注册 VMO。VMO 会在进入请求时被固定,并在返回前被取消固定。 |
Sdmmc_HostInfo_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_HostInfo_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_HwReset_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_HwReset_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_PerformTuning_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_PerformTuning_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_RegisterInBandInterrupt_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_RegisterInBandInterrupt_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_RegisterVmo_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_RegisterVmo_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_Request_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_Request_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_SetBusFreq_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_SetBusFreq_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_SetBusWidth_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_SetBusWidth_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_SetSignalVoltage_Result strict
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_SetSignalVoltage_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_SetTiming_Result 严格
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_SetTiming_Response
|
|
2 |
err |
zx/Status
|
Sdmmc_UnregisterVmo_Result 严格资源
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Sdmmc_UnregisterVmo_Response
|
|
2 |
err |
zx/Status
|
位
SdmmcHostCap 严格
类型:uint64
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
BUS_WIDTH_8 |
1 | |
特定媒体市场区域 |
2 | |
VOLTAGE_330 |
4 | |
AUTO_CMD12 |
8 | |
SDR104 |
16 | |
SDR50 |
32 | |
DDR50 |
64 | |
NO_TUNING_SDR50 |
128 | 主机不需要针对 SDR50 进行调优。 |
SdmmcHostPrefs 严格
类型:uint64
在 fuchsia.hardware.sdmmc/sdmmc.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
DISABLE_HS400 |
1 | |
DISABLE_HS200 |
2 | |
DISABLE_HSDDR |
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
|
驱动程序 |