vitasdk
Documentation of the vitasdk

Exports for Kernel. More...

Data Structures

struct  SceSdifContextPartBase
 Common 0x30-byte prefix of the FW 3.60 MMC, SD, and SDIO contexts. More...
 
struct  SceSdifHostRegisters
 Memory-mapped SD host-controller register block. More...
 
struct  SceSdifCmdInput
 SD/MMC command object. More...
 
struct  SceSdifContextData
 Mutable state for one FW 3.60 SDIF controller. More...
 
struct  SceSdifContextGlobal
 Process-global state for one SDIF controller. More...
 
union  SceSdifContextPartBase.__unnamed49__
 
union  SceSdifContextPartBase.__unnamed51__
 
union  SceSdifCmdInput.response
 Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 is cleared. The storage order is reversed. More...
 
struct  SceSdifCmdInput.response.words
 

Macros

#define SCE_SDIF_DEVICE_USD   SCE_SDIF_DEVICE_SD
 Alias using the internal uSD name for the microSD controller index.
 

Typedefs

typedef void * SceSdifDeviceContext
 
typedef struct SceSdifContextPart SceSdifContextPart
 Opaque device-specific context.
 

Enumerations

enum  SceSdifDeviceIndex { SCE_SDIF_DEVICE_EMMC = 0x0 , SCE_SDIF_DEVICE_GC = 0x1 , SCE_SDIF_DEVICE_SDIO = 0x2 , SCE_SDIF_DEVICE_SD = 0x3 }
 
enum  SceSdifDeviceType { SCE_SDIF_DEVICE_TYPE_INVALID = 0x0 , SCE_SDIF_DEVICE_TYPE_MMC = 0x1 , SCE_SDIF_DEVICE_TYPE_SD = 0x2 , SCE_SDIF_DEVICE_TYPE_SDIO = 0x3 }
 
enum  SceSdifCommandState { SCE_SDIF_COMMAND_STATE_FREE = 0 , SCE_SDIF_COMMAND_STATE_QUEUED = 1 , SCE_SDIF_COMMAND_STATE_ACTIVE = 2 , SCE_SDIF_COMMAND_STATE_COMPLETED = 3 }
 Internal state of a command owned by a controller context. More...
 

Functions

SceSdifDeviceContext * ksceSdifGetSdContextPartValidateMmc (SceSdifDeviceIndex dev_index)
 Get an initialized MMC context.
 
int ksceSdifInitializeMmcDevice (SceSdifDeviceIndex dev_index, SceSdifDeviceContext *dev_ctx)
 Initialize an MMC device.
 
int ksceSdifWriteCmd56 (SceSdifDeviceContext *dev_ctx, const void *buf, SceSize size)
 Send a game-card CMD56 request.
 
int ksceSdifReadCmd56 (SceSdifDeviceContext *dev_ctx, void *buf, SceSize size)
 Receive a game-card CMD56 response.
 
 VITASDK_BUILD_ASSERT_EQ (0x30, SceSdifContextPartBase)
 
 VITASDK_BUILD_ASSERT_EQ (0x1000, SceSdifHostRegisters)
 
 VITASDK_BUILD_ASSERT_EQ (0x240, SceSdifCmdInput)
 
 VITASDK_BUILD_ASSERT_EQ (0xC0, SceSdifContextData)
 
 VITASDK_BUILD_ASSERT_EQ (0x24C0, SceSdifContextGlobal)
 
int ksceSdifGetCardInsertState1 (SceSdifDeviceIndex device_index)
 Get a controller's card-detect input.
 
int ksceSdifGetCardInsertState2 (SceSdifDeviceIndex device_index)
 Get a controller's card-detect input.
 
int ksceSdifGetCID (const SceSdifContextPart *ctx, void *cid)
 Copy a device's card identification register.
 
SceSdifContextGlobal * ksceSdifGetSdContextGlobal (SceSdifDeviceIndex device_index)
 Get a controller's process-global context.
 
SceSdifDeviceContext * ksceSdifGetSdContextPartValidateSd (SceSdifDeviceIndex dev_index)
 Get an initialized SD context.
 
SceSdifContextPart * ksceSdifGetSdContextPartValidateSdio (SceSdifDeviceIndex device_index)
 Get an initialized SDIO context.
 
int ksceSdifInitializeSdDevice (SceSdifDeviceIndex device_index, SceSdifContextPart **result)
 Initialize an SD device.
 
int ksceSdifReadSectorMmc (SceSdifContextPart *ctx, SceUInt32 sector, void *buffer, SceUInt32 sector_count)
 Read MMC sectors.
 
int ksceSdifReadSectorSd (SceSdifContextPart *ctx, SceUInt32 sector, void *buffer, SceUInt32 sector_count)
 Read SD sectors.
 
int ksceSdifWriteSectorMmc (SceSdifContextPart *ctx, SceUInt32 sector, const void *buffer, SceUInt32 sector_count)
 Write MMC sectors.
 
int ksceSdifWriteSectorSd (SceSdifContextPart *ctx, SceUInt32 sector, const void *buffer, SceUInt32 sector_count)
 Write SD sectors.
 
int ksceSdifMemoryCardEnableSlowMode (void)
 Enable slow-mode delays for controller 1 MMC transfers.
 
int ksceSdifMemoryCardDisableSlowMode (void)
 Disable slow-mode delays for controller 1 MMC transfers.
 

Variables

struct SceSdifContextGlobal * SceSdifContextPartBase::global_context
 Owning controller context.
 
SceUInt32 SceSdifContextPartBase::card_flags
 Bit 0 indicates block addressing; otherwise sector arguments use byte addressing.
 
SceUInt32 SceSdifContextPartBase::mmc_sector_size
 MMC block size in the low 16 bits.
 
SceUInt32 SceSdifContextPartBase::sd_write_protected
 Nonzero when SD writes are prohibited.
 
SceUInt32 SceSdifContextPartBase::sdio_function_count
 Number of SDIO functions.
 
union { 
 
SceUInt32 mmc_sector_size
 MMC block size in the low 16 bits.
 
SceUInt32 sd_write_protected
 Nonzero when SD writes are prohibited.
 
SceUInt32 sdio_function_count
 Number of SDIO functions.
 
};  
 
SceUInt32 SceSdifContextPartBase::mmc_uses_special_sector_map
 Nonzero for the MF4GAM game-card layout.
 
SceUInt32 SceSdifContextPartBase::sd_sector_size
 SD block size in the low 16 bits.
 
SceUInt32 SceSdifContextPartBase::sdio_reserved_0C
 Its purpose is unknown.
 
union { 
 
SceUInt32 mmc_uses_special_sector_map
 Nonzero for the MF4GAM game-card layout.
 
SceUInt32 sd_sector_size
 SD block size in the low 16 bits.
 
SceUInt32 sdio_reserved_0C
 Its purpose is unknown.
 
};  
 
SceUInt8 SceSdifContextPartBase::cid [16]
 Card identification register, in big-endian byte order.
 
SceUInt8 SceSdifContextPartBase::csd [16]
 Card-specific data register, in big-endian byte order.
 
