[ TOP | Recently ]

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