KCEJ SIF MANAGER
	$Id: readme.txt,v 1.5 2000/06/26 08:52:26 usr01475 Exp $

SCEsifcmd, sifrpcȤäIOPؤ̿饤֥ꡣ
sifcmdϥ桼Хåե1ĤʤᡢIOP¦⥸塼
Υ⥸塼̤ǻѤ롣

sifcmd, sifrpcΤΤϡSCEΥ饤֥ǤǤ˻ѤƤ뤿ᡢ
ŪˤȤƤϡ֤ͤΤʤޥɤsifcmdѤž
֤ͤɬסޤϽνλԤɬפʥޥɤsifrpcѤ롣

sifcmdΥ桼Хåեѡƥ쥸ϰʲΤ褦˻Ѥ롣
	REG 8 : ꥯȤդIDֹбӥåȤˤʤ롣

Υ⥸塼ѤϡsifcmdϻѶػߡ
(sceSifSendCmdϻѤƤʤ)
sifrpcˤĤƤϡƱ˻Ѥ뤳ȤǤ롣

ѥåȤ˴ؤƤϡ桼ǡ80-4ХȤޤǤΤΤΤ
饤֥ǥݡȡʾΤΤϸƽФ¦ǳݤɬפꡣ
(sif_send_directѤ)
ƽФ¦ǳݤ硢IOP¦ǤɤΥå
ԤʤʤΤǡǹԤʤɬפ롣

# -----------------------------
#  ( EE, IOP  )

int sif_set_callback_func( int id, void *func, void *data );

ƽֹid˥ХåؿfuncϿ롣
datafuncϤݥ󥿰
funcϰʲηδؿǡ߶ػ߶֤ǸƤФ롣

typedef struct {
	unsigned int psize:8;
	unsigned int dsize:24;
	unsigned int daddr;
	unsigned int fcode;
	unsigned int fno;		// ޤǤϡsceSifCmdHdr ( opt->fno )

	int data[ 112 / sizeof( int ) ];		// 
} SIF_CALLBACK_PARAM;

void callback_func( SIF_CALLBACK_PARAM *hd, void *data );

dsceSifCmdHdrϤޤ롢EEƤǡ112(16*7)Хȡ

dataϡsif_set_callback_funcΰdataΤޤϤ롣
(GP꤬ǤʤᡢΥݥ󥿷ͳǤʤܤΤ褦

# -----------------------------
# ǡžѡnon-block, ơϤʤ) ( EE, IOP  )

sceSifCmdHdr¤ΤäƤΤǡץ¦ǤѰդɬפϤʤ

# -- ȯ
֤ͤDMAžIDsceSifDmaStatǽλɤ狼롣
#define sif_check_status( id )		sceSifDmaStat( id )

int sif_send( int id, int fno );
int i_sif_send( int id, int fno );
32ӥåȤΥǡžơ˳ߤȯ롣

int sif_send_packet( int id, int fno, void *packet, int size );
int i_sif_send_packet( int id, int fno, void *packet, int size );
fnosize Х(MAX16*6 = 96Byte/16byteñ)ѥ᡼ȤƳߤȯ롣

int sif_send_packet_and_data( int id, int fno, void *packet, int psize
									, void *dst, void *data, int size );
int i_sif_send_packet_and_data( int id, int fno, void *packet, int psize
									, void *dst, void *data, int size );
fnopsizeХȤΥѥåȤȡdataϤޤsizeХ(MAX1024*1024-16)
ΰdstž롣

ʾΥǡϤɤEEϥ饤֥ΥХåե餷
IOPϥ饤֥ˤžʤᡢºݤФλޤ
Υɥ쥹ϻѤǤʤ

int sif_send_direct( int id, int fno, void *packet, int psize
									, void *dst, void *data, int size );
int i_sif_send_direct( int id, int fno, void *packet, int psize
									, void *dst, void *data, int size );
ƽФ¦ǥѥåȤݤ륿סƬˡSIF_PACEKT_HEADERμΤ
¤ΤɬסSIF_PACEKT_HEADERΤʤϡδؿꤹ롣

# -- ľž
int sif_send_mem( void *dst, void *src, int size );
int i_sif_send_mem( void *dst, void *src, int size );
ʬΥ֤srcΥ֤dstsizeХž롣
ळˤߤȯʤ
֤ͤDMAžIDsceSifDmaStatǽλɤ狼롣

# -----------------------------
# ֤ͥޥ͡ ID = 0

RPCȤ鷺ˡEEIOP˥ꥯȤäơEE֤ͤϤȤ
ꤷƤ롣EEϥݡ󥰤ǤȤФȤۡ
ХåɬפʾϡΥǡžѴؿȤФ

ήϰʲ̤ꡣ

EE : ֤QUEUEID롣IDǡơIOPsif_send롣
IOP: Ԥʤ֤IDȤä֤ͤEE֤ͥޥ͡롣
EE : ֤QUEUEƻ뤷ơIOPǡ褿餤֤QUEUEֵѤ롣

EE ¦֤QUEUE

typedef struct {
	int id;			// 31Bit ֤äƤɤΥե饰
	int data1;
	int data2;
	int data3;
} SIF_RV_QUEUE;

SIF_RV_QUEUE *sif_rv_get_queue( void );
֤QUEUENULLʤ饨顼

int sif_rv_call_func( int id, int fno, SIF_RV_QUEUE *queue );
¦νƤӽФ

int sif_rv_return_value( SIF_RV_QUEUE *queue );
int i_sif_rv_return_value( SIF_RV_QUEUE *queue );
¦֤ͤ
queueϡcallbackheader->data򥭥㥹ȤƼǤ롣

void sif_rv_release_queue( SIF_RV_QUEUE *queue );
queue롣

# ž(util)
SIF_RV_QUEUE *sif_get_mem( void *dst, void *src, int size );
RVȤäơΥ֤src鼫ʬΥ֤dstsizeХž롣
λȽϡ֤ͤSIF_RV_QUEUE *Ǹ롣
queue ɬפ뤳Ȥա