volatile SceUInt32 SceSdifHostRegisters::dma_system_address
 
volatile SceUInt16 SceSdifHostRegisters::block_size
 
volatile SceUInt16 SceSdifHostRegisters::block_count
 
volatile SceUInt32 SceSdifHostRegisters::argument
 
volatile SceUInt16 SceSdifHostRegisters::transfer_mode
 
volatile SceUInt16 SceSdifHostRegisters::command
 
volatile SceUInt32 SceSdifHostRegisters::response [4]
 
volatile SceUInt32 SceSdifHostRegisters::buffer_data_port
 
volatile SceUInt32 SceSdifHostRegisters::present_state
 
volatile SceUInt8 SceSdifHostRegisters::host_control
 
volatile SceUInt8 SceSdifHostRegisters::power_control
 
volatile SceUInt8 SceSdifHostRegisters::block_gap_control
 
volatile SceUInt8 SceSdifHostRegisters::wakeup_control
 
volatile SceUInt16 SceSdifHostRegisters::clock_control
 
volatile SceUInt8 SceSdifHostRegisters::timeout_control
 
volatile SceUInt8 SceSdifHostRegisters::software_reset
 
volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_status
 
volatile SceUInt16 SceSdifHostRegisters::error_interrupt_status
 
volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_status_enable
 
volatile SceUInt16 SceSdifHostRegisters::error_interrupt_status_enable
 
volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_signal_enable
 
volatile SceUInt16 SceSdifHostRegisters::error_interrupt_signal_enable
 
volatile SceUInt16 SceSdifHostRegisters::auto_cmd_error_status
 
volatile SceUInt16 SceSdifHostRegisters::host_control_2
 
volatile SceUInt32 SceSdifHostRegisters::capabilities [2]
 
volatile SceUInt32 SceSdifHostRegisters::maximum_current_capabilities
 
SceUInt8 SceSdifHostRegisters::reserved_4C [4]
 
volatile SceUInt16 SceSdifHostRegisters::force_event_auto_cmd_error_status
 
volatile SceUInt16 SceSdifHostRegisters::force_event_error_interrupt_status
 
volatile SceUInt8 SceSdifHostRegisters::adma_error_status
 
SceUInt8 SceSdifHostRegisters::reserved_55 [3]
 
volatile SceUInt32 SceSdifHostRegisters::adma_system_address
 
SceUInt8 SceSdifHostRegisters::reserved_5C [0xA0]
 
volatile SceUInt16 SceSdifHostRegisters::slot_interrupt_status
 
volatile SceUInt16 SceSdifHostRegisters::host_controller_version
 
SceUInt8 SceSdifHostRegisters::reserved_100 [0xF00]
 
SceSize SceSdifCmdInput::size
 Must be 0x240.
 
SceUInt32 SceSdifCmdInput::state_flags
 Host-command, response, transfer, DMA, and completion flags.
 
SceUInt32 SceSdifCmdInput::command
 SD/MMC command index.
 
SceUInt32 SceSdifCmdInput::argument
 SD/MMC command argument.
 
SceUInt8 SceSdifCmdInput::bytes [0x10]
 
SceUInt32 SceSdifCmdInput::dw0
 
SceUInt32 SceSdifCmdInput::dw1
 
SceUInt32 SceSdifCmdInput::dw2
 
SceUInt32 SceSdifCmdInput::dw3
 
struct { 
 
SceUInt32 dw0
 
SceUInt32 dw1
 
SceUInt32 dw2
 
SceUInt32 dw3
 
} SceSdifCmdInput::words 
 
union { 
 
SceUInt8 bytes [0x10]
 
   struct { 
 
SceUInt32 dw0
 
SceUInt32 dw1
 
SceUInt32 dw2
 
SceUInt32 dw3
 
   } words 
 
} SceSdifCmdInput::response 
 Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 is cleared. The storage order is reversed.
 
void * SceSdifCmdInput::buffer
 Command data buffer, split into leading, direct-DMA, and trailing regions as needed.
 
SceUInt16 SceSdifCmdInput::block_size
 Data block size; normally 0x200 for sector transfers.
 
SceUInt16 SceSdifCmdInput::block_count
 Number of data blocks.
 
SceInt32 SceSdifCmdInput::error_code
 Completion error written by the interrupt and timeout paths.
 
SceUInt32 SceSdifCmdInput::unknown_2C
 Its purpose is unknown.
 
SceUInt8 SceSdifCmdInput::command_specific_data [0x30]
 Command-specific storage; asynchronous SDIO transfers use its final 0x20 bytes.
 
struct SceSdifCmdInput * SceSdifCmdInput::next_cmd
 
SceSdifCommandState SceSdifCmdInput::state
 
SceUInt32 SceSdifCmdInput::command_index
 Index from 0 through 15 in the owning controller's command array.
 
int(* SceSdifCmdInput::completion_callback )(struct SceSdifCmdInput *cmd)
 Called after completion; its return value is passed on internally.
 
SceUID SceSdifCmdInput::event_flag_id
 Event flag used by synchronous commands.
 
struct SceSdifCmdInput * SceSdifCmdInput::secondary_cmd
 Dependent command started after this command succeeds.
 
struct SceSdifContextGlobal * SceSdifCmdInput::global_context
 
SceUIntPtr SceSdifCmdInput::active_dma_descriptors_paddr
 Physical address of the active DMA descriptor table.
 
SceUInt8 SceSdifCmdInput::internal_dma_descriptors [0x80]
 Embedded table of up to 16 eight-byte DMA descriptors.
 
void * SceSdifCmdInput::active_dma_descriptors
 Active DMA descriptor table.
 
SceKernelPARange SceSdifCmdInput::physical_ranges [16]
 Storage within this command object, passed to ksceKernelVARangeToPAVector.
 
SceUIntPtr SceSdifCmdInput::internal_dma_descriptors_paddr
 Physical address of internal_dma_descriptors.
 
SceUID SceSdifCmdInput::dma_descriptor_memblock_uid
 UID of the dynamically allocated DMA descriptor memblock, if any.
 
SceUInt32 SceSdifCmdInput::unknown_18C
 Its purpose is unknown.
 
SceUInt32 SceSdifCmdInput::unknown_190
 Its purpose is unknown.
 
SceUInt32 SceSdifCmdInput::unknown_194
 Its purpose is unknown.
 
void * SceSdifCmdInput::aligned_buffer
 Direct-DMA portion of the command data buffer.
 
SceSize SceSdifCmdInput::aligned_buffer_size
 Size of the direct-DMA portion.
 
SceSize SceSdifCmdInput::leading_fragment_size
 Size of the leading unaligned fragment.
 
SceSize SceSdifCmdInput::trailing_fragment_size
 Size of the trailing unaligned fragment.
 
SceUIntPtr SceSdifCmdInput::leading_fragment_paddr
 Physical address of leading_fragment.
 
SceUIntPtr SceSdifCmdInput::trailing_fragment_paddr
 Physical address of trailing_fragment.
 
SceInt64 SceSdifCmdInput::start_time
 System time when the command starts.
 
SceInt64 SceSdifCmdInput::end_time
 System time when the command completes.
 
