1999-07-19 割り込みと packet receive
次は割り込み...
のはずなのだが、なぜか APbus の割り込みが入ってこない。
TIMER の時はあっさり interrupt 捕れたので、
APbus も割り込みマスクさえテキトーに設定すれば trap とんで来るだろう、
と思ってたのだが、来ない...
news5000_intr() でごそごそ printf を仕込むがぜんぜん来てる様子なし。
level2 interrupt の TIMER は元気に動いてるのに...
APBus controller もちゃんと叩かないといけないのか?
とりあえず保留...
* * *
並行して sonic で packet の受信。
送信の時にやったように、mac68k/dev/if_sn.c から cut & paste して、
packet descriptor のところをガリガリ変更してテスト。
割り込み status を printf してやると、受信要因の bit は立ってる...
SONIC 的にはちゃんと割り込んでるんだよなぁ。
といっても CPU まで割り込みが上がってこないのでどうしようもない。
しょうがないので packet を送った後に自分で rxintr() を呼んでやる(ひでー
(他の多くの ether driver と同じく) rxintr() 内で割り込み status 見て、
割り込み原因が存在しつづける限り loop して packet 受ける構造なので、
rxintr() は任意のタイミングで呼んでもなんとなく動く。
ふつうは割り込みで駆動されるんだけど。
#でもやっぱり ethernet で polling はしたくないなぁ... :P
テスト。
なんか、ぎこちなくではあるが、packet を受信できるようにはなった...?
すげぇ。ちゃんと rarp の答えを受けとってるよ :)
割り込みなくても結構動くやん。24ヶの ring buffer のおかげだな。
調子にのって options NFS_BOOT_DHCP で make して、
server 側の dhcpd.conf に
host negx { hardware ethernet 8:0:46:1:2:af; fixed-address 172.17.4.48; option host-name "negx.?????????.org"; option root-path "/src/boot/negx"; option routers 172.17.4.40; }
と書いておいて、boot。おー。
Copyright (c) 1996, 1997, 1998, 1999 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 1.4 (MISAKI) #325: Mon Jul 19 08:49:48 JST 1999 ryo@moveq:/src/news5000/sys/arch/newsmips/compile/MISAKI real mem = 66060288 avail mem = 56676352 using 1612 buffers containing 6602752 bytes of memory SONY NET WORK STATION, Model NWS-5000, Machine ID #14894 mainbus0 (root) cpu0 at mainbus0 cpu0: MIPS R4400 CPU Rev. 6.0 with MIPS R4010 FPC Rev. 0.0 cpu0: L1 cache: 16kb/32b Instruction, 16kb/16b Data, direct mapped cpu0: L2 cache: 1024kb/64b mixed, no snooping ap0 at mainbus0 mkclock0 at ap0 slot0 addr 0xbf881fe0: Mostek MK48T02 2KB nvram sn0 at ap0 slot0 addr 0xbe600000: DP83932 SONIC Ethernet (Rev.0x0004) sn0: address 08:00:46:01:02:af, using 32KB on-board buffer sn1 at ap0 slot2 addr 0xb8600000: DP83932 SONIC Ethernet (Rev.0x0004) sn1: address 08:00:46:01:00:ef, using 32KB on-board buffer boot device: <unknown> root device: sn0 dump device: file system (default generic): nfs nfs_boot: trying DHCP/BOOTP sn0: receive buffers exhausted nfs_boot: DHCP server: 0xac110428 nfs_boot: my_name=negx nfs_boot: my_domain=?????????.org nfs_boot: my_addr=0xac110430 nfs_boot: my_mask=0xffff0000 nfs_boot: gateway=0xac110428 root on :/src/boot/negx root time: 0x37926898 warning: no /dev/console init: copying out path `/sbin/init' 11 init: copying out path `/sbin/oinit' 12 init: copying out path `/sbin/init.bak' 15 init: not found panic: no init 800b7804+70 (c731b000,0,0,0) ra 8001bb88 sz 24 8001bb0c+7c (100,74,0,0) ra 80007d84 sz 32 80007b30+254 (100,74,0,0) ra 80002ff8 sz 264 80002ff0+8 (100,74,0,0) ra 0 sz 0 User-level: pid 1 syncing disks... done setclock: 72/7/18/23/44/57 rebooting...
すげー。ちゃんと mount して init 読もうとしてるよ :)
#ってこんなことやってないで割り込みをなんとかせねば... ;_;
EOF