Listing 6: Driverýs RTLinux and Linux entry points for read()
// read entry point registered by rtl_register_rtldev()
static ssize_t rtl_pd_read(struct rtl_file *filp, char *buf,
size_t count, loff_t* ppos)
{
u32 minor = RTL_MINOR_FROM_FILEPTR(filp);
board = minor / PD_MINOR_RANGE;
subsystem = minor % PD_MINOR_RANGE;
return pd_read(minor, buf, count);
}
// read entry point registered by register_chrdev()
static ssize_t ln_pd_read(struct file *filp, char *buf,
size_t len, loff_t* ppos)
{
u32 minor = MINOR(inode->i_rdev);
return pd_read(minor, buf, count);
}
// main read() function
int pd_read(u32 minor, char *inpbuf, size_t count)
{
u32 board = minor / PD_MINOR_RANGE;
u32 subsystem = minor % PD_MINOR_RANGE;
// process read request to particular board and subsystem
...
}
Return to article