SceUInt8 SceSdifCmdInput::leading_fragment [0x40]
 Bounce buffer for the leading unaligned fragment.
 
SceUInt8 SceSdifCmdInput::trailing_fragment [0x40]
 Bounce buffer for the trailing unaligned fragment.
 
SceSdifCmdInput * SceSdifContextData::free_cmd_head
 
SceSdifCmdInput * SceSdifContextData::free_cmd_tail
 
SceSdifCmdInput * SceSdifContextData::pending_cmd_head
 
SceSdifCmdInput * SceSdifContextData::pending_cmd_tail
 
SceSdifDeviceType SceSdifContextData::device_type
 
SceSdifContextPartBase * SceSdifContextData::device_context
 Device-specific context owned by SceSdif; callers must not free it.
 
SceUInt32 SceSdifContextData::supported_voltages
 OCR voltage mask: 0x80 for controllers 0 and 2, and 0x300000 for controller 1.
 
SceUInt32 SceSdifContextData::relative_card_address
 Relative card address in the low 16 bits.
 
SceUInt32 SceSdifContextData::controller_index
 Controller index from 0 through 2.
 
SceUInt8 SceSdifContextData::command_complete
 Set when the active host command completes.
 
SceUInt8 SceSdifContextData::suspended
 Nonzero while normal command submission is suspended.
 
SceUInt8 SceSdifContextData::unknown_26
 Its purpose is unknown.
 
SceUInt8 SceSdifContextData::unknown_27
 Its purpose is unknown.
 
SceSdifCmdInput * SceSdifContextData::active_cmd
 
SceSdifCmdInput * SceSdifContextData::active_data_cmd
 
SceSdifHostRegisters * SceSdifContextData::host_registers
 Base of the controller's 0x1000-byte register memblock.
 
SceUInt32 SceSdifContextData::enabled_subintr_mask
 
SceUInt8 SceSdifContextData::timeout_control
 Host timeout-control value; initialized to 14 on FW 3.60.
 
SceUInt8 SceSdifContextData::slow_mode
 Enables minimum transfer delays for controller 1 MMC reads and writes.
 
SceUInt8 SceSdifContextData::slow_read_count
 Initialized from system time and incremented for each slow-mode read chunk.
 
SceUInt8 SceSdifContextData::slow_write_count
 Initialized from system time and incremented for each slow-mode write.
 
SceUID SceSdifContextData::host_registers_uid
 UID of the controller's 0x1000-byte register memblock.
 
SceUID SceSdifContextData::event_flag_id
 Controller event flag.
 
SceKernelFastMutex SceSdifContextData::sdif_fast_mutex
 Controller fast mutex.
 
SceUID SceSdifContextData::dma_descriptor_pool_uid
 Offset 0x2484; UID of the 0x10000-byte DMA descriptor pool memblock.
 
void * SceSdifContextData::dma_descriptor_pool
 DMA descriptor pool used when the embedded table is too small.
 
SceUInt32 SceSdifContextData::ocr
 Last operation-conditions register value.
 
SceUInt32 SceSdifContextData::unknown_90
 Its purpose is unknown.
 
SceKernelSpinlock SceSdifContextData::spinlock
 
SceUInt64 SceSdifContextData::last_transfer_duration
 Duration of the last sector transfer in microseconds.
 
SceUInt8 SceSdifContextData::sdio_interrupt_status
 
SceUInt8 SceSdifContextData::sdio_enabled_function_mask
 
SceUInt8 SceSdifContextData::sdio_pending_function_mask
 
SceUInt8 SceSdifContextData::unknown_A3
 Its purpose is unknown.
 
SceUInt32 SceSdifContextData::sdio_subintr2_intr_code
 Interrupt code used with subinterrupt 2.
 
SceUInt32 SceSdifContextData::sdio_subintr3_8_intr_code
 Interrupt code used with subinterrupts 3 through 8.
 
SceUInt32 SceSdifContextData::sdio_dispatch_pending
 
SceUInt32 SceSdifContextData::unknown_B0
 Cleared when the controller is reset; its purpose is unknown.
 
SceUInt32 SceSdifContextData::unknown_B4
 Cleared when the controller is reset; its purpose is unknown.
 
SceUInt32 SceSdifContextData::unknown_B8
 Its purpose is unknown.
 
SceUInt32 SceSdifContextData::unknown_BC
 Its purpose is unknown.
 
SceSdifCmdInput SceSdifContextGlobal::commands [16]
 Controller-owned command pool.
 
SceSdifContextData SceSdifContextGlobal::ctx_data
 

Detailed Description

Exports for Kernel.


Using this library in your project

Include the header file in your project:


Link the library to the executable:

SceSdifForDriver_stub




Data Structure Documentation

◆ SceSdifContextPartBase

struct SceSdifContextPartBase

Common 0x30-byte prefix of the FW 3.60 MMC, SD, and SDIO contexts.

A SceSdifContextPart pointer may be cast to this type to inspect fields shared by every device-specific context.

Data Fields
struct SceSdifContextGlobal * global_context Owning controller context.
SceUInt32 card_flags Bit 0 indicates block addressing; otherwise sector arguments use byte addressing.
union SceSdifContextPartBase.__unnamed49__ __unnamed__
union SceSdifContextPartBase.__unnamed51__ __unnamed__
SceUInt8 cid[16] Card identification register, in big-endian byte order.
SceUInt8 csd[16] Card-specific data register, in big-endian byte order.

◆ SceSdifHostRegisters

struct SceSdifHostRegisters

Memory-mapped SD host-controller register block.

FW 3.60 maps a 0x1000-byte register memblock for each of the three controllers. The register prefix follows the SD Host Controller interface; the remainder of the mapping is unused by the reviewed SceSdif code.

Data Fields
volatile SceUInt32 dma_system_address
volatile SceUInt16 block_size
volatile SceUInt16 block_count
volatile SceUInt32 argument
volatile SceUInt16 transfer_mode
volatile SceUInt16 command
volatile SceUInt32 response[4]
volatile SceUInt32 buffer_data_port
volatile SceUInt32 present_state
volatile SceUInt8 host_control
volatile SceUInt8 power_control
volatile SceUInt8 block_gap_control
volatile SceUInt8 wakeup_control
volatile SceUInt16 clock_control
volatile SceUInt8 timeout_control
volatile SceUInt8 software_reset
volatile SceUInt16 normal_interrupt_status
volatile SceUInt16 error_interrupt_status
volatile SceUInt16 normal_interrupt_status_enable
volatile SceUInt16 error_interrupt_status_enable
volatile SceUInt16 normal_interrupt_signal_enable
volatile SceUInt16 error_interrupt_signal_enable
volatile SceUInt16 auto_cmd_error_status
volatile SceUInt16 host_control_2
volatile SceUInt32 capabilities[2]
volatile SceUInt32 maximum_current_capabilities
SceUInt8 reserved_4C[4]
volatile SceUInt16 force_event_auto_cmd_error_status
volatile SceUInt16 force_event_error_interrupt_status
volatile SceUInt8 adma_error_status
SceUInt8 reserved_55[3]
volatile SceUInt32 adma_system_address
SceUInt8 reserved_5C[0xA0]
volatile SceUInt16 slot_interrupt_status
volatile SceUInt16 host_controller_version
SceUInt8 reserved_100[0xF00]

