ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
sior_rpc.c File Reference
#include <tamtypes.h>
#include <kernel.h>
#include <sifrpc.h>
#include <stdarg.h>
#include <string.h>
#include <malloc.h>
#include <fcntl.h>
#include <stdio.h>
#include <sio.h>
#include "sior_rpc.h"
+ Include dependency graph for sior_rpc.c:

Go to the source code of this file.

Data Structures

struct  init_arguments_t
 

Macros

#define IOP_MEM   0xbc000000
 

Enumerations

enum  {
  SIOR_INIT = 1 ,
  SIOR_PUTC ,
  SIOR_GETC ,
  SIOR_GETCBLOCK ,
  SIOR_WRITE ,
  SIOR_READ ,
  SIOR_PUTS ,
  SIOR_PUTSN ,
  SIOR_GETS ,
  SIOR_FLUSH
}
 

Functions

static void * sior_rpc_server (u32 funcno, void *data, int size)
 
static void sior_thread (void)
 
int SIOR_Init (int priority)
 

Variables

static SifRpcDataQueue_t qd
 
static SifRpcServerData_t Sd0
 
static u32 buffer [32]
 

Detailed Description

SIOR EE-side RPC code.

Definition in file sior_rpc.c.

Macro Definition Documentation

◆ IOP_MEM

#define IOP_MEM   0xbc000000

EE mapped IOP mem

Definition at line 32 of file sior_rpc.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SIOR_INIT 
SIOR_PUTC 
SIOR_GETC 
SIOR_GETCBLOCK 
SIOR_WRITE 
SIOR_READ 
SIOR_PUTS 
SIOR_PUTSN 
SIOR_GETS 
SIOR_FLUSH 

Definition at line 34 of file sior_rpc.c.

34  {
35  SIOR_INIT = 1,
36  SIOR_PUTC,
37  SIOR_GETC,
39  SIOR_WRITE,
40  SIOR_READ,
41  SIOR_PUTS,
42  SIOR_PUTSN,
43  SIOR_GETS,
45 };
@ SIOR_INIT
Definition: sior_rpc.c:35
@ SIOR_PUTS
Definition: sior_rpc.c:41
@ SIOR_WRITE
Definition: sior_rpc.c:39
@ SIOR_GETC
Definition: sior_rpc.c:37
@ SIOR_FLUSH
Definition: sior_rpc.c:44
@ SIOR_READ
Definition: sior_rpc.c:40
@ SIOR_GETCBLOCK
Definition: sior_rpc.c:38
@ SIOR_PUTSN
Definition: sior_rpc.c:42
@ SIOR_PUTC
Definition: sior_rpc.c:36
@ SIOR_GETS
Definition: sior_rpc.c:43

Function Documentation

◆ SIOR_Init()

int SIOR_Init ( int  priority)

Definition at line 134 of file sior_rpc.c.

135 {
136  static int sior_init_done = 0;
137  static u8 stack[4096];
138  int thid;
139  ee_thread_t t;
140 
141  if (sior_init_done)
142  return 0;
143 
144  t.func = sior_thread;
145  t.gp_reg = 0;
146  t.initial_priority = priority;
147  t.stack = stack;
148  t.stack_size = 4096;
149  if ((thid = CreateThread(&t)) < 0) {
150  printf("Error creating SIO Remote EE-thread.\n");
151  return thid;
152  }
153  StartThread(thid, NULL);
154 
155  sior_init_done = 1;
156  return thid;
157 }
s32 CreateThread(ee_thread_t *thread)
s32 StartThread(s32 thread_id, void *args)
static void sior_thread(void)
Definition: sior_rpc.c:127
void * gp_reg
Definition: kernel.h:230
int stack_size
Definition: kernel.h:229
void * func
Definition: kernel.h:227
void * stack
Definition: kernel.h:228
int initial_priority
Definition: kernel.h:231
#define NULL
Definition: tamtypes.h:91
unsigned char u8
Definition: tamtypes.h:23

References CreateThread(), ee_thread_t::func, ee_thread_t::gp_reg, ee_thread_t::initial_priority, NULL, sior_thread(), ee_thread_t::stack, ee_thread_t::stack_size, and StartThread().

◆ sior_rpc_server()

static void* sior_rpc_server ( u32  funcno,
void *  data,
int  size 
)
static

Definition at line 55 of file sior_rpc.c.

