I am developing a driver for a PCI adapter with a sizeable amount of
memory on it. I would like to use a couple of /proc files to read/write
various memory location on the adapter interactively to aid in debugging
the HW and SW. I have created two /proc files, /proc/my_adapter/cntrl
and /proc/my_adapter/data to do what I want. Commands are written to
cntrl that indicate what information should be returned when /.../data
is read. As an example:
echo "read 0x100 20" > .../cntrl
This means that when "cat /proc/my_adapter/data" is executed 20 bytes
are to be returned starting at offset 0x100 of the adapter address
space. In the case of cat my proc_read function is given a page
aligned buffer address with a count(length) of 0x200. I put the 20
bytes in the buffer, set *eof to a 1 and return 20 to
proc_file_read(). All is well until the amount of data to be returned
is greater than the length of the buffer given. I have added smarts to
my functions to fill the buffer, remember where I stopped and return the
number of bytes I stuff in the buffer, without setting *eof. I expect
the /proc subsystem to come back and request more data after giving the
buffer to the user, in this case cat. It appears to come back with
another page, with the offset set to 0x200 and a count(length of
0x200). I put the remaining bytes of the request in this new buffer,
set *eof, and return the number of bytes in the buffer. This second
buffer never appears in the output of cat.
I am developing on RH6.2, running the standard 2.2.14 kernel.
Does anyone know the proper procedure/algorithm for a /proc file
function that produces output longer than 1 buffer? I have also tried
"cp /.../data /tmp/xx" and it has the same problem but its beginning
buffer is 0xc00 long with the secondary buffer being the balance of the
page at 0x400. Other than that it behaves the same as cat. I have
tried just returning all the data but at a couple of pages the system
dies since I have stepped on something. Any pointers to documentation
or help would be greatly appreciated. I have not had much luck gropping
through the source to find how this condition is handled. Maybe, /proc
files are limited to a max of 4K of data?
Mike
--
Mike Williams Times N Systems
[EMAIL PROTECTED] Braker Bldg. B, Suite P
1908 Kramer Lane
Austin, TX 78758
_______________________________________________
Redhat-devel-list mailing list
[EMAIL PROTECTED]
https://listman.redhat.com/mailman/listinfo/redhat-devel-list