6#ifndef _PSP2KERN_KERNEL_SDIF_H_
7#define _PSP2KERN_KERNEL_SDIF_H_
25#define SCE_SDIF_DEVICE_USD SCE_SDIF_DEVICE_SD
#define VITASDK_BUILD_ASSERT_EQ(__size__, __name__)
Definition build_utils.h:13
void * buffer
Definition bt.h:6
SceSize size
Definition lsdb.h:11
SceUInt32 mmc_uses_special_sector_map
Nonzero for the MF4GAM game-card layout.
Definition sdif.h:125
SceUID dma_descriptor_memblock_uid
UID of the dynamically allocated DMA descriptor memblock, if any.
Definition sdif.h:247
int ksceSdifMemoryCardEnableSlowMode(void)
Enable slow-mode delays for controller 1 MMC transfers.
SceUInt32 unknown_B0
Cleared when the controller is reset; its purpose is unknown.
Definition sdif.h:319
SceUInt32 unknown_B8
Its purpose is unknown.
Definition sdif.h:321
volatile SceUInt16 slot_interrupt_status
Definition sdif.h:175
int ksceSdifReadSectorSd(SceSdifContextPart *ctx, SceUInt32 sector, void *buffer, SceUInt32 sector_count)
Read SD sectors.
volatile SceUInt32 capabilities[2]
Definition sdif.h:166
SceUInt8 reserved_55[3]
Definition sdif.h:172
SceUInt32 unknown_2C
Its purpose is unknown.
Definition sdif.h:225
SceUInt32 unknown_194
Its purpose is unknown.
Definition sdif.h:251
volatile SceUInt8 wakeup_control
Definition sdif.h:154
SceUID event_flag_id
Event flag used by synchronous commands.
Definition sdif.h:236
void * buffer
Command data buffer, split into leading, direct-DMA, and trailing regions as needed.
Definition sdif.h:221
SceUInt32 supported_voltages
OCR voltage mask: 0x80 for controllers 0 and 2, and 0x300000 for controller 1.
Definition sdif.h:278
SceUInt16 block_count
Number of data blocks.
Definition sdif.h:223
volatile SceUInt32 adma_system_address
Definition sdif.h:173
SceUID event_flag_id
Controller event flag.
Definition sdif.h:298
SceSdifCmdInput * pending_cmd_head
Definition sdif.h:272
SceSize aligned_buffer_size
Size of the direct-DMA portion.
Definition sdif.h:253
SceUInt32 sd_write_protected
Nonzero when SD writes are prohibited.
Definition sdif.h:121
volatile SceUInt16 block_count
Definition sdif.h:144
int(* completion_callback)(struct SceSdifCmdInput *cmd)
Called after completion; its return value is passed on internally.
Definition sdif.h:234
SceUInt32 command
SD/MMC command index.
Definition sdif.h:205
SceUInt32 sdio_subintr2_intr_code
Interrupt code used with subinterrupt 2.
Definition sdif.h:315
SceUInt32 ocr
Last operation-conditions register value.
Definition sdif.h:305
SceSdifCommandState state
Definition sdif.h:231
SceSdifCmdInput * pending_cmd_tail
Definition sdif.h:273
SceSize leading_fragment_size
Size of the leading unaligned fragment.
Definition sdif.h:255
volatile SceUInt8 power_control
Definition sdif.h:152
SceUInt8 timeout_control
Host timeout-control value; initialized to 14 on FW 3.60.
Definition sdif.h:291
SceUInt32 argument
SD/MMC command argument.
Definition sdif.h:206
SceUInt8 reserved_5C[0xA0]
Definition sdif.h:174
int ksceSdifGetCardInsertState2(SceSdifDeviceIndex device_index)
Get a controller's card-detect input.
SceUInt8 unknown_27
Its purpose is unknown.
Definition sdif.h:285
struct SceSdifContextGlobal * global_context
Definition sdif.h:238
SceUInt32 dw0
Definition sdif.h:214
volatile SceUInt16 force_event_auto_cmd_error_status
Definition sdif.h:169
SceSdifContextPartBase * device_context
Device-specific context owned by SceSdif; callers must not free it.
Definition sdif.h:276
SceKernelFastMutex sdif_fast_mutex
Controller fast mutex.
Definition sdif.h:299
SceSdifDeviceType
Definition sdif.h:27
SceSdifCmdInput * free_cmd_tail
Definition sdif.h:271
SceUInt8 cid[16]
Card identification register, in big-endian byte order.
Definition sdif.h:129
volatile SceUInt16 error_interrupt_status_enable
Definition sdif.h:161
SceUInt32 relative_card_address
Relative card address in the low 16 bits.
Definition sdif.h:279
int ksceSdifInitializeMmcDevice(SceSdifDeviceIndex dev_index, SceSdifDeviceContext *dev_ctx)
Initialize an MMC device.
SceSize trailing_fragment_size
Size of the trailing unaligned fragment.
Definition sdif.h:256
SceKernelPARange physical_ranges[16]
Storage within this command object, passed to ksceKernelVARangeToPAVector.
Definition sdif.h:244
SceSize size
Must be 0x240.
Definition sdif.h:197
int ksceSdifReadCmd56(SceSdifDeviceContext *dev_ctx, void *buf, SceSize size)
Receive a game-card CMD56 response.
volatile SceUInt16 normal_interrupt_status_enable
Definition sdif.h:160
void * dma_descriptor_pool
DMA descriptor pool used when the embedded table is too small.
Definition sdif.h:304
volatile SceUInt16 host_control_2
Definition sdif.h:165
SceUInt32 card_flags
Bit 0 indicates block addressing; otherwise sector arguments use byte addressing.
Definition sdif.h:118
int ksceSdifWriteSectorMmc(SceSdifContextPart *ctx, SceUInt32 sector, const void *buffer, SceUInt32 sector_count)
Write MMC sectors.
SceUInt32 sdio_subintr3_8_intr_code
Interrupt code used with subinterrupts 3 through 8.
Definition sdif.h:316
void * SceSdifDeviceContext
Definition sdif.h:34
SceUInt32 unknown_90
Its purpose is unknown.
Definition sdif.h:307
SceUIntPtr leading_fragment_paddr
Physical address of leading_fragment.
Definition sdif.h:257
SceUInt32 sdio_function_count
Number of SDIO functions.
Definition sdif.h:122
struct SceSdifCmdInput * secondary_cmd
Dependent command started after this command succeeds.
Definition sdif.h:237
volatile SceUInt16 auto_cmd_error_status
Definition sdif.h:164
SceUID dma_descriptor_pool_uid
Offset 0x2484; UID of the 0x10000-byte DMA descriptor pool memblock.
Definition sdif.h:303
SceUInt8 sdio_enabled_function_mask
Definition sdif.h:312
struct SceSdifCmdInput * next_cmd
Definition sdif.h:230
SceKernelSpinlock spinlock
Definition sdif.h:308
SceInt64 start_time
System time when the command starts.
Definition sdif.h:260
SceUIntPtr trailing_fragment_paddr
Physical address of trailing_fragment.
Definition sdif.h:258
SceSdifCmdInput * active_cmd
Definition sdif.h:286
SceUInt32 sd_sector_size
SD block size in the low 16 bits.
Definition sdif.h:126
int ksceSdifWriteCmd56(SceSdifDeviceContext *dev_ctx, const void *buf, SceSize size)
Send a game-card CMD56 request.
SceUInt8 sdio_pending_function_mask
Definition sdif.h:313
void * active_dma_descriptors
Active DMA descriptor table.
Definition sdif.h:243
SceSdifCmdInput * free_cmd_head
Definition sdif.h:270
SceUInt32 command_index
Index from 0 through 15 in the owning controller's command array.
Definition sdif.h:232
volatile SceUInt32 argument
Definition sdif.h:145
SceUInt8 slow_mode
Enables minimum transfer delays for controller 1 MMC reads and writes.
Definition sdif.h:292
int ksceSdifWriteSectorSd(SceSdifContextPart *ctx, SceUInt32 sector, const void *buffer, SceUInt32 sector_count)
Write SD sectors.
SceUInt16 block_size
Data block size; normally 0x200 for sector transfers.
Definition sdif.h:222
volatile SceUInt32 maximum_current_capabilities
Definition sdif.h:167
SceUInt32 sdio_dispatch_pending
Definition sdif.h:317
SceUInt32 mmc_sector_size
MMC block size in the low 16 bits.
Definition sdif.h:120
SceUInt8 internal_dma_descriptors[0x80]
Embedded table of up to 16 eight-byte DMA descriptors.
Definition sdif.h:241
volatile SceUInt32 buffer_data_port
Definition sdif.h:149
volatile SceUInt8 adma_error_status
Definition sdif.h:171
volatile SceUInt32 present_state
Definition sdif.h:150
SceUInt32 controller_index
Controller index from 0 through 2.
Definition sdif.h:281
volatile SceUInt16 force_event_error_interrupt_status
Definition sdif.h:170
SceUInt8 reserved_100[0xF00]
Definition sdif.h:177
SceInt32 error_code
Completion error written by the interrupt and timeout paths.
Definition sdif.h:224
SceUInt32 sdio_reserved_0C
Its purpose is unknown.
Definition sdif.h:127
SceUInt8 sdio_interrupt_status
Definition sdif.h:311
volatile SceUInt8 timeout_control
Definition sdif.h:156
SceUInt8 slow_write_count
Initialized from system time and incremented for each slow-mode write.
Definition sdif.h:294
SceSdifDeviceType device_type
Definition sdif.h:275
volatile SceUInt16 transfer_mode
Definition sdif.h:146
int ksceSdifGetCID(const SceSdifContextPart *ctx, void *cid)
Copy a device's card identification register.
SceUInt8 slow_read_count
Initialized from system time and incremented for each slow-mode read chunk.
Definition sdif.h:293
int ksceSdifMemoryCardDisableSlowMode(void)
Disable slow-mode delays for controller 1 MMC transfers.
union SceSdifCmdInput::@52 response
Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 i...
SceSdifCmdInput commands[16]
Controller-owned command pool.
Definition sdif.h:332
int ksceSdifInitializeSdDevice(SceSdifDeviceIndex device_index, SceSdifContextPart **result)
Initialize an SD device.
SceSdifCmdInput * active_data_cmd
Definition sdif.h:287
struct SceSdifContextGlobal * global_context
Owning controller context.
Definition sdif.h:117
SceSdifContextPart * ksceSdifGetSdContextPartValidateSdio(SceSdifDeviceIndex device_index)
Get an initialized SDIO context.
SceUInt8 suspended
Nonzero while normal command submission is suspended.
Definition sdif.h:283
SceUInt32 enabled_subintr_mask
Definition sdif.h:290
int ksceSdifGetCardInsertState1(SceSdifDeviceIndex device_index)
Get a controller's card-detect input.
SceUInt32 dw2
Definition sdif.h:216
volatile SceUInt16 command
Definition sdif.h:147
volatile SceUInt8 software_reset
Definition sdif.h:157
volatile SceUInt16 clock_control
Definition sdif.h:155
SceUInt8 unknown_26
Its purpose is unknown.
Definition sdif.h:284
SceUInt32 state_flags
Host-command, response, transfer, DMA, and completion flags.
Definition sdif.h:204
SceUInt8 csd[16]
Card-specific data register, in big-endian byte order.
Definition sdif.h:130
SceUIntPtr active_dma_descriptors_paddr
Physical address of the active DMA descriptor table.
Definition sdif.h:239
SceUInt64 last_transfer_duration
Duration of the last sector transfer in microseconds.
Definition sdif.h:309
volatile SceUInt8 host_control
Definition sdif.h:151
SceSdifContextGlobal * ksceSdifGetSdContextGlobal(SceSdifDeviceIndex device_index)
Get a controller's process-global context.
volatile SceUInt32 response[4]
Definition sdif.h:148
volatile SceUInt16 error_interrupt_status
Definition sdif.h:159
SceUInt32 unknown_190
Its purpose is unknown.
Definition sdif.h:250
SceSdifContextData ctx_data
Definition sdif.h:333
volatile SceUInt16 error_interrupt_signal_enable
Definition sdif.h:163
SceUInt8 unknown_A3
Its purpose is unknown.
Definition sdif.h:314
volatile SceUInt16 normal_interrupt_signal_enable
Definition sdif.h:162
volatile SceUInt8 block_gap_control
Definition sdif.h:153
SceSdifDeviceIndex
Definition sdif.h:17
SceSdifHostRegisters * host_registers
Base of the controller's 0x1000-byte register memblock.
Definition sdif.h:289
struct SceSdifContextPart SceSdifContextPart
Opaque device-specific context.
Definition sdif.h:45
SceSdifCommandState
Internal state of a command owned by a controller context.
Definition sdif.h:182
SceInt64 end_time
System time when the command completes.
Definition sdif.h:261
SceUID host_registers_uid
UID of the controller's 0x1000-byte register memblock.
Definition sdif.h:296
SceUInt8 leading_fragment[0x40]
Bounce buffer for the leading unaligned fragment.
Definition sdif.h:263
volatile SceUInt16 host_controller_version
Definition sdif.h:176
int ksceSdifReadSectorMmc(SceSdifContextPart *ctx, SceUInt32 sector, void *buffer, SceUInt32 sector_count)
Read MMC sectors.
SceUInt8 trailing_fragment[0x40]
Bounce buffer for the trailing unaligned fragment.
Definition sdif.h:264
SceUInt8 command_specific_data[0x30]
Command-specific storage; asynchronous SDIO transfers use its final 0x20 bytes.
Definition sdif.h:228
volatile SceUInt16 normal_interrupt_status
Definition sdif.h:158
SceUInt32 dw3
Definition sdif.h:217
SceUInt32 unknown_BC
Its purpose is unknown.
Definition sdif.h:322
SceUInt8 reserved_4C[4]
Definition sdif.h:168
SceUIntPtr internal_dma_descriptors_paddr
Physical address of internal_dma_descriptors.
Definition sdif.h:246
SceUInt32 unknown_B4
Cleared when the controller is reset; its purpose is unknown.
Definition sdif.h:320
volatile SceUInt32 dma_system_address
Definition sdif.h:142
SceSdifDeviceContext * ksceSdifGetSdContextPartValidateMmc(SceSdifDeviceIndex dev_index)
Get an initialized MMC context.
volatile SceUInt16 block_size
Definition sdif.h:143
SceSdifDeviceContext * ksceSdifGetSdContextPartValidateSd(SceSdifDeviceIndex dev_index)
Get an initialized SD context.
void * aligned_buffer
Direct-DMA portion of the command data buffer.
Definition sdif.h:252
SceUInt32 unknown_18C
Its purpose is unknown.
Definition sdif.h:248
SceUInt8 command_complete
Set when the active host command completes.
Definition sdif.h:282
SceUInt32 dw1
Definition sdif.h:215
@ SCE_SDIF_DEVICE_TYPE_SD
Definition sdif.h:30
@ SCE_SDIF_DEVICE_TYPE_INVALID
Definition sdif.h:28
@ SCE_SDIF_DEVICE_TYPE_MMC
Definition sdif.h:29
@ SCE_SDIF_DEVICE_TYPE_SDIO
Definition sdif.h:31
@ SCE_SDIF_DEVICE_GC
Game-card controller.
Definition sdif.h:19
@ SCE_SDIF_DEVICE_SD
microSD controller index; unsupported by release FW 3.60 SceSdif.
Definition sdif.h:21
@ SCE_SDIF_DEVICE_EMMC
Internal eMMC controller.
Definition sdif.h:18
@ SCE_SDIF_DEVICE_SDIO
WLAN/Bluetooth SDIO controller.
Definition sdif.h:20
@ SCE_SDIF_COMMAND_STATE_ACTIVE
Definition sdif.h:185
@ SCE_SDIF_COMMAND_STATE_FREE
Definition sdif.h:183
@ SCE_SDIF_COMMAND_STATE_COMPLETED
Definition sdif.h:186
@ SCE_SDIF_COMMAND_STATE_QUEUED
Definition sdif.h:184
Mutable state for one FW 3.60 SDIF controller.
Definition sdif.h:269
Process-global state for one SDIF controller.
Definition sdif.h:331
Common 0x30-byte prefix of the FW 3.60 MMC, SD, and SDIO contexts.
Definition sdif.h:116
Memory-mapped SD host-controller register block.
Definition sdif.h:141
Definition fast_mutex.h:18
int SceKernelSpinlock
Regular Spinlock.
Definition types.h:200
unsigned int SceUIntPtr
Definition types.h:84
int32_t SceInt32
Definition types.h:44
unsigned int SceSize
Definition types.h:56
uint16_t SceUInt16
Definition types.h:42
int SceUID
UIDs are used to describe many different kernel objects.
Definition types.h:90
int64_t SceInt64
Definition types.h:50
uint64_t SceUInt64
Definition types.h:51
uint32_t SceUInt32
Definition types.h:45
uint8_t SceUInt8
Definition types.h:36