◆ SceSdifCmdInput

struct SceSdifCmdInput

SD/MMC command object.

Each SceSdifContextGlobal owns 16 of these objects. SceSdif moves them through the free, pending, active, and completed states; callers must not allocate or free them independently.

Data Fields

SceSize size
 Must be 0x240.
 
SceUInt32 state_flags
 Host-command, response, transfer, DMA, and completion flags.
 
SceUInt32 command
 SD/MMC command index.
 
SceUInt32 argument
 SD/MMC command argument.
 
union { 
 
SceUInt8 bytes [0x10]
 
   struct { 
 
SceUInt32 dw0
 
SceUInt32 dw1
 
SceUInt32 dw2
 
SceUInt32 dw3
 
   } words 
 
} response 
 Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 is cleared. The storage order is reversed.
 
void * buffer
 Command data buffer, split into leading, direct-DMA, and trailing regions as needed.
 
SceUInt16 block_size
 Data block size; normally 0x200 for sector transfers.
 
SceUInt16 block_count
 Number of data blocks.
 
SceInt32 error_code
 Completion error written by the interrupt and timeout paths.
 
SceUInt32 unknown_2C
 Its purpose is unknown.
 
SceUInt8 command_specific_data [0x30]
 Command-specific storage; asynchronous SDIO transfers use its final 0x20 bytes.
 
struct SceSdifCmdInput * next_cmd
 
SceSdifCommandState state
 
SceUInt32 command_index
 Index from 0 through 15 in the owning controller's command array.
 
int(* completion_callback )(struct SceSdifCmdInput *cmd)
 Called after completion; its return value is passed on internally.
 
SceUID event_flag_id
 Event flag used by synchronous commands.
 
struct SceSdifCmdInput * secondary_cmd
 Dependent command started after this command succeeds.
 
struct SceSdifContextGlobal * global_context
 
SceUIntPtr active_dma_descriptors_paddr
 Physical address of the active DMA descriptor table.
 
SceUInt8 internal_dma_descriptors [0x80]
 Embedded table of up to 16 eight-byte DMA descriptors.
 
void * active_dma_descriptors
 Active DMA descriptor table.
 
SceKernelPARange physical_ranges [16]
 Storage within this command object, passed to ksceKernelVARangeToPAVector.
 
SceUIntPtr internal_dma_descriptors_paddr
 Physical address of internal_dma_descriptors.
 
SceUID dma_descriptor_memblock_uid
 UID of the dynamically allocated DMA descriptor memblock, if any.
 
SceUInt32 unknown_18C
 Its purpose is unknown.
 
SceUInt32 unknown_190
 Its purpose is unknown.
 
SceUInt32 unknown_194
 Its purpose is unknown.
 
void * aligned_buffer
 Direct-DMA portion of the command data buffer.
 
SceSize aligned_buffer_size
 Size of the direct-DMA portion.
 
SceSize leading_fragment_size
 Size of the leading unaligned fragment.
 
SceSize trailing_fragment_size
 Size of the trailing unaligned fragment.
 
SceUIntPtr leading_fragment_paddr
 Physical address of leading_fragment.
 
SceUIntPtr trailing_fragment_paddr
 Physical address of trailing_fragment.
 
SceInt64 start_time
 System time when the command starts.
 
SceInt64 end_time
 System time when the command completes.
 
SceUInt8 leading_fragment [0x40]
 Bounce buffer for the leading unaligned fragment.
 
SceUInt8 trailing_fragment [0x40]
 Bounce buffer for the trailing unaligned fragment.
 

◆ SceSdifContextData

struct SceSdifContextData

Mutable state for one FW 3.60 SDIF controller.

Data Fields
SceSdifCmdInput * free_cmd_head
SceSdifCmdInput * free_cmd_tail
SceSdifCmdInput * pending_cmd_head
SceSdifCmdInput * pending_cmd_tail
SceSdifDeviceType device_type
SceSdifContextPartBase * device_context Device-specific context owned by SceSdif; callers must not free it.
SceUInt32 supported_voltages OCR voltage mask: 0x80 for controllers 0 and 2, and 0x300000 for controller 1.
SceUInt32 relative_card_address Relative card address in the low 16 bits.
SceUInt32 controller_index Controller index from 0 through 2.
SceUInt8 command_complete Set when the active host command completes.
SceUInt8 suspended Nonzero while normal command submission is suspended.
SceUInt8 unknown_26 Its purpose is unknown.
SceUInt8 unknown_27 Its purpose is unknown.
SceSdifCmdInput * active_cmd
SceSdifCmdInput * active_data_cmd
SceSdifHostRegisters * host_registers Base of the controller's 0x1000-byte register memblock.
SceUInt32 enabled_subintr_mask
SceUInt8 timeout_control Host timeout-control value; initialized to 14 on FW 3.60.
SceUInt8 slow_mode Enables minimum transfer delays for controller 1 MMC reads and writes.
SceUInt8 slow_read_count Initialized from system time and incremented for each slow-mode read chunk.
SceUInt8 slow_write_count Initialized from system time and incremented for each slow-mode write.
SceUID host_registers_uid UID of the controller's 0x1000-byte register memblock.
SceUID event_flag_id Controller event flag.
SceKernelFastMutex sdif_fast_mutex Controller fast mutex.
SceUID dma_descriptor_pool_uid Offset 0x2484; UID of the 0x10000-byte DMA descriptor pool memblock.
void * dma_descriptor_pool DMA descriptor pool used when the embedded table is too small.
SceUInt32 ocr Last operation-conditions register value.
SceUInt32 unknown_90 Its purpose is unknown.
SceKernelSpinlock spinlock
SceUInt64 last_transfer_duration Duration of the last sector transfer in microseconds.
SceUInt8 sdio_interrupt_status
SceUInt8 sdio_enabled_function_mask
SceUInt8 sdio_pending_function_mask
SceUInt8 unknown_A3 Its purpose is unknown.
SceUInt32 sdio_subintr2_intr_code Interrupt code used with subinterrupt 2.
SceUInt32 sdio_subintr3_8_intr_code Interrupt code used with subinterrupts 3 through 8.
SceUInt32 sdio_dispatch_pending
SceUInt32 unknown_B0 Cleared when the controller is reset; its purpose is unknown.
SceUInt32 unknown_B4 Cleared when the controller is reset; its purpose is unknown.
SceUInt32 unknown_B8 Its purpose is unknown.
SceUInt32 unknown_BC Its purpose is unknown.

◆ SceSdifContextGlobal

struct SceSdifContextGlobal

Process-global state for one SDIF controller.

FW 3.60 owns three instances, selected by controller indices 0 through 2.

Data Fields
SceSdifCmdInput commands[16] Controller-owned command pool.
SceSdifContextData ctx_data

◆ SceSdifContextPartBase.__unnamed49__

