10.5. 资源

用户写入到内核配置文件中的信息被作为配置资源处理,并传递到内核。 总线配置代码解析这部分信息并将其转换为结构device_t的值和与之 关联的总线资源。对于复杂情况下的配置,驱动程序可以直接使用 resource_* 函数访问配置资源。 然而, 通常既不需要也不推荐这样做, 因此这儿不再进一步讨论这个问题。

总线资源与每个设备相关联。通过类型和类型中的数字标识它们。 对于ISA总线,定义了下面的类型:

类型内的枚举从0开始,因此如果设备有两个内存区域,它的 SYS_RES_MEMORY 类型的资源编号为0和1。 资源类型与C语言的类型无关, 所有资源值具有C语言 unsigned long 类型,并且必要时必须进行类型强制转换 (cast)。资源号不必连续, 尽管对于ISA它们一般是连续的。ISA设备允许的资源编号为:

IRQ: 0-1 DRQ: 0-1 MEMORY: 0-3 IOPORT: 0-7

所有资源被表示为带有起始值和计数的范围。对于IRQ和DRQ资源, 计数一般等于1。内存的值引用物理地址。

对资源能够执行三种类型的动作:

Set设置资源使用的范围。Allocation保留出请求的范围,使得 其它设备不能再占用(并检查此范围没有被其它设备占用)。 Activation执行必要的动作使得驱动程序可以访问资源(例如,对于 内存,它将被映射到内核的虚拟地址空间)。

操作资源的函数有:

旗标是一个位映射,调用者感兴趣的有:

当中断处理程序执行时,匹配其优先级的所有其它中断都被屏蔽, 唯一的例外是MISC级别,它不会屏蔽其它中断,也不会被其它中断 屏蔽。

定义了若干方法来操作资源句柄(struct resource *)。设备驱动 程序编写者感兴趣的有:

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.