80 #include "sysconfig.h" 90 #ifndef GSC_KERNEL_MAX_DEVICE_NUM 91 #define GSC_KERNEL_MAX_DEVICE_NUM 16 117 if(device_list[i] != 0) {
136 if(device_list[i] != 0) {
138 return device_list[i]->
name;
158 if(device_list[i] != 0) {
160 return device_list[i]->
explan;
180 int register_device(
const struct st_device *dev,
char *param)
185 if(device_list[i] == 0) {
187 if(dev->register_dev) {
188 DKPRINTF(0x01,
"Device \"%s\" install ", dev->
name);
189 if(dev->
mutex != 0) {
196 rt = dev->register_dev((
struct st_device *)dev, param);
200 device_list[i] = (
struct st_device *)dev;
201 DKPRINTF(0x01,
"OK.\n");
204 DKPRINTF(0x01,
"NG.\n");
205 SYSERR_PRINT(
"\"%s\" register error.\n",
212 SYSERR_PRINT(
"Cannot register device \"%s\" (over GSC_KERNEL_MAX_DEVICE_NUM).\n",
230 if(device_list[i] == dev) {
232 for(j=i; j<(GSC_KERNEL_MAX_DEVICE_NUM - 1); j++) {
233 device_list[j] = device_list[j+1];
235 device_list[GSC_KERNEL_MAX_DEVICE_NUM - 1] = 0;
236 if(dev->unregister_dev) {
237 int rtn = dev->unregister_dev((
struct st_device *)dev);
238 if(dev->
mutex != 0) {
268 if(device_list[i] != 0) {
270 if(device_list[i]->open) {
271 rt = device_list[i]->open(device_list[i]);
276 return device_list[i];
295 return dev->close(dev);
312 DKPRINTF(0x02,
"DEV %s LOCK Timeout %ld\n", dev->
name, timeout);
314 if(is_in_interrupt() != 0) {
315 DKPRINTF(0x02,
"DEV %s LOCK abort is_in_interrupt\n", dev->
name);
320 DKPRINTF(0x02,
"DEV %s LOCK abort flg_init_task_run\n", dev->
name);
325 if(dev->
mutex != 0) {
326 DKPRINTF(0x02,
"DEV %s LOCK\n", dev->
name);
345 DKPRINTF(0x02,
"DEV %s UNLOCK\n", dev->
name);
347 if(is_in_interrupt()) {
348 DKPRINTF(0x02,
"DEV %s UNLOCK abort is_in_interrupt\n", dev->
name);
353 DKPRINTF(0x02,
"DEV %s UNLOCK abort flg_init_task_run\n", dev->
name);
358 if(dev->
mutex != 0) {
359 DKPRINTF(0x02,
"DEV %s UNLOCK\n", dev->
name);
382 return dev->read(dev, buf, count);
383 }
else if(dev->getc) {
385 unsigned char *dp = buf;
386 for(i=0; i<count; i++) {
387 if(dev->getc(dev, dp)) {
413 if(dev->block_read) {
414 return dev->block_read(dev, buf, sector, blkcount);
433 return dev->getc(dev, data);
434 }
else if(dev->read) {
435 return dev->read(dev, data, 1);
455 return dev->write(dev, buf, count);
456 }
else if(dev->putc) {
458 const unsigned char *dp = buf;
459 for(i=0; i<count; i++) {
460 if(dev->putc(dev, *dp)) {
486 if(dev->block_write) {
487 return dev->block_write(dev, buf, sector, blkcount);
506 return dev->putc(dev, data);
507 }
else if(dev->write) {
508 unsigned char buf = data;
509 return dev->write(dev, &buf, 1);
529 return dev->ioctl(dev, com, arg, param);
549 return dev->seek(dev, offset, whence);
567 return dev->sync(dev);
586 return dev->select(dev, timeout);
604 return dev->suspend(dev);
622 return dev->resume(dev);
640 DKPRINTF(0x01,
"suspend : %s\n", device_list[i]->
name);
661 DKPRINTF(0x01,
"resume : %s\n", device_list[i]->
name);
666 #ifdef GSC_DEV_ENABLE_RTC 667 sync_systime_from_rtc();
unsigned char uchar
GadgetSeedの文字(列)は unsigned char 型となる
int read_device(struct st_device *dev, void *buf, unsigned int count)
デバイスよりデータを読み出す
int lock_device(struct st_device *dev, unsigned int timeout)
デバイスをロックする
int unregister_device(const struct st_device *dev)
デバイスを削除する
int close_device(struct st_device *dev)
デバイスをクローズする
void init_device_list(void)
デバイスドライバリストを初期化する
void mutex_register(struct st_mutex *mutex, const char *name)
MUTEXを登録する
int block_read_device(struct st_device *dev, void *buf, unsigned int sector, unsigned int blkcount)
デバイスよりブロックデータを読み出す
struct st_mutex * mutex
デバイス排他アクセス用MUTEX
int resume_device(struct st_device *dev)
デバイスを活性化する
const char * device_explan(int num)
デバイス説明を取得する
int ioctl_device(struct st_device *dev, unsigned int com, unsigned int arg, void *param)
デバイスを制御する
int mutex_lock(struct st_mutex *mutex, unsigned int timeout)
MUTEXをロックする
int write_device(struct st_device *dev, const void *buf, unsigned int count)
デバイスにデータを書き込む
int block_write_device(struct st_device *dev, const void *buf, unsigned int sector, unsigned int blkcount)
デバイスにブロックデータを書き込む
#define GSC_KERNEL_MAX_DEVICE_NUM
$gsc カーネル最大デバイスドライバ数
int mutex_unlock(struct st_mutex *mutex)
MUTEXをアンロックする
int suspend(void)
全デバイスを休止状態にする
int unlock_device(struct st_device *dev)
デバイスをアンロックする
const char * device_name(int num)
デバイス名を取得する
int strcomp(const uchar *s1, const uchar *s2)
文字列比較
int sync_device(struct st_device *dev)
デバイスの書き込みデータの同期をとる
struct st_device * open_device(char *name)
デバイスをオープンする
int putc_device(struct st_device *dev, unsigned char data)
デバイスにデータを1バイト書き込む
int flg_init_task_run
デバイスを登録する
int select_device(struct st_device *dev, unsigned int timeout)
デバイスのアクセス準備完了を待つ
int suspend_device(struct st_device *dev)
デバイスを休止状態にする
int resume(void)
全デバイスを活性化する
int device_num(void)
登録されているデバイス数を取得する
int seek_device(struct st_device *dev, int offset, int whence)
デバイスのアクセスポイントを設定する
int getc_device(struct st_device *dev, unsigned char *data)
デバイスよりデータを1バイト読み出す
char name[MAX_DEVNAMELRN]
デバイス名文字列
void mutex_register_ISR(struct st_mutex *mutex, const char *name)
MUTEXを登録する
int mutex_unregister_ISR(struct st_mutex *mutex)
MUTEXを登録解除する
void mutex_unregister(struct st_mutex *mutex)
MUTEXを登録解除する