union SceSdifContextPartBase.__unnamed49__
Data Fields
SceUInt32 mmc_sector_size MMC block size in the low 16 bits.
SceUInt32 sd_write_protected Nonzero when SD writes are prohibited.
SceUInt32 sdio_function_count Number of SDIO functions.

◆ SceSdifContextPartBase.__unnamed51__

union SceSdifContextPartBase.__unnamed51__
Data Fields
SceUInt32 mmc_uses_special_sector_map Nonzero for the MF4GAM game-card layout.
SceUInt32 sd_sector_size SD block size in the low 16 bits.
SceUInt32 sdio_reserved_0C Its purpose is unknown.

◆ SceSdifCmdInput.response

union SceSdifCmdInput.response

Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 is cleared. The storage order is reversed.

Data Fields
SceUInt8 bytes[0x10]
struct SceSdifCmdInput.response.words words

◆ SceSdifCmdInput.response.words

struct SceSdifCmdInput.response.words
Data Fields
SceUInt32 dw0
SceUInt32 dw1
SceUInt32 dw2
SceUInt32 dw3

Macro Definition Documentation

◆ SCE_SDIF_DEVICE_USD

#define SCE_SDIF_DEVICE_USD   SCE_SDIF_DEVICE_SD

Alias using the internal uSD name for the microSD controller index.

Typedef Documentation

◆ SceSdifDeviceContext

typedef void* SceSdifDeviceContext

◆ SceSdifContextPart

Opaque device-specific context.

FW 3.60 MMC, SD, and SDIO contexts all begin with a SceSdifContextPartBase, but use different layouts and storage sizes beyond that prefix: 0x398 bytes for MMC, 0xC0 bytes for SD, and 0xD38 bytes for SDIO. The context is owned by SceSdif and remains valid until that device is reset or reinitialized; callers must not free it.

Enumeration Type Documentation

◆ SceSdifDeviceIndex

Enumerator
SCE_SDIF_DEVICE_EMMC 

Internal eMMC controller.

SCE_SDIF_DEVICE_GC 

Game-card controller.

SCE_SDIF_DEVICE_SDIO 

WLAN/Bluetooth SDIO controller.

SCE_SDIF_DEVICE_SD 

microSD controller index; unsupported by release FW 3.60 SceSdif.

◆ SceSdifDeviceType

Enumerator
SCE_SDIF_DEVICE_TYPE_INVALID 
SCE_SDIF_DEVICE_TYPE_MMC 
SCE_SDIF_DEVICE_TYPE_SD 
SCE_SDIF_DEVICE_TYPE_SDIO 

◆ SceSdifCommandState

Internal state of a command owned by a controller context.

Enumerator
SCE_SDIF_COMMAND_STATE_FREE 
SCE_SDIF_COMMAND_STATE_QUEUED 
SCE_SDIF_COMMAND_STATE_ACTIVE 
SCE_SDIF_COMMAND_STATE_COMPLETED 

Function Documentation

◆ ksceSdifGetSdContextPartValidateMmc()

SceSdifDeviceContext * ksceSdifGetSdContextPartValidateMmc ( SceSdifDeviceIndex  dev_index)

Get an initialized MMC context.

Parameters
[in]dev_index- Device to validate.
Returns
A direct pointer to SceSdifContextPart, or NULL if dev_index is unsupported or does not currently contain an initialized MMC device. The return type is still declared as SceSdifDeviceContext * for backwards compatibility.

◆ ksceSdifInitializeMmcDevice()

int ksceSdifInitializeMmcDevice ( SceSdifDeviceIndex  dev_index,
SceSdifDeviceContext *  dev_ctx 
)

Initialize an MMC device.

FW 3.60 supports SCE_SDIF_DEVICE_EMMC and SCE_SDIF_DEVICE_GC. The context is static SceSdif storage and must not be freed.

Parameters
[in]dev_index- Device to initialize.
[out]dev_ctx- Optional storage for the SceSdif-owned device context pointer. It is set to NULL before initialization is attempted.
Returns
0 on success, or a negative SceSdif error code.

◆ ksceSdifWriteCmd56()

int ksceSdifWriteCmd56 ( SceSdifDeviceContext *  dev_ctx,
const void *  buf,
SceSize  size 
)

Send a game-card CMD56 request.

FW 3.60 sends command argument 0 as a synchronous one-block write.

Parameters
[in]dev_ctx- Direct pointer to SceSdifContextPart. On FW 3.60, pass the context pointer itself, not the address of that pointer, despite the historical declaration.
[in]buf- Command input buffer.
[in]size- Input buffer size. It must equal the MMC block size in the context; this is 0x200 for a FW 3.60 game card.
Returns
0 on success, 0x8032000E for an invalid pointer or size, 0x80320011 when no command object is available, or another negative SceSdif error code.

◆ ksceSdifReadCmd56()

int ksceSdifReadCmd56 ( SceSdifDeviceContext *  dev_ctx,
void *  buf,
SceSize  size 
)

Receive a game-card CMD56 response.

FW 3.60 sends command argument 1 as a synchronous one-block read.

Parameters
[in]dev_ctx- Direct pointer to SceSdifContextPart. On FW 3.60, pass the context pointer itself, not the address of that pointer, despite the historical declaration.
[out]buf- Command output buffer.
[in]size- Output buffer size. It must equal the MMC block size in the context; this is 0x200 for a FW 3.60 game card.
Returns
0 on success, 0x8032000E for an invalid pointer or size, 0x80320011 when no command object is available, or another negative SceSdif error code.

◆ VITASDK_BUILD_ASSERT_EQ() [1/5]

VITASDK_BUILD_ASSERT_EQ ( 0x30  ,
SceSdifContextPartBase   
)

◆ VITASDK_BUILD_ASSERT_EQ() [2/5]

VITASDK_BUILD_ASSERT_EQ ( 0x1000  ,
SceSdifHostRegisters   
)

◆ VITASDK_BUILD_ASSERT_EQ() [3/5]

VITASDK_BUILD_ASSERT_EQ ( 0x240  ,
SceSdifCmdInput   
)

◆ VITASDK_BUILD_ASSERT_EQ() [4/5]

VITASDK_BUILD_ASSERT_EQ ( 0xC0  ,
SceSdifContextData   
)

◆ VITASDK_BUILD_ASSERT_EQ() [5/5]

VITASDK_BUILD_ASSERT_EQ ( 0x24C0  ,
SceSdifContextGlobal   
)

◆ ksceSdifGetCardInsertState1()

int ksceSdifGetCardInsertState1 ( SceSdifDeviceIndex  device_index)

Get a controller's card-detect input.

On FW 3.60 this function is identical to ksceSdifGetCardInsertState2.

Parameters
[in]device_index- Controller index. FW 3.60 accepts indices 0 through 2.
Returns
1 when a card is detected, 0 when no card is detected, or 0x80320013 when device_index is unsupported.

◆ ksceSdifGetCardInsertState2()

int ksceSdifGetCardInsertState2 ( SceSdifDeviceIndex  device_index)

Get a controller's card-detect input.

On FW 3.60 this function is identical to ksceSdifGetCardInsertState1.

