今日はgitを入れてリモートからリポジトリを使えるようにする。
が、pkgsrcからscmgitを入れているだけで終わってしまった。
が、pkgsrcからscmgitを入れているだけで終わってしまった。
分類 【NetBSD】 で検索
#define IRQ_SOURCE(base_addr) (base_addr + 0x00) #define IRQ_MASK(base_addr) (base_addr + 0x04) #define IRQ_CLEAR(base_addr) (base_addr + 0x08) #define IRQ_TMODE(base_addr) (base_addr + 0x0C) #define IRQ_TLEVEL(base_addr) (base_addr + 0x10) #define IRQ_STATUS(base_addr) (base_addr + 0x14) #define FIQ_SOURCE(base_addr) (base_addr + 0x20) #define FIQ_MASK(base_addr) (base_addr + 0x24) #define FIQ_CLEAR(base_addr) (base_addr + 0x28) #define FIQ_TMODE(base_addr) (base_addr + 0x2C) #define FIQ_LEVEL(base_addr) (base_addr + 0x30) #define FIQ_STATUS(base_addr) (base_addr + 0x34)geminiとwmtで関数を比較する。
#define NORMAL_IRQ_NUM 32 #define GPIO_IRQ_BASE NORMAL_IRQ_NUM #define GPIO_IRQ_NUM (3 * 32) #define NR_IRQS (NORMAL_IRQ_NUM + GPIO_IRQ_NUM)つうことは、割り込みの数は32じゃなくて32 + 32 * 3 で128あるってことか。
#define IRQ_GPIO(x) (22 + (x))ってなっているのがポイント? GPIOだけ特別扱いされているっぽい、って思っていればいいか。
#define ICDC0_ADDR (__IC_BASE + 0x40) /* dest_ctl_addr[0] */__IC_BASEは
#ifdef __IC_BASE #error "__IC_BASE has already been defined in another file." #endif #ifdef INTERRUPT_CTRL_BASE_ADDR /* From wmt_mmap.h */ #define __IC_BASE INTERRUPT0_CTRL_BASE_ADDR #else #define __IC_BASE 0xFE140000 /* 64K */ #endifてなぐあい。割り込みコントローラのVAであろう。
#define INTERRUPT0_CTRL_BASE_ADDR (0xD8140000 + WMT_MMAP_OFFSET) /* 64K */なのだ。いずれにせよVAのアドレスになっている。bus_space_mapはPAばかりだったけど...
#define ICDC_ENABLE BIT3 /* Interrupt enable bit.*/なのでBIT3を立てている・クリアしているだけである。
#define ICDC0_VAL(x) (REG8_VAL(ICDC0_ADDR + ICDC_OFFSET_WMT(x)))となり、マクロが絡み合っているので読み解こう。
#define ICDC_OFFSET_WMT(x) ((x) & ICDC_NUMMASK_WMT)NUMMASKなどと言っているが、
#define ICDC_NUMMASK_WMT 0x7F /* mask to avoid overflow */ということでほぼxと思えばよい。つまり、ICDC0_VALマクロは
#define ICDC0_VAL(x) (REG8_VAL(ICDC0_ADDR + x))である。で、残ったREG8_VALは最終的にこうなる。hardware.hに定義がある。
# define __REG8P(x) (((__regbase8 *)((x)&~4095))->offset[((x)&4095)>>0]) typedef struct { volatile u8 offset[4096]; /* 4K * 1 = SZ_4K */ } __regbase8;つまり、ICDC0_ADDRを先頭に、割り込み番号ごとに8ビット割り当てられて64個ならんでいると。で、ENABLEのやつにはその8ビットの3ビット目に1が立っていると。
static struct irq_chip wmt_normal_chip = { .name = "normal", .ack = wmt_ack_irq, .mask = wmt_mask_irq, .unmask = wmt_unmask_irq, };なので、自ファイル(irq.c)にある関数を呼び出すと。
#define IRQF_VALID (1 << 0)なので0x01ということか。
WMT # set serverip 192.168.0.10 WMT # tftpboot 8000 EEP-less strapping = TRUE *** Warning: no boot file name; using 'C0A80002.img' TFTP from server 192.168.0.10; our IP address is 192.168.0.2 Filename 'C0A80002.img'. Load address: 0x8000 Loading: ################################################################# ################################################################# ######################################T ########################### ################################################################# ################################################################# ################################################################# ################################################################# ###################################### done Bytes transferred = 2520256 (2674c0 hex) WMT # go 8000 ## Starting application at 0x00008000 ... 00008328 NetBSD 00000000 00000000 0048096b 00000412 00000000 00000412 00000004 00000412 c0000000 00000000 0048096b 0000041e 00003000 0000041e 00000004 0000041e fe000000 d8000000 010fffff 00000412 00003f80 d8000412 00000010 00000412 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NetBSD/evbarm (APC) booting ... [ Kernel symbol table missing! ] Loaded initial symtab at 0xc01b4364, strtab at 0xc01d3494, # entries 7940 pmap_postinit: Allocated 35 static L1 descriptor tables Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 6.99.23 (APC) #28: Sat Aug 24 13:53:26 UTC 2013 root@builder.localdomain:/usr/obj/sys/arch/evbarm/compile/APC total memory = 512 MB avail memory = 499 MB mainbus0 (root) cpu0 at mainbus0 core 0: ARM1176JZ-S r0p7 (ARM11J V6ZK core) cpu0: DC enabled IC enabled WB enabled LABT cpu0: 16KB/32B 4-way L1 Instruction cache cpu0: 16KB/32B 4-way write-back-locking-C L1 Data cache vfp0 at cpu0: VFP11 obio0 at mainbus0 <wm8750_uart_match> comprobe1 0 </wm8750_uart_match rv=0> wmicu0 at obio0 addr 0xd8140000-0xd814ffff <wm8750_uart_match> com0 at obio0 addr 0xd8200000-0xd820ffff intr 32 : ns16650, no ERS, working fifo com0: console wmtmr0 at obio0 addr 0xd8100000-0xd810ffff intr 48 : VC System Timer rn_init: radix functions require max_keylen be set boot device: <unknown> root device:<wm8750_uart_match>はデバッグ文である。むかしむかしJavaでこういう書き方したのでやってみたが、イマイチカッコ悪いな。