|
|
| version 1.10, 2004/05/13 23:49:20 | version 1.11, 2004/05/19 22:52:49 |
|---|---|
| Line 813 rp_attachcommon(CONTROLLER_T *ctlp, int | Line 813 rp_attachcommon(CONTROLLER_T *ctlp, int |
| int retval; | int retval; |
| struct rp_port *rp; | struct rp_port *rp; |
| struct tty *tty; | struct tty *tty; |
| dev_t *dev_nodes; | |
| unit = device_get_unit(ctlp->dev); | unit = device_get_unit(ctlp->dev); |
| Line 847 rp_attachcommon(CONTROLLER_T *ctlp, int | Line 846 rp_attachcommon(CONTROLLER_T *ctlp, int |
| rp_addr(unit) = rp; | rp_addr(unit) = rp; |
| splx(oldspl); | splx(oldspl); |
| dev_nodes = ctlp->dev_nodes = malloc(sizeof(*(ctlp->dev_nodes)) * rp_num_ports[unit] * 6, M_DEVBUF, M_NOWAIT | M_ZERO); | cdevsw_add(&rp_cdevsw, 0xffff0000, (unit + 1) << 16); |
| if(ctlp->dev_nodes == NULL) { | |
| device_printf(ctlp->dev, "rp_attachcommon: Could not malloc device node structures.\n"); | |
| retval = ENOMEM; | |
| goto nogo; | |
| } | |
| for (i = 0 ; i < rp_num_ports[unit] ; i++) { | for (i = 0 ; i < rp_num_ports[unit] ; i++) { |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i, |
| UID_ROOT, GID_WHEEL, 0666, "ttyR%c", | UID_ROOT, GID_WHEEL, 0666, "ttyR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x20, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x20, |
| UID_ROOT, GID_WHEEL, 0666, "ttyiR%c", | UID_ROOT, GID_WHEEL, 0666, "ttyiR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x40, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x40, |
| UID_ROOT, GID_WHEEL, 0666, "ttylR%c", | UID_ROOT, GID_WHEEL, 0666, "ttylR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x80, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0x80, |
| UID_ROOT, GID_WHEEL, 0666, "cuaR%c", | UID_ROOT, GID_WHEEL, 0666, "cuaR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0xa0, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0xa0, |
| UID_ROOT, GID_WHEEL, 0666, "cuaiR%c", | UID_ROOT, GID_WHEEL, 0666, "cuaiR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| *(dev_nodes++) = make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0xc0, | make_dev(&rp_cdevsw, ((unit + 1) << 16) | i | 0xc0, |
| UID_ROOT, GID_WHEEL, 0666, "cualR%c", | UID_ROOT, GID_WHEEL, 0666, "cualR%c", |
| i <= 9 ? '0' + i : 'a' + i - 10); | i <= 9 ? '0' + i : 'a' + i - 10); |
| } | } |
| port = 0; | port = 0; |
| Line 950 rp_releaseresource(CONTROLLER_t *ctlp) | Line 943 rp_releaseresource(CONTROLLER_t *ctlp) |
| free(ctlp->tty, M_DEVBUF); | free(ctlp->tty, M_DEVBUF); |
| ctlp->tty = NULL; | ctlp->tty = NULL; |
| } | } |
| if (ctlp->dev != NULL) { | if (ctlp->dev != NULL) |
| for (i = 0 ; i < rp_num_ports[unit] * 6 ; i++) | |
| destroy_dev(ctlp->dev_nodes[i]); | |
| free(ctlp->dev_nodes, M_DEVBUF); | |
| ctlp->dev = NULL; | ctlp->dev = NULL; |
| } | cdevsw_remove(&rp_cdevsw, 0xffff0000, (unit + 1) << 16); |
| } | } |
| int | int |