Parameters
[in]device_index- Controller index. FW 3.60 accepts indices 0 through 2.
Returns
1 when a card is detected, 0 when no card is detected, or 0x80320013 when device_index is unsupported.

◆ ksceSdifGetCID()

int ksceSdifGetCID ( const SceSdifContextPart *  ctx,
void *  cid 
)

Copy a device's card identification register.

Parameters
[in]ctx- Initialized MMC or SD device context.
[out]cid- Destination for the 16-byte CID.
Returns
0 on success, or 0x8032000E when either pointer is NULL.

◆ ksceSdifGetSdContextGlobal()

SceSdifContextGlobal * ksceSdifGetSdContextGlobal ( SceSdifDeviceIndex  device_index)

Get a controller's process-global context.

Parameters
[in]device_index- Controller index. FW 3.60 accepts indices 0 through 2.
Returns
The SceSdif-owned controller context, or NULL when device_index is unsupported. The returned pointer must not be freed.

◆ ksceSdifGetSdContextPartValidateSd()

SceSdifDeviceContext * ksceSdifGetSdContextPartValidateSd ( SceSdifDeviceIndex  dev_index)

Get an initialized SD context.

Parameters
[in]dev_index- Controller to validate.
Returns
A direct pointer to SceSdifContextPart when the controller's current device type is SCE_SDIF_DEVICE_TYPE_SD, or NULL otherwise. The return type is still declared as SceSdifDeviceContext * for backwards compatibility.

◆ ksceSdifGetSdContextPartValidateSdio()

SceSdifContextPart * ksceSdifGetSdContextPartValidateSdio ( SceSdifDeviceIndex  device_index)

Get an initialized SDIO context.

Parameters
[in]device_index- Controller to validate. The FW 3.60 WLAN and Bluetooth callers use SCE_SDIF_DEVICE_SDIO.
Returns
The SceSdif-owned device context when the current device type is SCE_SDIF_DEVICE_TYPE_SDIO, or NULL otherwise. The returned pointer must not be freed.

◆ ksceSdifInitializeSdDevice()

int ksceSdifInitializeSdDevice ( SceSdifDeviceIndex  device_index,
SceSdifContextPart **  result 
)

Initialize an SD device.

Parameters
[in]device_index- Controller to initialize. FW 3.60 accepts indices 0 through 2, but initialization succeeds only when the detected device is an SD card.
[out]result- Optional storage for a pointer to the SceSdif-owned 0xC0-byte SD context. The pointer is set to NULL before initialization is attempted. Callers must not free the context.
Returns
0 on success, 0x80320013 for an unsupported controller, 0x80320017 when the detected device is not an SD card, or another negative SceSdif error code.

◆ ksceSdifReadSectorMmc()

int ksceSdifReadSectorMmc ( SceSdifContextPart *  ctx,
SceUInt32  sector,
void *  buffer,
SceUInt32  sector_count 
)

Read MMC sectors.

FW 3.60 uses CMD17 for one sector and CMD18 for multiple sectors. The MF4GAM game-card layout translates logical sectors through its partition map and splits large reads into chunks of at most 0x1000 sectors.

Parameters
[in]ctx- MMC device context.
[in]sector- First logical sector to read.
[out]buffer- Destination buffer.
[in]sector_count- Number of sectors to read. Must not be 0.
Returns
0 on success, 0x8032000E for an invalid pointer, zero count, or invalid partition range, 0x80320011 when no command object is available, or another negative SceSdif error code.

◆ ksceSdifReadSectorSd()

int ksceSdifReadSectorSd ( SceSdifContextPart *  ctx,
SceUInt32  sector,
void *  buffer,
SceUInt32  sector_count 
)

Read SD sectors.

FW 3.60 uses CMD17 for one sector and CMD18 for multiple sectors. A block-addressed card receives sector directly; a byte-addressed card receives sector << 9.

Parameters
[in]ctx- SD device context.
[in]sector- First logical sector to read.
[out]buffer- Destination buffer.
[in]sector_count- Number of sectors to read. Must not be 0.
Returns
0 on success, 0x8032000E for an invalid pointer or zero count, 0x80320011 when no command object is available, or another negative SceSdif error code.

◆ ksceSdifWriteSectorMmc()

int ksceSdifWriteSectorMmc ( SceSdifContextPart *  ctx,
SceUInt32  sector,
const void *  buffer,
SceUInt32  sector_count 
)

Write MMC sectors.

FW 3.60 uses CMD24 for one sector and CMD25 for multiple sectors. The source buffer is read but not modified.

Parameters
[in]ctx- MMC device context.
[in]sector- First logical sector to write.
[in]buffer- Source buffer.
[in]sector_count- Number of sectors to write. Must not be 0.
Returns
0 on success, 0x8032000E for an invalid pointer, zero count, or invalid partition range, 0x80320011 when no command object is available, or another negative SceSdif error code.

◆ ksceSdifWriteSectorSd()

int ksceSdifWriteSectorSd ( SceSdifContextPart *  ctx,
SceUInt32  sector,
const void *  buffer,
SceUInt32  sector_count 
)

Write SD sectors.

FW 3.60 uses CMD24 for one sector and CMD25 for multiple sectors. A block-addressed card receives sector directly; a byte-addressed card receives sector << 9. The source buffer is read but not modified.

Parameters
[in]ctx- SD device context.
[in]sector- First logical sector to write.
[in]buffer- Source buffer.
[in]sector_count- Number of sectors to write. Must not be 0.
Returns
0 on success, 0x8032001C when the SD context reports write protection, or another negative error code.

◆ ksceSdifMemoryCardEnableSlowMode()

int ksceSdifMemoryCardEnableSlowMode ( void  )

Enable slow-mode delays for controller 1 MMC transfers.

This affects SceSdif game-card MMC sector reads and writes only. It does not affect SD, SDIO, or SceMsif Memory Stick transfers.

Returns
0.

◆ ksceSdifMemoryCardDisableSlowMode()

int ksceSdifMemoryCardDisableSlowMode ( void  )

Disable slow-mode delays for controller 1 MMC transfers.

Returns
0.

Variable Documentation

◆ global_context [1/2]

struct SceSdifContextGlobal* SceSdifContextPartBase::global_context

Owning controller context.

◆ card_flags

SceUInt32 SceSdifContextPartBase::card_flags

Bit 0 indicates block addressing; otherwise sector arguments use byte addressing.

◆ []

SceUInt32 { ... } ::mmc_sector_size

MMC block size in the low 16 bits.

◆ []

SceUInt32 { ... } ::sd_write_protected

Nonzero when SD writes are prohibited.

◆ []

SceUInt32 { ... } ::sdio_function_count

Number of SDIO functions.

◆ [union]

union { ... } SceSdifContextPartBase

◆ []

SceUInt32 { ... } ::mmc_uses_special_sector_map

Nonzero for the MF4GAM game-card layout.

◆ []

SceUInt32 { ... } ::sd_sector_size

SD block size in the low 16 bits.

◆ []

SceUInt32 { ... } ::sdio_reserved_0C

Its purpose is unknown.

◆ [union]

union { ... } SceSdifContextPartBase

◆ cid

SceUInt8 SceSdifContextPartBase::cid[16]

