staging: dgap: introducing find_board_by_major()
PATCH 4/4 staging: dgap: introducing find_board_by_major()
use find_board_by_major function instead of getting a brd from static arrary. Becasue tty's major number doesn't start zero and we can find a brd from dgap_board[].
Signed-off-by Daeseok Youn <[email protected]>
--- drivers/staging/dgap/dgap.c | 28 +++++++++++++++++----------- 1 files changed, 17 insertions(+), 11 deletions(-)
drivers/staging/dgap/dgap.c +17 -11
@@ -80,7 +80,6 @@ static int dgap_poll_tick = 20; /* Poll interval - 20 ms */static struct class *dgap_class; -static struct board_t *dgap_boards_by_major[256 ];static uint dgap_count =500 ;/*
@@ -4409,6 +4408,22 @@ static void dgap_tty_unthrottle(struct tty_struct *tty)spin_unlock_irqrestore (&bd->bd_lock, lock_flags); } +static struct board_t *find_board_by_major (unsigned int major) +{ +unsigned int i; + +for (i =0 ; i <MAXBOARDS ; i++) { +struct board_t *brd = dgap_board[i]; +if (!brd) +return NULL ; +if (major == brd->serial_driver->major || + major == brd->print_driver->major) +return brd; + } + +return NULL ; +} +/************************************************************************ * * TTY Entry points and helper functions
@@ -4435,11 +4450,7 @@ static int dgap_tty_open(struct tty_struct *tty, struct file *file) major =MAJOR (tty_devnum (tty)); minor =MINOR (tty_devnum (tty)); -if (major >255 ) -return -EIO ; - -/* Get board pointer from our array of majors we have allocated */ - brd = dgap_boards_by_major[major]; + brd =find_board_by_major (major);if (!brd)return -EIO ;
@@ -5301,9 +5312,6 @@ static int dgap_tty_register(struct board_t *brd)if (rc <0 ) goto unregister_serial_drv; - dgap_boards_by_major[brd->serial_driver->major] = brd; - dgap_boards_by_major[brd->print_driver->major] = brd; -return 0 ; unregister_serial_drv:
@@ -6559,7 +6567,6 @@ static void dgap_cleanup_tty(struct board_t *brd)struct device *dev;unsigned int i; - dgap_boards_by_major[brd->serial_driver->major] =NULL ;for (i =0 ; i < brd->nasync; i++) {tty_port_destroy (&brd->serial_ports[i]); dev = brd->channels[i]->ch_tun.un_sysfs;
@@ -6570,7 +6577,6 @@ static void dgap_cleanup_tty(struct board_t *brd)put_tty_driver (brd->serial_driver);kfree (brd->serial_ports); - dgap_boards_by_major[brd->print_driver->major] =NULL ;for (i =0 ; i < brd->nasync; i++) {tty_port_destroy (&brd->printer_ports[i]); dev = brd->channels[i]->ch_pun.un_sysfs;
Signature · 1 line
1.7.1