qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1716回复:9

怎么修改BSP的中断部分?

楼主#
更多 发布于:2005-01-19 12:33
有一块卡需要增加中断处理,要怎样修改BSP才可以啊?是不是需要修改
OEMInterruptEnable,
OEMInterruptDisable,
OEMInterruptDone,
OEMInterruptHandler才可以?
不知道我说清楚了没有。

[编辑 -  1/20/05 by  qwdrv]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-19 14:17
(1)你的处理器是x86的吗?
(2)增加中断处理可以不修改BSP。
(3)你前面说“另外关于中断号怎么处理”是什么意思?不是很明白:))
(4)你的卡是什么接口的?

[编辑 -  1/19/05 by  wwei_wang]
Come on, let us drive the world.
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-19 14:57
(1)你的处理器是x86的吗?
(2)增加中断处理可以不修改BSP。
(3)你前面说“另外关于中断号怎么处理”是什么意思?不是很明白:))
(4)你的卡是什么接口的?

[编辑 -  1/19/05 by  wwei_wang]
懂的东西太少了,现在没有什么头绪,期待大虾指点迷津。
(1)处理器是ARMV4
(2)卡是VLIO接口


[编辑 -  1/20/05 by  qwdrv]
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-19 15:05
对于前面说的第三点还有几个问题。
1。OEMInterruptHandler的处理里是从某一段内存里读取终端信息的(INTC_BASE_U_VIRTUAL->icip)这是为什么?
2。由于是NDIS驱动,ISR和IST的注册已经由NDIS完成,那么我指定的逻辑中断号要在什么时候通知系统?是不是一定要按照ne2000的方法做?
3。修改OEMInterruptHandler的同时Enable,Disable,Done这三个函数是不是也需要作相应修改?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-19 15:13
"如果是,则OEMInterruptHandler需要返回原先定义好的一个逻辑中断号,比如SYSINTR_FIRMWARE+XX。这时ISR被调用,由于我注册了中断号和ISR,所以在IST中NDIS会调用我的MiniportISR完成中断处理。问题是硬件中断号能不能有我手动指定,还有逻辑中断号是不是可以任意值。"

应该是这样吧:
(1)在OEMInterruptHandler函数中进行中断的判断和简单的处理,而主要任务应该在IST中完成;
(2)如需进一步处理,OEMInterruptHandler返回一个逻辑中断SYSINTR_FIRMWARE+XX,这时你的IST应该被调用去执行后续任务;
(3)逻辑中断号可以自己定义也可以通过调用那个相应函数(KernalIoControl)返回得到。
(4)有些老式isa卡件的中断是可以指定的。对于即插即用的卡件其硬件中断号应该由系统动态分配。你用那个固定的中断号不就可以了吗?

[编辑 -  1/19/05 by  wwei_wang]
Come on, let us drive the world.
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-19 15:24
"如果是,则OEMInterruptHandler需要返回原先定义好的一个逻辑中断号,比如SYSINTR_FIRMWARE+XX。这时ISR被调用,由于我注册了中断号和ISR,所以在IST中NDIS会调用我的MiniportISR完成中断处理。问题是硬件中断号能不能有我手动指定,还有逻辑中断号是不是可以任意值。"

应该是这样吧:
(1)在OEMInterruptHandler函数中进行中断的判断和简单的处理,而主要任务应该在IST中完成;
(2)如需进一步处理,OEMInterruptHandler返回一个逻辑中断SYSINTR_FIRMWARE+XX,这时你的IST应该被调用去执行后续任务;
(3)逻辑中断号可以自己定义也可以通过调用那个相应函数(KernalIoControl)返回得到。
(4)你用那个固定的中断号不就可以了吗?
(1)OEMInterruptHandler后面应该是调ISR吧?
(2)逻辑中断号应该可以重复的是吧?
(3)用固定中断号是什么意思?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-19 15:35
(1)我是说当从OEMInterruptHandler返回一个逻辑中断SYSINTR_FIRMWARE+XX时,你的IST会被调用;
(2)你前面不是说“关于中断号我是这样想的:卡上有一个固定的中断号”吗?:)))
(3)硬件中断可以共享,但我认为逻辑中断号一般是不需要重复的,除非一个ist对应多个isr,这种情况下应该可以重复。

Come on, let us drive the world.
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-19 15:39
现在问题是我并不知道卡上是不是有固定的号,只是猜想有而已。
对于前面说的第三点还有几个问题。
1。OEMInterruptHandler的处理里是从某一段内存里读取终端信息的(INTC_BASE_U_VIRTUAL->icip)这是为什么?
2。由于是NDIS驱动,ISR和IST的注册已经由NDIS完成,那么我指定的逻辑中断号要在什么时候通知系统?是不是一定要按照ne2000的方法做?
3。修改OEMInterruptHandler的同时Enable,Disable,Done这三个函数是不是也需要作相应修改?
这些问题也麻烦你看一看。谢谢。
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-19 15:58
(1)我没有看源码,我觉得在这里首先要确定中断源,然后才能进行进一步的处理,所以这一段应该与确定中断源有关;
(2)我是这么理解的:当经过判断是你的卡件产生的中断,在进行必要的处理后,就应该返回逻辑中断号给内核。
(3)Enable,Disable,Done这几个函数不一定非要修改。它们的功能在pb的帮助中有说明,修不修改要根据你自己的需要。
Come on, let us drive the world.
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-19 16:04
恩,我再看看资料。
给分先。
游客

返回顶部