Card identification register, in big-endian byte order.

◆ csd

SceUInt8 SceSdifContextPartBase::csd[16]

Card-specific data register, in big-endian byte order.

◆ dma_system_address

volatile SceUInt32 SceSdifHostRegisters::dma_system_address

◆ block_size [1/2]

volatile SceUInt16 SceSdifHostRegisters::block_size

◆ block_count [1/2]

volatile SceUInt16 SceSdifHostRegisters::block_count

◆ argument [1/2]

volatile SceUInt32 SceSdifHostRegisters::argument

◆ transfer_mode

volatile SceUInt16 SceSdifHostRegisters::transfer_mode

◆ command [1/2]

volatile SceUInt16 SceSdifHostRegisters::command

◆ response [1/2]

volatile SceUInt32 SceSdifHostRegisters::response[4]

◆ buffer_data_port

volatile SceUInt32 SceSdifHostRegisters::buffer_data_port

◆ present_state

volatile SceUInt32 SceSdifHostRegisters::present_state

◆ host_control

volatile SceUInt8 SceSdifHostRegisters::host_control

◆ power_control

volatile SceUInt8 SceSdifHostRegisters::power_control

◆ block_gap_control

volatile SceUInt8 SceSdifHostRegisters::block_gap_control

◆ wakeup_control

volatile SceUInt8 SceSdifHostRegisters::wakeup_control

◆ clock_control

volatile SceUInt16 SceSdifHostRegisters::clock_control

◆ timeout_control [1/2]

volatile SceUInt8 SceSdifHostRegisters::timeout_control

◆ software_reset

volatile SceUInt8 SceSdifHostRegisters::software_reset

◆ normal_interrupt_status

volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_status

◆ error_interrupt_status

volatile SceUInt16 SceSdifHostRegisters::error_interrupt_status

◆ normal_interrupt_status_enable

volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_status_enable

◆ error_interrupt_status_enable

volatile SceUInt16 SceSdifHostRegisters::error_interrupt_status_enable

◆ normal_interrupt_signal_enable

volatile SceUInt16 SceSdifHostRegisters::normal_interrupt_signal_enable

◆ error_interrupt_signal_enable

volatile SceUInt16 SceSdifHostRegisters::error_interrupt_signal_enable

◆ auto_cmd_error_status

volatile SceUInt16 SceSdifHostRegisters::auto_cmd_error_status

◆ host_control_2

volatile SceUInt16 SceSdifHostRegisters::host_control_2

◆ capabilities

volatile SceUInt32 SceSdifHostRegisters::capabilities[2]

◆ maximum_current_capabilities

volatile SceUInt32 SceSdifHostRegisters::maximum_current_capabilities

◆ reserved_4C

SceUInt8 SceSdifHostRegisters::reserved_4C[4]

◆ force_event_auto_cmd_error_status

volatile SceUInt16 SceSdifHostRegisters::force_event_auto_cmd_error_status

◆ force_event_error_interrupt_status

volatile SceUInt16 SceSdifHostRegisters::force_event_error_interrupt_status

◆ adma_error_status

volatile SceUInt8 SceSdifHostRegisters::adma_error_status

◆ reserved_55

SceUInt8 SceSdifHostRegisters::reserved_55[3]

◆ adma_system_address

volatile SceUInt32 SceSdifHostRegisters::adma_system_address

◆ reserved_5C

SceUInt8 SceSdifHostRegisters::reserved_5C[0xA0]

◆ slot_interrupt_status

volatile SceUInt16 SceSdifHostRegisters::slot_interrupt_status

◆ host_controller_version

volatile SceUInt16 SceSdifHostRegisters::host_controller_version

◆ reserved_100

SceUInt8 SceSdifHostRegisters::reserved_100[0xF00]

◆ size

SceSize SceSdifCmdInput::size

Must be 0x240.

◆ state_flags

SceUInt32 SceSdifCmdInput::state_flags

Host-command, response, transfer, DMA, and completion flags.

Observed bits include read (0x100), write (0x200), DMA (0x400), multi-block (0x800), per-command DMA-table allocation (0x100000), and forced completion (0x40000000).

◆ command [2/2]

SceUInt32 SceSdifCmdInput::command

SD/MMC command index.

◆ argument [2/2]

SceUInt32 SceSdifCmdInput::argument

SD/MMC command argument.

◆ []

SceUInt8 { ... } ::bytes[0x10]

◆ []

SceUInt32 { ... } ::dw0

◆ []

SceUInt32 { ... } ::dw1

◆ []

SceUInt32 { ... } ::dw2

◆ []

SceUInt32 { ... } ::dw3

◆ [struct]

struct { ... } SceSdifCmdInput::words

◆ [union] [2/2]

union { ... } SceSdifCmdInput::response

Stores a normal response without the command index and CRC-7. This can also store CID or CSD; CRC-7 is cleared. The storage order is reversed.

◆ buffer

void* SceSdifCmdInput::buffer

Command data buffer, split into leading, direct-DMA, and trailing regions as needed.

◆ block_size [2/2]

SceUInt16 SceSdifCmdInput::block_size

Data block size; normally 0x200 for sector transfers.

◆ block_count [2/2]

SceUInt16 SceSdifCmdInput::block_count

Number of data blocks.

◆ error_code

SceInt32 SceSdifCmdInput::error_code

Completion error written by the interrupt and timeout paths.

◆ unknown_2C

SceUInt32 SceSdifCmdInput::unknown_2C

Its purpose is unknown.

◆ command_specific_data

SceUInt8 SceSdifCmdInput::command_specific_data[0x30]

Command-specific storage; asynchronous SDIO transfers use its final 0x20 bytes.

◆ next_cmd

struct SceSdifCmdInput* SceSdifCmdInput::next_cmd

◆ state

SceSdifCommandState SceSdifCmdInput::state

◆ command_index

SceUInt32 SceSdifCmdInput::command_index

Index from 0 through 15 in the owning controller's command array.

◆ completion_callback

int(* SceSdifCmdInput::completion_callback) (struct SceSdifCmdInput *cmd)

Called after completion; its return value is passed on internally.

◆ event_flag_id [1/2]

SceUID SceSdifCmdInput::event_flag_id

Event flag used by synchronous commands.

◆ secondary_cmd

struct SceSdifCmdInput* SceSdifCmdInput::secondary_cmd

Dependent command started after this command succeeds.

◆ global_context [2/2]

struct SceSdifContextGlobal* SceSdifCmdInput::global_context

◆ active_dma_descriptors_paddr

SceUIntPtr SceSdifCmdInput::active_dma_descriptors_paddr

Physical address of the active DMA descriptor table.

◆ internal_dma_descriptors

SceUInt8 SceSdifCmdInput::internal_dma_descriptors[0x80]

Embedded table of up to 16 eight-byte DMA descriptors.

◆ active_dma_descriptors

void* SceSdifCmdInput::active_dma_descriptors

Active DMA descriptor table.

◆ physical_ranges

SceKernelPARange SceSdifCmdInput::physical_ranges[16]

Storage within this command object, passed to ksceKernelVARangeToPAVector.

