RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>RedHawk</strong> <strong>Linux</strong> User’s <strong>Guide</strong>実 際 の 通 知 はモジュールの 割 り 込 みハンドラ 内 で 実 施 されます。 割 り 込 みをrtc0から 受 信 した 時 、この 割 り 込 みサービス・ルーチンはそれを 要 求 したプロセスへシグナルを 送 信 するかどうかを 判断 します。もしrtc_info 構 造造 体 内 に「シグナルID/プロセスID」のペアが 登 録 されている 場 合 、指 定 されたシグナルはkill_proc() 関 数 を 使 い 対 応 するプロセスへ 送 信 されます。**********************************************************************************int rcim_intr(int irq, void *dev_id, struct pt_regs *regs){u_int32_t isr;isr = readl(&bd_rcim_regs->request);writel(0, &bd_rcim_regs->request);writel(ALL_INT_MASK, &bd_rcim_regs->clear);/* Use isr to determine whether the interrupt was generated by rtc 0 only if“rcim” module is not built into the kernel. If “rcim” is active, itsinterrupt handler would have cleared “request” register by the time weget here. */// if (isr & RCIM_REG_RTC0) {// Send signal to user process if requestedif (rtc_info.signal_num && rtc_info.signal_pid &&(kill_proc(rtc_info.signal_pid, rtc_info.signal_num, 1) == -ESRCH)){rtc_info.signal_pid = 0;}// }return IRQ_HANDLED;}**********************************************************************************デバイスがクローズされた 時 、rtc0はシャット・ダウンされます。カウント 値 は0へリセットされ、クロックは 停 止 されます。さらに 割 り 込 みを 受 信 した 場 合 にシグナルがこれ 以 上 送 信 されないように 割 り 込 み/シグナルの 結 合 はクリアされます。*********************************************************************************int rcim_rtc_close(struct inode *inode,struct file *filep){if (!rtc_info.flag)return (-ENXIO);rtc_info.nopens--;if(rtc_info.nopens == 0) {writel(~RCIM_RTC_START, &bd_rcim_regs->rtc0_control);writel(0, &bd_rcim_regs->rtc0_timer);rtc_info.signal_num = 0;rtc_info.signal_pid = 0;}return 0;}*********************************************************************************14-8