Sept 11, 2000 onl50t: Solaris 2.6 cc ドライバのデバッグ. cc ドライバのデバッグ#04(その8) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/ onl50t-sol2.6/Desktop/debug-list-step08.txt) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). 株式会社ロジックハウスの白田様より SPARC CPU-50T を借用した。 (B). FORCE,CPU-50(UltraSPARC-IIi 300MHz)、に Solaris2.6 のシステムを インストールした。 (C). /etc の下の各設定、および /export/home の作成をやった。 (D). "Solaris2.6 Hardware: 5/98 SMCC Desktop 日本語版 SPARC版"では ディスクレス・クライアントを設定することはできないことを確認した。 (E). CPU-50T に Solaris2.6用の VMEドライバ、FRCvme-2.3.1 をインストール した。 (F). onl50t に ccドライバをインストールした。 (G). サンプル・プログラムを実行した。 (1). cam1、シングル・アクション 24ビット camac read/write の実行 NG. システムはパニックを起こしてリブートしてしまう。 (2). cam3、camac LAM割り込み処理の実行 NG. システムはパニックを起こしてリブートしてしまう。 (3). cam2、ブロック転送 16ビット read/write の実行 ok. 正常に実行できた。 (4). cam2、ブロック転送 24ビット read/write の実行 ok. 正常に実行できた。 (H). クラッシュ時の savecoreファイルを入手してデバッグを始めた。 (I). cam1プログラムのデバッグ、icc_ioctlルーチンを修正した。 ok. cam1プログラムは正常に実行できた。 (J). cam3プログラムのデバッグを始めた。 camac_s()ルーチンの中で "cc->k->dhr = *dat;" を実行したところでエラーになっている。 message構造体をcc_device構造体の中に入れてみたが改善されない。 (K). cam3プログラムは正常に動作できるようになった。 (L). cam3プログラムのデバッグ時に付加したゴミをはずして最終的な動作確認 をやった。 ok. (M). onl50t 上でデバッグしたcamacドライバをfrc7v-cl2 上で動作確認した。 ok. (N). onl50t 上でデバッグしたcamacドライバを onl7v2、スタンドアロン Solaris2.6 上で動作確認した。 ok. (O). onl50t 上でデバッグしたcamacドライバを frc8vt、ディスクレス・サーバ Solaris2.6 上で動作確認した。 ok. (P). onl50t 上でデバッグしたcamacドライバを onl8v1、スタンドアロン Solaris2.6 上で動作確認した。 ok. (Q). onl50t 上でデバッグしたcamacドライバを onl5v4、スタンドアロン Solaris2.6 上で動作確認した。 ok. (R). スタンドアロン Solaris2.6、onl50t 上で、シングルアクションの実行 速度を測定時に、camac_s()コールを連続実行すると不正割り込みが かかってしまった。 (S). camac_s()コールを連続実行しても不正割り込みはかからないように なった。 ok. -------------------- リスト処理 (A). 公開版のcamacドライバ、"FORCE-50T-sol2.6" を使ってリスト処理の テストを始める。 (B). KEKリスト処理で camacシングルアクション read/write、LAM割り込み 処理、DMA camacブロック転送の現状確認をした。 (C). Kineticリスト処理で camacシングルアクション read の現状確認をした。 (D). KEKリスト処理、Kineticリスト処理両方をとおしてソースプログラム上で 明らかに問題と思われる部分を修正した。 (E). KEKリスト処理でシングルアクション read/write が正常に実行できて いることを確認した。 (F). KEKリスト処理で DMA camacブロック転送 read が正常に実行できて いることを確認した。 (G). KEKリスト処理で LAM割り込み処理が が正常に実行できていることを確認 した。 (H). KEKリスト処理全般に関連する関数の動作を確認した。 (2). ここでやるべきこと Kineticリスト処理のデバッグを行う。 (3). 現状確認 (3-1). テスト用のプログラムをコンパイル onl50t[134]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/camlist-kine onl50t[135]% cat cam6.c /******************************************************************** * cam6.c 20-FEB-1992 Y.Takeuchi * * * * K2917 list processing test program * ********************************************************************/ #include #include #include "camlib.h" #define D_size 20240 #define L_size 1024 #define DEFNAME "cam6.obj" main(argc, argv) int argc; char *argv[]; { unsigned short list[L_size]; int data[D_size]; unsigned short *usp = (unsigned short *)data; struct cc_iosb iosb; register int status; int i, lenlis; char filename[33]; /* read options */ strcpy(filename, (argc > 1) ? argv[1] : DEFNAME); /* Initialize data buffer */ for(i = 0; i < D_size; i++) usp[i] = 0; /* Open */ if (CAMOPN()) { printf("Open error!\n"); exit(1); } CGENC(); CGENZ(); CREMI(); CKINIT(); /* read camac list */ status = CRLIST(filename, list, L_size, &lenlis, &i); printf(" list length = %d\n", lenlis); if (status) { printf("Read list error!\n"); exit(status); } /* install the list to K2917 */ status = CKADD("test1", list, lenlis); if (status) { printf("Load list error!\n"); exit(status); } /* Execute */ printf(" Now execute %s ...\n", filename); CKEXEC("test1", data, D_size, &iosb); printf("\n"); /* Dump buffer */ for(i = 0; i < 10; i++) printf("data[%3d]=0x%8x %10u usp[%3d]=0x%4x %5d usp[%3d]=0x%4x %5d\n", i, data[i], data[i], i*2, usp[i*2], usp[i*2], i*2+1, usp[i*2+1], usp[i*2+1]); printf("\n"); /* save to file */ CKSAVE("cam6.klist"); /* Close */ CAMCLS(); return 0; } onl50t[136]% onl50t[138]% cat cam6.asm ***************************************************************** * cam6.ASM 20-FEB-1992 Y.Takeuchi * * Modified : 4-Jul-2000 E.Inoue * * * * camasm cam6 a * ***************************************************************** ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register SCALER equ 6 ; CAMAC Scaler ; ; NDT (9,SCALER,1) ; READ (0,SCALER,1) ; READ (0,SCALER,1) ; IGQ (0,SCALER,1),#10 ; READ (0,SCALER,1) ; READ (0,SCALER,1) ; ; NDT (10,SW,1) READ (0,SW,1) READ (0,SW,1) IGQ (0,SW,1),#10 READ (0,SW,1) READ (0,SW,1) ; STOP end onl50t[139]% onl50t[149]% vi Makefile # ********************************************************************** # * * # * Makefile for VME CAMAC NOV-1991 Y.Takeuchi (TIT) * # * * # * Modified Aug 9, 2000 E.Inoue * # ********************************************************************** #CAMDIR = /usr/local/vme/camac CAMDIR = .. LIBDIR = $(CAMDIR) INCDIR = $(CAMDIR) CAMASM = $(CAMDIR)/camasm/camasm #CLIB = -I$(CAMDIR)/include -L$(CAMDIR)/lib -lcamac CLIB = -I$(INCDIR) -L$(LIBDIR) -lcamac CAMLIBRARY = $(LIBDIR)/libcamac.a CAMLIBINCC = $(INCDIR)/camlib.h CAMLIBINCF = $(INCDIR)/camlib.inc CC = cc #CFLAGS = -g #CFLAGS = -O CFLAGS = OBJ = cam0 cam1 cam1w cam3 cam4 cam5 cam6 cam6a cam7 all: $(OBJ) cam0 : cam0.c $(CC) $(CFLAGS) cam0.c -o cam0 $(CLIB) cam1 : cam1.c $(CC) $(CFLAGS) cam1.c -o cam1 $(CLIB) cam1w : cam1w.c $(CC) $(CFLAGS) cam1w.c -o cam1w $(CLIB) cam3 : cam3.c $(CC) $(CFLAGS) cam3.c -o cam3 $(CLIB) cam4 : cam4.c cam4.asm $(CC) $(CFLAGS) cam4.c -o cam4 $(CLIB) $(CAMASM) cam4 a cam5 : cam5.c $(CC) $(CFLAGS) cam5.c -o cam5 $(CLIB) #cam6 : cam6.c cam6.asm # $(CC) $(CFLAGS) cam6.c -o cam6 $(CLIB) # $(CAMASM) cam6 a cam6 : cam6.c cam6.asm $(CAMLIBRARY) $(CAMLIBINCC) $(CC) $(CFLAGS) cam6.c -o cam6 $(CLIB) $(CAMASM) cam6 a cam6a : cam6a.c $(CC) $(CFLAGS) cam6a.c -o cam6a $(CLIB) cam7 : cam7.c cam7a.asm cam7b.asm $(CC) $(CFLAGS) cam7.c -o cam7 $(CLIB) $(CAMASM) cam7a a $(CAMASM) cam7b a clean: rm -f $(OBJ) *.lis *.obj *~ *.o core *.klist onl50t[150]% onl50t[167]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[168]% onl50t[168]% ls -l cam6* -rwxr-xr-x 1 inoue kek 14636 Aug 9 09:53 cam6* -rw-r--r-- 1 inoue kek 634 Jul 18 13:21 cam6.asm -rw-r--r-- 1 inoue kek 393 Jul 4 13:41 cam6.asm-org -rw-r--r-- 1 inoue kek 1835 Jul 5 09:49 cam6.c -rw-r--r-- 1 inoue kek 1415 Aug 9 09:53 cam6.lis -rw-r--r-- 1 inoue kek 70 Aug 9 09:53 cam6.obj -rwxr-xr-x 1 inoue kek 14060 Jul 4 16:29 cam6a* -rw-r--r-- 1 inoue kek 1471 Jul 4 13:41 cam6a.c onl50t[169]% cat cam6.lis CAMASM macro assembler F0 1: ***************************************************************** F0 1: * cam6.ASM 20-FEB-1992 Y.Takeuchi * F0 1: * Modified : 4-Jul-2000 E.Inoue * F0 1: * * F0 1: * camasm cam6 a * F0 1: ***************************************************************** F0 1: ;SW equ 11 ; Switch Register F0 1: SW equ 3 ; Switch Register F0 1: SCALER equ 6 ; CAMAC Scaler F0 1: ; F0 1: ; NDT (9,SCALER,1) F0 1: ; READ (0,SCALER,1) F0 1: ; READ (0,SCALER,1) F0 1: ; IGQ (0,SCALER,1),#10 F0 1: ; READ (0,SCALER,1) F0 1: ; READ (0,SCALER,1) F0 1: ; F0 1: ; NDT (10,SW,1) F0 1: 0201 0620 READ (0,SW,1) F0 3: 0201 0620 READ (0,SW,1) F0 5: 031B 0620 000A IGQ (0,SW,1),#10 F0 8: 0201 0620 READ (0,SW,1) F0 A: 0201 0620 READ (0,SW,1) F0 C: ; F0 C: 0100 STOP F0 D: end onl50t[170]% cat cam6.obj 000D 0201 0620 0201 0620 031B 0620 000A 0201 0620 0201 0620 0100 onl50t[171]% (3-2). テスト用のプログラムを実行 onl50t[59]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/caml ist-kine onl50t[60]% cam6 list length = 13 Now execute cam6.obj ... Freeze BAD TRAP: cpu=0 type=0x31 rp=0x301cd7a0 addr=0x0 mmu_fsr=0 x0 BAD TRAP occurred in module "cc" due to an illegal access to a user address. cam6: trap type = 0x31 pid=1143, pc=0x60dcd078, sp=0x301cd830, tstate=0x9900001e07, context=0x7ba g1-g7: 60ed20d6, 0, 0, 7a0, 0, 0, 606242e0 Begin traceback... sp = 301cd830 Called from 60dc8ef8, fp=301cd898, args=0 301cd923 0 0 0 5f Called from 10088578, fp=301cd970, args=f00000 301cd9d8 3c11 0 301cda08 60e52000 Called from 1002ec94, fp=301cda80, args=3 3 9e38 60cff720 60fb1b1c 9e38 Called from 11eac, fp=effeb380, args=3 22430 2 effeb457 effeb3d0 effeb3cc End traceback... panic[cpu0]/thread=0x606242e0: trap syncing file systems... 2 done 3253 static and sysmap kernel pages 31 dynamic kernel data pages 252 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 99 current user process pages 3635 total pages (3635 chunks) dumping to vp 601de2ac, offset 479766 3635 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using ttya for input and output. FORCE,CPU-50(UltraSPARC-IIi 300MHz), No Keyboard OpenBoot 3.10.8, 256 MB memory installed, Serial #9204337. Ethernet address 0:80:42:10:2:74, Host ID: 808c7271. Executing last command: boot Boot device: disk3:a File and args: | Type 'go' to resume ok boot -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using ttya for input and output. FORCE,CPU-50(UltraSPARC-IIi 300MHz), No Keyboard OpenBoot 3.10.8, 256 MB memory installed, Serial #9204337. Ethernet address 0:80:42:10:2:74, Host ID: 808c7271. Executing last command: boot -r Boot device: /pci@1f,0/scsi@4/disk@3,0:a File and args: -r SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: hme0 hme1. Hostname: onl50t Configuring the /devices directory FRCvme V2.3.1 VME Nexus ( Universe) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x302061f CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmeplus0 at vme0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at vme0 vmefdma0 at vme0 vmedvma0 at vme0 vmectl0 at vme0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking ufs filesystems /dev/rdsk/c0t3d0s5: is stable. /dev/rdsk/c0t3d0s4: is stable. /dev/rdsk/c0t3d0s7: is stable. /dev/rdsk/c0t3d0s3: is stable. checking for crash dump...System went down at Wed Aug 9 09:55:52 2000 Saving 3635 pages of image in vmcore.29 3635 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/onl50t/unix.29 Namelist file complete. add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of hme0 to 255.255.248.0 SUNW,hme1: Link Down - cable problem? Setting default interface for multicast: add net 224.0.0.0: gateway onl50t syslog service starting. Print services started. starting Kana-Kanji converters: cssd. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. onl50t console login: CKEXEC()ルーチンを実行しようとして、システムは panic、リブートして しまった。 (4). 問題を起こしている個所のチェック (4-1). KEXEC()ルーチンをはずして cam6プログラムを実行してみる : /* Execute */ printf(" Now execute %s ...\n", filename); /* E.Inoue CKEXEC("test1", data, D_size, &iosb); */ printf("\n"); : onl50t[53]% cam6 list length = 13 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[54]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T. ) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 onl50t[56]% ls -l cam6* -rwxr-xr-x 1 inoue kek 14588 Aug 9 10:07 cam6* -rw-r--r-- 1 inoue kek 634 Jul 18 13:21 cam6.asm -rw-r--r-- 1 inoue kek 393 Jul 4 13:41 cam6.asm-org -rw-r--r-- 1 inoue kek 1849 Aug 9 10:07 cam6.c -rw-r--r-- 1 inoue kek 42 Aug 9 10:08 cam6.klist -rw-r--r-- 1 inoue kek 1415 Aug 9 10:07 cam6.lis -rw-r--r-- 1 inoue kek 70 Aug 9 10:07 cam6.obj -rwxr-xr-x 1 inoue kek 14060 Jul 4 16:29 cam6a* -rw-r--r-- 1 inoue kek 1471 Jul 4 13:41 cam6a.c onl50t[56]% onl50t[56]% od -t x cam6.klist 0000000 00140074 00650073 00740031 0000000e 0000020 00030620 00030620 002b0620 fff6ffff 0000040 00030620 00030620 00800000 0000052 onl50t[57]% od -t cx cam6.klist 0000000 \0 024 \0 t \0 e \0 s \0 t \0 1 \0 \0 \0 016 00140074 00650073 00740031 0000000e 0000020 \0 003 006 \0 003 006 \0 + 006 377 366 377 377 00030620 00030620 002b0620 fff6ffff 0000040 \0 003 006 \0 003 006 \0 200 00030620 00030620 00800000 0000052 onl50t[58]% cam6.klistファイルをまともそうに作られた。 CKADD()、CKSAVE()ルーチンは うまく動作しているのかもしれない。 cam6プログラムの実行で一番問題に なっているのは、CKEXEC()ルーチンのようだ。 このルーチンを調べる。 (4-2). KEXEC()ルーチンをチェック cam6プログラム KEXEC()ルーチンを元に戻す。 : /* Execute */ printf(" Now execute %s ...\n", filename); CKEXEC("test1", data, D_size, &iosb); printf("\n"); : onl50t[58]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/camlist-kine onl50t[59]% grep CKEXEC * cam6.c: CKEXEC("test1", data, D_size, &iosb); cam6a.c: CKEXEC("test1", data, D_size, &iosb); onl50t[60]% onl50t[62]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6 onl50t[63]% grep CKEXEC * camlib.c:CKEXEC(name, buf, lenbuf, iiosb) onl50t[64]% onl50t[64]% vi camlib.c : CKEXEC(name, buf, lenbuf, iiosb) char *name; u_short *buf; int lenbuf; struct cc_iosb *iiosb; { register int status; message.command = (u_short)CC_CMD_EXEKLIST; message.klname = name; vec[0].iov_base = (caddr_t)&message; vec[0].iov_len = sizeof(struct cc_message); vec[1].iov_base = (caddr_t)buf; vec[1].iov_len = lenbuf * sizeof(u_short); status = writev(cc_path, vec, 2); check_file_pointer(iiosb->ret_length); return status; } : onl50t[65]% もっと詳しくトレースするために cc.cファイルを修正する。 onl50t[44]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6 onl50t[45]% vi cc.c : /************************* * K2917 list processing * *************************/ case CC_CMD_ADDKLIST: copyin((caddr_t)cc->message.klname, (caddr_t)klname, sizeof(klname)); iov++; uio->uio_iov++; uio->uio_iovcnt--; cc->ptr_list = (u_short *)iov->iov_base; cc->len_list = iov->iov_len / sizeof(u_short); copyin((caddr_t)cc->ptr_list, (caddr_t)cc->list_area, cc->len_list * sizeof(u_short)); /* E.Inoue kladd(cc, klname); end */ kladd(unit, klname); break; case CC_CMD_DELKLIST: copyin((caddr_t)cc->message.klname, (caddr_t)klname, sizeof(klname)); /* E.Inoue kldel(klname); end */ kldel(unit, klname); break; case CC_CMD_EXEKLIST: copyin((caddr_t)cc->message.klname, (caddr_t)klname, sizeof(klname)); copyin((caddr_t)cc->message.ptr_iosb, (caddr_t)&cc->iosb, sizeof(struct cc_iosb)); iov++; uio->uio_iov++; uio->uio_iovcnt--; cc->ptr_udata_s = cc->ptr_udata = (u_short *)iov->iov_base; cc->len_udata_t = iov->iov_len / sizeof(u_short); cc->len_udata = 0; /* E.Inoue klexe(cc, klname); end */ klexe(unit, klname); cc->iosb.status = cc->status; cc->iosb.ret_length = cc->retlen; cc->iosb.s_reg = cc->s_reg; cc->iosb.devinfo = cc->camac_qx + (cc->camac_qx << 16); copyout((caddr_t)&cc->iosb, (caddr_t)cc->message.ptr_iosb, sizeof(struct cc_iosb)); break; case CC_CMD_SAVEKLIST: /* E.Inoue klsave(cc, cc->data_area); end */ klsave(unit, cc->data_area); copyout((caddr_t)cc->data_area,(caddr_t)cc->message.ptr_iosb, (cc->list_area[0] + 1) * 2); break; case CC_CMD_LOADKLIST: copyin((caddr_t)(u_short *)cc->message.ptr_iosb, (caddr_t)cc->data_area, 2); copyin((caddr_t)((u_short *)cc->message.ptr_iosb + 1), (caddr_t)&cc->data_area[1], cc->data_area[0] * 2); /* E.Inoue klload(cc, cc->data_area); end */ klload(unit, cc->data_area); break; default: break; } /* restore iov, uio */ iov->iov_base = iovs->iov_base; iov->iov_len = iovs->iov_len; uio->uio_iovcnt = uios->uio_iovcnt; uio->uio_offset = uios->uio_offset; uio->uio_segflg = uios->uio_segflg; uio->uio_resid = uios->uio_resid; return cc->cc_sys_status; } : /* E.Inoue klexe(cc, name) struct cc_device *cc; char *name; end */ /* E.Inoue */ klexe(int unit, char *name) /* End */ { /* E.Inoue */ struct cc_device *cc; /* End */ /* register dev_t dev = cc->dev; E.Inoue */ register dev_t dev; /* register struct uio *uio = cc->uio; E.Inoue */ register struct uio *uio; /* register int *retlen = (int *)cc->ptr_udata; E.Inoue */ register int *retlen; register int i, status; cmn_err(CE_NOTE," klexe: enter"); /* E.Inoue */ cc = ddi_get_soft_state(cc_state,unit); dev = cc->dev; uio = cc->uio; retlen = (int *)cc->ptr_udata; /* end */ cc->klist = CC_KLIST_YES; /* same name check */ cmn_err(CE_NOTE," klexe: step1"); for (i = 0; i < cc->ptr_dir; i++) if (strcmp(name, cc->klist1[i].name) == 0) break; cmn_err(CE_NOTE," klexe: step2"); if (i >= cc->ptr_dir) return CC_STA_KLIST_NONAME; cmn_err(CE_NOTE," klexe: step3"); cc->now_cma = cc->klist1[i].cma; cc->now_wc = cc->klist1[i].wc; /* first 2words for retlen */ cmn_err(CE_NOTE," klexe: step4"); uio->uio_iov->iov_base = (caddr_t)(cc->ptr_udata + 2); uio->uio_iov->iov_len = cc->klist1[i].wc * 2; uio->uio_iovcnt = 1; uio->uio_offset = 0; /* Kinetic 2917 list is now READ ONLY. */ cmn_err(CE_NOTE," klexe: before physio()"); /* E.Inoue */ status = physio(cc_strategy, (struct buf *)NULL, dev, B_READ, cc_minphys, uio); cmn_err(CE_NOTE," klexe: after physio()"); /* end */ *retlen = cc->retlen; return status; } : onl50t[46]% (4-2-1). cam6プログラムを実行 cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmeplus0 at vme0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at vme0 vmefdma0 at vme0 vmedvma0 at vme0 vmectl0 at vme0 NOTICE: klexe: enter NOTICE: klexe: step1 NOTICE: klexe: step2 NOTICE: klexe: step3 NOTICE: klexe: step4 NOTICE: klexe: before physio() NOTICE: klexe: after physio() D TRAP: cpu=0 type=0x31 rp=0x3026b7a0 addr=0xeffeb494 mmu_fsr=0x0 cam6: trap type = 0x31 addr=0xeffeb494 pid=419, pc=0x60d65150, sp=0x3026b830, tstate=0x44f0001e03, context=0x300 g1-g7: 104124c8, 4565, 60cc4798, effea000, 78, 0, 60bb6040 Begin traceback... sp = 3026b830 Called from 60d60ef8, fp=3026b898, args=0 0 0 effeb494 3026b9d8 f00000 Called from 10088578, fp=3026b970, args=f00000 3026b9d8 3c11 0 3026ba08 60dea000 Called from 1002ec94, fp=3026ba80, args=3 3 9e38 60d1fa68 60cee4cc 9e38 Called from 11eac, fp=effeb380, args=3 22430 2 effeb457 effeb3d0 effeb3cc End traceback... panic[cpu0]/thread=0x60bb6040: trap syncing file systems... 4 1 done 3123 static and sysmap kernel pages 46 dynamic kernel data pages 262 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 102 current user process pages 3533 total pages (3533 chunks) dumping to vp 601de2ac, offset 481398 3533 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using ttya for input and output. FORCE,CPU-50(UltraSPARC-IIi 300MHz), No Keyboard OpenBoot 3.10.8, 256 MB memory installed, Serial #9204337. Ethernet address 0:80:42:10:2:74, Host ID: 808c7271. Executing last command: boot Boot device: disk3:a File and args: | Type 'go' to resume ok boot -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using ttya for input and output. FORCE,CPU-50(UltraSPARC-IIi 300MHz), No Keyboard OpenBoot 3.10.8, 256 MB memory installed, Serial #9204337. Ethernet address 0:80:42:10:2:74, Host ID: 808c7271. Executing last command: boot -r Boot device: /pci@1f,0/scsi@4/disk@3,0:a File and args: -r SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: hme0 hme1. Hostname: onl50t The / file system (/dev/rdsk/c0t3d0s0) is being checked. /dev/rdsk/c0t3d0s0: 4101 files, 742104 used, 163756 free /dev/rdsk/c0t3d0s0: (380 frags, 20422 blocks, 0.0% fragmentation) The /usr file system (/dev/rdsk/c0t3d0s6) is being checked. /dev/rdsk/c0t3d0s6: 28675 files, 546594 used, 3798762 free /dev/rdsk/c0t3d0s6: (1898 frags, 474608 blocks, 0.0% fragmentation) Configuring the /devices directory FRCvme V2.3.1 VME Nexus ( Universe) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x302061f CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmeplus0 at vme0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at vme0 vmefdma0 at vme0 vmedvma0 at vme0 vmectl0 at vme0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking ufs filesystems /dev/rdsk/c0t3d0s5: is stable. /dev/rdsk/c0t3d0s4: is stable. /dev/rdsk/c0t3d0s7: is stable. /dev/rdsk/c0t3d0s3: 2328 files, 103416 used, 568258 free /dev/rdsk/c0t3d0s3: (554 frags, 70963 blocks, 0.0% fragmentation) checking for crash dump...System went down at Wed Aug 9 14:27:39 2000 Saving 3533 pages of image in vmcore.32 3533 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/onl50t/unix.32 Namelist file complete. add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of hme0 to 255.255.248.0 SUNW,hme1: Link Down - cable problem? Setting default interface for multicast: add net 224.0.0.0: gateway onl50t syslog service starting. Print services started. starting Kana-Kanji converters: cssd. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. onl50t console login: klexe()ルーチンの中で、physio()ルーチンの実行からリターンした後、 "*retlen = cc->retlen;" を実行した時に panic を起こしている。 この部分 をはずしてみる。 (4-3). cc.cファイルの修正&再構築、cam6プログラムの再実行 onl50t[39]% vi cc.c : static u_int cc_intr(int unit) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; /* register struct K_REG *k = cc->k; */ /* E.Inoue */ uint_t chk_done; /* end */ cc = ddi_get_soft_state(cc_state,unit); mutex_enter(&cc->mutex); /* start MUTEX */ /* check K2917 register */ if ((cc->k->csr & CC_LAM) != 0) cc->interrupt |= CC_INT_LAM; if ((cc->k->csr & CC_DONE) != 0) cc->interrupt |= CC_INT_DONE; if ((cc->k->empc & CC_INT_ENABLE) == 0) cc->interrupt |= CC_INT_EMPTY; if ((cc->k->aboc & CC_INT_ENABLE) == 0) cc->interrupt |= CC_INT_ABORT; /* */ cmn_err(CE_NOTE," CC_intr: cc->interrupt = 0x%x", cc->interrupt); /* */ : /* kladd(cc, name) E.Inoue */ kladd(int unit, char *name) /* struct cc_device *cc; char *name; */ { /* E.Inoue */ struct cc_device *cc; /* end */ /* register struct K_REG *k = cc->k; */ register int i, code; /* E.Inoue */ cc = ddi_get_soft_state(cc_state,unit); /* end */ cc->status = 0; /* same name check */ cmn_err(CE_NOTE," kladd: step1: cc->ptr_dir = 0x%x", cc->ptr_dir); for (i = 0; i < cc->ptr_dir; i++) if (strcmp(name, cc->klist1[i].name) == 0) return CC_STA_KLIST_SAMENAME; cmn_err(CE_NOTE," kladd: step1: name = %s", name); cmn_err(CE_NOTE," kladd: step1: cc->klist1[%d].name = %s", i, cc->klist1[i]. name); if (cc->ptr_dir >= CC_KLIST_MAX_DIR) return CC_STA_KLIST_MEMORYFULL; /* add */ cc->k->cma = cc->ptr_cma; cmn_err(CE_NOTE," kladd: step2: cc->k->cma = 0x%x, %d(dec)", cc->k->cma, cc- >k->cma); cc->klist1[cc->ptr_dir].cma = cc->ptr_cma; cc->klist1[cc->ptr_dir].wc = 0; cmn_err(CE_NOTE," kladd: step3: cc->klist1[%d].cma = 0x%x, %d(dec)", cc->ptr _dir, cc->klist1[cc->ptr_dir].cma, cc->klist1[cc->ptr_dir].cma); cmn_err(CE_NOTE," kladd: step3: cc->klist1[%d].wc = 0x%x", cc->ptr_dir, cc-> klist1[cc->ptr_dir].wc); cc->ptr_list = cc->list_area; while (cc->status == 0) { if (cc->ptr_cma >= 0xFFFF - 4) return CC_STA_KLIST_MEMORYFULL; code = 0x00FF & cc->ptr_list[0] + 0x60; cmn_err(CE_NOTE," kladd: : in while, code = 0x%x", code); instruction_call = instruction[code]; /* cc->status = (*instruction_call)(cc); next_instruction(cc); */ cc->status = (*instruction_call)(unit); next_instruction(unit); } strcpy(cc->klist1[cc->ptr_dir].name, name); cc->ptr_dir++; return 0; } : /* E.Inoue klexe(cc, name) struct cc_device *cc; char *name; end */ /* E.Inoue */ klexe(int unit, char *name) /* End */ { /* E.Inoue */ struct cc_device *cc; /* End */ /* register dev_t dev = cc->dev; E.Inoue */ register dev_t dev; /* register struct uio *uio = cc->uio; E.Inoue */ register struct uio *uio; /* register int *retlen = (int *)cc->ptr_udata; E.Inoue */ register int *retlen; register int i, status; cmn_err(CE_NOTE," klexe: enter"); /* E.Inoue */ cc = ddi_get_soft_state(cc_state,unit); dev = cc->dev; uio = cc->uio; retlen = (int *)cc->ptr_udata; /* end */ cc->klist = CC_KLIST_YES; /* same name check */ for (i = 0; i < cc->ptr_dir; i++){ if (strcmp(name, cc->klist1[i].name) == 0){ cmn_err(CE_NOTE," klexe: step1: name = %s", name); cmn_err(CE_NOTE," klexe: step1: cc->klist1[%d].name = %s", i, cc->klist1[i]. name); break; } } if (i >= cc->ptr_dir) return CC_STA_KLIST_NONAME; cmn_err(CE_NOTE," klexe: step2: cc->ptr_dir = 0x%x", cc->ptr_dir); cc->now_cma = cc->klist1[i].cma; cc->now_wc = cc->klist1[i].wc; cmn_err(CE_NOTE," klexe: step3: cc->now_cma = 0x%x, %d(dec)", cc->now_cma, c c->now_cma); cmn_err(CE_NOTE," klexe: step3: cc->now_wc = 0x%x", cc->now_wc); /* first 2words for retlen */ uio->uio_iov->iov_base = (caddr_t)(cc->ptr_udata + 2); uio->uio_iov->iov_len = cc->klist1[i].wc * 2; uio->uio_iovcnt = 1; uio->uio_offset = 0; cmn_err(CE_NOTE," klexe: step4: uio->uio_iov->iov_base = 0x%x", uio->uio_iov ->iov_base); cmn_err(CE_NOTE," klexe: step4: uio->uio_iov->iov_len = 0x%x", uio->uio_iov- >iov_len); /* Kinetic 2917 list is now READ ONLY. */ cmn_err(CE_NOTE," klexe: before physio()"); /* E.Inoue */ status = physio(cc_strategy, (struct buf *)NULL, dev, B_READ, cc_minphys, uio); cmn_err(CE_NOTE," klexe: after physio()"); /* end */ /* *retlen = cc->retlen; */ cmn_err(CE_NOTE," klexe: after physio() retlen = 0x%x", retlen); cmn_err(CE_NOTE," klexe: after physio() &cc->retlen = 0x%x, cc->retlen = 0x% x", &cc->retlen, cc->retlen); return status; } : static int cc_strategy(struct buf *bp) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; /* register struct K_REG *k = cc->k; */ register u_long dma_addr; : } /* Kinetic list-processing */ else { cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing"); cc->k->cma = cc->now_cma; /* Initialize memory pointer*/ cc->k->maclo = dma_addr & 0xFFFF; /* Set DMA base address */ cc->k->machi = dma_addr >> 16; cc->k->amr = CC_AMR_INIT; /* Set VME AM code */ cc->k->mtc = cc->now_wc; cc->k->cser = CC_DMA_RESET; /* DMA reset */ cc->k->docr = CC_DOCR_INIT | CC_DMA_READ; cc->k->sccr = CC_DMA_START; cc->k->csr |= CC_DMA; /* DMA mode */ cc->k->csr &= ~CC_WRITE; } /* start DMA */ cc->executing_dma_flag = 1; cc->timeout_id = timeout(cc_timeout, (caddr_t)&unit, CC_TIMEOUT_DMA * hz); cc->k->csr |= CC_GO; /* Go! */ cc->k->donc = CC_INT_AUTO_CLEAR | CC_INT_ENABLE | intrpri; /* wait at physio() */ cmn_err(CE_NOTE," cc_strategy: exit"); return 0; } : onl50t[40]% onl50t[49]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[50]% onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# onl50t[59]% cam6 list length = 10 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[60]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x60 NOTICE: klexe: enter NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xeffeb498 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: Kinetic list-processing NOTICE: CC_intr: cc->interrupt = 0xc NOTICE: cc_strategy: exit NOTICE: klexe: after physio() NOTICE: klexe: after physio() retlen = 0xeffeb494 NOTICE: klexe: after physio() &cc->retlen = 0x6114005c, cc->retlen = 0x0 klexe()ルーチンの中で、リターンする直前に実行している文 "*retlen = cc->retlen;" をはずして cam6プログラムを実行すると panic を 起こす症状は無くなった。 しかし、読み出したデータはユーザバッファに届い ていない。 この文でやろうとしていることは何か。 (4-4). klexe()ルーチンのチェック onl50t[43]% cam6 list length = 10 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[44]% Aug 17 14:25:49 onl50t unix: VME level 4 vector 0xff sparc ipl 7 Aug 17 14:25:49 onl50t unix: cc0 is /pci@1f,0/vme@5/cc@2d,ff00 Aug 17 14:25:57 onl50t unix: pem: no event handler Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step1: cc->ptr_dir = 0x0 Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step1: name = test1 Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step1: cc->klist1[0].name = Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) Aug 17 14:28:05 onl50t unix: NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 Aug 17 14:28:05 onl50t unix: NOTICE: kladd: : in while, code = 0x61 Aug 17 14:28:05 onl50t last message repeated 3 times Aug 17 14:28:05 onl50t unix: NOTICE: kladd: : in while, code = 0x60 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: enter Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step0: retlen = 0xeffeb494 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step0: cc->ptr_udata = 0xeffeb494 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step1: name = test1 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step1: cc->klist1[0].name = test1 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step2: cc->ptr_dir = 0x1 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step3: cc->now_wc = 0x4 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xeffeb498 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: before physio() Aug 17 14:28:05 onl50t unix: NOTICE: cc_strategy: enter Aug 17 14:28:05 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing Aug 17 14:28:05 onl50t unix: NOTICE: CC_intr: cc->interrupt = 0xc Aug 17 14:28:05 onl50t unix: NOTICE: cc_strategy: exit Aug 17 14:28:05 onl50t unix: NOTICE: klexe: after physio() Aug 17 14:28:05 onl50t unix: NOTICE: klexe: after physio() retlen = 0xeffeb494 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: after physio() &cc->retlen = 0x60e1e05c, cc->retlen = 0x0 Aug 17 14:28:05 onl50t unix: NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 "*retlen = cc->retlen;"文でやろうとしていることは、ユーザバッファ域の 読み出したデータの先頭部に読み出したデータのサイズを書き込もうとして いるようだ。 しかし、カーネル域からユーザ域にこのようなアクセスはできな い。 システムがクラッシュしてもおかしくない。 この文の意図することを やるには、copyout()関数でアクセスすることになる。 この部分の変更は後で やることにして、ここでは読み出したデータがユーザバッファ域に届いていない 点について調べることにする。 (5). klexe()ルーチンの実行によるデータ読み出しについて調べる (5-1). uio->uio_segflg について klexe()ルーチン中で、uio->uio_segflg の値がセットされていない。 この値 はいくらに設定されているかチェック。 onl50t[81]% pwd /usr/include/sys onl50t[82]% grep UIO_USERSPACE * uio.h:typedef enum uio_seg { UIO_USERSPACE, UIO_SYSSPACE, UIO_USERISPACE } uio_seg_t; onl50t[83]% vi uio.h : /* * Segment flag values. */ typedef enum uio_seg { UIO_USERSPACE, UIO_SYSSPACE, UIO_USERISPACE } uio_seg_t; typedef struct uio { iovec_t *uio_iov; /* pointer to array of iovecs */ int uio_iovcnt; /* number of iovecs */ lloff_t _uio_offset; /* file offset */ uio_seg_t uio_segflg; /* address space (kernel or user) */ short uio_fmode; /* file mode flags */ lldaddr_t _uio_limit; /* u-limit (maximum "block" offset) */ int uio_resid; /* residual count */ } uio_t; : onl50t[84]% デフォルトでは uio.hファイル中で UIO_USERSPACE = 0 に定義されている。 確認する。 onl50t[165]% cam6 list length = 5 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[166]% Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step1: cc->ptr_dir = 0x0 Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step1: name = test1 Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step1: cc->klist1[0].name = test1 Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) Aug 21 09:22:42 onl50t unix: NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 Aug 21 09:22:42 onl50t unix: NOTICE: kladd: : in while, code = 0x7b Aug 21 09:22:42 onl50t unix: NOTICE: kladd: : in while, code = 0x60 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: enter Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step0: retlen = 0xeffeb494 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step0: cc->ptr_udata = 0xeffeb494 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step1: name = test1 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step1: cc->klist1[0].name = test1 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step2: cc->ptr_dir = 0x1 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step3: cc->now_wc = 0x4 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xeffeb498 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: step4: uio->uio_segflg = 0x0 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: before physio() Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: enter Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xf0f Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x717 Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: Kinetic list-processing: cc->now_wc = 0x4 Aug 21 09:22:42 onl50t unix: NOTICE: CC_intr: cc->interrupt = 0xe Aug 21 09:22:42 onl50t unix: NOTICE: cc_strategy: exit Aug 21 09:22:42 onl50t unix: NOTICE: klexe: after physio() Aug 21 09:22:42 onl50t unix: NOTICE: klexe: after physio() retlen = 0xeffeb494 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: after physio() &cc->retlen = 0x60e1e05c, cc->retlen = 0x0 Aug 21 09:22:42 onl50t unix: NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x65, 0x73, 0x74, 0x31, 0x0, 0x4, 0x2b, 0x620 実行結果からわかるように、klexe()ルーチンから physio()ルーチンをコール する時点では、uio->uio_segflg = 0x0 となっている。 この設定でよい。 (5-2). dma_addr について klexe()ルーチンから physio()ルーチンをコールして DMAでリスト処理を実行 している。 cc_strategy()ルーチン中での dma_addr をチェック。 : dma_addr = cc->dma_cookie.dmac_address; /* count = cc->dma_cookie.dmac_size; */ cmn_err(CE_NOTE," cc_strategy: dma_addr = 0x%x", dma_addr); : onl50t[102]% cam6 list length = 5 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[103]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xeffeb494 NOTICE: klexe: step0: cc->ptr_udata = 0xeffeb494 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xeffeb498 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xeffeb498 8 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x1498 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffc NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->now_wc = 0x4 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xeffeb498 8 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio() NOTICE: klexe: out: 0x1a 1611916144 0 40496 0 8 NOTICE: klexe: after physio() retlen = 0xeffeb494 NOTICE: klexe: after physio() &cc->retlen = 0x610b205c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 dma_addr = 0x1498 となっている。 cmn_err(CE_NOTE," cc_intr: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); 実行結果から uio の情報を見ると 8バイトのデータ転送が行われているように みえる。 NOTICE: klexe: in: 0xeffeb498 8 1 40504 0 0 NOTICE: klexe: out: 0x1a 1611916144 0 40496 0 8 40504 - 40496 = 8 (5-3). 参考のために KEKリスト処理で DMA を実行してみる onl50t[94]% camtest5c2 CamReaLIST : OK lenlist = 76 list = 20b 0 10c 10d ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 48 iosb.s_reg = f iosb.devinfo = 800 080 contents of buffer : ff00 5 ff00 5 ff00 5 ff00 0 ff00 5 ff00 5 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[95]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xb NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xc NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xd NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xf NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x2b NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x14 NOTICE: in: 0xefffa2d0 4 1 20176 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2d0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2d0 4 1 20176 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 30 0 20172 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x16 NOTICE: in: 0xefffa2d4 4 1 20172 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2d4 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2d4 4 1 20172 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 268627092 0 20168 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x18 NOTICE: in: 0xefffa2d8 4 1 20168 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2d8 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2d8 4 1 20168 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 808655052 0 20164 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1a NOTICE: in: 0xefffa2dc 4 1 20164 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2dc NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2dc 4 1 20164 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: -2130640640 0 20160 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1c NOTICE: in: 0xefffa2e0 4 1 20160 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2e0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2e0 4 1 20160 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 808655584 0 20156 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1e NOTICE: in: 0xefffa2e4 4 1 20156 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2e4 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2e4 4 1 20156 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 0 0 20152 0 4 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x13 NOTICE: in: 0xefffa2e8 20 1 20152 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2e8 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2e8 20 1 20152 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: 0 0 20132 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x15 NOTICE: in: 0xefffa2fc 20 1 20132 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x2fc NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa2fc 20 1 20132 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: 1 0 20112 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x17 NOTICE: in: 0xefffa310 20 1 20112 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x310 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa310 20 1 20112 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: 89389 0 20092 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x19 NOTICE: in: 0xefffa324 20 1 20092 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x324 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa324 20 1 20092 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: 196608 0 20072 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1b NOTICE: in: 0xefffa338 20 1 20072 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x338 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa338 20 1 20072 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: -1 0 20052 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1d NOTICE: in: 0xefffa34c 20 1 20052 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: dma_addr = 0x34c NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefffa34c 20 1 20052 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x1, 0x2, 0x3, 0x4, 0 x5, 0x6, 0x7, 0x8, 0x9 NOTICE: cc_strategy: exit NOTICE: out: 808655480 0 20032 0 20 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x0 (5-4). strategy()ルーチンの動作チェック cam2 を使った通常の DMA実行時と、cam6 を使った kinetic リスト処理を 使った DMA実行時の、strategy()ルーチンの動作を調べる。 onl50t[165]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >1 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >4 Input n a f >3 1 0 buf's address = 0x407228 MODE=1 N= 3 A= 1 F= 0 len= 4 lenr= 4 error= 0(Hex) Data( 1)= 5 0x 5(Hex) Data( 2)= 5 0x 5(Hex) Data( 3)= 5 0x 5(Hex) Data( 4)= 5 0x 5(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: Nonstandard floating-point mode enabled See the Numerical Computation Guide, ieee_sun(3M) onl50t[166]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x407228 NOTICE: cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x407228 NOTICE: in: 0x407228 8 1 32 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: dma_addr = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: mode | (cc->cur_crate << 8) = 0x2a NOTICE: cc_strategy: Not Kinetic list-processing: naf = 0x620 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffc NOTICE: cc_strategy: Not Kinetic list-processing: CC_HALT = 0x80 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0x407228 8 1 32 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 1624390088 0 24 0 8 onl50t[167]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[168]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 8 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffc NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 8 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40496 0 8 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 cc_strategy()ルーチンの中で cc->naf の内容をチェックしている。 cam2プロ グラム実行時には、正しい値 0x620 が設定されているが、cam6プログラム 実行時には、正しくない値 0x3c11 が設定されている。 NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: cc->naf = 0x3c11 この値を元にしてflags を決めているので cam6プログラム実行時には正しく ない flags が設定されてしまう。 flags に DDI_DMA_RDWR を設定して実行してみる。 (5-5). cc.cファイルの修正および実行 onl50t[183]% vi cc.c : static int cc_strategy(struct buf *bp) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : /* By E.Inoue */ if(cc->klist == CC_KLIST_NO){ /* check DMA mode and set flags */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ flags = DDI_DMA_READ; break; case 0x0010: /* CAMAC write */ flags = DDI_DMA_WRITE; break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } } else{ flags = DDI_DMA_RDWR; } : onl50t[184]% onl50t[220]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 0 0 data[ 4]=0x 5 5 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 5 5 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[221]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x5 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xa NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 10 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffb NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x5 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 10 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40494 0 10 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. データはユーザバッファに届いた。 (5-6). IGQ による read を3回繰り返して実行 onl50t[199]% vi cam6.asm : IGQ (0,SW,1),#2 IGQ (0,SW,0),#3 IGQ (0,SW,1),#1 : onl50t[200]% onl50t[256]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 5 5 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[257]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x0, 0x0, 0x0, 0 x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 16ビット IGQ による read 動作ではデータは期待通りに返っている。 (5-7). QS による read を3回繰り返して実行 onl50t[200]% vi cam6.asm : QS (0,SW,1),#2 QS (0,SW,0),#3 QS (0,SW,1),#1 : onl50t[201]% onl50t[271]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 5 5 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[272]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x23 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x23 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x0, 0x0, 0x0, 0 x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30233a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 (5-8). AS による read を3回繰り返して実行 onl50t[211]% vi cam6.asm : AS (0,SW,1),#1 AS (0,SW,0),#1 AS (0,SW,1),#1 : onl50t[212]% onl50t[275]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 0 0 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 5 5 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[276]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x3 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x6 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 6 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 6 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x0, 0x5, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40498 0 6 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x0, 0x 5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 16ビットの DMA readの実行は、IGQ、QS、AS のすべてにおいて正しく実行 できた。 (6). 24ビットの DMA readの実行 (6-1). IGQ.l による read を 2 回繰り返して実行 onl50t[224]% vi cam6.asm : IGQ.l (0,SW,1),#2 : onl50t[225]% onl50t[277]% cam6 data buf's address = 0xefff52b4 list length = 5 <--- ここでフリーズした。 CPUボードの ADD REC, RUN, M1 の LED が点灯している。 ここで、CPUボードの リセットボタンを押し たら以降の処理を続行した。 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[278]% 1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 <--- フリーズ NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 8 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffc NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 8 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624390088 0 40496 0 8 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x6115605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302d5a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 IGQ.lで readを実行すると cam6プログラム起動直後にフリーズする。 ここで、 CPUボードのリセットボタンを押すと以降の処理が続行される。 ユーザ域に 読み出されたデータは正しい値を示している。 (6-2). cam2 プログラムと cam6プログラムを実行比較する (6-2-1). 16ビットデータの転送 onl50t[49]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >1 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >2 Input n a f >3 1 0 buf's address = 0x407228 MODE=1 N= 3 A= 1 F= 0 len= 2 lenr= 2 error= 0(Hex) Data( 1)= 5 0x 5(Hex) Data( 2)= 5 0x 5(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: Nonstandard floating-point mode enabled See the Numerical Computation Guide, ieee_sun(3M) onl50t[50]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x407228 NOTICE: cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x407228 NOTICE: in: 0x407228 4 1 28 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: dma_addr = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: mode | (cc->cur_crate << 8) = 0x2a NOTICE: cc_strategy: Not Kinetic list-processing: naf = 0x620 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffe NOTICE: cc_strategy: Not Kinetic list-processing: CC_HALT = 0x80 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0x2 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0x407228 4 1 28 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 1624104328 0 24 0 4 NOTICE: camac_b: step2: cc->retlen = 0x2 NOTICE: camac_b: cc->retlen = 0x2 onl50t[51]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[52]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x2 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x4 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 4 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x2 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 4 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40500 0 4 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60dbe05c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3029ba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 (6-2-2). 24ビットデータの転送 onl50t[41]% cam2 Input transfer mode (1:word 2:long word) >2 Input loop >1 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >2 Input n a f >3 1 0 MODE=1 N= 3 A= 1 F= 0 len= 2 lenr= 2 error= 0(Hex) Data( 1)= -16777211 0x FF000005(Hex) Data( 2)= -16777211 0x FF000005(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: Nonstandard floating-point mode enabled See the Numerical Computation Guide, ieee_sun(3M) onl50t[42]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30259a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x36920 NOTICE: cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x36920 NOTICE: in: 0x36920 8 1 32 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: dma_addr = 0x920 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: mode | (cc->cur_crate << 8) = 0x28 NOTICE: cc_strategy: Not Kinetic list-processing: naf = 0x620 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffe NOTICE: cc_strategy: Not Kinetic list-processing: CC_HALT = 0x80 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0x920 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0x36920 8 1 32 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: out: 1624104328 0 24 0 8 NOTICE: camac_b: step1: cc->retlen = 0x2 NOTICE: camac_b: cc->retlen = 0x2 onl50t[43]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[44]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 8 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffc NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 8 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40496 0 8 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60dbe05c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 cc->k->cmr への設定値に問題がありそうだ。 16ビット転送時 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe 24ビット転送時 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffc cam2 実行時には、16ビット転送および24ビット転送に関係なく cc->k->cmr の 3番目のレジスタには 0xfffffffe がセットされている。 しかし、cam6 実行時 には、16ビット転送および24ビット転送でセットされている値が異なっている。 ここにセットすべき値は、転送する camacデータワード数の2の補数である。 上記の実行では 2camacデータワードを転送しているので、0xfffe の値が正しい ことになる。 (6-2-2). cc.cファイルの修正および実行 onl50t[48]% vi cc.c : kl_igq24(int unit) { struct cc_device *cc; : cc->k->cmr = CC_AD | CC_BLOCK | CC_BIT24 | CC_QIGNO | (cc->cur_crate << 8); cc->k->cmr = cc->ptr_list[1]; /* cc->k->cmr = - cc->ptr_list[2] * 2; */ cc->k->cmr = - cc->ptr_list[2]; cc->k->cmr = 0xFFFF; cc->klist1[cc->ptr_dir].wc += cc->ptr_list[2] * 2; cc->ptr_cma += 4; : onl50t[49]% onl50t[61]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[62]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x4 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x8 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 8 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x4 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 8 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40496 0 8 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビットの IGQ.l の実行は、フリーズすることなく正しく実行できた。 cam6.asm を修正してみる。 onl50t[52]% vi cam6.asm : IGQ.l (0,SW,1),#2 IGQ.l (0,SW,0),#1 IGQ.l (0,SW,1),#1 : onl50t[53]% onl50t[62]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0xff00 65280 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ff00 65280 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x ff00 65280 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 5 5 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[63]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x8 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x10 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 16 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 16 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40488 0 16 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビットの IGQ.l の read 実行は、フリーズすることなく正しく実行 できた。 (6-3). QS.l による read を実行 : QS.l (0,SW,1),#1 QS.l (0,SW,0),#1 QS.l (0,SW,1),#1 : onl50t[63]% cam6 <--- ここでフリーズした。 CPUボードの ADD REC, RUN の LED が点灯している。 ここで、CPUボードの リセットボタンを押し たら以降の処理を続行した。 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ff00 65280 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[76]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 <--- フリーズ NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301bda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 QS.l で readを実行すると cam6プログラム起動直後にフリーズする。 ここで、 CPUボードのリセットボタンを押すと以降の処理が続行される。 (6-3-1). cc.cファイルの修正および実行 onl50t[58]% : kl_qs24(int unit) { struct cc_device *cc; : /* E.Inoue cc->k->cmr = - cc->ptr_list[2] * 2; */ cc->k->cmr = - cc->ptr_list[2]; : onl50t[59]% onl50t[77]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ff00 65280 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[78]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xc NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビットの QS.l の read 実行は、フリーズすることなく正しく実行 できた。 (6-4). AS.l による read を実行 : AS.l (0,SW,1),#1 AS.l (0,SW,0),#1 AS.l (0,SW,1),#1 : onl50t[78]% cam6 <--- ここでフリーズした。 CPUボードの ADD REC, RUN, M1, M2 の LED が点灯している。 ここで、CPUボードの リセットボタンを 押したら以降の処理を続行した。 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 0 0 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ff00 65280 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[79]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 <--- フリーズ NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30285a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 AS.lで readを実行すると cam6プログラム起動直後にフリーズする。 ここで、 CPUボードのリセットボタンを押すと以降の処理が続行される。 (6-4-1). cc.cファイルの修正および実行 onl50t[66]% vi cc.c : kl_as24(int unit) { struct cc_device *cc; : /* E.Inoue cc->k->cmr = - cc->ptr_list[2] * 2; */ cc->k->cmr = - cc->ptr_list[2]; : onl50t[67]% onl50t[81]% cam6 data buf's address = 0xefff52b4 list length = 11 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ff00 65280 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[82]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xc NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x0, 0xff00, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30359a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビットの AS.l の read 実行は、フリーズすることなく正しく実行 できた。 これで、16ビット、24ビットとも IGQ、QS、AS によるブロック転送 read での データ読み出しは正しくできることを確認した。 続いて、シングルアクション read/write のデバッグを行う。 (7). シングルアクション read/write のデバッグ (7-1). 16ビット camac read を実行 : READ (0,SW,1) : onl50t[85]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 0 0 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[86]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. シングルアクションでの 16ビット camac read で、データは正しく読み 出せた。 retlen は現在コメントアウトしてあるので値はセットされていない。 (7-2). 24ビット camac read を実行 : READ.l (0,SW,1) : onl50t[86]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[87]% NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x60 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: klexe: enter NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x2 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x4 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 4 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x39 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x2 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 4 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40500 0 4 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3030da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. シングルアクションでの 24ビット camac read で、データは正しく読み 出せた。 retlen は現在コメントアウトしてあるので値はセットされていない。 (7-3). 16ビット camac write を実行 : WRITE #6,(16,SW,0) : onl50t[172]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[173]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x0 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 0 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40504 0 0 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 65, 0x73, 0x74, 0x31, 0x0, 0x1, 0x3, 0x620 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. シングルアクションでの 16ビット camac write を実行しても、camac データウェイ・オペレーションが実行されない。 cc->klist1[0].wc = 0x0 に なっている。 参考のために 16ビット camac read を実行してみる。 : READ (0,SW,1) : onl50t[175]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 0 0 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[176]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 16ビット camac read では kladd()ルーチンが kl_read16()をコールされた時 kl_read16()の中で "cc->klist1[cc->ptr_dir].wc += 1;" が実行されている。 しかし、kl_write16()の中にはこの文が入っていない。 追加する。 onl50t[95]% vi cc.c : kl_write16(int unit) { struct cc_device *cc; : cc->klist1[cc->ptr_dir].wc += 1; : onl50t[96]% onl50t[100]% vi cam6.asm : WRITE #6,(16,SW,0) : onl50t[101]% onl50t[179]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[180]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302afa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. シングルアクションでの 16ビット camac write で、データは正しく 書き込めた。 camac スイッチ・レジスタの LED は書き込まれたデータ値 6 を表示している。 kineticリスト処理でのシングルアクション write では write データはユーザバッファを通さないで、インラインで cmrレジスタに 書き込む。 : NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 : 従って、ユーザバッファの中には write データは存在しない。 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 (7-4). 24ビット camac write を実行 : WRITE.l #7,(16,SW,0) : onl50t[180]% cam6 data buf's address = 0xefff52b4 list length = 6 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[181]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x0 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 0 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1624104328 0 40504 0 0 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60fb605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 65, 0x73, 0x74, 0x31, 0x0, 0x1, 0x63, 0x610 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302a7a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. これも 16ビット write と同様に mtcレジスタにワードカウント値が 正しく設定されていないために DMA が実行されないという症状になっている。 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 kl_write24()ルーチンの中で cc->klist1[0].wc の値を設定する。 onl50t[102]% vi cc.c : kl_write24(int unit) { struct cc_device *cc; : cc->klist1[cc->ptr_dir].wc += 1; : onl50t[103]% onl50t[37]% vi cam6.asm : WRITE.l #6636321,(16,SW,0) : onl50t[38]% onl50t[49]% cam6 data buf's address = 0xefff52b4 list length = 6 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[50]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x61 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x4321 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x65 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1611916784 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60dc605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30273a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. シングルアクションでの 24ビット camac write で、データは正しく 書き込めた。 camac スイッチ・レジスタの LED は書き込まれたデータ値 0x654321 を表示している。 (8). NDT のデバッグ (8-1). スイッチ・レジスタにクリアLAMコマンドを実行 onl50t[42]% vi cam6.asm : NDT (10,SW,0) : onl50t[43]% onl50t[50]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[51]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x0 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 0 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1611916784 0 40504 0 0 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60dc605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 65, 0x73, 0x74, 0x31, 0x0, 0x1, 0x61, 0x610 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. NDTアクションでスイッチ・レジスタにクリアLAMのコマンドを実行しても camac データウェイ・オペレーションが実行されない。 kladd が終了した時点 で "cc->klist1[0].wc = 0x0" になっている。 kl_ndt()ルーチンに "cc->klist1[cc->ptr_dir].wc += 1;"文を追加する。 onl50t[45]% vi cc.c : kl_ndt(int unit) { struct cc_device *cc; : cc->klist1[cc->ptr_dir].wc += 1; : onl50t[46]% onl50t[51]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[52]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x60a NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x65 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: out: 0x1b 1611916784 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60ea605c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. cmrレジスタには正しい値がセットされて camacデータウェイ・ オペレーションは正常に実行された。 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x60a NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 camacデータウェイ・ディスプレー・モジュールの LED も正しい値を示して いる。 これで、kineticリスト処理による camacアクセスは全て正常に実行できた。 続いて、klexe()ルーチン中での retlen の設定の部分を調べる。 (9). klexe()ルーチンの retlenのセットについて ここまでは klexe()ルーチンの中の retlenのセットの部分はコメントアウト して実行してきた。 現在、camacからのデータ転送は問題なく実行できること を確認している。 ここで、retlenのセットについて調べ直すことにする。 (9-1). 16ビット DMA を実行した時 klexe()ルーチンの中の retlen について見直す。 : klexe(int unit, char *name) { struct cc_device *cc; : status = physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* *retlen = cc->retlen; */ : retlen の値として期待されているのは、cc_strategyルーチンの中で読み 出された16ビットのワード数である。 (9-1-1). IGQ の実行 IGQ で6 camacワード読み出した時の状況について見てみる。 : IGQ (0,SW,1),#6 : onl50t[66]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 5 5 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[67]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x6 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x6 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x6 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x6 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x6 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x6 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffa NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f2205c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1611916504 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x60f2205c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 cc_strategy()による DMAが完了し、klexe()ルーチンにリターンした時、 cc->retlen = 0x0 となっている。 これは、DMA開始直前にcc_strategy() ルーチンの中でゼロをセットしているためである。 つまり、physio()コール からリターンした時には常にcc->retlen = 0x0 となっている。 参考のために cam2プログラムを実行してみる。 << 16ビット転送 >> onl50t[71]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >1 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >6 Input n a f >3 1 0 buf's address = 0x407228 MODE=1 N= 3 A= 1 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 5 0x 5(Hex) Data( 2)= 5 0x 5(Hex) Data( 3)= 5 0x 5(Hex) Data( 4)= 5 0x 5(Hex) Data( 5)= 5 0x 5(Hex) Data( 6)= 5 0x 5(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: Nonstandard floating-point mode enabled See the Numerical Computation Guide, ieee_sun(3M) onl50t[72]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022fa00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x407228 NOTICE: cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x407228 NOTICE: in: 0x407228 12 1 36 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: dma_addr = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: mode | (cc->cur_crate << 8) = 0x2a NOTICE: cc_strategy: Not Kinetic list-processing: naf = 0x620 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffa NOTICE: cc_strategy: Not Kinetic list-processing: CC_HALT = 0x80 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0x1228 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0x407228 12 1 36 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: camac_b: after physio() &cc->retlen = 0x60f2205c, cc->retlen = 0x0 NOTICE: out: 1611916504 0 24 0 12 NOTICE: camac_b: step2: cc->retlen = 0x6 NOTICE: camac_b: cc->retlen = 0x6 << 24ビット転送 >> onl50t[36]% cam2 Input transfer mode (1:word 2:long word) >2 Input loop >1 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >6 Input n a f >3 1 0 MODE=1 N= 3 A= 1 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= -16777211 0x FF000005(Hex) Data( 2)= -16777211 0x FF000005(Hex) Data( 3)= -16777211 0x FF000005(Hex) Data( 4)= -16777211 0x FF000005(Hex) Data( 5)= -16777211 0x FF000005(Hex) Data( 6)= -16777211 0x FF000005(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: Nonstandard floating-point mode enabled See the Numerical Computation Guide, ieee_sun(3M) onl50t[37]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T. ) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c9a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x5ef6b0 NOTICE: cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x36920 NOTICE: cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x36920 NOTICE: in: 0x36920 24 1 48 0 0 NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x620 NOTICE: cc_strategy: dma_addr = 0x920 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: mode | (cc->cur_crate << 8) = 0x28 NOTICE: cc_strategy: Not Kinetic list-processing: naf = 0x620 NOTICE: cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFFFF) = 0xfffff ffa NOTICE: cc_strategy: Not Kinetic list-processing: CC_HALT = 0x80 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0x920 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0xc NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Not Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xc NOTICE: cc_intr: 0x36920 24 1 48 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: cc_strategy: exit NOTICE: camac_b: after physio() &cc->retlen = 0x60eaa05c, cc->retlen = 0x0 NOTICE: out: 1624111560 0 24 0 24 NOTICE: camac_b: step1: cc->retlen = 0x6 NOTICE: camac_b: cc->retlen = 0x6 この場合も cam6の時と同様にphysio()からリターンした直後は cc->retlen の 値はゼロになっている。 (9-1-1A). cc->retlen の値の設定方針 << cam2、すなわち camac_b()ルーチンでのやり方を調べる >> onl50t[38]% vi cc.c : /* Q-STOP mode or no error */ if((mode & CC_QSCAN) == 0 || (cc->k->csr & CC_ERR) == 0) { if ((mode & CC_BIT16) == 0) { cc->retlen = cc->len - cc->k->mtc / 2; /* retlen=number of transfer */ if ((mode & CC_QSCAN) == 0 && (cc->k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen = cc->retlen - 2; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen * 2; /* ptr(2bytes),retlen(4bytes) */ cc->len_udata += cc->retlen * 2; } else { cc->retlen = cc->len - cc->k->mtc; if ((mode & CC_QSCAN) == 0 && (cc->k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen--; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen; /* ptr(2bytes),retlen(2bytes) */ cc->len_udata += cc->retlen; } } : onl50t[39]% CC_QSCAN 以外の実行時、つまりCC_Q_STOP、CC_IGNORE_Q、CC_Q_REPEATの実行時 にだけ cc->retlen を設定している。 cc->retlen には、転送した camacワード 数を入れるようにしている。 例えば、 o 16ビットcamacデータを6回転送した場合、cc->retlen には6をセット。 o 24ビットcamacデータを6回転送した場合、cc->retlen には6をセット。 のようにしている。 << cam6、すなわち klexe()ルーチンでのやり方 >> kineticリスト処理では、上記の camac_b()ルーチンのやり方は適用できない。 というのは、kineticリスト処理では一時に実行されるリストの中に 16ビット および 24ビットのデータ転送が混在する可能性があるからである。 したがって klexe()ルーチンでの cc->retlen の値の設定のやり方は、16ビット、24ビット のデータ転送に関係なく DMA で転送された16ビット長データの総ワード数を 入れることにする。 DMA実行時にエラーが起きた場合には -1 を入れることに する。 if ( DMA実行時にエラーは無かった){ retlen = cc->now_wc - cc->k->mtc; } else{ retlen = -1; } (9-1-1B). cc.cファイルの修正および実行 onl50t[48]% vi cc.c : klexe(int unit, char *name) { struct cc_device *cc; : /* *retlen = cc->retlen; */ /* E.Inoue */ if( cc->k->csr & CC_ERR ) == 0){ cc->retlen = cc->now_wc - cc->k->mtc; } else{ cc->retlen = -1; } copyout((caddr_t)&cc->retlen, (caddr_t)cc->ptr_udata, sizeof(cc->retlen)); /* end */ : onl50t[49]% onl50t[58]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 6 6 data[ 1]=0x 6 6 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 5 5 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[59]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x6 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x6 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x6 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x6 NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0x6 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x6 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x6 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xc NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 12 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffa NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 12 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 40492 0 12 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x6 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x6 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302fda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. ユーザ域のデータバッファの先頭4バイト部に転送ワード数が正しく 返されている。 転送データ数を増やして実行してみる。 onl50t[60]% vi cam6.asm : IGQ (0,SW,1),#32000 : onl50t[61]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[62]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x7d00 32000 data[ 1]=0x 7d00 32000 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[63]% NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x6 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7d00 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xfa00 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 64000 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x8300 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7d00 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 64000 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 0 0 40504 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x7d00 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7d00 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-1-2). QS の実行 スイッチレジスタ・モジュールを QS で 7回読んでみる。 onl50t[64]% vi cam6.asm : QS (0,SW,1),#7 : onl50t[65]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[66]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 7 7 data[ 1]=0x 7 7 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 0 0 data[ 5]=0x 5 5 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 5 5 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 5 5 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 5 5 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[67]% NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7 NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0x7 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xe NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 14 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x23 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfff9 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 14 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x5, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 40490 0 14 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x7 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302c1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正しく読めた。 読み出し回数を 32000回にして実行してみる。 onl50t[67]% vi cam6.asm : QS (0,SW,1),#32000 : onl50t[68]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[69]% onl50t[69]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x7d00 32000 data[ 1]=0x 7d00 32000 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[70]% NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7d00 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xfa00 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 64000 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x23 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x8300 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7d00 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 64000 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 0 0 40504 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x7d00 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7d00 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に読めた。 (9-1-3). AS の実行 スイッチレジスタ・モジュールを AS で 15回読み出してみる。 onl50t[77]% vi cam6.asm : AS (0,SW,1),#15 : onl50t[78]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[79]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x f 15 data[ 1]=0x f 15 usp[ 2]=0x 5 5 usp[ 3]=0xffff 65535 data[ 2]=0x 5 5 usp[ 4]=0xffff 65535 usp[ 5]=0xffff 65535 data[ 3]=0x ffff 65535 usp[ 6]=0xffff 65535 usp[ 7]=0xffff 65535 data[ 4]=0x ffff 65535 usp[ 8]=0xffff 65535 usp[ 9]=0xffff 65535 data[ 5]=0x ffff 65535 usp[ 10]=0xffff 65535 usp[ 11]=0xffff 65535 data[ 6]=0x ffff 65535 usp[ 12]=0xffff 65535 usp[ 13]=0xffff 65535 data[ 7]=0x ffff 65535 usp[ 14]=0xffff 65535 usp[ 15]=0xffff 65535 data[ 8]=0x ffff 65535 usp[ 16]=0xffff 65535 usp[ 17]=0x 0 0 data[ 9]=0x ffff 65535 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[80]% NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x64 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0xf NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0xf NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xf NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xf NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0xf NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0xf NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0xf NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x1e NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 30 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfff1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0xf NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x800 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 30 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xfff f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 40474 0 30 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0xf NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0xf NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302f1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に読めている。 サブアドレス2以上にはレジスタは存在しないので あるが、モジュールが Qを返しているために読み出している。 この部分の データは当然 0xffff となる。 正常。 読み出す回数を 20回にして実行する。 onl50t[107]% vi cam6.asm : AS (0,SW,1),#20 : onl50t[108]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[109]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x ffff 65535 usp[ 0]=0xffff 65535 usp[ 1]=0xffff 65535 data[ 1]=0x ffff 65535 usp[ 2]=0x 5 5 usp[ 3]=0xffff 65535 data[ 2]=0x 5 5 usp[ 4]=0xffff 65535 usp[ 5]=0xffff 65535 data[ 3]=0x ffff 65535 usp[ 6]=0xffff 65535 usp[ 7]=0xffff 65535 data[ 4]=0x ffff 65535 usp[ 8]=0xffff 65535 usp[ 9]=0xffff 65535 data[ 5]=0x ffff 65535 usp[ 10]=0xffff 65535 usp[ 11]=0xffff 65535 data[ 6]=0x ffff 65535 usp[ 12]=0xffff 65535 usp[ 13]=0xffff 65535 data[ 7]=0x ffff 65535 usp[ 14]=0xffff 65535 usp[ 15]=0xffff 65535 data[ 8]=0x ffff 65535 usp[ 16]=0xffff 65535 usp[ 17]=0xffff 65535 data[ 9]=0x ffff 65535 usp[ 18]=0xffff 65535 usp[ 19]=0x 0 0 onl50t[112]% NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x14 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x14 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x14 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x14 NOTICE: klexe: enter cc->ptr_dir = 0xef39b NOTICE: klexe: step0: cc->klist1[0].wc = 0x14 NOTICE: klexe: step0: retlen = 0xefff52b4 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x14 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x14 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x28 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 40 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffec NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x14 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x800 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 40 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xfff f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624111560 0 40464 0 40 NOTICE: klexe: after physio() retlen = 0xefff52b4 NOTICE: klexe: after physio() &cc->retlen = 0x610d005c, cc->retlen = 0xffffffff NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0xffffffff NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30189a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. "cc->iosb.ret_length = 0xffffffff" になってしまう。 ユーザ域にバッファの先頭に -1 がセットされるのはよいが、 cc->iosb.ret_length が -1 になるのはまずい。 cc.cファイルを修正する。 <<< cc.cファイルの修正および実行 >>> : struct cc_device { : int kl_retl; : } ccdevice[NCC]; : cc->retlen = cc->now_wc - cc->k->mtc; if(( cc->k->csr & CC_ERR ) == 0){ cc->kl_retl = cc->retlen; } else{ cc->kl_retl = -1; } copyout((caddr_t)&cc->kl_retl, (caddr_t)cc->ptr_udata, sizeof(cc->kl_retl)); : onl50t[41]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x ffff 65535 usp[ 0]=0xffff 65535 usp[ 1]=0xffff 65535 data[ 1]=0x ffff 65535 usp[ 2]=0x 5 5 usp[ 3]=0xffff 65535 data[ 2]=0x 5 5 usp[ 4]=0xffff 65535 usp[ 5]=0xffff 65535 data[ 3]=0x ffff 65535 usp[ 6]=0xffff 65535 usp[ 7]=0xffff 65535 data[ 4]=0x ffff 65535 usp[ 8]=0xffff 65535 usp[ 9]=0xffff 65535 data[ 5]=0x ffff 65535 usp[ 10]=0xffff 65535 usp[ 11]=0xffff 65535 data[ 6]=0x ffff 65535 usp[ 12]=0xffff 65535 usp[ 13]=0xffff 65535 data[ 7]=0x ffff 65535 usp[ 14]=0xffff 65535 usp[ 15]=0xffff 65535 data[ 8]=0x ffff 65535 usp[ 16]=0xffff 65535 usp[ 17]=0xffff 65535 data[ 9]=0x ffff 65535 usp[ 18]=0xffff 65535 usp[ 19]=0x 0 0 onl50t[42]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x14 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x14 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x14 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x14 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x14 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x14 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x14 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x28 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 40 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffec NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x14 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x800 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xc NOTICE: cc_intr: 0xefff52b8 40 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xfff f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40464 0 40 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x13 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x13 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x14 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. ユーザ域にバッファの先頭に -1 がセットされて kineticリスト処理の 途中でエラーが起きたことを示している。 一方、cc->iosb.ret_length には 0x13 が返されている。 kineticリスト処理でのデータ転送回数は 0x14 を指定 したのであるが、途中でエラーが起きたために実際に返されたデータ・ワード 数は 0x13 個であることを示している。 現在読み出しテスト用に使用している スイッチレジスタ。モジュールはサブアドレス2以上にはレジスタは存在しない のであるが、モジュールが Qを返し続けサブアドレス 0x14 でアクセスした時 に DMAエラーを起こしたようだ。 (9-2). 24ビット DMA を実行した時 (9-2-1). IGQ.l の実行 IGQ.l で 7回読み出してみる。 onl50t[46]% vi cam6.asm : IGQ.l (0,SW,1),#7 : onl50t[47]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[48]% onl50t[48]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x e 14 data[ 1]=0x e 14 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0xff00 65280 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0xff00 65280 usp[ 11]=0x 5 5 data[ 6]=0x ff00 65280 usp[ 12]=0xff00 65280 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0xff00 65280 usp[ 15]=0x 5 5 data[ 8]=0x ff00 65280 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 5 5 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[49]% NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xf NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0xe NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0xe NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xe NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xe NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0xe NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0xe NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0xe NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x1c NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 28 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfff9 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0xe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 28 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40476 0 28 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0xe NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0xe NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301eba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビット camacワードで 7回読み出せている。 ユーザ域のバッファの 先頭部には DMAが実行された回数 14(0xe)がセットされている。 cc->iosb.ret_length の値も 0xe になっている。 IGQ.l で 16000回実行してみる。 onl50t[49]% : IGQ.l (0,SW,1),#16000 : onl50t[50]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[51]% onl50t[57]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x7d00 32000 data[ 1]=0x 7d00 32000 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0xff00 65280 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0xff00 65280 usp[ 11]=0x 5 5 data[ 6]=0x ff00 65280 usp[ 12]=0xff00 65280 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0xff00 65280 usp[ 15]=0x 5 5 data[ 8]=0x ff00 65280 usp[ 16]=0xff00 65280 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0xff00 65280 usp[ 19]=0x 5 5 onl50t[58]% NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7d00 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xfa00 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 64000 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x29 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xc180 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7d00 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 64000 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 0 0 40504 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x7d00 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7d00 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-2-2). QS.l の実行 スイッチレジスタ・モジュールを QS.l で 7回読んでみる。 onl50t[46]% vi cam6.asm : QS.l (0,SW,1),#7 : onl50t[47]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[48]% onl50t[52]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x e 14 data[ 1]=0x e 14 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0xff00 65280 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0xff00 65280 usp[ 11]=0x 5 5 data[ 6]=0x ff00 65280 usp[ 12]=0xff00 65280 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0xff00 65280 usp[ 15]=0x 5 5 data[ 8]=0x ff00 65280 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 5 5 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[53]% NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xc80 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0xe NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0xe NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xe NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0xe NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0xe NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0xe NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0xe NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x1c NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 28 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfff9 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0xe NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 28 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40476 0 28 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0xe NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0xe NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 読み出し回数を増やしてみる。 onl50t[54]% vi cam6.asm : QS.l (0,SW,1),#16000 : onl50t[55]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[56]% onl50t[56]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x7d00 32000 data[ 1]=0x 7d00 32000 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0xff00 65280 usp[ 7]=0x 5 5 data[ 4]=0x ff00 65280 usp[ 8]=0xff00 65280 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0xff00 65280 usp[ 11]=0x 5 5 data[ 6]=0x ff00 65280 usp[ 12]=0xff00 65280 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0xff00 65280 usp[ 15]=0x 5 5 data[ 8]=0x ff00 65280 usp[ 16]=0xff00 65280 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0xff00 65280 usp[ 19]=0x 5 5 onl50t[57]% NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0xe NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7d00 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7d00 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7d00 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xfa00 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 64000 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x21 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xc180 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7d00 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 64000 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 0 0 40504 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x7d00 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5, 0xff00, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7d00 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-2-3). AS.l の実行 スイッチレジスタ・モジュールを AS.l で 7回読んでみる。 onl50t[58]% vi cam6.asm : AS (0,SW,1),#7 : onl50t[59]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[60]% onl50t[60]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 7 7 data[ 1]=0x 7 7 usp[ 2]=0x 5 5 usp[ 3]=0xffff 65535 data[ 2]=0x 5 5 usp[ 4]=0xffff 65535 usp[ 5]=0xffff 65535 data[ 3]=0x ffff 65535 usp[ 6]=0xffff 65535 usp[ 7]=0xffff 65535 data[ 4]=0x ffff 65535 usp[ 8]=0xffff 65535 usp[ 9]=0x 0 0 data[ 5]=0x ffff 65535 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x ffff 65535 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x ffff 65535 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x ffff 65535 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[61]% NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7d00 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x7 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xe NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 14 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfff9 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 14 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xfff f, 0xffff, 0xffff, 0xffff, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40490 0 14 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x7 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-3). シングル・アクションを実行した時 (9-3-1). 16ビット、シングル・アクション read の実行 スイッチレジスタ・モジュールを 16ビット、シングル・アクション read で 読んでみる。 onl50t[61]% vi cam6.asm : READ (0,SW,1) : onl50t[62]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[63]% onl50t[63]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 1 1 data[ 1]=0x 1 1 usp[ 2]=0x 5 5 usp[ 3]=0x 0 0 data[ 2]=0x 5 5 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[64]% NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x1 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x1 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-3-2). 24ビット、シングル・アクション read の実行 スイッチレジスタ・モジュールを 24ビット、シングル・アクション read で 読んでみる。 onl50t[64]% vi cam6.asm : READ.l (0,SW,1) : onl50t[65]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[66]% onl50t[66]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 2 2 data[ 1]=0x 2 2 usp[ 2]=0xff00 65280 usp[ 3]=0x 5 5 data[ 2]=0x ff00 65280 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 5 5 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[67]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x2 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x2 NOTICE: ccwrite: cc->klist1[0].wc = 0x2 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x2 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x2 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x2 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x2 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x2 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x4 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 4 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x2 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 4 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40500 0 4 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60df805c, cc->retlen = 0x2 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0xff00, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x2 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x2 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-3-3). 16ビット、シングル・アクション write の実行 スイッチレジスタ・モジュールを 16ビット、シングル・アクション write で 値 6 を書いてみる。 onl50t[50]% vi cam6.asm : WRITE #6,(16,SW,0) : onl50t[51]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[52]% onl50t[90]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[91]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x1 NOTICE: klexe: after physio(): cc->k->mtc = 0x1 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301cda00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. kineticリスト処理でのシングル・アクション write では、writeデータ はユーザ域のデータバッファを通さないで cmrレジスタへのインラインデータ として処理される。 したがって、cam6プログラムを実行した時ユーザ域の データバッファに writeデータが表示されないのは正常。 しかし、上の実行 では camacへ正しいデータが転送され camacデータウェイ・オペレーションが 実行されたにもかかわらず mtc の値は 1のままになっている。 ということは kineticリスト処理でシングル・アクション writeを実行する場合には、 mtc をゼロにセットして実行すればよいということのようだ。 チェック。 onl50t[90]% vi cc.c : klexe(int unit, char *name) { struct cc_device *cc; : /* uio->uio_iov->iov_len = cc->klist1[i].wc * 2; */ uio->uio_iov->iov_len = 1 * 2; : kl_write16(int unit) { struct cc_device *cc; : /* cc->klist1[cc->ptr_dir].wc += 1; */ cc->klist1[cc->ptr_dir].wc += 0; : static int cc_strategy(struct buf *bp) { : /* cc->k->mtc = cc->now_wc; */ cc->k->mtc = 0x0000; : onl50t[91]% onl50t[111]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[112]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x0 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x302aba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. mtc をゼロにして 16ビット、シングル・アクション write をやってみた ところ、実行後の状態は mtc はゼロで cc->iosb.ret_length もゼロになって いる。 cc->retlen もゼロなので、ユーザ域のデータバッファの先頭値もゼロ になっている。 kineticリスト処理によるシングル・アクション write では ユーザ域のデータバッファと camacの間でデータを DMA転送する必要はない。 writeデータは cmr に埋め込まれているものを camac へ write するだけで ある。 従って、mtc はゼロにしてよい。 このやり方をとることにする。 cc.cファイルを修正する。 onl50t[110]% vi cc.c : struct cc_device { : int kl_s_wr; : } ccdevice[NCC]; : klexe(int unit, char *name) { struct cc_device *cc; : u_short cma_save; : uio->uio_iov->iov_base = (caddr_t)(cc->ptr_udata + 2); cc->kl_s_wr = 0; if( cc->klist1[i].wc == 0 ){ cma_save = cc->k->cma; if (( cc->k->cmr & 0x0060) == 0x0060){ cc->kl_s_wr = 1; cc->k->cma = cma_save; uio->uio_iov->iov_len = 1 * 2; } } else{ uio->uio_iov->iov_len = cc->klist1[i].wc * 2; } /* uio->uio_iov->iov_len = cc->klist1[i].wc * 2; */ : kl_write16(int unit) { struct cc_device *cc; : /* cc->klist1[cc->ptr_dir].wc += 1; */ cc->klist1[cc->ptr_dir].wc += 0; : static int cc_strategy(struct buf *bp) { register struct cc_device *cc; : if (cc->kl_s_wr == 1){ cc->k->mtc = 0x0000; cc->kl_s_wr = 0; } else{ cc->k->mtc = cc->now_wc; } /* cc->k->mtc = cc->now_wc; */ : onl50t[111]% ccドライバをロードし直し、cam6プログラムで 16ビット、シングル・ アクション write を実行する。 onl50t[134]% vi cam6.asm : WRITE #6,(16,SW,0) : onl50t[135]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[136]% onl50t[136]% cam6 data buf's address = 0xefff52b4 list length = 5 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[137]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x9e20 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 40480 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 40480 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x0 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 24 0 40480 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30255a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 16ビット・データは、スイッチ・レジスタ・モジュールに正しく write された。 mtc の値はゼロになっている。 ユーザ域のデータバッファの先頭部 には、データの転送は行われなかったことを示すゼロが入れられている。 cc->iosb.ret_length の値もゼロにセットされている。 (9-3-4). 24ビット、シングル・アクション write の実行 onl50t[138]% vi cam6.asm : WRITE.l #7,(16,SW,0) : onl50t[138]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[139]% onl50t[139]% cam6 data buf's address = 0xefff52b4 list length = 6 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[140]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x61 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x7 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x1 NOTICE: klexe: after physio(): cc->k->mtc = 0x1 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3022da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. cam6プログラムを実行した時ユーザ域のデータバッファに writeデータが 表示されないのは正常。 しかし、上の実行では camacへ正しいデータが転送 され camacデータウェイ・オペレーションが実行されたにもかかわらず mtc の 値は 1のままになっているのは NG。 cc.cファイルを修正する。 onl50t[117]% vi cc.c : kl_write24(int unit) { struct cc_device *cc; : /* cc->klist1[cc->ptr_dir].wc += 1; */ cc->klist1[cc->ptr_dir].wc += 0; : onl50t[118]% camacドライバをロードし直して、再度 cam6プログラムを実行する。 onl50t[140]% cam6 data buf's address = 0xefff52b4 list length = 6 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[141]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x9e20 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 40480 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x61 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x7 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 40480 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x0 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 24 0 40480 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 24ビット・データは、スイッチ・レジスタ・モジュールに正しく write され LEDは 0x7で点灯している。 mtc の値はゼロになっている。 ユーザ域の データバッファの先頭部には、データの転送は行われなかったことを示すゼロが 入れられている。 cc->iosb.ret_length の値もゼロにセットされている。 writeデータのを大きな値にして、再度実行してみる。 onl50t[142]% vi cam6.asm : WRITE.l #6636321,(16,SW,0) : onl50t[142]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[143]% onl50t[143]% cam6 data buf's address = 0xefff52b4 list length = 6 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[144]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x9e20 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 40480 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x61 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x4321 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x65 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 40480 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x0 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 24 0 40480 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 (9-4). NDT を実行した時 onl50t[144]% : NDT (10,SW,0) : onl50t[145]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[148]% onl50t[148]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[149]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x60a NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x65 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x1 NOTICE: klexe: after physio(): cc->k->mtc = 0x1 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301fba00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. cam6プログラムを実行した時ユーザ域のデータバッファに writeデータが 表示されないのは正常。 しかし、上の実行では camacへ正しい camacコマンド が転送され camacデータウェイ・オペレーションが実行され、camacデータ ウェイ・オペレーションが実行されたにもかかわらず mtc の値は 1のままに なっているのは NG。 cc.cファイルを修正する。 onl50t[119]% vi cc.c : kl_ndt(int unit) /* end */ { struct cc_device *cc; : /* cc->klist1[cc->ptr_dir].wc += 1; */ cc->klist1[cc->ptr_dir].wc += 0; : onl50t[120]% camacドライバをロードし直して、再度 cam6プログラムを実行する。 onl50t[151]% cam6 data buf's address = 0xefff52b4 list length = 4 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[152]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x0 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x0 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x0 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x0 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x2 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 2 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x60a NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x65 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x80 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 2 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x0, 0x0, 0x0, 0x0, 0x0, 0 x0, 0x0, 0x0, 0x0, 0x0 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x0 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 40502 0 2 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x0, 0x0, 0x 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30295a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. Clear LAMコマンドは、camacデータウェイ・オペレーションで正しく 実行されデータウェイ・ディスプレー・モジュールの LEDは A=0、F=10 を 点灯している。 mtc の値はゼロになっている。 ユーザ域のデータバッファの 先頭部には、データの転送は行われなかったことを示すゼロが入れられている。 cc->iosb.ret_length の値もゼロにセットされている。 (9-5). 16/24ビット DMA、16/24ビットシングル・アクション、NDT を実行した時 onl50t[161]% vi cam6.asm ***************************************************************** * cam6.ASM 20-FEB-1992 Y.Takeuchi * * Modified : 4-Jul-2000 E.Inoue * * * * camasm cam6 a * ***************************************************************** ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; READ (0,SW,1) READ.l (0,SW,1) WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) IGQ (0,SW,1),#6 IGQ (0,SW,1),#32000 IGQ.l (0,SW,1),#7 IGQ.l (0,SW,1),#16000 QS (0,SW,1),#7 QS (0,SW,1),#32000 AS (0,SW,1),#1 AS.l (0,SW,1),#1 NDT (10,SW,0) ; STOP end onl50t[162]% onl50t[163]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[164]% onl50t[164]% cam6 <--- ここでフリーズした。 2917 の LED は、ADD REC、RUN、M1が 点灯している。 ここで、2917 のリセットボタンを押したら以降 の処理を続行した。 data buf's address = 0xefff52b4 list length = 42 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x7721 30497 data[ 1]=0x 7721 30497 usp[ 2]=0x 5 5 usp[ 3]=0xff00 65280 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x ff00 65280 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[165]% NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x0 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x7721 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x7721 NOTICE: ccwrite: cc->klist1[0].wc = 0x7721 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7721 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x7721 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x7721 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x7721 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x7721 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0xee42 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 60994 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x7721 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 60994 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5 , 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x7721 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 0 0 40504 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x7721 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x7721 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x7721 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NG. cam6プログラムを起動直後にフリーズした。 まず、ブロック転送だけを転送データ数を減らして実行してみる。 onl50t[169]% vi cam6.asm : ; READ (0,SW,1) ; READ.l (0,SW,1) ; WRITE #6,(16,SW,0) ; WRITE #7,(16,SW,0) ; WRITE.l #6636321,(16,SW,0) IGQ (0,SW,1),#6 ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 IGQ.l (0,SW,1),#7 ; IGQ.l (0,SW,1),#16000 IGQ.l (0,SW,1),#100 QS (0,SW,1),#7 ; QS (0,SW,1),#32000 QS (0,SW,1),#100 AS (0,SW,1),#1 AS.l (0,SW,1),#1 ; NDT (10,SW,0) : onl50t[170]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[171]% onl50t[171]% cam6 data buf's address = 0xefff52b4 list length = 26 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 1ae 430 data[ 1]=0x 1ae 430 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[172]% NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x771e NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1ae NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1ae NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1ae NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1ae NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1ae NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1ae NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x35c NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 860 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffa NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1ae NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 860 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x1ae NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39644 0 860 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x1ae NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x1ae NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. データ転送数を減らして、ブロック転送のみを実行してみたところ、 正常に実行できた。 次にシングル・アクション read/write を加えて実行 してみる。 onl50t[172]% vi cam6.asm : ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; READ (0,SW,1) READ.l (0,SW,1) WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) IGQ (0,SW,1),#6 ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 IGQ.l (0,SW,1),#7 ; IGQ.l (0,SW,1),#16000 IGQ.l (0,SW,1),#100 QS (0,SW,1),#7 ; QS (0,SW,1),#32000 QS (0,SW,1),#100 AS (0,SW,1),#1 AS.l (0,SW,1),#1 NDT (10,SW,0) ; STOP : onl50t[173]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[174]% onl50t[174]% cam6 data buf's address = 0xefff52b4 list length = 42 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 1b1 433 data[ 1]=0x 1b1 433 usp[ 2]=0x 5 5 usp[ 3]=0xff00 65280 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x ff00 65280 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[175]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1ae NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x1b1 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x1b1 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x1b1 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x1b1 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x1b1 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x1b1 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x362 NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 866 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x1b1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 866 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5 , 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x1b1 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39638 0 866 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x1b1 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x1b1 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 一回の DMAで転送可能なデータ数をオーバーしたのが 原因だった。 16ビットの camacデータであれば一回の DMAで 32Kまで転送可能 で、24ビットの camacデータであれば一回の DMAで 16Kまで転送可能である。 kineticリスト処理では、1リストが 1 DMAで実行される。 IGQ、QS、AS毎に 別々の DMAが起動されるのではない。 1リスト中で転送されるデータの総数に 注意する必要がある。 cam6.asm のリスト中に QS.l のテストが抜けていた。 追加して再実行する。 onl50t[143]% vi cam6.asm ***************************************************************** * cam6.ASM 20-FEB-1992 Y.Takeuchi * * Modified : 4-Jul-2000 E.Inoue * * * * camasm cam6 a * ***************************************************************** ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; READ (0,SW,1) READ.l (0,SW,1) WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) IGQ (0,SW,1),#6 ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 IGQ.l (0,SW,1),#7 ; IGQ.l (0,SW,1),#16000 IGQ.l (0,SW,1),#100 QS (0,SW,1),#7 ; QS (0,SW,1),#32000 QS (0,SW,1),#100 QS.l (0,SW,1),#7 ; QS.l (0,SW,1),#32000 QS.l (0,SW,1),#100 AS (0,SW,1),#1 AS.l (0,SW,1),#1 NDT (10,SW,0) ; STOP end onl50t[144]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[146]% onl50t[175]% cam6 data buf's address = 0xefff52b4 list length = 48 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 287 647 usp[ 2]=0x 5 5 usp[ 3]=0xff00 65280 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x ff00 65280 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[176]% NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x1b1 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x287 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x287 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x287 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x50e NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 1294 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x287 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 1294 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5 , 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x287 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39210 0 1294 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x287 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x287 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30265a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 <<< WRITE命令をリストの先頭に置いた場合の実行 >>> onl50t[240]% vi cam6.asm : ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) READ (0,SW,1) READ.l (0,SW,1) IGQ (0,SW,1),#6 ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 : onl50t[241]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[242]% onl50t[179]% cam6 data buf's address = 0xefff52b4 list length = 48 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 287 647 usp[ 2]=0x 5 5 usp[ 3]=0xff00 65280 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x ff00 65280 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[180]% NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x287 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x287 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x287 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x50e NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 1294 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x610 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x6 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x63 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x287 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 1294 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5 , 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x287 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39210 0 1294 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x287 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x287 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x301d1a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 <<< NDT命令をリストの先頭に置いた場合の実行 >>> onl50t[243]% vi cam6.asm : ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; NDT (10,SW,0) READ (0,SW,1) READ.l (0,SW,1) WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) IGQ (0,SW,1),#6 ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 : onl50t[244]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[245]% onl50t[180]% cam6 data buf's address = 0xefff52b4 list length = 48 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 287 647 usp[ 2]=0x 5 5 usp[ 3]=0xff00 65280 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x ff00 65280 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0x 5 5 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 5 5 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[181]% NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x287 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x287 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x287 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x50e NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 1294 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x60a NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x1 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x287 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 1294 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5 , 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x287 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39210 0 1294 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x287 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0xff00, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x287 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x3020da00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 <<< DMA命令をリストの先頭に置いた場合の実行 >>> nl50t[246]% vi cam6.asm : ;SW equ 11 ; Switch Register SW equ 3 ; Switch Register ;SCALER equ 6 ; CAMAC Scaler ; IGQ (0,SW,1),#6 NDT (10,SW,0) READ (0,SW,1) READ.l (0,SW,1) WRITE #6,(16,SW,0) WRITE #7,(16,SW,0) WRITE.l #6636321,(16,SW,0) ; IGQ (0,SW,1),#32000 IGQ (0,SW,1),#100 IGQ.l (0,SW,1),#7 : onl50t[247]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[248]% onl50t[181]% cam6 data buf's address = 0xefff52b4 list length = 48 Now execute cam6.obj ... buf's address = 0xefff52b4 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 287 647 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x ff00 65280 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[182]% NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: kladd: step1: cc->ptr_dir = 0x0 NOTICE: kladd: step1: name = test1 NOTICE: kladd: step1: cc->klist1[0].name = test1 NOTICE: kladd: step2: cc->k->cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].cma = 0x64, 100(dec) NOTICE: kladd: step3: cc->klist1[0].wc = 0x0 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x69 NOTICE: kladd: : in while, code = 0x61 NOTICE: kladd: : in while, code = 0x62 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x65 NOTICE: kladd: : in while, code = 0x66 NOTICE: kladd: : in while, code = 0x7b NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x7c NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x73 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x74 NOTICE: kladd: : in while, code = 0x77 NOTICE: kladd: : in while, code = 0x78 NOTICE: kladd: : in while, code = 0x60 NOTICE: kladd: step4: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: CC_CMD_ADDLIST: cc->klist1[0].wc = 0x287 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0xefff52b4 NOTICE: cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0xefff52b4 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x287 NOTICE: klexe: enter cc->ptr_dir = 0x0 NOTICE: klexe: step0: cc->klist1[0].wc = 0x287 NOTICE: klexe: step0: retlen = 0xfffffff0 NOTICE: klexe: step0: cc->ptr_udata = 0xefff52b4 NOTICE: klexe: step1: name = test1 NOTICE: klexe: step1: cc->klist1[0].name = test1 NOTICE: klexe: step2: cc->ptr_dir = 0x1 NOTICE: klexe: step3: cc->klist1[0].cma = 0x64 NOTICE: klexe: step3: cc->klist1[0].wc = 0x287 NOTICE: klexe: step3: cc->now_cma = 0x64, 100(dec) NOTICE: klexe: step3: cc->now_wc = 0x287 NOTICE: klexe: step4: uio->uio_iov->iov_base = 0xefff52b8 NOTICE: klexe: step4: uio->uio_iov->iov_len = 0x50e NOTICE: klexe: step4: uio->uio_segflg = 0x0 NOTICE: klexe: in: 0xefff52b8 1294 1 40504 0 0 NOTICE: klexe: before physio() NOTICE: cc_strategy: enter NOTICE: cc_strategy: cc->naf = 0x3c11 NOTICE: cc_strategy: dma_addr = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x2b NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x620 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xfffa NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->cmr = 0x3 NOTICE: cc_strategy: Kinetic list-processing: cc->now_cma = 0x64 NOTICE: cc_strategy: Kinetic list-processing: cc->k->maclo = 0x12b8 NOTICE: cc_strategy: Kinetic list-processing: cc->k->machi = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->amr = 0xffff NOTICE: cc_strategy: Kinetic list-processing: cc->k->mtc = 0x287 NOTICE: cc_strategy: Kinetic list-processing: cc->k->cser = 0x0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->docr = 0xb892 NOTICE: cc_strategy: Kinetic list-processing: cc->k->sccr = 0x480 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xe0 NOTICE: cc_strategy: Kinetic list-processing: cc->k->csr = 0xc0 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_intr: 0xefff52b8 1294 1 40504 0 0 NOTICE: cc_intr: contents of uio->uio_iov->iov_base =0x5, 0x5, 0x5, 0x5, 0x5, 0 x5, 0x5, 0xff00, 0x5, 0x5 NOTICE: cc_strategy: exit NOTICE: klexe: after physio(): status = 0x0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x0 NOTICE: klexe: after physio(): cc->now_wc = 0x287 NOTICE: klexe: after physio(): cc->k->mtc = 0x0 NOTICE: klexe: out: 0x1b 1624373544 0 39210 0 1294 NOTICE: klexe: after physio() retlen = 0xfffffff0 NOTICE: klexe: after physio() &cc->retlen = 0x60f7005c, cc->retlen = 0x287 NOTICE: klexe: after physio(): contents of uio->uio_iov->iov_base =0x5, 0x5, 0x 5, 0x5, 0x5, 0x5, 0x5, 0xff00, 0x5, 0x5 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x287 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0xa000a0 NOTICE: ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x0 NOTICE: ccwrite: cc->klist1[0].wc = 0x287 NOTICE: cc_write: 1 copyin: uio->uio_iov = 0x30269a00 NOTICE: cc_write: 1 copyin: iov->iov_base = 0x224a0 ok. 正常に実行できた。 ---xxxx ここまでやった(継続中) (10). 関連する man および資料 (10-1). od ユーザコマンド od(1) 【名前】 od - 8 進ダンプ 【形式】 /usr/bin/od [ -bcCDdFfOoSsvXx ] [ -] [ file ] [ offset_string ] /usr/bin/od [ -bcCDdFfOoSsvXx ] [ -A address_base ] [ -j skip ] [ -N count ] [ -t type_string ] ... [ - ] [ file /usr/xpg4/bin/od [ -bcCDdFfOoSsvXx ] [ -] [ file ] [ offset_string ] /usr/xpg4/bin/od [ -bcCDdFfOoSsvXx ] [ -A address_base ] [ -j skip ] [ -N count ] [ -t type_string [ - ] [ file 【機能説明】 od コマンドは、指定された入力ファイルを順番に標準出 力 に コ ピー します。このとき、 -t または -bcCDdFfOoSsvXx オプション で指定された出力タイプに従って入力データを変換します。出力タ イ プ指定が省略された場合には、 -t o2 が指定されたものと見な します。 -bcCDdFfOoSstvXx オプションを複数回記述して、複数の タイプを指定することも可能です。その場合、記述した順序に従っ て出力行がタイプごとに書き出されます。入力ファイ ル を 示 す file を 省 略 し た 場 合 に は、 標 準入力が使用されます。 [offset_string] オペランドは、 -A 、 -j 、 -N 、 -t の各オプ ションと排他的です。このマニュアルページでは、以下の用語を使 用しています。 ワード 16 ビットのユニットを表します。マシンのワードサイズとは 無関係です。 ロングワード 32 ビットのユニットを表します。 ダブルロングワード 64 ビットのユニットを表します。 【オプション】 以下のオプションが指定できます。 -A address_base 入力オフセット値の基数を指定します。 address_base 引 数は以下に述べる文字のいずれかでなければなりません。 文字 d、 o、 x は、それぞれ 10 進、 8 進、 16 進を表 し ます。文字 n は、オフセットは出力しない旨を表しま す。 -A n を指定しない限り、出力行の先頭には、次に書 き 出されるバイトの入力オフセット値 ( 入力ファイルで の累積値 ) が付加されます。また、入力データがすべ て 処理された後は、最後に出力されたバイトの次のバイトの オフセット値が表示されます。 -A address_base オ プ ショ ンも [offset_string] オペランドも指定されない場 合、入力オフセット値は 8 進数で表示されます。 SunOS 5.6 1997年4月28日 1 ユーザコマンド od(1) -b バイトを 8 進数で解釈します。この指定は -t o1 と同じ 意味です。 [/usr/bin/od] -c シングルバイト文字を表示します。非図形文字のな か に は、 C 言語のエスケープで表示されるものもあります。 NULL \0 バックスペース \b 用紙送り \f 復帰改行 \n リターン \r タブ \t その他の文字は、 3 桁の 8 進数で表示されます。たとえ ば、次のようにします。 echo "hello world" | od -c 0000000 h e l l o w o r l d \n 0000014 [/usr/xpg4/bin/od] -c LC_CTYPE ロケールカテゴリの現在の設定に基づき、バ イ トをシングルバイト文字または複数バイト文字で解釈しま す。印刷可能な複数バイト文字は、文字の最初のバイトに 対応する領域に書き込まれます。残りのバイトに対応する 領域には、文字が継続することを示す ** が書き込まれま す。非図形文字は、 -C オプションを使用したときと同じ ように解釈されます。 -C LC_CTYPE ロケールカテゴリの現在の設定に基づき、バ イ トをシングルバイト文字または複数バイト文字で解釈しま す。印刷可能な複数バイト文字は、文字の最初のバイトに 対応する領域に書き込まれます。残りのバイトに対応する 領域には、文字が継続することを示す ** が書き込まれま す。 非図形文字のなかには、 C 言語のエスケープで表示 されるものもあります。 NULL \0 バックスペース \b 用紙送り \f 復帰改行 \n リターン \r タブ \t その他の非図形文字に関しては、各バイトにつき 3 桁 の 8 進数が表示されます。 -d ワードを符号なし 10 進数で解釈します。この指定は -t u2 と同じ意味です。 -D ロングワードを符号なし 10 進数で解釈します。この指定 は -t u4 と同じ意味です。 SunOS 5.6 1997年4月28日 2 ユーザコマンド od(1) -f ロングワードを浮動小数点で解釈します。この指定は -t f4 と同じ意味です。 -F ダブルロングワードを拡張精度で解釈します。この指定は -t f8 と同じ意味です。 -j skip 入力データの先頭の skip 個のバイトをスキップします。 od コマンドによる読み取りまたはシークは、連結された 入力ファイルにおいて skip バイトを超えた地点から行わ れます。入力データの合計長が skip バイトに満たない場 合、 od コマンドは標準エラー出力に診断メッセージを書 き出し、ゼロ以外の終了ステータスコードで処理を終了し ます。 デフォルトでは skip 引数は 10 進数と解釈されます。先 頭に 0x または 0X が付加されていれば、オフセット値は 16 進数と解釈されます。また先頭が 0 のときは、 8 進 数と解釈されます。また数値の後に文字 b、 k、または m を付加すると、それぞれ 512、 1024、または 1048576 バ イトの倍数と見なされます。 skip 値が 16 進数のとき、 最後に b が付加されていてもそれは 16 進の数字と見 な さ れます。アドレス表示は 0000000 から始まります。そ の基数が skip 引数の基数によって示されることはありま せん。 -N count count が示すバイト数を超えない範囲で入 力 デー タ を フォー マットします。デフォルトでは count は 10 進数 と解釈されます。先頭に 0x または 0X が付加されていれ ば、 count は 16 進数と解釈されます。また先頭が 0 の ときは、 8 進数と解釈されま す。 入 力 デー タ が ( -j skip 指定時はスキップ完了後 ) count バイト分存在 しない場合でも、エラーとは見なされません。 od コマン ド は、 存在している分の入力データをフォーマットしま す。表示されるアドレスの基数が count 引数の 基 数 に よって表されることはありません。 -o ワードを 8 進数で解釈します。この指定は -t o2 と同じ 意味です。 -O ロングワードを符号なし 8 進数で解釈します。この指 定 は -t o4 と同じ意味です。 -s ワードを符号付き 10 進数で解釈します。この指定は -t d2 と同じ意味です。 -S ロングワードを符号付き 10 進数で解釈します。この指定 は -t d4 と同じ意味です。 -t type_string 出力タイプを指定します。 type_string は文字列で、 入 力データを書き出す際に用いる出力タイプを表します。複 SunOS 5.6 1997年4月28日 3 ユーザコマンド od(1) 数の文字を使って複数のタイ プ を 指 定 で き ま す。 type_string は、出力タイプを表す以下の文字で構成され ていなければなりません。 a 「名前を与えられた文字」を表します。このタイ プ 指定では、各バイトのうち最下位の 7 ビットだけが 用いられます。以下の表に示す値を持つバイト が、 文字に対応した名前を使って出力されます。 od における名前を与えられた文字 _______________________________________________________ | 値 名前| 値 名前| 値 名前| 値 名前| |____________|_____________|_____________|_____________| | \000 nul | \001 soh | \002 stx | \003 etx | | \004 eot | \005 enq | \006 ack | \007 bel | | \010 bs | \011 ht | \012 lf | \013 vt | | \014 ff | \015 cr | \016 so | \017 si | | \020 dle | \021 dc1 | \022 dc2 | \023 dc3 | | \024 dc4 | \025 nak | \026 syn | \027 etb | | \030 can | \031 em | \032 sub | \033 esc | | \034 fs | \035 gs | \036 rs | \037 us | | \040 sp | \177 del | | | |____________|_____________|_____________|_____________| c 「文字」を表します。 LC_CTYPE ロケールカテゴ リ の 現在の設定に基づき、バイトをシングルバイト文 字または複数バイト文字で解釈します。印刷可能 な 複 数バイト文字は、文字の最初のバイトに対応する 領域に書き込まれます。残りのバイトに対応する 領 域 には、文字が継続することを示す ** が書き込ま れます。次の非図形文字は、 C 言語のエスケープで 表示されます。 \0、 \a、 \b、 \f、 \n、 \r、 \t、 \v その他の非図形文字に関しては、各バイトにつき 3 桁の 8 進数が表示されます。 タイプ指定文字である d、 f、 o、 u、 x の後には、 出 力タイプが発生するたびに変換するバイト数を示す符号な し 10 進数を記述することもできます。 f 「浮動小数点数」を表します。後に文字 F、 D、 ま た は L を付加して、タイプが float、 double、 long double の項目に対して変換を行う旨を表す こ ともできます。 d, o, u, x それぞれ符号付き 10 進数、 8 進数、 符号なし 10 進 数、 16 進数を表します。後に文字 C、 S、 I、 または L を付加して、タイプが char、 short 、 int、または long の項目に対して変更を行う旨を表 SunOS 5.6 1997年4月28日 4 ユーザコマンド od(1) すこともできます。 1 つの type_string 中に複数のタイプを続けて指定で き ます。また -t オプションを複数個指定する可能です。そ の場合、タイプ指定文字を記述した順序に従って、出力行 がタイプごとに書き出されます。 -v すべてのデータを表示します ( 冗長 ) 。このオプション を 省略すると、直前の出力行に等しい ( バイトオフセッ トを除く) 行は、すべてアスタリスク ( * ) だけから な る行に置き換えられます。 -x ワードを 16 進数で解釈します。この指定は -t x2 と 同 じ意味です。 -X ロングワードを 16 進数で解釈します。この指定は -t x4 と同じ意味です。 【オペランド】 以下のオペランドは、 /usr/bin/od と /usr/xpg4/bin/od で指 定 できます。 - 指定されたすべてのファイルに加えて、 標準入力を使用します。このオペランド を省略すると、 file オペランドを指定 しなかった場合だけ、標準入力が使用さ れます。 [/usr/bin/od] 以下のオペランドは、 /usr/bin/od でのみ指定されます。 file 読み出すファイルのパス名。このオペラ ンドを省略すると、標準入力が用いられ ます。オペランドの数が 2 以 内 で あ り、 -A、 -j、 -N、 -t オプションが すべて省略され、さらに以下の項目のい ずれかが真である場合には、対応するオ ペランドはファイルのオペランドではな く、オフセット値指定と見なされます。 1. 最後のオペランドの最初の文字が 正の記号 (+) である。 2. 2 番目のオペランドの最初の文字 が数値である。 3. 2 番目のオペランドの最初の文字 が x であり、2 番目のオペラン ドの 2 番目の文字が小文字の 16 進数文字または数字である。 4. 2 番目のオペランドが "x" で あ SunOS 5.6 1997年4月28日 5 ユーザコマンド od(1) る。 5. 2 番目のオペランドが "." であ る。 -N count オプションを省略した場 合、 表示はファイルの終わりに到達するまで 続けられます。 [+] [0] offset [.][b|B] [+] [0] [offset] [.] [+][0x|x][offset] [+][0x|x] offset[B] offset_string オペランドは、ファイル 中 の ダンプを始める位置のバイトオフ セット値を指定します。デフォル ト で は、 オフセット値は 8 進数のバイトで 解釈され表示されます。offset が 0 で 始 まる場合には、オフセット値は 8 進 数で解釈されます。offset が x または 0x で始まる場合には、オフセット値は 16 進数で解釈され、b を付加した場 合 に は、16 進数の数字であるとみなされ ます。"." を付加すると、オフセット値 は 10 進数で解釈されます。b または B を付加すると、オフセット値は 512 バ イト単位で解釈されます。 file 引数を 省略する場合には、オフセット値の先頭 に (+) を付加しなければなりません。 アドレスの表示は、指定されたオフセッ トから始まります。アドレスの基数は、 指定してあればオフセットの基数と同じ に な ります。指定していない場合は 8 進数になります。10 進数は 8 進数を上 書 き し、同じオフセットオペランドに 16 進数と 10 進数の両方の変換を指 定 するとエラーになります。 [/usr/xpg4/bin/od] 以下のオペランドは、 /usr/xpg4/bin/od でのみ指定できます。 file 始めの 2 つの項目のどちらかが真で な け れ ば な ら な いことを除いては、 /usr/bin/od と同じ。 [+] [0] offset [.][b|B] + [offset] [.] [+][0x][offset] [+][0x] offset[B] +x [offset] +xoffset [B] オフセット値の記述は /usr/bin/od と 同じです。 SunOS 5.6 1997年4月28日 6 ユーザコマンド od(1) 【環境】 od の実行に影響を与える環境変数 LC_CTYPE 、 LC_MESSAGES 、 LC_NUMERIC 、 NLSPATH についての詳細は、 environ(5) を参照し てください。 【終了ステータス】 以下の終了ステータスが返されます。 0 正常終了 >0 エラーが発生した。 【属性】 次の属性については attributes(5) のマニュアルページを参照 し てください。 [/usr/bin/od] _______________________ | 属性タイプ| 属性値 | |_______________________ | 使用条件 | SUNWtoo | | CSI | 対応済み| |___________|__________| [/usr/xpg4/bin/od] _______________________ | 属性タイプ| 属性値 | |_______________________ | 使用条件 | SUNWxcu4| | CSI | 対応済み| |___________|__________| 【関連項目】 sed(1), attributes(5), environ(5), xpg4(5) SunOS 5.6 1997年4月28日 7 (10-2). copyout Kernel Functions for Drivers copyout(9F) NAME copyout - copy data from a driver to a user program SYNOPSIS #include #include int copyout(const void *driverbuf, void *userbuf, size_t cn); INTERFACE LEVEL Architecture independent level 1 (DDI/DKI). ARGUMENTS driverbuf Source address in the driver from which the data is transferred. userbuf Destination address in the user program to which the data is transferred. cn Number of bytes moved. DESCRIPTION copyout() copies data from driver buffers to user data space. Addresses that are word-aligned are moved most efficiently. However, the driver developer is not obligated to ensure alignment. This function automatically finds the most effi- cient move algorithm according to address alignment. RETURN VALUES Under normal conditions a 0 is returned to indicate a suc- cessful copy. Otherwise, a -1 is returned if one of the following occurs: o paging fault; the driver tried to access a page of memory for which it did not have read or write access o invalid user address, such as a user area or stack area o invalid address that would have resulted in data being copied into the user block If a -1 is returned to the caller, driver entry point rou- tines should return EFAULT. CONTEXT copyout() can be called from user context only. SunOS 5.6 Last change: 1 May 1996 1 Kernel Functions for Drivers copyout(9F) EXAMPLES A driver ioctl(9E) routine (line 10) can be used to get or set device attributes or registers. In the XX_GETREGS con- dition (line 17), the driver copies the current device register values to a user data area (line 18). If the specified argument contains an invalid address, an error code is returned. 1 struct device { /* layout of physical device registers */ 2 int control; /* physical device control word */ 3 int status; /* physical device status word */ 4 short recv_char; /* receive character from device */ 5 short xmit_char; /* transmit character to device */ 6 }; 7 8 extern struct device xx_addr[]; /* phys. device regs. location */ 9 . . . 10 xx_ioctl(dev_t dev, int cmd, int arg, int mode, 11 cred_t *cred_p, int *rval_p) 12 ... 13 { 14 register struct device *rp = &xx_addr[getminor(dev) >> 4]; 15 switch (cmd) { 16 17 case XX_GETREGS: /* copy device regs. to user program */ 18 if (copyout(rp, arg, sizeof(struct device))) 19 return(EFAULT); 20 break; 21 ... 22 } 23 ... 24 } SEE ALSO ioctl(9E), bcopy(9F), copyin(9F), ddi_copyin(9F), ddi_copyout(9F), uiomove(9F) Writing Device Drivers NOTES Driver writers who intend to support layered ioctls in their ioctl(9E) routines should use ddi_copyout(9F) instead. Driver defined locks should not be held across calls to this function. SunOS 5.6 Last change: 1 May 1996 2 ---xxxx ここまでやった(継続中) --- (6). 項目タイトル (6-1). サブ項目タイトル (6-1-1). サブサブ項目タイトル