◆ internal_dma_descriptors_paddr

SceUIntPtr SceSdifCmdInput::internal_dma_descriptors_paddr

Physical address of internal_dma_descriptors.

◆ dma_descriptor_memblock_uid

SceUID SceSdifCmdInput::dma_descriptor_memblock_uid

UID of the dynamically allocated DMA descriptor memblock, if any.

◆ unknown_18C

SceUInt32 SceSdifCmdInput::unknown_18C

Its purpose is unknown.

◆ unknown_190

SceUInt32 SceSdifCmdInput::unknown_190

Its purpose is unknown.

◆ unknown_194

SceUInt32 SceSdifCmdInput::unknown_194

Its purpose is unknown.

◆ aligned_buffer

void* SceSdifCmdInput::aligned_buffer

Direct-DMA portion of the command data buffer.

◆ aligned_buffer_size

SceSize SceSdifCmdInput::aligned_buffer_size

Size of the direct-DMA portion.

◆ leading_fragment_size

SceSize SceSdifCmdInput::leading_fragment_size

Size of the leading unaligned fragment.

◆ trailing_fragment_size

SceSize SceSdifCmdInput::trailing_fragment_size

Size of the trailing unaligned fragment.

◆ leading_fragment_paddr

SceUIntPtr SceSdifCmdInput::leading_fragment_paddr

Physical address of leading_fragment.

◆ trailing_fragment_paddr

SceUIntPtr SceSdifCmdInput::trailing_fragment_paddr

Physical address of trailing_fragment.

◆ start_time

SceInt64 SceSdifCmdInput::start_time

System time when the command starts.

◆ end_time

SceInt64 SceSdifCmdInput::end_time

System time when the command completes.

◆ leading_fragment

SceUInt8 SceSdifCmdInput::leading_fragment[0x40]

Bounce buffer for the leading unaligned fragment.

◆ trailing_fragment

SceUInt8 SceSdifCmdInput::trailing_fragment[0x40]

Bounce buffer for the trailing unaligned fragment.

◆ free_cmd_head

SceSdifCmdInput* SceSdifContextData::free_cmd_head

◆ free_cmd_tail

SceSdifCmdInput* SceSdifContextData::free_cmd_tail

◆ pending_cmd_head

SceSdifCmdInput* SceSdifContextData::pending_cmd_head

◆ pending_cmd_tail

SceSdifCmdInput* SceSdifContextData::pending_cmd_tail

◆ device_type

SceSdifDeviceType SceSdifContextData::device_type

◆ device_context

SceSdifContextPartBase* SceSdifContextData::device_context

Device-specific context owned by SceSdif; callers must not free it.

◆ supported_voltages

SceUInt32 SceSdifContextData::supported_voltages

OCR voltage mask: 0x80 for controllers 0 and 2, and 0x300000 for controller 1.

◆ relative_card_address

SceUInt32 SceSdifContextData::relative_card_address

Relative card address in the low 16 bits.

◆ controller_index

SceUInt32 SceSdifContextData::controller_index

Controller index from 0 through 2.

◆ command_complete

SceUInt8 SceSdifContextData::command_complete

Set when the active host command completes.

◆ suspended

SceUInt8 SceSdifContextData::suspended

Nonzero while normal command submission is suspended.

◆ unknown_26

SceUInt8 SceSdifContextData::unknown_26

Its purpose is unknown.

◆ unknown_27

SceUInt8 SceSdifContextData::unknown_27

Its purpose is unknown.

◆ active_cmd

SceSdifCmdInput* SceSdifContextData::active_cmd

◆ active_data_cmd

SceSdifCmdInput* SceSdifContextData::active_data_cmd

◆ host_registers

SceSdifHostRegisters* SceSdifContextData::host_registers

Base of the controller's 0x1000-byte register memblock.

◆ enabled_subintr_mask

SceUInt32 SceSdifContextData::enabled_subintr_mask

◆ timeout_control [2/2]

SceUInt8 SceSdifContextData::timeout_control

Host timeout-control value; initialized to 14 on FW 3.60.

◆ slow_mode

SceUInt8 SceSdifContextData::slow_mode

Enables minimum transfer delays for controller 1 MMC reads and writes.

◆ slow_read_count

SceUInt8 SceSdifContextData::slow_read_count

Initialized from system time and incremented for each slow-mode read chunk.

◆ slow_write_count

SceUInt8 SceSdifContextData::slow_write_count

Initialized from system time and incremented for each slow-mode write.

◆ host_registers_uid

SceUID SceSdifContextData::host_registers_uid

UID of the controller's 0x1000-byte register memblock.

◆ event_flag_id [2/2]

SceUID SceSdifContextData::event_flag_id

Controller event flag.

◆ sdif_fast_mutex

SceKernelFastMutex SceSdifContextData::sdif_fast_mutex

Controller fast mutex.

◆ dma_descriptor_pool_uid

SceUID SceSdifContextData::dma_descriptor_pool_uid

Offset 0x2484; UID of the 0x10000-byte DMA descriptor pool memblock.

◆ dma_descriptor_pool

void* SceSdifContextData::dma_descriptor_pool

DMA descriptor pool used when the embedded table is too small.

◆ ocr

SceUInt32 SceSdifContextData::ocr

Last operation-conditions register value.

◆ unknown_90

SceUInt32 SceSdifContextData::unknown_90

Its purpose is unknown.

◆ spinlock

SceKernelSpinlock SceSdifContextData::spinlock

◆ last_transfer_duration

SceUInt64 SceSdifContextData::last_transfer_duration

Duration of the last sector transfer in microseconds.

◆ sdio_interrupt_status

SceUInt8 SceSdifContextData::sdio_interrupt_status

◆ sdio_enabled_function_mask

SceUInt8 SceSdifContextData::sdio_enabled_function_mask

◆ sdio_pending_function_mask

SceUInt8 SceSdifContextData::sdio_pending_function_mask

◆ unknown_A3

SceUInt8 SceSdifContextData::unknown_A3

Its purpose is unknown.

◆ sdio_subintr2_intr_code

SceUInt32 SceSdifContextData::sdio_subintr2_intr_code

Interrupt code used with subinterrupt 2.

◆ sdio_subintr3_8_intr_code

SceUInt32 SceSdifContextData::sdio_subintr3_8_intr_code

Interrupt code used with subinterrupts 3 through 8.

◆ sdio_dispatch_pending

SceUInt32 SceSdifContextData::sdio_dispatch_pending

◆ unknown_B0

SceUInt32 SceSdifContextData::unknown_B0

Cleared when the controller is reset; its purpose is unknown.

◆ unknown_B4

SceUInt32 SceSdifContextData::unknown_B4

Cleared when the controller is reset; its purpose is unknown.

◆ unknown_B8

SceUInt32 SceSdifContextData::unknown_B8

Its purpose is unknown.

◆ unknown_BC

SceUInt32 SceSdifContextData::unknown_BC

Its purpose is unknown.

◆ commands

SceSdifCmdInput SceSdifContextGlobal::commands[16]

Controller-owned command pool.

◆ ctx_data

SceSdifContextData SceSdifContextGlobal::ctx_data