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 ɬפ뤳Ȥա