55  {
56  int res = 0, c;
57  size_t s;
58  char * p;
59  struct init_arguments_t * i;
60  switch(funcno) {
61  case SIOR_INIT:
62  i = (struct init_arguments_t *) data;
64  break;
65  case SIOR_PUTC:
66  c = *((int *) data);
67  res = sio_putc(c);
68  break;
69  case SIOR_GETC:
70  res = sio_getc();
71  break;
72  case SIOR_GETCBLOCK:
73  res = sio_getc_block();
74  break;
75  case SIOR_WRITE:
76  p = *((char **) data) + IOP_MEM;
77  s = *(((size_t *) data) + 1);
78  DI();
80  res = sio_write(p, s);
81  ee_kmode_exit();
82  EI();
83  break;
84  case SIOR_READ:
85  p = *((char **) data) + IOP_MEM;
86  s = *(((size_t *) data) + 1);
87  DI();
89  res = sio_read(p, s);
90  ee_kmode_exit();
91  EI();
92  break;
93  case SIOR_PUTS:
94  p = *((char **) data) + IOP_MEM;
95  DI();
97  res = sio_puts(p);
98  ee_kmode_exit();
99  EI();
100  break;
101  case SIOR_PUTSN:
102  p = *((char **) data) + IOP_MEM;
103  DI();
104  ee_kmode_enter();
105  res = sio_putsn(p);
106  ee_kmode_exit();
107  EI();
108  break;
109  case SIOR_GETS:
110  p = *((char **) data) + IOP_MEM;
111  DI();
112  ee_kmode_enter();
113  res = (int)sio_gets(p);
114  ee_kmode_exit();
115  EI();
116  break;
117  case SIOR_FLUSH:
118  sio_flush();
119  break;
120  }
121 
122  *((int *) data) = res;
123 
124  return data;
125 }
static int ee_kmode_exit()
Definition: kernel.h:198
static int ee_kmode_enter()
Definition: kernel.h:181
#define DI
Definition: kernel.h:24
#define EI
Definition: kernel.h:25
u32 data
Definition: libmouse.c:36
s32 s
Definition: ps2ipc.c:30
int sio_putsn(const char *str)
int sio_putc(int c)
char * sio_gets(char *str)
void sio_flush(void)
int sio_puts(const char *str)
int sio_getc(void)
void sio_init(u32 baudrate, u8 lcr_ueps, u8 lcr_upen, u8 lcr_usbl, u8 lcr_umode)
int sio_getc_block(void)
size_t sio_read(void *buf, size_t size)
size_t sio_write(void *buf, size_t size)
#define IOP_MEM
Definition: sior_rpc.c:32

References init_arguments_t::baudrate, data, DI, ee_kmode_enter(), ee_kmode_exit(), EI, IOP_MEM, init_arguments_t::lcr_ueps, init_arguments_t::lcr_umode, init_arguments_t::lcr_upen, init_arguments_t::lcr_usbl, s, sio_flush(), sio_getc(), sio_getc_block(), sio_gets(), sio_init(), sio_putc(), sio_puts(), sio_putsn(), sio_read(), sio_write(), SIOR_FLUSH, SIOR_GETC, SIOR_GETCBLOCK, SIOR_GETS, SIOR_INIT, SIOR_PUTC, SIOR_PUTS, SIOR_PUTSN, SIOR_READ, and SIOR_WRITE.

Referenced by sior_thread().

◆ sior_thread()

static void sior_thread ( void  )
static

Definition at line 127 of file sior_rpc.c.

127  {
128  SifInitRpc(0);
131  SifRpcLoop(&qd);
132 }
s32 GetThreadId(void)
void SifInitRpc(int mode)
SifRpcServerData_t * SifRegisterRpc(SifRpcServerData_t *srv, int sid, SifRpcFunc_t func, void *buff, SifRpcFunc_t cfunc, void *cbuff, SifRpcDataQueue_t *qd)
SifRpcDataQueue_t * SifSetRpcQueue(SifRpcDataQueue_t *q, int thread_id)
void SifRpcLoop(SifRpcDataQueue_t *q)
void *(* SifRpcFunc_t)(int fno, void *buffer, int length)
Definition: sifrpc.h:32
static SifRpcServerData_t Sd0
Definition: sior_rpc.c:28
static void * sior_rpc_server(u32 funcno, void *data, int size)
Definition: sior_rpc.c:55
static SifRpcDataQueue_t qd
Definition: sior_rpc.c:27
static u32 buffer[32]
Definition: sior_rpc.c:29
#define SIOR_IRX
Definition: sior_rpc.h:19

References buffer, GetThreadId(), NULL, qd, Sd0, SifInitRpc(), SifRegisterRpc(), SifRpcLoop(), SifSetRpcQueue(), SIOR_IRX, and sior_rpc_server().

Referenced by SIOR_Init().

Variable Documentation

◆ buffer

u32 buffer[32]
static

Definition at line 29 of file sior_rpc.c.

Referenced by sior_thread().

◆ qd

SifRpcDataQueue_t qd
static

Definition at line 27 of file sior_rpc.c.

Referenced by sior_thread().

◆ Sd0

SifRpcServerData_t Sd0
static

Definition at line 28 of file sior_rpc.c.

Referenced by sior_thread().