[Driver] SC1100 watchdog driver

Claudio Martella thefly at acaro.org
Tue Feb 24 07:29:03 PST 2004


I'm writing a driver for Geode SC1100's watchdog for FreeBSD-4.8. It's my 
frist device driver for this operating system and i've got one question:
I'm willing to write the driver as a module: i wrote both struct cdevsw and 
struct device_method_t as struct driver_t. For the first i wrote just the 
d_ioctl, d_open and d_close, for the second i implemented the attach() and 
probe(). Through the DEV_MODULE() macro i defined the loading routine and 
used DRIVER_MODULE() macro to define the pci driver. My first doubt is if 
it's legal to use both of them in the same file/driver. Should i use just 
one of the two ways just the load routine and the ioctl/open/close routines, 
or the ioctl/open/close routines and the attach/probe routines? The problem 
exists because i don't know where to put my init stuff, the make_dev() calls 
etc etc, if in the loading routine, or in attach() or wherever?
My second question is kindly connected to the first one. In my driver i've 
got to access some registers of the device through PCI. I find the 
bus_space_read|write routines & C really annoying. Isn't there an easy way 
to just read a double word from the register? And: As long as i don't know 
how initialization of my driver works (if through attach() or loading 
routine or whatever) i'm still confused on how to actually attach to the 
device: if it's through the attach() it's no problem, i've got the dev 
pointer, but if it's through the loading routing, do i have to do something 
like pci_find_device(vendor_id, device_id)? 

Thanks in advance 

Claudio Martella 



More information about the freebsd-hackers mailing list