\sourcecomment{Driver's RTLinux and\penalty-1 Linux Entry Points for read()}
\begin{verbatim}
// 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
      ...	
}
\end{verbatim}
